Я пытаюсь локализовать проблему У меня есть
с двумя 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? Есть ли
ссылки, которые объясняли бы поведение, которое я вижу?
Спасибо за этот ответ. Не могли бы вы указать мне некоторые ссылки? –
Используйте эту ссылку в качестве точки входа: http://technet.microsoft.com/en-us/library/ms191440(v=sql.105).aspx –
Это не обрабатывается MSDTC (я знаю, потому что мой MSDTC отключен, и он работает). Он обрабатывается внутри SQL Server. Я также не думаю, что он обладает свойствами РАСПРОСТРАНЕННОЙ ОПЕРАЦИИ. – usr