[英]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.