对 Oracle RAC 配置两阶段落实分布式事务
当 Oracle 尝试恢复跨多个 Oracle RAC 节点的两阶段落实分布式事务时,Oracle 10g 的 Real Application Cluster (RAC) 配置存在一个与事务管理器相关的固有问题。当一个节点发生故障,并且 Oracle 在 Oracle RAC 对发生故障的节点完成必需的恢复操作之前打开其他正常节点以执行业务时,可能会发生问题。应用程序服务器维护事务亲缘关系的能力使您能够规避此问题。
关于此任务
ORA- 24756: transaction does not exist
如果遇到此错误,那么 Oracle
数据库管理员可能需要通过强制执行回滚或落实过程来手动解决不确定事务。但是,如果您不希望执行手动介入,那么可能想配置自动或透明策略来执行事务恢复。
如果未解决不确定事务,那么任何后续事务都将接收到以下异常:
ORA-01591 lock held by in-doubt distributed transaction
结果是,数据库的那些部分将不可用。透明恢复策略的关键是,消除全局事务跨多个 RAC 节点上的多个事务分支的可能性。事务分支与涉及全局事务的数据库连接相对应。如果全局两阶段落实事务中的所有连接都来自同一个节点,那么应该不会发生事务恢复问题。请对应用程序服务器配置 Oracle RAC,以避免两阶段事务发生错误。
应用程序服务器将为入局连接维护事务亲缘关系,您可以利用此功能为带有两阶段落实事务的 Oracle RAC 配置自动恢复。如果实现此配置,那么将从同一个 Oracle 节点接收到所有来自给定应用程序服务器的连接,并且那些连接将在该节点上完成。此配置将避免事务跨多个节点的情况,并且,当一个或多个 Oracle 节点关闭时,您应该不会遇到恢复问题。
过程
结果
srvctl start service -d -s
如果
RAC 节点停止工作,那么 Oracle 直到 Oracle RAC 清理和恢复操作完成后才会对
DTP 服务进行故障转移。即使 Oracle 节点重新启动,Oracle DTP 服务也不会返回到新重新启动的
RAC 节点。而是,您必须手动地将该服务移至重新启动的 RAC 节点。
对 Oracle 服务配置 DTP 时,您已将负载均衡从 Oracle JDBC 提供程序转移到应用程序服务器。工作负载将由应用程序服务器而不是 Oracle 分配,这就是您创建未实现负载均衡而只使用一个主节点的服务的原因。此配置将避免事务进程跨多个 RAC 节点的情况,并且将减少一个或多个 RAC 节点发生故障时可能会发生的恢复问题。