a 设为首页
a 加入收藏
a 联系我们
a     本站诚征友情链接!!!  [admin  2007年11月22日]         今天是
 | 网站首页 | 站长在线 | 新闻资讯 | 网页设计 | 平面设计 | 网络媒体 | 网络安全 | 服务器 | 软件下载 | 图片素材 | 在线商城 | 站长论坛 | 留言 | 繁體中文
热门搜索关键字: 模板 | 错误 | 标签 | 采集 | 数据库 | 组件 | 代码 | 特效 | 木马 | 插件 | 虚拟主机
栏目导航  
ASPNET
JspPhp
HTMLCSS
网页配色
网页特效
Frontpage
Dreamweaver
其他相关
专题栏目  
· 网络架设  · 病毒安全
· 图行天下  · 音影视听
· 动易软件  · 动网软件
· 虚拟组合  · SEO技术
推荐文章  
热门文章  
图片文章  
 
您现在的位置: 中国站长在线|ITE258 >> 网页设计 >> ASPNET >> 正文
Informix Dynamic Server 中的分布式事务
文章来源:网络获取 点击数: 更新时间:2008-4-10 【字体:




  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
     
    关于〖Informix Dynamic Server 中的分布式事务〗的最新评论:

    级别: 初级

    Uwe Weber
    Informix 和 DB2 UDB 的 IT 专家, IBM Germany
    2005 年 6 月 30 日

    假如您正在使用 Java™ 开发数据库应用程序,并在寻找用于实现跨数据库的分布式事务解决方案,那么您应该评估一下 Java Transaction API(JTA)。本文将向您介绍分布式事务,以及如何在 Java 中使用 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)。

    常规事务(单阶段提交)中,由 COMMITROLLBACK 所执行的事务终止是一种决定性的操作,与之相反,两阶段提交(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 的分支。
    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 管理登录 | 
    中国站长在线 http://www.ite258.com 电子邮件:ite258@126.com
    点击给站长发消息!站长QQ群: 15643723
    湘ICP备07501014号
    站长:梦天 Copyright (c) 2002-2008 ite258.com. All Rights Reserved.
    本站部分资源由网友推荐,来自互联网,版权属于原版权人,如果不慎侵犯到您的权利,敬请告知,我们会在第一时间撤除。
    本站中各网友的评论只代表其个人观点,不代表本站同意其观点。