使用 WebSphere 中间件构建高可用性数据库环境,第 3 部分
2009-11-03 00:00:00 来源:WEB开发网概括而言,如果将 WebSphere Application Server 配置为使用 Oracle JDBC 驱动程序进行连接级别的负载平衡,则 RAC 节点在任何实时 2PC 分布式事务(该事务跨多个 RAC 节点)的准备阶段出现故障时都需要数据库管理员手动干预。该数据库管理员必须完成孤立的事务分支,以释放这些事务分支所持有的数据库锁。对于数据库管理员来说,这是一个包括两个步骤的过程:
通过发出命令获取孤立的事务 ID,如:
sql > select state, local_tran_ID, Global_tran_Id from dba_2pc_pending where state = "prepared";
然后回滚“准备”阶段中的所有事务 ID:
sql > rollback force '<Global_tran_Id>';
处理 2PC 全局事务的正确 RAC 配置
手动干预不是事务恢复的首选方法;有些用户会选择自动而透明的事务恢复策略。透明恢复策略的关键是,对于任何全局事务,消除多个事务分支跨多个 RAC 节点;事务分支对应于全局事务中所用的数据库连接。如果一个全局 2PC 事务中的所有连接都源自同一 Oracle RAC 节点,就不会出现事务恢复问题。
下面简要介绍可以避免上述与 XA 相关的 Oracle RAC 限制的最简单策略:
创建一个 Oracle 分布式事务处理 (DTP) 服务(在 Oracle 10g R2 中引入,用于解决 Oracle 10g XA 的局限性);每项 DTP 服务都是一个单独的服务,可供一个(且只能是一个)Oracle RAC 实例使用。运行以下命令创建一个 DTP 服务:
srvctl add service -d <dbname> -s <servicename> -r <primary nodes> -a <alternate nodes>
通过执行以下命令在 Oracle 服务上启用 DTP:
execute dbms_service.modify_service (service_name => '<service_name>' , dtp => true);
更多精彩
赞助商链接