我正在尝试本地化我遇到的问题
有2个DB及其交易行为。
我在一个SQL Server 2008 R2实例上创建了两个DB。
TEST1
TEST2
test1有一个表Table_1
test2有一个表Table_2
两个表都有一个ID(int)和一个value(string)列
两者都只有一行ID = 1
然后在SQL Server Management Studio中,
在某个窗口1我做了
use test1
begin transaction
update test1.dbo.Table_1
set
value = 'TEST-100'
where
ID = 1
update test2.dbo.Table_2
set
value = 'TEST-200'
where
ID = 1
commit transaction --- but I don’t run the commit yet ---
然后在另一个窗口2中,我做了
select * From test1.dbo.Table_1
with (nolock)
select * From test2.dbo.Table_2
with (nolock)
这样我可以看到两个未提交的值。
但如果在窗口2中,我确实
select * From test1.dbo.Table_1
或
select * From test2.dbo.Table_2
这些SELECT状态挂起。
所以我的问题是:是来自的交易 窗口1,跨越两个DB?似乎是因为
select * From test2.dbo.Table_2
也挂起,这对我来说意味着test2.dbo.Table_2
我参加了同一笔交易
在窗口1中
但为什么这笔交易就像一个分布式交易呢?
这是正常的吗?解释是什么?那是一些
SQL Server中的未归位功能?有没有
可以解释我所看到的行为的参考文献?
答案 0 :(得分:1)
当查询跨越2个数据库时,您的事务将提升为由MSDTC处理的分布式事务。这是正常的方式,它发生时没有明确使用BEGIN DISTRIBUTED TRANSACTION语句。