繁体   English   中英

SQL Server-两个数据库上的非分布式事务

[英]SQL Server - Non-distributed transaction over two DBs


我正在尝试定位我遇到的问题
2个DB及其事务行为。

我在一个SQL Server 2008 R2实例上创建两个数据库。

TEST1
测试2

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中未取消保留的功能? 有没有
哪些引用可以解释我所看到的行为?

当查询跨越2个数据库时,您的事务将升级为MSDTC处理的分布式事务。 这是正常的方式,并且无需显式使用BEGIN DISTRIBUTED TRANSACTION语句即可实现。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM