2016-03-21 3 views
1

Меня недавно задали вопрос во время интервью. Вопрос:откат транзакций для нескольких баз данных

У меня есть две разные базы данных, и мне нужно обновить таблицы в обеих базах данных. We хотите согласованность данных. Я обновил таблицу в первой базе данных, а затем, когда обновил вторую базу данных, я получил ошибку. Итак, что я могу сделать в этой ситуации ?

Я думал взять все в сделке, и если бы у меня было исключение, я бы сказал, что могу откатиться. Но они сказали, что из-за наличия двух разных баз данных невозможно выполнить их в одной транзакции. Я не уверен, правильно ли я понимаю, но не нашел другого решения.

Теперь вот что я прошу.

1) Можно ли взять два запроса для двух разных баз данных в одной транзакции? Поскольку я читаю в некоторых сообщениях, это возможно, но я не мог быть уверен после того, что они сказали.

2) Если это невозможно для управления ими в транзакции, как я могу отменить изменения в первой базе данных.

+0

Это немного мусорный вопрос, на мой взгляд. Я бы, наверное, пошел по строкам ... Я бы не проводил ни одной сессии, пока все этапы не будут завершены из-за этого ограничения. По этой причине я бы просто откат db1, поскольку db2 не изменился бы из-за сбоя в инструкции обновления. –

+0

читайте о ссылках на базы данных, XA (распределенные транзакции). Это довольно широкая тема. – ibre5041

ответ

0

Я думаю, что вы можете сделать перекрестную операцию DB в процедуре и завернуть как UPDATE заявление в блок транзакции как

create procedure usp_update 
as 
begin 
begin trans 
update table1 set col1=value where col2=value; 
update db2..table1 set col1=value where col2=value; //cross DB update 
commit; 
if(error) 
rollback; 
end 
Смежные вопросы