簡體   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