1. 程式人生 > >TransactionScope Oracle 問題記錄解決方法

TransactionScope Oracle 問題記錄解決方法

(一)無法載入 DLL“oramts.dll”: 找不到指定的模組

      Oramts.dll 檔案公開登記 Oracle 連線所涉及到在通過 Microsoft 分散式事務處理協調器 (MSDTC) 啟動的事務中的公共 API。 在事務處理環境中執行時, System.Data.OracleClient 程式集呼叫這些 API。 
  System.Data.OracleClient 程式集的早期版本不支援分散式的事務。 因此,該依賴項不存在                 System.Data.OracleClient 程式集版本 1.1 之前。 
  當您執行分散式的事務活動時 System.Data.OracleClient 程式集使用 Oramts.dll 檔案。 當您嘗試執行 nontransacted 活動時, 或者當您使用本地事務時不載入 System.Data.OracleClient 程式集。 如果 Oracle 客戶端連線軟體,在安裝過程中不包括此元件,您嘗試使用分散式的事務與 System.Data.OracleClient ,您可能會收到以下錯誤資訊: System.Data.OracleClient: Unable to load DLL (oramts.dll) 與 Oracle 客戶端連線元件安裝在 Oramts.dll 檔案。 它不被分發使用任何 Microsoft 軟體。 Oramts.dll 檔案不是作為預設安裝包含在安裝 Oracle 客戶端連線軟體時。 若要安裝此元件必須單擊以選中 Oracle Services for Microsoft Transaction Server 在安裝 Oracle 客戶端連線軟體時複選框。 有關這些元件的資訊,請訪問下面的 Oracle Web 站點: 

http://www.oracle.com/technology/tech/windows/ora_mts/index.html (http://www.oracle.com/technology/tech/windows/ora_mts/index.html
  先到Oracle官方網站上面下載ODAC92070.exe因為這是為了支援分散式事務的一個數據庫連線包,Oracle跟微軟官方網站上有說明,Oracle不支援單獨將oramts.dll分佈的方式,就是說這個包不能單獨下載,只能下載這個安裝, 
安裝完成後, 再執行程式碼,仍就事務出錯,報的錯誤一樣,檢視環境變數中的path,並在Oracle92Home目錄,查詢oramts.dll已經存在, 後來在一英文網站,說Oramts.dll這個dll是因為在debug模式下面編譯的,所以不能正常使用 通過DependencyWalker檢視依賴項,發現少了msvcrtd.dll,這個在裝上VS6.0,VC++的機器上有,這是一個VC的編譯器檔案, 然後下載一個msvcrtd.dll拷貝到C:/windows/System32下面,再試分散式事務,成功。希望這編文章能給剛開始使用VS2005+Oracle資料庫的一些朋友一點點幫助. 
    當然要是使用Oracle10g,Oracle11g相關版本,只要下載對應的Oracle Data Access Components (ODAC)資料訪問元件就可解決 Oracle資料庫客戶端訪問元件下載地址: 
http://www.oracle.com/technology/software/tech/windows/odpnet/index.html

若有問題可按下列步驟解決:
1. 檢查安裝時有沒有裝 Oracle Services for Microsoft Transaction Server 
2.到bin目錄如(oracle/product/10.1.0/db_1/bin),找找有沒有oramts.dll,如果沒有的話就證明沒有安裝上面的服務,可以考慮重新安裝客戶端。 
3.如果是10g的話,看看有沒有oramts10.dll,有的話再複製一份,改名為oramts.dll。
4.如果安裝完客戶端提示連線字串錯誤!到oracle/product/10.1.0/Client_1/network/ADMIN目錄下,找配置檔案tnsnames.ora,有的話開啟看裡面的連線字串是怎麼寫的,自己寫沒寫錯,沒有的話可以手動新增此檔案,示例程式碼如下: ORCL =  (DESCRIPTION =    (ADDRESS_LIST =      (ADDRESS = (PROTOCOL = TCP)(HOST = hostname)(PORT = 1521))    )    (CONNECT_DATA =      (SERVICE_NAME = orcl10)    )  )   

5.可以通過客戶端工具Net Configuration Assistant 來重新配置上述連線。

(二)關於TransactionScope出錯:“與基礎事務管理器的通訊失敗”

       解決方法:需要對MSDTC元件設定

       步驟:

1.控制面板->管理工具->元件服務->計算機->我的電腦->右鍵->屬性
2. 選擇MSDTC頁, 確認"使用本地協調器"
3.點選下方 Distributed Transaction Coordinator--》本地DTC->右鍵-》屬性 進行安全配置
4. 勾選: "允許網路訪問","允許遠端客戶端","允許入站","允許出站","不要求進份驗證".
5. 勾選:”啟動XA事(X)“,並點選應用,會提示是否重啟,OK即可