Восстановление двух баз данных в одно и то же время - PullRequest
3 голосов
/ 16 ноября 2009

В SQL Server 2008 у меня есть родительская таблица в одной базе данных, а дочерняя таблица - в другой базе данных, причем отношения FK поддерживаются триггерами. Я не могу изменить его, не могу переместить обе таблицы в одну БД и иметь регулярное ограничение FK. Когда я восстановил обе базы данных из полных резервных копий, у меня в дочерней таблице были сироты, потому что полные резервные копии не создавались одновременно. У меня также есть журналы транзакций. В случае аварийного восстановления, могу ли я восстановить обе базы данных в одно и то же время, чтобы обе базы данных были согласованы?

Ответы [ 3 ]

3 голосов
/ 16 ноября 2009

Восстановление в одно и то же время возможно, если базы данных находятся в режиме полного восстановления и выполняются регулярные резервные копии журналов. См. Как: восстановить на определенный момент времени (Transact-SQL) .

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

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

0 голосов
/ 16 ноября 2009

Лучший способ сделать это - исправить это в момент создания резервной копии. Большинство приложений с несколькими базами данных делают это:

Перед резервным копированием выполните команду, чтобы записать отмеченную транзакцию в журнал транзакций каждой задействованной базы данных. (НАЧНИТЕ СДЕЛКУ С МАРКОЙ) Затем выполните резервное копирование.

Таким образом, вы можете позже сделать RESTORE WITH STOPAT MARK, чтобы получить их все в один и тот же момент времени. Это не идеально, но намного ближе, чем другие методы.

0 голосов
/ 16 ноября 2009

Я не вижу полного решения вашей проблемы, но вы можете использовать полные резервные копии с резервными копиями журнала транзакций. во-первых, вы восстанавливаете полные резервные копии на базе poth с параметром NORECOVERY, а затем восстанавливаете резервные копии журнала транзакций с помощью STOPAT = 'xxxxxxxx' на обеих базах. Таким образом, вы можете восстановить обе базы данных в один и тот же момент времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...