ODP.NET 發行者原則檔經驗一則

之前處理過一個鳥問題,使用 ODP.NET 12.1 連線 Oracle Server 10.2.0.4 時無法參與分散式交易,傳回「Unable to enlist in a distributed transaction /無法列於分散式交易中」錯誤。依網路討論 Server 升級到 10.2.0.5 以上可解決,當時決定將資料庫移至另一台 Oracle Server 11.2 成功脫逃,安全下莊。

半年後鳥問題捲土重來,一樣是 ODP.NET 12.1 連 Oracle 10.2.0.4 無法分散式交易,但這回資料庫沒得搬也很難升級,只能乖乖面對。

確認其他機器曾有 ODP.NET 11.2.0.3 成功與 Oracle 10.2.0.4 建立分散式交易,便在同台主機裝了 ODAC 11.2.0.3,程式換用 ODP.NET 11.2.0.3 後錯誤訊息卻完全沒有改變,揮棒落空,心中茫茫然…

招喚茶包一哥-Process Monitor,幸運挖到關鍵線索:

被 ODP.NET 版本惡整經驗豐富,對於發行者原則檔(Publisher Policy)倒也略懂略懂,在讀取上述 Registry 後,之後程式存取的都是 ODP.NET 2.112.0 DLL 檔案,由此識別出這是安裝 Oracle Client 12.1.0 加入的版本強制導向。

在 product\12.1.10\client32\odp.net\PublisherPolicy\2.x 可以找到多個發行者原則檔,分別將 2.102、2.111、2.112、2.121 導向 2.121 版。

Policy.2.112.Oracle.DataAccess.config 內容如下,這解釋為何我們已明確改用 2.112.0.3,仍被導向 2.121.1.0, 導致無法與舊版 Oracle Server 完成分散式交易。

<configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
        <dependentAssembly>
          <assemblyIdentity name="Oracle.DataAccess" publicKeyToken="89B483F429C47342"/>
            <bindingRedirect oldVersion="2.112.0.0-2.112.9999.9999" newVersion="2.121.1.0"/>
        </dependentAssembly>
      </assemblyBinding>
   </runtime>
</configuration>

從組件管理 GUI 將 2.112 導向 2.121 的原則檔刪除,問題排除!

歡迎推文分享:
Published 06 January 2017 06:39 AM 由 Jeffrey
Filed under: ,
Views: 2,829



意見

沒有意見

你的看法呢?

(必要的) 
(必要的) 
(選擇性的)
(必要的) 
(提醒: 因快取機制,您的留言幾分鐘後才會顯示在網站,請耐心稍候)

5 + 3 =

搜尋

Go

<January 2017>
SunMonTueWedThuFriSat
25262728293031
1234567
891011121314
15161718192021
22232425262728
2930311234
 
RSS
創用 CC 授權條款
【廣告】
twMVC

Tags 分類檢視
關於作者

一個醉心技術又酷愛分享的Coding魔人,十年的IT職場生涯,寫過系統、管過專案, 也帶過團隊,最後還是無怨無悔地選擇了技術鑽研這條路,近年來則以做一個"有為的中年人"自許。

文章典藏
其他功能

這個部落格


Syndication