标签:
原帖由 qingyun 于 2010-6-21 15:44 发表 在写pl/sql的时候,有个很重要的注意点;比如:begin update 某个sqlserver的表@dblink名字 .....; update 某个oracle的表...;end;这段pl/sql执行会报错:错误信息是:-----------------------------------------------------------------执行失败:ORA-02054: 事务处理 2.12.27634 有问题ORA-28500: 连接 ORACLE 到非 Oracle 系统时返回此信息: [Oracle][ODBC SQL Server Driver][SQL Server]对象名 ‘RECOVER.HS_TRANSACTION_LOG‘ 无效。ORA-02063: 紧接着 2 lines (起自 dblink名字)-----------------------------------------------------------------然后你执行: select * from 某个sqlserver的表@dblink名字 这个没问题;再执行:select * from 某个oracle的表完了!结果提示:执行失败:ORA-01591: 锁被有问题的分布式事务处理 2.12.27634 持有这时候,你查询:SELECT * FROM DBA_2PC_PENDING 会发现,被锁的信息;然后,你用commit/rollback force ‘2.12.27634‘ ; 解锁;当然这里的2.12.27634 是随机的。每次被锁,都是不同的值;这个问题如何解决呢? begin update 某个sqlserver的表@dblink名字 .....; commit; --非常重要; update 某个oracle的表...;end;这样就OK了,原因我觉得是这样的:oracle内部其实是两块事务,一个是针对sqlserver,一个针对自己的oracle;所以必须把两端的事务独立下来;下面这个写法也是OK的:begin update 某个sqlserver的表@dblink名字 .....; update 某个sqlserver的表@dblink名字 .....; commit; --非常重要; update 某个oracle的表...;update 某个oracle的表...;end;
[Oracle][ODBC SQL Server Driver][SQL Server]对象名 'RECOVER.HS_TRANSACTION_LOG' 无效(转)
原文地址:http://www.cnblogs.com/kingxiaozi/p/4832542.html