2013-12-11 3 views
0


Я пытаюсь локализовать проблему У меня есть
с двумя DB и их транзакционным поведением.
SQL Server - Нераспределенная транзакция по двум БД

Я создаю две базы данных на одном экземпляре SQL Server 2008 R2.

test1 test2

test1 имеет одну таблицу Table_1
test2 имеет один стол Table_2

Обе таблицы имеют идентификатор (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 

эти ВЫБЕРИТЕ 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. Я также не думаю, что он обладает свойствами РАСПРОСТРАНЕННОЙ ОПЕРАЦИИ. – usr

Смежные вопросы