訊息 「 無法編列上呼叫物件的交易 」 代表什麼?
交易的交易是 Microsoft 伺服器元件會嘗試開啟資料庫連接和驅動程式管理員無法編列在目前交易中的資料庫連接時,ODBC 驅動程式管理員報告這個錯誤。在 ODBC 驅動程式管理員 」 資料庫中登記連接目前的交易藉由呼叫 ODBC 驅動程式 SQLSetConnectionAttr SQL_ATTR_ENLIST_IN_DTC 程序。如果 SQLSetConnectionAttr 程序呼叫會失敗,ODBC 驅動程式管理員 」 就會顯示"無法以登錄 「] 訊息。
如需詳細資訊按一下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項:
193893?
(http://support.microsoft.com/kb/193893/EN-US/
)
使用 Oracle 資料庫與 Microsoft 交易伺服器
使用 Microsoft SQL Server 時
如果交易的交易是 Microsoft 伺服器元件存取 Microsoft SQL Server 資料庫時,就會發生這個錯誤,檢查下列項目:
- 請確定 Microsoft 分散式交易 Coordinator(MS DTC) 服務已啟動。
請在其上系統上已啟動 MS DTC 服務部署元件您 Microsoft 交易的伺服器。如果您的 Microsoft 交易伺服器應用程式存取遠端系統上的 Microsoft SQL Server 資料庫,請確定 MS DTC 服務也啟動該系統上。這經常是在 「 失敗 Enlist 錯誤以 」 的原因。
若要檢查的 MS DTC 服務狀態下列步驟執行: - 在 [開始] 功能表上選取 [設定],然後按一下 [控制台]。
- 選取 [服務] 圖示。
- [服務] 清單中捲動,並確認 MS DTC 服務狀態已啟動。如果 MS DTC 狀態是空白的 (未啟動),您可以選取 MSDTC,然後按一下 [開始] 來啟動它。
- 請檢查您的網路設定。
當交易式的交易是 Microsoft 伺服器元件,在一個系統上存取另一個系統上的 SQL Server 資料庫時,MS DTC 會傳播從第一個或主要系統 DTC 交易至次要系統。交易傳播只能發生在如果主要的系統上 DTC 處理程序可與次要的系統上 DTC 處理序通訊。DTC 處理序建立兩個方向中的遠端程序呼叫 (RPC) 連線這表示其中一個系統上的網路組態問題可以防止 DTC 處理程序從成功與彼此通訊。這會導致 ODBC 傳回 「 無法以登錄"的錯誤。
通常 Windows NT 應用程式事件日誌中會記錄下列的 MS DTC 事件:主要任務: 工作階段繫結失敗。主要逾時,在等待繫結到次要。
此錯誤表示電腦便能將繫結至在 SQL] 伺服器上的 DTC,但在 SQL 伺服器上的 DTC 的 Microsoft 交易伺服器上的 DTC 無法執行反向的繫結至 Microsoft 交易伺服器電腦。
如果您的網路組態不正確的每次嘗試連線到遠端的 SQL Server 資料庫就會導致 「 無法編列 」 的錯誤。如果您一致地得到一個"無法編列 」 的錯誤甚至在這兩個系統上啟動 Microsoft DTC 之後,失敗的最可能的原因是網路組態錯誤。
如果發生這種情形請檢查您的網路設定使用 Pingtest.bat,如下所示: - 使用文字編輯器 (例如 「 記事本 」) 來建立一個名為 Pingtest.bat 的檔案。將下列的批次檔指令複製到它。
echo off
REM Usage pingtest OtherMachineName
REM Must use a machine name and NOT an IP address
ping -n 1 %computername%
ping -n 1 %1
ipconfig /all
echo on
批次檔會使用 %電腦名稱 %顯示本機 IP 位址。接著會顯示遠端電腦時執行的批次檔,在命令列中指定 IP 的位址。當您叫用批次檔時,您必須指定遠端電腦和不是它的 IP 位址的名稱。使用電腦名稱強制 ping MS DTC 完全一樣不會時它會繫結到遠端 MS DTC 電腦的機器名稱解析。 - 在 Microsoft 交易伺服器上執行 Pingtest.bat 來決定是否您可以依名稱 Ping SQL Server 電腦的電腦。擷取來自批次檔,在文字檔中輸出。比方說如果交易是 Microsoft 伺服器執行電腦 A 上,而電腦 B 上執行 SQL Server,請使用下列命令:
Pingtest B > AResults.txt
- 在 SQL Server 電腦,以判斷如果您可以依照名稱 Ping Microsoft 交易伺服器電腦上執行 Pingtest.bat。 擷取來自批次檔,在文字檔中輸出。比方說如果交易是 Microsoft 伺服器執行電腦 A 上,而電腦 B 上執行 SQL Server,請使用下列命令:
Pingtest A > BResults.txt
- 檢查以確保在兩台電腦可以 Ping 另一個成功的兩個文字檔案內容。
如果您使用 Hosts 或 Lmhosts 檔案 TCP/IP 名稱解析的檢查以確定它們包含有效的電腦名稱,IP 位址對應到非常仔細的這些檔案進行。若要執行此動作] 核取主控件和 Winnt40\System32\Drivers\Etc 目錄中的 Lmhosts 檔在這兩種 Microsoft 交易伺服器上與 SQL Server 電腦。經常,在一個系統上的檔案將會被正確,雖然的其他系統上是不正確。
- 設定 SQL Server 使用 TCP/IP,而不是具名管道。
如果您只看到"無法編列"錯誤間歇地,然後使用具名管道 」,而不是 TCP/IP 可能會造成問題的原因。 使用 「 具名管道 」,可能會導致間歇性 」 無法以登錄"的錯誤。
Microsoft 強烈建議您設定 SQL Server 使用 TCP/IP,而不是具名管道 」。使用 「 具名管道 」,可能會導致間歇性 」 無法以登錄"的錯誤。 - 在 [開始] 功能表上選取 [程式集],選取 Microsoft SQL Server 6.5 然後再按一下 [SQL 用戶端組態公用程式 」。
- 按一下 [網路媒體櫃] 索引標籤。
- 在預設的網路清單選取 TCP/IP 通訊端。
- 按一下 [完成]。
- 請檢查交易逾時。
元件的交易可能已經停止,因為之前已完成的資料庫登記的交易逾時。您可以增加交易逾時值,透過 Microsoft 交易伺服器總管]。使用下列步驟來提高逾時值:
- 啟動 Microsoft 交易伺服器總管,並選取 [電腦]。
- 交易已啟動啟動電腦] 上按一下滑鼠右鍵,然後按一下 [內容]。
- 按一下 [選項] 索引標籤並指定較長的逾時值。
這不太可能是問題,除非您的交易需要異常長的時間。但是,可能暫時提高逾時值為潛在的問題來源消除這會很有幫助。
使用 Oracle 時
如果交易的交易是 Microsoft 伺服器元件存取 Oracle 資料庫時,就會發生這個錯誤,檢查下列項目:
- 請確定啟動 MS DTC 服務。
請確定 Microsoft DTC 服務 「 入門 」 Microsoft 交易伺服器元件已部署的系統上。
使用下列步驟來檢查它的狀態: - 在 [開始] 功能表上選取 [設定],然後按一下 [控制台]。
- 選取 [服務] 圖示。
- [服務] 清單中捲動,並確認 MS DTC 服務狀態已啟動。如果 MS DTC 狀態是空白的 (未啟動),您可以選取 MSDTC,然後按一下 [開始] 來啟動它。
- 在 Microsoft 交易伺服器電腦上安裝最新的 Oracle 用戶端軟體。
請確定最新 Oracle 7.3 或 Oracle 8 用戶端軟體修補程式版本安裝在系統中包含 Microsoft 交易伺服器元件。請注意升級 Oracle 軟體包含 Oracle 資料庫的系統上,而無法升級 Oracle 軟體包含 Microsoft 交易伺服器元件的系統上的一般。您必須升級 Oracle 軟體用戶端系統上。
您可以從 Oracle FTP 網站取得最新的 Oracle 修補程式 Windows NT。請移至: - 在 Oracle 資料庫上安裝最新的 Oracle 伺服器軟體伺服器系統
如果交易是 Microsoft 伺服器應用程式存取 Oracle 資料庫在 Windows NT 或 UNIX 系統,請確定該系統上已安裝最新的 Oracle 補充程式。
您可以取得最新的 Oracle 修補程式的 Windows NT 從 Oracle FTP 站台。請移至: - 使用 Microsoft Oracle ODBC 驅動程式。
請確定 Microsoft 交易伺服器使用 Microsoft Oracle ODBC 驅動程式。沒有其他的 Oracle ODBC 驅動程式支援 Microsoft 交易伺服器的交易。
如果您想要使用從 Intel x86 平台的 Microsoft 交易伺服器交易,您必須安裝其中一個下列的 Microsoft Oracle ODBC 驅動程式。
摺疊此表格展開此表格
| MS Oracle ODBC 驅動程式 | 版本號碼 | 發行車輛 |
|---|
| 2.0 更新 | 2.73.7283.03 | MDAC 1.5b MDAC 1.5 c Windows NT 4.0 選項套件 |
| 2.0 更新 | 2.73.7356 | ODBC 3.5 SDK |
| 2.5 | 2.573.2927 | Visual Studio 6.0 資料存取 SDK 2.0 MDAC 2.0 |
如果您想要使用 Microsoft 交易伺服器,您必須安裝 Microsoft Oracle ODBC 驅動程式版本 2.573.2927,2.5 Compaq Alpha 平台的交易。較早版本的 Microsoft Oracle ODBC 驅動程式並不支援 Compaq Alpha 平台。
您可以取得 Microsoft Oracle ODBC 驅動程式 2.5 從:
http://microsoft.com/data
(http://msdn.microsoft.com/dataaccess)
藉由遵循 「 下載中心 」 連結。
如果您想要存取 Oracle 資料庫,我們建議即使您不需要交易支援,您使用 Microsoft Oracle ODBC 驅動程式 2.0 或更新版本的驅動程式。這個新的驅動程式提供較佳的效能比 Microsoft Oracle ODBC 1.0 驅動程式取代 [Oracle 1.0 驅動程式序列化在驅動程式層級的所有活動; 要求單一執行緒透過驅動程式。Microsoft Oracle 2.0 和更新版本的驅動程式序列化在連線層級的所有活動。這可讓在平行中使用不同的資料庫連接。 - 請確定已啟用 [Oracle XA 支援。
檢查以確定已啟用 Oracle XA 交易支援。如需詳細資訊請參閱 「 啟用 Oracle XA 交易支援 」 一節 」 使用 Oracle 資料庫與交易是 Microsoft 伺服器 」 文件中。
- 如果您使用的 Oracle 7.3,確定 V $ XATRANS $ 存在。此檢視應該已經建立時安裝 XA 文件庫。 如果不存在這個檢視,Oracle 系統管理員必須建立它藉由執行名為 XAVIEW.SQL"Oracle 提供指令碼。這個檔案可以 C:\ORANT\RDBMS73\ADMIN 中找到。這個 SQL 指令碼必須執行以 Oracle 使用者 SYS 」。
如果您使用的 Oracle8,應該存在於此檢視。您應該不需要建立它。 - 針對 Oracle 7.3 和 Oracle8 Oracle 系統管理員必須授與 SELECT 存取公用上 [DBA_PENDING_TRANSACTIONS 檢視
Grant Select on V$XATRANS$ to public.
公開。 - 在 Oracle 執行個體管理員中,按一下 [檢視] 功能表上的 [進階模式,並在左邊窗格中選取"初始化參數 」。在右邊的窗格中選取 「 進階微調 」,並增加 distributed_transactions 」 參數,以允許以一次更新資料庫的多並行 MTS 交易。
請參閱您的 Oracle 伺服器文件設定 Oracle XA 交易支援的相關資訊。 - 確定已正確設定 Oracle 數字字元。
警告不當使用 「 登錄編輯器 」 可能會導致嚴重的問題,甚至必須重新安裝作業系統。Microsoft 不保證所導致的不正確使用登錄編輯程式 」 的問題可以獲得解決。使用 「 登錄編輯程式 」,請自行負擔相關的風險。
如需有關如何編輯登錄的資訊,檢視 [登錄編輯程式 (Regedit.exe) 或 「 新增和刪除資訊中登錄 」] 和 [編輯登錄資料 」 中的 「 說明 」 主題 Regedt32.exe 中的 ["變更機碼及值 > 說明主題]。請注意您應該備份登錄之前您編輯它。
位於美國以外的系統的客戶可能需要設定 Oracle 數字字元的支援。在 Windows NT] 登錄中找出下列的登錄機碼:
HKEY_LOCAL_MACHINE\SOFTWARE\Oracle
並加入此項目:
"NLS_NUMERIC_CHARACTERS"=".,"
注意: 上面以引號括住的字串內的字元為句號和逗號以該順序。 - 請確定 Oracle 設定適當的連線。
如果想建立多個的六連線到 Oracle 資料庫確認 [Oracle 設定為支援額外的資料庫連線]。如需詳細資訊請參閱一節 < 設定 Oracle 來支援在大型數字的連線文件 」] 中使用 Oracle 資料庫與 Microsoft 交易伺服器 」。 - 請確定您有連接到 Oracle 資料庫,如果您使用 Oracle 整合式安全性。
如果您使用 [Oracle 整合式安全性確定下登入 ID 及密碼,授權連線到 Oracle 資料庫執行 MS DTC。如需詳細資訊請參閱文件中的設定整合式安全性 > 一節 < 使用 Oracle 資料庫與交易是 Microsoft 伺服器 >。 - 執行 TestOracleXAConfig 程式。
執行 TestOracleXAConfig 程式以確定您可以成功地連線到 Oracle 資料庫不使用交易是 Microsoft 伺服器。如需詳細資訊請參閱 < 使用的 Oracle 資料庫與 Microsoft 交易伺服器的安全 > 文件中的 「 測試安裝和組態的 MTS 支援的 Oracle 」 一節。 - 執行範例銀行程式。
範例銀行設計程式以確定您可以成功連線至 Oracle 資料庫從 Microsoft 交易伺服器程式的執行。如需詳細資訊,請參閱在文件中使用 Oracle 資料庫與 Microsoft 交易伺服器 」 的 「 驗證 Oracle 安裝和設定使用 [範例應用銀行程式 」 一節。 - 啟用 Oracle 追蹤。
先知是能夠產生記錄 Oracle 之間傳送資訊的追蹤檔案的用戶端和伺服器。這些追蹤檔案可以是非常有助於診斷問題。您可確定 Oracle 追蹤,如下所示: - 請安裝於 MTS 系統 Mtxoci.dll 是版本 1998.08.762.0 或更新版本。發行版本 1998.08.762.0 NT4 服務套件 4 的版本。它是 Mtxoci.dll 的第一個版本,可讓您啟用 Oracle 追蹤並控制 Oracle 追蹤檔案的位置。
- 使用檔案總管,找出並刪除任何現有的 Oracle 追蹤您的系統上的檔案。這些檔案具有名稱後置字元".trc"以結束。藉由刪除任何過時的追蹤檔案,您更容易找到任何新建立的威脅。
- 執行 REGEDIT 建立下列登錄機碼:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Transaction Server\Local Computer\My Computer\OracleTraceFilePath
下列 REG_SZ 值給此機碼: 您如果您希望可能選擇不同的磁碟機和追蹤檔案的目錄。 - 使用 [檔案總管] 來建立 Oracle 追蹤檔案目錄。在我們的範例請在 「 C 」 的磁碟機上建立目錄 OraTrace 」。
- 停止正在存取 Oracle MTS 封裝資料庫。正在停止封裝做就能確保所有現有的 Oracle 資料庫連線就會關閉,且下一個 MTS 元件時開啟新的 Oracle 資料庫連接叫用。這些新開啟的 Oracle 資料庫連線有啟用的 Oracle 追蹤。
- 叫用 (Invoke) 開啟 Oracle 資料庫的交易是 Microsoft 伺服器元件。
- 檢查新建立的 Oracle 追蹤檔案。
- 啟用 MTS/Oracle 錯誤追蹤
MTS 都可以擷取關於 Windows 應用程式事件日誌中的 Oracle 錯誤的額外資訊。您可以擷取這項資訊,如下所示: - 執行 REGEDIT 建立下列登錄機碼:
HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\IniFileMapping\MTx.Ini\TRACE
- 停止正在存取 Oracle MTS 封裝資料庫。停止封裝可以確保在 Mtxoci.dll 會執行追蹤重新啟動時。
- 叫用 (Invoke) 開啟 Oracle 資料庫的交易是 Microsoft 伺服器元件。
- 請使用 Windows 事件檢視器查看應用程式事件記錄檔。尋找由 MTXOCI 所產生的事件。您可能會看到類似下面的事件:
字串訊息: sqlld2 呼叫失敗,錯誤碼 0x849。
錯誤值顯示的八進位數。您可以使用計算機程式,將錯誤值轉換成十進位。在這個範例 0x849"轉譯為 Oracle 錯誤值 2121年。
- 請檢查交易逾時。
請考慮是否可能有 Microsoft 交易伺服器元件的交易結束之前完成的資料庫登記。如果交易逾時到期 Oracle 資料庫登記完成之前,可能會發生這個問題。
您可以增加交易逾時值,透過 Microsoft 交易伺服器總管]。若要執行此動作請執行下列步驟:
- 執行 Microsoft 交易伺服器總管,並選取 [電腦]。
- 交易已啟動啟動電腦] 上按一下滑鼠右鍵,然後選取 [快顯功能表上的 [內容]。
- 選取 [選項] 索引標籤並指定較長的逾時值。
這不太可能是問題,除非您的交易持續超過一分鐘。但是,可能暫時提高逾時值為潛在的問題來源消除這會很有幫助。
如果您仍然收到這個錯誤,該怎麼辦
如果還是出現這個錯誤之後執行此處所描述的所有項目,您應該向 Microsoft 產品支援報告錯誤的組織。請提供下列資訊與您的問題報告。
- 描述問題。"無法以登錄 「 錯誤發生每次當您嘗試使用 Microsoft 交易伺服器交易或是間歇性失敗嗎?如果失敗是間歇性,頻率它發生的?
- 描述您的應用程式及系統設定。
- 說明系統 Microsoft 交易伺服器安裝應用程式元件。如果您使用的 Oracle 資料庫,提供版本 Oracle 用戶端軟體與 Microsoft Oracle ODBC 驅動程式是您使用。
- 您是否正在使用 Microsoft SQL 資料庫或 Oracle 資料庫?是在 Microsoft 交易在同一部電腦上的資料庫伺服器應用程式元件或者是在另一部電腦上??如果您使用的 Oracle 資料庫,Oracle 資料庫上安裝和安裝 Oracle 軟體的版本是何種系統?
- 您使用何種網路傳輸: TCP/IP,具名管道、 IPX/SPX 等等?您使用什麼名稱服務: WINS、 DNS,主機檔案,等等?
- TestOracleXAConfig 程式執行了嗎?
如果您使用的 Oracle 資料庫,嘗試執行 TestOracleXAConfig 程式。如果此程式失敗,問題出 Oracle。請將問題回報給 Oracle 客戶支援部門。 - 範例銀行程式執行了嗎?
請試著使用 Microsoft SQL Server 執行範例銀行程式。如果您使用 Oracle 範例銀行應用程式不會執行資料庫,與 Oracle 嗎?如果不是,何種錯誤您遇到? - 何種錯誤將提報於 Oracle 追蹤檔案中?
如果您使用的 Oracle 資料庫,何種資訊位於 Oracle 追蹤檔案?要擷取這項資訊,第一個尋找和刪除所有現有的 Oracle 追蹤系統上的檔案。這些檔案具有副檔名為.trc 結束的名稱。您中刪除所有現有的追蹤檔案後執行失敗 Microsoft 交易伺服器元件,並提供 Microsoft Oracle 追蹤檔案的內容。 - 在 Windows NT 事件日誌中報告哪些錯誤?
檢查 Windows NT 事件日誌,並報告所有的 DTC 事件已記錄在或接近失敗的時間。 - 您使用 Oracle 整合式安全性嗎?
回報是否正在使用 Oracle 整合式安全性。 - 交易逾時值是什麼?
請告訴 Microsoft 在 Microsoft 交易伺服器中設定什麼交易逾時值。
如需詳細資訊按一下面的文件編號,檢視 「 Microsoft 知識庫 」 中的發行項:
193893?
(http://support.microsoft.com/kb/193893/EN-US/
)
使用 Oracle 資料庫與 Microsoft 交易伺服器