【引用】Weblogic10R3上BUG 现象:数据源异常挂起数据库记录没有回滚
【早期文章迁移过来】
weblogic10R3环境出现数据源异常挂起数据库记录没有回滚现象。现已经经Oracle公司工程师确认此现象是weblogic10.3.0.0上一个bug,补丁的PatchID和Passcode信息:10.3.0.0|A5IZ|RI4ZGV98,且weblogic10.3.1.0已经修复此bug。
下面是测试报告:
1 环境描述
OS: Aix5.3
WLS: WebLogic Server10R3
JDK: 现为IBM JDK SR4+补丁IZ60574
2 故障处理说明
3.1.故障分析
Weblogic数据源异常挂起后报错:weblogic connections adminstative disable.数据源被挂起后数据记录本应该回滚但是数据记录却存在于数据库中。
后经过多次曲折与oracle沟通并确认为oracle weblogic10R3上的BUG问题造成的建议为当前版本打补丁。
测试流程:
代码测试:
p lic class TranTest{
p lic static void main(String[] args)
throws Exception
{
DbPool dbpool = new DbPool();
TranTest test_a = new TranTest();
try
{
dbpool.open("hxsrvccicdbDS");
dbpool.beginTransaction();
dbpool.executeUpdate("insert into test1 vals('a','admin')");
System.out.println("----1ok----");
test_a.test1(dbpool);
System.out.println("----2ok----");
dbpool.commitTransaction();
System.out.println("---3ok-----");
} catch (Exception e) {
System.out.println("---exception-----");
e.printStackTrace();
dbpool.rollbackTransaction();
dbpool.close();
throw e;
}
}
p lic void test1(DbPool dbpool) throws Exception {
try {
test2();
try {
for (int i = 0; i < 100000; ++i)
dbpool.executeUpdate("insert into test1 vals('" + i + "','admin')");
}
catch (SQLException e)
{
e.printStackTrace();
System.out.println("-----21exception---");
throw e;
} catch (Exception e) {
e.printStackTrace();
System.out.println("-----2221exception---");
throw e;
}
System.out.println("-----20k---");
test3();
System.out.println("----3ok----");
} catch (Exception e) {
System.out.println("----4exception----");
e.printStackTrace();
dbpool.rollbackTransaction();
dbpool.close();
throw e;
}
}
p lic void test2() throws Exception {
DbPool dbpool = new DbPool();
try
{
dbpool.open("hxsrvccicdbDS");
dbpool.beginTransaction();
dbpool.executeUpdate("insert into test1 vals('b','admin')");
dbpool.commitTransaction();
dbpool.close();
} catch (Exception e) {
dbpool.rollbackTransaction();
dbpool.close();
throw e;
} finally {
dbpool.close();
}
}
p lic void test3() throws Exception {
DbPool dbpool = new DbPool();
try
{
dbpool.open("hxsrvccicdbDS");;
dbpool.beginTransaction();
dbpool.executeUpdate("insert into test1 vals('c','admin')");
dbpool.commitTransaction();
dbpool.close();
} catch (Exception e) {
dbpool.rollbackTransaction();
dbpool.close();
throw e;
} finally {
dbpool.close();
}
}
p lic void deltest2() throws Exception {
DbPool dbpool = new DbPool();
try
{
dbpool.open("hxsrvccicdbDS");;
dbpool.beginTransaction();
dbpool.executeUpdate("delete from test1 where id = 'd' ");
dbpool.commitTransaction();
dbpool.close();
} catch (Exception e) {
dbpool.rollbackTransaction();
dbpool.close();
throw e;
} finally {
dbpool.close();
}
}
}
测试代码,在weblogic控制台上挂起数据库连接池,重现该问题。
测试结果:
在weblogic10.3.1.0上没有发现此问题。
在weblogic10R3上存在此问题。经过oracle确认为oracle weblogic10R3在此版本上的BUG问题.
3.2.测试说明
补丁添加方式:
在weblogic的全局环境变量下添加:既是对应的weblogic的安装目录下的wlserver目录下的common文件夹下,找到bin文件夹,修改commEnv.cmd、commEnv.sh文件
C:\weblogic103\wlserver_10.3\common\bin
找到变量属性:@rem set up WebLogic Server's class path
set WEBLOGIC_CLASSPATH=%PATCH_CLASSPATH%;%JAVA_HOME%\lib\tools.jar;
添加为:【补丁文件名:A5IZ.jar】
@rem set up WebLogic Server's class path
set WEBLOGIC_CLASSPATH=%PATCH_CLASSPATH%;C:\weblogic103\utils\bsu\cache_dir\bug8504466_10mp3.jar;%JAVA_HOME%\lib\tools.jar;…..
重启weblogic10R3部署环境即可。
测试数据对比说明:
时 间 |
测试次数【随机】 |
原weblogic10R3系统环境 |
补丁后的weblogic系统 |
10-12-13 |
上午12、下午17/次 |
挂起数据源全部出现数据异常 |
挂起数据源数据回滚,系统正常 |
10-12-14 |
上午10、下午13/次 |
挂起数据源全部出现数据异常 |
挂起数据源数据回滚,系统正常 |
10-12-15 |
上午18、下午15/次 |
挂起数据源全部出现数据异常 |
挂起数据源数据回滚,系统正常 |
10-12-16 |
上午20、下午27/次 |
挂起数据源全部出现数据异常 |
挂起数据源数据回滚,系统正常 |
10-12-17 |
上午31、下午26/次 |
挂起数据源全部出现数据异常 |
挂起数据源数据回滚,系统正常 |
说明:基于随机测试,建议为现有系统打上该补丁以环境当前系统数据源挂起数据库数据记录异常的现象。