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

6

规格:

  • Sql Server 2008
  • Server 2008 R2 64位
  • MS Access数据库

能正常工作的:

  • 我通过安装Office访问数据组件并创建系统DSN等方式,配置了到Access数据库的链接服务器连接。该数据库保存在同一台服务器上的一个目录中。
  • 我成功地通过openquery查询了数据。

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

  • 我可以通过openquery(从Sql管理工具中)进行插入/更新/删除操作。

不能正常工作的:

我创建了一个数据库,其中包含一个视图,该视图包装了openquery表达式。这使我的应用程序不需要意识到它正在通过链接服务器连接进行查询,并允许我使用ORM。举个例子:Entity Framework。

然而,虽然检索数据可行,但更新/插入/删除却不行。 我花费了相当长的时间来确保MSDTC正确配置,但没有效果。

我尝试过的:

MSDTC

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

其他

  • 配置链接服务器安全性:创建SQL用户和本地管理员帐户之间的映射,以便使用该SQL用户登录时,它使用本地管理员帐户连接到Access数据库。
  • 启用RPC分布式事务升级:False

我得到的错误:

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不支持这种类型的事务。 - Fionnuala
就像我在帖子末尾所说的那样,我不确定Access是否支持分布式事务,因为我无法找到明确的答案。如果你说它不支持,我很想看看你的来源。如果你能在回复中回答而不是评论中回答,我将非常乐意将其标记为答案。 - Danthar
1个回答

1
Access没有事务,因为Access不是数据库引擎。Jet/ACE(Access的默认 db 引擎)自我使用以来就支持提交/回滚(从 Jet 2.x,例如 1996 年开始)。它从未支持过事务日志记录,可能永远也不会(我认识到这不是您所问的问题,但许多从服务器数据库背景转来的人对“事务”一词的含义有点模糊,并且难以理解 Jet/ACE 支持一个而不支持另一个)。-David-W-Fenton Jan 16 '10 at 23:12
-- 我们在 MS-Access 中有事务吗? David W Fenton,MVP,RIP

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接