Chinaunix首页 | 论坛 | 博客
  • 博客访问: 858160
  • 博文数量: 150
  • 博客积分: 5123
  • 博客等级: 大校
  • 技术积分: 1478
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-06 10:03
文章分类

全部博文(150)

文章存档

2011年(2)

2010年(139)

2009年(9)

分类: Oracle

2010-08-31 17:22:46

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) |
给主人留下些什么吧!~~