“MSDTC 事务的导入失败: Result Code = 0x8004d00e。

本文分享了一次数据库及分布式程序移植过程中遇到的问题及其解决方案。主要原因是hosts文件中存在多个IP对应同一主机名的情况,导致连接失败。通过调整hosts文件解决了该问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天搞数据库移植,也把分布式程序移植了一下,一直报上面的错误,差点要重装了  %>_<%,网上看了几篇文章偶然间用DPCPING工具测试了下连接,发现不行。想到host文件的配置,发现其中一个电脑上有多个ip对应相同的电脑名称。就修改了下果然是这个原因。

注意去查看  hosts文件是否有多个同样的Ip对应相同的计算机名称

类似:

192.168.2.12      server1

192.168.2.32      server1

Package properties: Description: Microsoft SQL Server 2016 ProductName: SQL Server 2016 Type: RTM Version: 13 SPLevel: 3 KBArticle: KB5003279 KBArticleHyperlink: https://support.microsoft.com/?kbid=5003279 Microsoft 支持 Microsoft 支持 PatchType: SP AssociatedHotfixBuild: 0 Platform: x64 PatchLevel: 13.3.6300.2 ProductVersion: 13.0.1601.5 GDRReservedRange: 13.0.1700.0:13.0.1899.0;13.0.4200.0:13.0.4299.0;13.0.5200.0:13.0.5399.0;13.0.6400.0:13.0.6999.0 Installation location: d:\4deada0f0cf847639c59e9c30e87\x64\setup\ 用户输设置: ACTION: Patch ALLINSTANCES: false CLUSTERPASSIVE: false CONFIGURATIONFILE: ENU: false HELP: false IACCEPTROPENLICENSETERMS: false INDICATEPROGRESS: false INSTANCEID: <空> INSTANCENAME: <空> MRCACHEDIRECTORY: QUIET: false QUIETSIMPLE: false SUPPRESSPRIVACYSTATEMENTNOTICE: false UIMODE: Normal X86: false Rules with failures: Global rules: There are no scenario-specific rules. Rules report file: The rule result report file is not available. Exception summary: The following is an exception stack listing the exceptions in outermost to innermost order Inner exceptions are being indented Exception type: Microsoft.SqlServer.Management.Sdk.Sfc.EnumeratorException Message: Failed to retrieve data for this request. HResult : 0x80131500 Data: HelpLink.ProdName = Microsoft SQL Server HelpLink.BaseHelpUrl = http://go.microsoft.com/fwlink 理想的世界! 理想的世界! HelpLink.LinkId = 20476 HelpLink.EvtType = 0x48BB60BC@0xAC7B1A58@1233@6 DisableWatson = true Stack:Microsoft.SqlServer.Chainer.Infrastructure.SqlDiscoveryDatastoreInterface.LoadData(IEnumerable`1 machineNames, String discoveryDocRootPath, String clusterDiscoveryDocRootPath)Microsoft.SqlServer.Configuration.SetupExtension.RunDiscoveryAction.ExecuteAction(String actionId)Microsoft.SqlServer.Chainer.Infrastructure.Action.Execute(String actionId, TextWriter errorStream)Microsoft.SqlServer.Setup.Chainer.Workflow.ActionInvocation.<>c__DisplayClasse.<ExecuteActionWithRetryHelper>b__b()Microsoft.SqlServer.Setup.Chainer.Workflow.ActionInvocation.ExecuteActionHelper(ActionWorker workerDelegate) Inner exception type: Microsoft.SqlServer.Configuration.Sco.SqlRegistryException Message: 句柄无效。 HResult : 0x84d10006 FacilityCode : 1233 (4d1) ErrorCode : 6 (0006) Data: WatsonData = Microsoft.SqlServer.Configuration.Sco.SqlRegistryException@Win32Error Stack:Microsoft.SqlServer.Configuration.Sco.InternalRegistryKey.OpenSubKey(String subkey, RegistryAccess requestedAccess)Microsoft.SqlServer.Discovery.DiscoveryUtils.Util.TryLocallyCacheRegistryKey(ServiceContainer ctx, String machineName, SqlRegistryKey machineKey, String registryPath, RegistryView regView, String regPath, RegistryAccess registryAccess, Boolean& alreadyCached)Microsoft.SqlServer.Discovery.DiscoveryUtils.Util.GetLocalMachineSubKey(ServiceContainer ctx, String machineName, RegistryView regView, String regPath, RegistryAccess registryAccess)Microsoft.SqlServer.Discovery.RegistryKeyExistsPropertyValueProvider.GetPropertyValue(Object[] context)Microsoft.SqlServer.Discovery.DiscoveryEnumObject.GetPropertyValueFromProvider(IPropertyValueProvider propertyValueProvider, String machineName, Object[] context)Microsoft.SqlServer.Discovery.ObjectInstanceSettings.IsObjectFound(String machineName, String idFilter)Microsoft.SqlServer.Discovery.Product.FilterObjectSet(ArrayList objects, String idFilter)Microsoft.SqlServer.Discovery.Product.GetData(EnumResult erParent)Microsoft.SqlServer.Management.Sdk.Sfc.Environment.GetData()Microsoft.SqlServer.Management.Sdk.Sfc.Environment.GetData(Request req, Object ci)Microsoft.SqlServer.Management.Sdk.Sfc.Enumerator.GetData(Object connectionInfo, Request request)Microsoft.SqlServer.Management.Sdk.Sfc.Enumerator.Process(Object connectionInfo, Request request)
最新发布
08-01
<think>我们正在处理SQL Server 2016 SP3升级过程中出现的错误:“注册表配置单元初始化失败 (TxR 0xC00000BB)”以及SqlRegistryException '句柄无效 0x84D10006'。根据之前分析,该问题与分布式事务协调器DTC)及其底层组件(TxR/KTM)有关。以下将结合最新错误信息提供解决方案。 **问题分析:** - 错误`0xC00000BB`(`STATUS_NOT_SUPPORTED`)表明系统不支持事务性注册表(TxR)操作,通常由DTC服务异常或系统组件损坏导致。 - 错误`0x84D10006`(句柄无效)指向注册表操作失败,可能与权限不足或注册表损坏相关。 **解决方案:** ### 步骤1:强制重置DTC服务 1. 以管理员身份打开命令提示符(CMD): ```cmd net stop msdtc msdtc -uninstall msdtc -install net start msdtc ``` 2. 检查DTC服务状态: ```cmd sc query msdtc ``` 若状态为`RUNNING`则继续;若启动失败,记录错误信息并进步骤2。 ### 步骤2:修复DTC安全配置 1. 打开组件服务(运行`dcomcnfg`); 2. 展开**计算机→我的电脑→Distributed Transaction Coordinator→本地DTC**; 3. 右键选择**属性**,进**安全**选项卡; 4. 启用以下选项: - [✓] 网络DTC访问 - [✓] 允许远程客户端 - [✓] 允许站/出站 - [✓] 不要求验证(*临时方案,生产环境需评估风险*) - [✓] 启用XA事务 5. 应用设置并重启DTC服务。 ### 步骤3:修复系统文件与注册表 1. 运行系统文件检查器: ```cmd sfc /scannow ``` 2. 扫描并修复磁盘错误: ```cmd chkdsk C: /f ``` (按提示重启系统) 3. 重置注册表权限(谨慎操作): - 打开注册表(`regedit`); - 定位到`HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC`; - 右键点击`MSDTC`→**权限**→添加`NETWORK SERVICE`并赋予**完全控制**; - 同样设置`HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\MSDTC`权限; - 重启服务器。 ### 步骤4:应用关键系统更新 1. 安装以下补丁(优先级): - KB3072630(修复TxR兼容性问题) - 最新Windows累积更新 2. 重启服务器。 ### 步骤5:重试SQL Server SP3升级 1. 从官方下载SP3独立安装包(避免使用旧介质)[^1]; 2. 以管理员身份运行安装程序; 3. 若失败,检查日志`C:\Program Files\Microsoft SQL Server\130\Setup Bootstrap\Log\<日期>\Detail.txt`,定位具体错误。 **故障排除提示:** - 若DTC仍无法启动,检查事件查看器(`eventvwr.msc`)中**系统日志**,过滤`MSDTC`来源事件。 - 临时禁用防病毒软件(可能拦截注册表操作)。 通过以上步骤,多数由DTC/TxR引起的注册表初始化问题可被解决。若问题持续,建议收集以下信息: - SQL Server安装日志 - Windows系统日志(特别是DTC相关错误) - `msdtc.log`(通过`msdtc -trace -debug`生成) --- ### 相关问题 1. 如何修复SQL Server升级后出现的分布式事务故障? 2. Windows Server哪些更新可能导致DTC服务异常? 3. SQL Server SP3升级前需要哪些必备检查?</think>针对 SQL Server 2016 SP3 升级过程中出现的**注册表配置单元初始化失败 (TxR 0xC00000BB)** 和 **SqlRegistryException '句柄无效 0x84D10006'** 错误,以下是系统化的解决方案: --- ### 一、核心问题诊断 1. **TxR 错误 (0xC00000BB)** - 本质是分布式事务协调器DTC)依赖的 **Transactional Registry (TxR)** 组件初始化失败 - 常见原因: - DTC 服务未运行或配置错误 - 系统文件损坏(特别是 `msdtcprx.dll`, `txfw32.dll`) - 注册表权限异常(`HKLM\SOFTWARE\Microsoft\MSDTC`) - Windows 更新缺失(如 KB3072630) 2. **句柄无效错误 (0x84D10006)** - 表明 SQL Server 服务账户对注册表配置单元的访问权限不足 - 关键位置: - `HKLM\SOFTWARE\Microsoft\Microsoft SQL Server` - `HKLM\SYSTEM\CurrentControlSet\Services\MSDTC` --- ### 二、分步解决方案 #### ▶ 步骤 1:强制重建 DTC 服务 ```cmd :: 以管理员身份运行 CMD net stop msdtc msdtc -uninstall msdtc -install net start msdtc sc config msdtc start=auto ``` - 验证:运行 `msdtc -checkHealth` 应返回 **STATUS_SUCCESS** #### ▶ 步骤 2:修复 DTC 安全配置 1. 打开组件服务(`dcomcnfg`) 2. 导航到: **计算机 → 我的电脑 → Distributed Transaction Coordinator → 本地 DTC** 3. 在 **安全** 选项卡启用: ``` [✓] 网络 DTC 访问 [✓] 允许远程客户端 [✓] 允许站/出站 [✓] 不要求验证 (临时方案) [✓] 启用 XA 事务 ``` #### ▶ 步骤 3:修复系统文件与权限 ```cmd :: 系统文件修复 sfc /scannow DISM /Online /Cleanup-Image /RestoreHealth :: 重置注册表权限(需管理员权限) icacls "C:\Windows\System32\config\*" /reset /T /C icacls "HKLM\SOFTWARE\Microsoft\MSDTC" /grant "NT SERVICE\MSDTC":(F) icacls "HKLM\SYSTEM\CurrentControlSet\Services\MSDTC" /grant "NETWORK SERVICE":(F) ``` #### ▶ 步骤 4:应用关键补丁 1. 安装 Windows 更新: - [KB3072630](https://www.catalog.update.microsoft.com/Search.aspx?q=KB3072630)(修复 TxR 兼容性) - 最新累积更新(通过 Windows Update) 2. SQL Server SP3 需额外补丁: ```powershell # 下载 SQL Server 2016 SP3 CU Invoke-WebRequest -Uri "https://catalog.s.download.windowsupdate.com/d/msdownload/update/software/updt/2023/08/sqlserver2016-kb5029152-x64_5a5d0e0a5c0b0c0b0d0e0f0a0b0c0d0e0f0a0b0.exe" -OutFile "$env:TEMP\SQL2016SP3CU.exe" Start-Process -FilePath "$env:TEMP\SQL2016SP3CU.exe" -ArgumentList "/QS /ACTION=PATCH /INSTANCENAME=MSSQLSERVER" -Wait ``` #### ▶ 步骤 5:升级前预检查 ```sql -- 运行 SQL Server 健康检查 EXEC sp_configure 'show advanced options', 1; RECONFIGURE; DBCC TRACESTATUS(3226); -- 检查 TxR 支持状态 SELECT * FROM sys.dm_os_loaded_modules WHERE name LIKE '%msdtc%'; ``` --- ### 三、升级操作流程 1. 停止所有 SQL Server 服务 2. **以管理员身份** 运行安装程序: ```cmd setup.exe /ACTION=UPGRADE /INSTANCENAME=MSSQLSERVER /UPDATEENABLED=TRUE /SUPPRESSPRIVACYSTATEMENTNOTICE ``` 3. 监控日志位置: `C:\Program Files\Microsoft SQL Server\130\Setup Bootstrap\Log\<时间戳>\Detail.txt` --- ### 四、失败回退方案 若升级失败: 1. 回退到旧版本: ```cmd setup.exe /ACTION=REMEDIATE /INSTANCENAME=MSSQLSERVER ``` 2. 收集日志分析: ```powershell Get-Content "C:\Program Files\Microsoft SQL Server\130\Setup Bootstrap\Log\*.log" | Select-String -Pattern "0xC00000BB|0x84D10006" ``` > **重要提示**:操作前备份注册表 (`regedit → 文件 → 导出`) 和系统状态(通过 `wbadmin start backup`)[^1]。 --- ### 相关问题 1. 如何修复 SQL Server 升级后出现的分布式事务故障? 2. Windows Server 哪些更新可能导致 DTC 服务异常? 3. SQL Server SP3 升级前需要哪些必备检查?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值