问题描述
现有oracle库A表,B表,sql2005库C表,需要操作如下:A表查询数据插入B表,C表成功后更新A表,求解决方案,特别是回滚问题
解决方案
解决方案二:
自己代码控制一下,有什么难的吗?无非就是使用了两个数据库连接,每个连接都开启了setAutocommit(false)而已。
解决方案三:
要注意的是一個commit,一個是失敗的情況。兩個connection兩個transactionc1start//oraclec2start//sqlservert1start//oraclet2start//sqlserverc1insertBc2insertCc1updateAif(t2commit)if(t1commit){//OK這個沒問題}else{//這裡要想想怎麼處理。是再做一次或是先存原資料然後還原。}}else{t2rollbackt1rollback//OK這個沒問題}
解决方案四:
JDBC的Connection事务做不到这一点。跨数据库的事务需要使用支持两阶段提交的分布式事务,分布式事务处理在J2EE中的体现为JTA,而用JTA事务一般需要J2EE容器进行管理,因为两阶段提交协议需要有一个中间协调人。要在J2SE环境中支持JTA的话,还是有点麻烦的,可以去看一下jOTM或者atomikos
解决方案五:
有点难,如果是模块分开写的话,注意下commit及事物处理,应该不难实现。
时间: 2024-10-02 11:03:02