Windows
幾個小時後分佈式事務協調器停止正常工作
我們注意到 DTC 服務停止正常工作。來自 ASP.NET 應用程序的日誌:
System.UnauthorizedAccessException: Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)) at System.Transactions.Oletx.IDtcProxyShimFactory.ConnectToProxy(String nodeName, Guid resourceManagerIdentifier, IntPtr managedIdentifier, Boolean& nodeNameMatches, UInt32& whereaboutsSize, CoTaskMemHandle& whereaboutsBuffer, IResourceManagerShim& resourceManagerShim) at System.Transactions.Oletx.DtcTransactionManager.Initialize() at System.Transactions.Oletx.DtcTransactionManager.get_ProxyShimFactory()
在此狀態下無法重新啟動 DTC。我們注意到 Windows 日誌中有一些事件,因此我們嘗試了不同的解決方案。這是一個真正有幫助但只有幾個小時的幫助:https ://technet.microsoft.com/en-us/library/cc774114(v=ws.10).aspx 。DTC 重新啟動,但隨後出現以下事件並且問題又回來了:
Source: Microsoft-Windows-MSDTC Client Date: 2017-03-16 09:25:19 Event ID: 4356 Task Category: MSDTC Proxy Description: Failed to initialize the MS DTC Communication Manager. Error Specifics: hr = 0x80070005, com\complus\dtc\dtc\cm\src\ccm.cpp:2118, CmdLine: C:\Windows\system32\msdtc.exe, Pid: 4252
重新啟動 DTC 再次以錯誤結束,因此出現以下事件:
Source: Microsoft-Windows-MSDTC Date: 2017-03-16 10:20:41 Event ID: 4441 Task Category: SVC Description: A MS DTC component has encountered an internal error. The process is being terminated. Error Specifics: DtcSystemShutdown (com\complus\dtc\dtc\msdtc\src\msdtc.cpp@2485): Shutting down with an error Source: Microsoft-Windows-MSDTC Date: 2017-03-16 10:20:41 Event ID: 4439 Task Category: Unknown Description: Failed to verify MS DTC service account information. Internal Information : msdtc_trace : File: com\complus\dtc\shared\util\security.cpp, Line: 818, VerifyAccountInfo: CService::Create failed, hr=0x80070005. Source: Microsoft-Windows-MSDTC Client Date: 2017-03-16 10:20:41 Event ID: 4356 Task Category: MSDTC Proxy Description: Failed to initialize the MS DTC Communication Manager. Error Specifics: hr = 0x80070005, com\complus\dtc\dtc\cm\src\ccm.cpp:2118, CmdLine: C:\Windows\system32\msdtc.exe, Pid: 4252
DTC 重新配置再次有幫助,但不會持續很長時間。更多關注事件:
Log Name: Application Source: Microsoft-Windows-MSDTC Client Date: 2017-03-14 12:03:27 Event ID: 4156 Task Category: CM Description: String message: INFORMATIONAL: Negotiate Resources returned OUT OF RESOURCES IN SSTATE_UP. Source: Microsoft-Windows-Perflib Date: 2017-03-15 13:58:59 Event ID: 1008 Task Category: None Description: The Open Procedure for service "MSDTC" in DLL "C:\Windows\system32\msdtcuiu.DLL" failed. Performance data for this service will not be available. The first four bytes (DWORD) of the Data section contains the error code.
感謝來自 Microsoft 支持的 Martin Nolte 和 Feroz Khan,我們設法解決了這個問題。
確認問題與“紅色箭頭問題”無關。執行 dcomcnfg 打開組件服務,查看“我的電腦”上是否有“紅色箭頭”。
- 如果您在數據庫伺服器上看到 MSDTC 紅色箭頭。要糾正此問題,請按照以下步驟(或來自https://blogs.msdn.microsoft.com/asiatech/2010/02/21/how-to-troubleshoot-the-red-arrow-issue-in -組件-服務-i/ )
- 確保 MSDTC 服務已啟動:
- 驗證 Users 組是否有權讀取 下的子項
HKEY_CLASSES_ROOT\CLSID
。如果使用者組沒有讀取子項的權限,COM+ 系統應用程序服務可能無法啟動並導致同樣的“紅色箭頭”問題。要將讀取權限授予使用者組,我們可以按照以下步驟操作(首先我們應該備份HKEY_CLASSES_ROOT\CLSID
):
- 打開
Regedt32
,定位HKEY_CLASSES_ROOT\CLSID
- 選擇
CLSID
,點擊菜單欄中的安全 -> 權限- 在“安全”選項卡中,在權限列表中添加“使用者”,賦予它“讀取”權限。
- 點擊高級按鈕,選擇“將所有子對像上的權限條目替換為此處顯示的適用於子對象的條目”選項。點擊應用。
- 檢查是否每個人都具有讀取權限
C:\Windows\Registration
及其子對象。- 確保 COM+ System Application 服務處於啟動狀態:
- MSDTC 服務應允許經過身份驗證的使用者查詢服務狀態。要檢查這一點,我們可以在命令視窗中執行此命令:
sc sdshow msdtc
- 如果 Authenticated Users 組沒有 MSDTC 服務對象的查詢權限,這將導致大多數使用者無權獲取 MSDTC 服務狀態,例如:
(A;;CR;;;AU)
- 我們需要執行這個命令給Authenticated使用者足夠的權限,然後重啟DLLHOST.exe(在做之前請備份“sc sdshow msdtc”的輸出資訊):
sc sdset msdtc D:(A;;CCLCSWRPLOCRRC;;;S-1-2-0) (A;;CCLCSWRPWPDTLOCRRC;;;SY)(A;;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;BA) (A;;CCLCSWLOCRRC;;;IU)(A;;CCLCSWLOCRRC;;;SU)(A;;CCLCSWLOCRRC;;;AU) (A;;CCLCSWRPWPDTLOCRRC;;;PU)(A;;CCLCSWRPLORC;;;NS)S: (AU;FA;CCDCLCSWRPWPDTLOCRSDRCWDWO;;;WD)
- 如果上述步驟不起作用,您必須執行其他步驟,例如重建 COM+ 目錄和消除系統資料庫項損壞。
- 重啟伺服器
驗證 MSDTC 服務的問題是否仍然存在。如果是這樣,請確保您沒有為 MSDTC 設置組策略。
- 恢復預設賬號:https ://technet.microsoft.com/en-us/library/cc774114(v=ws.10).aspx
- 如果在 dcomcnfg 中將帳戶設置為“網路服務”,則會設置以下系統資料庫值:
AccountName
在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\Security.
- 要查看此系統資料庫值是否受您的組策略影響,您可以執行以下步驟:
- 在受影響的機器上打開
rsop.msc
,這將顯示應用的組策略- 檢查“電腦配置”並轉到“Windows設置”/“安全設置”並檢查“系統資料庫”
- 你能看到 的任何定義
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\Security
嗎?- 檢查同樣位於“安全設置”下方的“系統服務”。你能看到“分佈式事務協調器”的任何修改嗎
- 轉到“使用者配置”並按照步驟 2、3 和 4 中的相同步驟進行操作。
- 要獲取所有應用的組策略,您需要下載
- 適用於 Windows 10 的遠端伺服器管理工具
- https://www.microsoft.com/en-us/download/details.aspx?id=45520
- 打開 Powershell 命令提示符並輸入以下命令:
Import-Module GroupPolicy Get-GPOReport -All -ReportType Html -Path AllGPOsReport.htm
- 為 MSDTC 設置預設組策略
- 跑
iisreset /restart
- 再次恢復預設賬戶:https ://technet.microsoft.com/en-us/library/cc774114(v=ws.10).aspx
- MSDTC 服務應該可以正常工作