无法开始分布式事务:链接服务器 -> 访问数据库

Posted

技术标签:

【中文标题】无法开始分布式事务:链接服务器 -> 访问数据库【英文标题】:Unable to begin a distributed transaction: Linked Server -> Access database 【发布时间】:2012-07-20 08:21:30 【问题描述】:

规格:

Sql Server 2008 服务器 2008 R2 64 位 MS Access 数据库

什么有效:

我通过安装办公室访问数据组件和创建系统 DSN 等配置了与 Access 数据库的链接服务器连接。 它位于同一服务器上的目录中。

我已经通过openquery查询数据成功了。

SELECT * FROM OPENQUERY(LINKEDHELL, 'SELECT * FROM [D:\path\mordor.mdb].Orcs')

我可以通过 openquery 插入/更新/删除(从 Sql Management Studio 内部)

什么不起作用:

我创建了一个数据库,它公开了一个包含 openquery 表达式的视图。这使我的应用程序可以忽略它通过链接服务器连接进行查询的事实,并允许我使用 ORM。恰当的例子:实体框架。

但是,虽然检索数据有效,但更新/插入/删除不会。 我花了很多时间确保 MSDTC 配置正确,但没有骰子。

我尝试了什么

MSDTC

启用网络 DTC 访问 允许入站/出站 已配置的防火墙 启用 XA 事务 为 DTC 工作的帐户授予对 .mdb 的访问权限 进行这些设置后重新启动 Sql Server

其他

配置的链接服务器安全性:在 sql 用户和本地管理员帐户之间创建映射,以便当我使用该 sql 用户登录时,它使用本地管理员帐户连接到访问数据库。 为 RPC 启用分布式事务的提升:错误

我得到的错误:

OLE DB provider "MSDASQL" for linked server "LINKEDHELL" returned message "[Microsoft][ODBC Microsoft Access Driver]Invalid attribute/option identifier ".
Msg 7391, Level 16, State 2, Line 4
The operation could not be performed because OLE DB provider "MSDASQL" for linked server "LINKEDHELL" was unable to begin a distributed transaction.

我可以通过 Sql Management Studio 简单地重新创建它

begin distributed transaction

//anything that queries the linked server

commit transaction

那么我错过了什么? 我读过 ODBC 驱动程序支持分布式事务,但我不确定 ACCESS 数据库是否支持。因此,如果有人至少可以确认这一点。这会有所帮助。

【问题讨论】:

你希望得到什么?变通办法? MS Access 不支持这种事务。 就像我在帖子末尾所说的那样,我不确定 Access 是否支持分布式事务,因为我无法找到明确的答案。如果你说它不支持,我很想看看你的来源。如果您可以在回复而不是评论中回答这个问题,我很乐意将其标记为答案。 【参考方案1】:

Access 没有事务,因为 Access 不是数据库 引擎。 Jet/ACE(Access 的默认数据库引擎)已支持 只要我使用过它就提交/回滚(从 Jet 2.x 开始,例如 1996 年)。 它从不支持事务日志,而且可能永远不会(我 认识到这不是你要问的,但其中许多人即将到来 从服务器数据库背景到 Jet/ACE 在 “交易”一词的含义,很难理解 Jet/ACE 支持其中一个而不支持另一个)。 – 大卫-W-芬顿 2010 年 1 月 16 日 23:12

-- Do we have transactions in MS-Access?

David W Fenton, MVP, RIP

【讨论】:

以上是关于无法开始分布式事务:链接服务器 -> 访问数据库的主要内容,如果未能解决你的问题,请参考以下文章

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

无法执行操作,因为链接服务器的 OLE DB 提供程序“SQLNCLI11”无法开始分布式事务

链接服务器的 OLE DB 访问接口 "SQLNCLI" 无法启动分布式事务 外加SQL事务死锁问题

消息 7391:链接服务器无法开始分布式事务(两个 svrs 在本地运行)

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

在没有分布式事务的链接服务器上调用过程