链接服务器的 OLE DB 访问接口 "SQLNCLI" 无法启动分布式事务 OLE DB 提供程序 'SQLOLEDB' 无法启动分布式事务

当在SQL Server执行分布式事务时,可能会遇到OLE DB访问接口返回“没有活动事务”或“无法启动分布式事务”的错误。本文详细介绍了问题现象及解决方案,包括启动MSDTC服务、开启135端口、避免环回操作、设置XACT_ABORT ON、调整MSDTC安全配置以及处理链接服务器和名称解析问题。

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

一、 问题现象
在执行分布式事务时,在sql server 2005下收到如下错误:

链接服务器"xxxxxxx"的 OLE DB 访问接口 "SQLNCLI" 返回了消息 "没有活动事务。"。

消息 7391,级别 16,状态 2,过程 xxxxx,第 16 行

无法执行该操作,因为链接服务器 "xxxxx" 的 OLE DB 访问接口 "SQLNCLI" 无法启动分布式事务。

在sql server 2000下收到如下错误:

该操作未能执行,因为 OLE DB 提供程序 'SQLOLEDB' 无法启动分布式事务。

[OLE/DB provider returned message: 新事务不能登记到指定的事务处理器中。 ]

OLE DB 错误跟踪[OLE/DB Provider 'SQLOLEDB' ITransactionJoin::JoinTransaction returned 0x8004d00a]。

二、 解决方案
1. 双方启动MSDTC服务
MSDTC服务提供分布式事务服务,如果要在数据库中使用分布式事务,必须在参与的双方服务器启动MSDTC(Distributed Transaction Coordinator)服务。

2. 打开双方135端口
MSDTC服务依赖于RPC(Remote Procedure Call (RPC))服务,RPC使用135端口,保证RPC服务启动,如果服务器有防火墙,保证135端口不被防火墙挡住。

<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、付费专栏及课程。

余额充值