使用JTA处理DB2 UDB和Informix Dynamic Server中的分布式事务

简介

在现代企业环境中,用多个数据库和多种品牌的数据库来存储公司数据已经不足为奇。最终,这些数据将会在不同数据库外进行比较、合并。

如果您有一个异构的数据库环境,并且计划将不同数据库中的数据收集到一个单独的应用程序中,那么您就应该可以使用传统技术执行该任务。在使用Java时,您将通过JDBC处理所有的数据库操作。清单1 展示了在Java应用程序中如何连接DB2 UDB和IDS的代码片断。

清单1. 使用JDBC建立到不同数据库的连接

1 try { // load JDBC drivers
2   Class.forName (JDBC_DRIVER_DB2);
3   Class.forName (JDBC_DRIVER_IDS);
4 }
5 catch (Exception e) {
6   // error handling
7 }
8
9 try { // establish connection and proceed with operation
10   con_db2 = DriverManager.getConnection (DBURL_DB2);
11   con_ids = Drivermanager.getConnection (DBURL_IDS);
12
13   Statement stmt_db2 = con_db2.createStatement ();
14   Statement stmt_ids = con_ids.createStatement ();
15
16   ResultSet rs_db2 = stmt_db2.executeQuery (SQL);
17   ResultSet rs_ids = stmt_ids.executeQuery (SQL);
18
19   // do something very important with the result sets...
20 }
21 catch (SQLException e) {
22   // error handling
23 }

两阶段提交协议简介

清单1中的演示允许您修改不同数据库中的数据。代替执行查询,它可以使用JDBC 方法 executeUpdate() 执行数据修改。

但是如果您需要在单个事务中封装到 DB2和IDS 表的新一行的insert,要做什么呢?

意思就是说,如果其中一条insert语句失败了,就应该将数据库(这里:两种数据库!)的初始状态恢复为客户机未执行任何动作的状态。该行为可以通过使用两阶段提交(Two-Phase-Commit)协议完成。这一标准化协议描述了如何实现分布式事务(XA)或分布式工作单元(Distributed Unit of Work,DUOW)的技术,以达到跨数据库系统的一致状态(根据 ACID)。

常规事务(单阶段提交)中,由COMMIT或ROLLBACK 所执行的事务终止是一种决定性的操作,与之相反,两阶段提交(Two-Phase-Commit)事务是分为两步(阶段)进行的。

首先,两阶段提交(Two-Phase-Commit)事务的启动与常规的单阶段提交(One-Phase-Commit)事务类似。接着,应用程序/客户机对该两阶段提交(Two-Phase-Commit)操作中所涉及的所有数据库执行其修改工作。现在,在最终提交该事务之前,客户机通知参与的数据库准备提交(第1阶段)。如果客户机从数据库收到一条“okay”,就发出命令向数据库提交该事务(第2阶段)。最后分布式事务(Distributed Transaction)结束。

两阶段提交(Two-Phase-Commit)中的第1阶段十分重要。通过首先询问数据库是否可以进行提交,一旦某一参与的数据库报告错误,就有机会立即中止整个事务。因而,第2阶段将由ROLLBACK,而非 COMMIT 完成。

图 1 提供了对于两阶段提交(Two-Phase-Commit)协议如何工作的图形化印象。正如所演示的,分布式事务(Distributed Transaction)使用由元组表示的描述符(例如:[x,b1])。其意思是,一个分布式事务(Distributed Transaction)包含两个元素。首先,有一个惟一全局事务 ID(global transaction id) —— 代表分布式事务(Distributed Transaction)的简单标识符 - 由x 表示,第二个是分支ID(branch id),它描述整个事务的一部分。一般,分支指的是一个数据库连接。如果您有一个将处理两个参与数据库的分布式事务(Distributed Transaction),您就可以用诸如 [100,1]的描述符表示一个数据库,用诸如 [100,2]的描述符表示另一数据库。因此本例中,就有一个编号为100的全局事务,其中包含两个ID 分别为1和2的分支。

“但是”,您或许会问,“如果在两阶段提交(Two-Phase-Commit)协议的第2阶段中出现错误,又将发生什么事情呢?”

“的确,您将陷入麻烦中!”

实际上,稍后我们将会讨论该主题。

图 1. 两阶段提交中的时间线和应用程序流

时间: 2024-12-03 10:42:20

使用JTA处理DB2 UDB和Informix Dynamic Server中的分布式事务的相关文章

使用Rational Data Architect和Informix Dynamic Server进行数据建模

开始之前 本节解释本教程讲授什么内容,以及如何从中获得最大的收益. 关于本教程 本教程介绍 RDA 中的各种特性,讲解如何对IDS使用RDA.学习如何通过反向工程从数据库生成物理模型.把业务需求转换为(逻辑和物理)模型以及关联领域元素,从而帮助识别IDS数据库中的重要和机密信息. 目标 在本教程中,学习如何: 连接 IDS 服务器 通过反向工程从现有的数据库生成新的物理模型 从逻辑模型创建物理数据库模式 修改现有的逻辑模型并把修改应用于数据库 通过连接领域模型和数据库,保持数据的一致性和质量 先

使用基于Informix Dynamic Server的Server Studio JE

简介 Server Studio JE Server Studio JE (SSJE)是IBM Informix Dynamic Server (IDS)的独立的.基于Java的集成开发环境.Server Studio 帮助您管理数据库任务,比如存储管理.性能调优.进程和事件响应管理.另外,它还可以最小化易错.耗时.命令行驱动的管理任务.集成的图形化控制台将所有IDS数据库服务器的开发.管理和维护活动集于一体,为您提供一个集中控制点,不管数据服务器的位置在哪里,在您管理时都可以获得最大的可用性和

通过UPDATE STATISTICS充分利用Informix Dynamic Server优化器

通过 IBM Informix Dynamic Server(IDS)中的 UPDATE STATISTICS 语句充分利用数据库优化器.阅读本文对这个 SQL 语句的简述,了解如何用它解决各种不同的问题.发现更新统计信息的重要性,并了解如何收集统计信息.最后,浏览本文最后的 FAQ 小节,寻找您对这个重要的 SQL 语句所存疑问的答案. 简介 UPDATE STATISTICS 是一个专用 Informix SQL 命令,它通过分析数据并将该信息存储在系统编目中,更新关于每个表以及它的列的实际

Informix Dynamic Server数据库分段存储

Informix Dynamic Server分段存储,也称之为分片存储,其原理是对数据表中的记录或索引有规则地分散存储在磁盘不同的区域,达到将数据存储在多个磁盘上,通过减少对磁盘I/O的竞争,来提高数据库的效率.与此相反的是基本存储原则,其鼓励将数据库表中的数据尽量连续地存放在一个存储设备上,在Informix Dynamic Server读出数据时,将数据批量读出,以提高数据库的效率. 分段存储主要是通过均衡磁盘 I/O,实现内部查询的并行操作.并行地扫描多个磁盘上的数据来提高查询效率,其使

将Mac OS X上的Informix ODBC应用程序与Informix Dynamic Server集成1

简介 最近发布的针对 Mac OS X 平台的 32 位 Informix Client-SDK 提供改进的 Open Database Connectivity (ODBC) 功能,因此能够无缝地把感知 ODBC 的应用程序与 Informix Dynamic Server (IDS) 集成起来. 在 Mac OS X 上以两种形式提供 ODBC 驱动程序,动态库和应用程序插件.通过应用程序直接调用 ODBC API 的开发人员可以使用动态库,而 Apple 的 ODBC 数据源管理实用程序使

使用Informix Dynamic Server的复制技术

IBM Informix Dynamic Server(IDS)一直以来都是一种具备强大复制技术的数据库.企业复制(Enterprise Replication,ER)和高可用性数据复制(High-Availability Data Replication,HDR)多年来为客户提供了可靠的服务.在较新的 IDS 版本 11.1 以及目前的 11.5 中,又添加了一些新的技术:远程独立(Remote Standalone)备用服务器和共享磁盘(Shared-Disk)备用服务器.本文将通过使用这些

Informix Dynamic Server数据批量读出

&http://www.aliyun.com/zixun/aggregation/37954.html">nbsp;   Informix Dynamic Server分段 存储 ,也称之为分片存储,其原理是对数据表中的记录或索引有规则地分散存储在磁盘不同的区域,达到将数据存储在多个磁盘上,通过减少对磁盘I/O的竞争,来提高数据库的效率.与此相反的是基本存储原则,其鼓励将数据库表中的数据尽量连续地存放在一个存储设备上,在Informix Dynamic Server读出数据时,将数

Informix Dynamic Server 11版本对比

简介 作为高容量联机事务处理(OLTP)和集成应用程序领域的主要 IBM 数据服务器,IDS 已经支持数以千计的公司添加新的应用程序和动态地发展其业务.随着这些公司的发展和业务的增加,IDS 能够相应地满足其需求,同时在维护和管理方面费用不高.在大多数情况下,由于 IDS 的效率很高,这些公司在发展过程中不需要对基础结构进行重大升级.不需要不断进行硬件升级来为增加的工作负载提供适当的性能.在某些情况下,公司可以考虑采用更强大的硬件,有时候运行同样的操作系统,有时候需要改变操作系统.由于 IDS

使用Informix Dynamic Server调度器和SQL API

新的数据库管理特性简介 IBM IDS 11提供了一组令人期待的新特性,这组新特性形成了RDBMS自管理的基础.这些工具使DBA可以收集服务器信息,并使用SQL作为远程管理工具调整数据库服务器.此外,调度器还可以对 SQL API 命令的执行进行调度,这很像 UNIX cron 任务.IBM IDS 本身已是声誉卓著的免管理数据库,如今又降低了管理与问题诊断的成本,其价值更上一个台阶. IBM IDS 11实现的管理方面的增强有: 一个新的系统数据库(sysadmin) 数据库调度器 管理性SQ