[C#][Oracle][TS]ORA-24777: use of non-migratable database link not allowed

[C#][Oracle][TS]ORA-24777: use of non-migratable database link not allowed

問題描述:

專案中使用TransactionScope去包Oracle Procedure,但其中一隻Oracle Procedure某段邏輯有使用dblink來處理資料,

導致程式拋出 ORA-24777 錯誤,這錯誤主因為connection無法共用所導致(每個process所使用connection不同所導致),

下面簡單驗證該錯誤及相關解決方法。

 

image

這裡要注意Server Mode所影響的connection 數量。

 

Oracle9i分散式架構(我記得8i以後就有支援分散式交易)

image

 

 

驗證測試:

Dedicated下使用nonshared dblink即可還原該錯誤

image

 

建立2個相同procedure

image

內容中使用nonshared dblink。

 

image

 

ASP.net執行(呼叫oracle procedure)

image

馬上攔截到ORA-24777錯誤。

 

解決方法(建立shared dblink即可,server mode無影響):

image

我連到另一台DB(shred mode)。

 

 

ASP.net執行(呼叫oracle procedure,2隻procedure 內容和上面相同)

image

image

執行成功。

 

 

 

參考

CREATE DATABASE LINK

30 Managing a Distributed Database