2013-12-11 65 views
0


我想本地化我有
與2個數據庫及其事務行爲的問題。
SQL Server - 通過兩個數據庫的非分佈式事務

我在單個SQL Server 2008 R2實例上創建兩個DB。

TEST1
TEST2

TEST1具有一個表TABLE_1
TEST2具有一個表TABLE_2

兩個表都有一個ID(int)和的值(字符串)列。
兩者都只有一行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 staments掛起。

所以我的問題是:是從
窗口1交易,跨越兩個數據庫?似乎是因爲

select * From test2.dbo.Table_2 

掛過,這意味着,我認爲test2.dbo.Table_2
被徵了,我在窗口1

開始
同一交易但爲什麼是這樣的交易中擔當像分佈式的?
這是正常的嗎?什麼是解釋? SQL Server中有一些
未分割的功能嗎?有沒有任何
參考可以解釋我看到的行爲?

回答

1

當查詢跨越2個數據庫時,則您的事務被提升爲由MSDTC處理的分佈式事務。這是正常的方式,它不會明確使用BEGIN DISTRIBUTED TRANSACTION語句。

+0

感謝您的回覆。你能指點我一些參考嗎? –

+0

使用此鏈接作爲入口點:http://technet.microsoft.com/en-us/library/ms191440(v=sql.105)。aspx –

+0

它不處理MSDTC(我知道,因爲我的MSDTC被禁用,它的工作原理)。它在SQL Server內部處理。我也不認爲它具有DISTRIBUTED TRANSACTION的屬性。 – usr

相關問題