BEA公司建议使用Weblogic JDBC多池,但使用了WebLogic JDBC多池就不能支持全局事务,不用多池就需要靠Oracle Thin driver来实现failover.
XA驱动要求:
全局事务必须被初始化、准备、终止在RAC的同一个实例上。
在RAC中,全局事务必须有相同的事务ID。
下面几项不能进行故障切换,必须由应用程序重新初始化:
?使用中的存储过程
?应用程序向会话状态的转变
?正在处理的“写”事务(正在进行数据库更新的本地事务)
?全局事务
建议:
1. 请开发人员在使用非XA JDBC程序开发程序时,发生数据库错误时,一定要发rollback到数据库,再继续后面的操作。
2. 不管是通过JDBC还是OCI连接数据库时,当发生“ORA-25402: 事务处理必须重新运行”时,必须rollback事务后,再进行后面的操作;当发生错误“ORA-25408: 无法安全重放调用”时请重做操作。
2. 当数据库连接中断(session 中断时)要求程序能自恢复。
3. 如遇错误“ORA-03113”错误时需要重新建立与数据库的连接。
4.不使用loadbalance,即配置后台程序时的Tnsnames类似如下:
myrac =
(description=
(load_balance=off)
(failover=on)
(address= (protocol=tcp)(host=10.1.3.1)(port=1522))
(address= (protocol=tcp)(host=10.1.3.2)(port=1522))
(connect_data= (service_name=ora92)
(failover_mode=(type=select)(method=basic)(retries=20)(delay=20))
)
)
rac1 =
(description=
(load_balance=off)
(failover=on)
(address= (protocol=tcp)(host=10.1.3.1)(port=1522))
(connect_data= (service_name=ora92)
(failover_mode=(type=select)(method=basic)
(backup=rac2)(retries=20)(delay=20))
)
)
rac2 =
(description=
(load_balance=off)
(failover=on)
(address= (protocol=tcp)(host=10.1.3.2)(port=1522))
(connect_data= (service_name=ora92)
(failover_mode=(type=select)(method=basic)
(backup=rac1)(retries=20)(delay=20))
)
)
使用JDBC连接池的配置大致为:
Name="oracleRACPool"
DriverName="oracle.jdbc.client.OracleDataSource"
InitialCapacity="5"
LoginDelaySeconds="1"
MaxCapacity="5"
Password="{3DES}I5fj3vh4+nI="
Properties="user=SCOTT"
CountOfTestFailuresTillFlush="1"
ConnectionReserveTimeoutSeconds="120"
KeepXAConnTillTXComplete="true"
RefreshMinutes="5"
TestConnectionsOnReserve="true"
TestTableName="dual"
PreparedStatementCacheSize="15"
Targets="myCluster"
URL="jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(HOST=host1)(PORT=1521))
(ADDRESS=(PROTOCOL=TCP)(HOST=host2)(PORT=1521))
(FAILOVER=yes)(LOAD_BALANCE=no)(CONNECT_DATA=(SERVER=DEDICATED)
(SERVICE_NAME=dbservice.company.com)))"
/>
阅读(2801) | 评论(0) | 转发(0) |