因为链接服务器 "XXXX" 的 OLE DB 访问接口 "SQLNCLI10" 无法启动分布式事务

本文介绍了解决因DBLink导致的“链接服务器”的OLEDB访问接口无法启动分布式事务的问题。通过调整MSDTC配置和服务重启等步骤,解决了在存储过程中调用DBLink时出现的错误。

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

今天同事遇到这样一个问题:
“因为链接服务器 “XXXX” 的 OLE DB 访问接口 “SQLNCLI10” 无法启动分布式事务”。
就跑来问我啦。大致的情况就是在2台服务器时间使用DBLink时候导致的问题,具体一点就是直接在数据库调用DBLink没有问题,但是在存储过程中调用时会出现这个错误的。
因为我对DBLink也不是特别熟悉,所以就有啥查啥咯。最终的解决方案是这样的:

看一下MSDTC启动是否正确

1、运行 regedt32,浏览至 HKEY_LOCAL_MACHINE\Software\Microsoft\MSDTC。

添加一个 DWORD 值 TurnOffRpcSecurity,值数据为 1。

2、重启MS DTC服务。

3、打开“管理工具”的“组件服务”。

a. 浏览至”启动管理工具”。

b. 选择”组件服务”。

c. 展开”组件服务”树,然后展开”我的电脑”。

d. 右键单击”我的电脑”,然后选择”属性”。

在 MSDTC 选项卡中,确保选中了下列选项:

网络 DTC 访问

网络管理

网络事务

XA 事务

另外,”DTC 登录帐户”一定要设置为”NT Authority\NetworkService”。

4、重启MS DTC服务。

5、再次运行 regedt32,浏览至 HKEY_LOCAL_MACHINE\Software\Microsoft\MSDTC,然后删除
TurnOffRpcSecurity 项。

再查看一下sp_serveroption命令有链接服务器的选项说明

参考了以下文章:
http://bbs.youkuaiyun.com/topics/391863518?page=1

因为链接服务器 “SQLEHR” 的 OLE DB 访问接口 “SQLNCLI10” 无法启动分布式事务

<think>嗯,用户问的是如何在OLEDB中正确配置Locale Identifier(LCID)来支持区域设置。首先,我需要回忆一下OLEDB连接字符串的相关知识。记得在连接字符串中,可以通过特定的属性来设置LCID。 根据引用[3],OLE DB初始化属性可以通过连接字符串的关键字来设置,每个属性对应一个短名称。LCID应该对应某个特定的关键字,可能是“Locale Identifier”或者类似的名称。比如,可能使用“Locale”或“LCID”作为关键字。 然后,引用[2]提到不同语言的文档存储时,LCID决定了索引使用的语言。这说明在查询时,设置正确的LCID有助于语言相关的处理,比如排序规则或字符串比较。因此,在连接字符串中设置LCID可能影响这些区域相关的行为。 接下来,需要确认正确的关键字和语法。比如,是否在连接字符串中使用“Locale Identifier=xxxx”或者“LCID=xxxx”。可能需要查找OLE DB提供程序的文档,例如Microsoft的官方资料,找到对应的属性名称和有效的LCID值。 另外,引用[1]中的示例展示了如何通过连接字符串设置Mode属性,使用类似“Mode=ShareDenyRead|ShareDenyWrite”的方式。这提示LCID的设置可能也是类似的格式,即“关键字=值”。例如,“Locale Identifier=1033”表示英语(美国)。 但需要验证这个关键字是否正确。根据已有的知识,OLE DB的Locale Identifier属性可能对应的关键字是“Locale”或者“Locale Identifier”。比如,SQL Server的连接字符串中有时使用“Locale Identifier”,而其他提供程序可能不同。 另外,LCID的值是十进制的还是十六进制的?通常LCID在Windows中是十六进制,但在连接字符串中可能需要十进制。例如,英语(美国)的LCID是0x0409,十进制是1033,所以应该使用1033。 最后,需要给出一个示例连接字符串,并说明如何查找有效的LCID值,例如微软的官方文档或者LCID列表。同时,提醒用户不同数据提供程序可能有差异,建议查阅具体提供程序的文档。 总结步骤:确定关键字,正确格式,LCID值的十进制表示,示例,以及注意项。</think>在OLEDB中配置Locale Identifier(LCID)需通过连接字符串指定区域属性,以下是具体步骤: ### 1. **确定LCID属性名称** - OLEDB使用`Locale Identifier`或缩写`LCID`作为关键字。例如: ```plaintext Provider=SQLOLEDB;Data Source=server;Locale Identifier=1033; ``` 或 ```plaintext Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\db.accdb;LCID=2052; ``` - 具体名称需参考不同数据提供程序的文档[^3]。 ### 2. **设置有效的LCID值** - LCID为十进制数值,例如: - 英语(美国):`1033` - 简体中文:`2052` - 日语:`1041` - 完整LCID列表可参考微软官方文档[^2]。 ### 3. **语法示例** ```plaintext Provider=SQLNCLI11;Server=.\SQLEXPRESS;Database=Test;Locale Identifier=2052; ``` 此配置将强制使用简体中文的排序规则和日期格式。 ### 4. **验证与注意项** - **语言敏感操作**:设置后影响字符串比较、排序规则及错误消息语言[^2]。 - **兼容性**:不同提供程序(如SQLOLEDB vs. Microsoft.ACE.OLEDB)可能对LCID支持存在差异。 - **错误排查**:若区域设置未生效,检查LCID是否被数据源默认配置覆盖。 ### 示例完整连接字符串 ```plaintext Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\data.mdb;Jet OLEDB:Database Password=123;Locale Identifier=1033; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值