2013-02-08 35 views
0

我有一种情况,当我更新用户时,我也必须跟踪对用户所做的所有更改 - 类似用户表的活动日志。此活动日志位于同一数据库服务器上的不同数据库中。但是当我在事务范围中包装这2个数据库调用时,出现错误。可以在同一个Microsoft SQL服务器上的2个数据库上使用TransactionScope吗?

所以我想知道是否有方法绕过/解决这个问题?

+2

什么错误?什么版本的SQL Server? – Joe 2013-02-08 13:51:39

+0

您是否配置并运行了DTC? http://technet.microsoft.com/en-us/library/dd337629(v=ws.10).aspx – Pete 2013-02-08 13:53:41

+0

我得到的错误是:“合作伙伴事务管理器已禁用其对远程/网络事务的支持。”这对我来说并不多,但是当我在同一个数据库上使用多个查询时使用TransactionScope时,它的工作正常,所以我的结论是,这是由于范围跨越了2个数据库。我可能错了。我们正在使用2008 SQL Server。我不知道DTC我必须检查我们的系统管理员... – Marko 2013-02-08 14:12:52

回答

2

小心分享错误说的是什么?无论如何,从我的头顶开始,这个用例应该由TransactionScope支持。至于我记得,虽然该交易将被提升到一个分布式事务,并且需要Distrbuted事务协调 服务(MSDTC)安装和您的计算机上运行

编辑:看到它似乎是2个数据库的错误消息坐在不同的机器上,因此分布式事务需要在网络上完成/同步。这意味着MSDTC已安装,但未针对此用例进行正确配置。在文档中查找并与您的系统管理员聊天。

+0

嗯...阅读这些文章: http://stackoverflow.com/questions/761031/how-do-you-get -around-multiple-database-connections-within-a-cscope-if http://nullablecode.com/2011/02/how-to-avoid-unnecessary-msdtc-escalations/ 看来我不'当我有一个具有多个数据库的SQL服务器时,需要MSDTC。看起来我需要找到一种方法来在所有数据库调用中保持相同的连接。就像现在我的项目中,我为每个数据库调用创建一个单独的连接。 – Marko 2013-02-08 15:50:19

-3

我不认为这是可能的,因为交易只与一个连接关联。你需要实现这种行为的是有一个并行过程(即并发线程),每隔n秒钟读取一次日志数据库。

+3

-1在大多数成熟的数据库中,分布式事务确实是可能的。这是完全错误的 – 2013-02-08 14:13:13

1

如果您使用的是SQL Server 2008中你可以用连接在不MSDTC事务范围相同 SQL服务器,只要你使用相同的连接字符串为每个连接。要使用相同的连接字符串,您需要在您的查询中明确指定数据库名称(对于至少一个数据库),例如,

SELECT ... FROM db1..Table1 ... 

SELECT ... FROM db2..Table2 ... 
相关问题