1秒登錄
原帖由 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;
本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。