[C#][Oracle][TS]ORA-24777: use of non-migratable database link not allowed
問題描述:
專案中使用TransactionScope去包Oracle Procedure,但其中一隻Oracle Procedure某段邏輯有使用dblink來處理資料,
導致程式拋出 ORA-24777 錯誤,這錯誤主因為connection無法共用所導致(每個process所使用connection不同所導致),
下面簡單驗證該錯誤及相關解決方法。
這裡要注意Server Mode所影響的connection 數量。
Oracle9i分散式架構(我記得8i以後就有支援分散式交易)
驗證測試:
Dedicated下使用nonshared dblink即可還原該錯誤
建立2個相同procedure
內容中使用nonshared dblink。
ASP.net執行(呼叫oracle procedure)
馬上攔截到ORA-24777錯誤。
解決方法(建立shared dblink即可,server mode無影響):
我連到另一台DB(shred mode)。
ASP.net執行(呼叫oracle procedure,2隻procedure 內容和上面相同)
執行成功。
參考