В SQL Server 2008 у меня есть родительская таблица в одной базе данных, а дочерняя таблица - в другой базе данных, причем отношения FK поддерживаются триггерами. Я не могу изменить его, не могу переместить обе таблицы в одну БД и иметь регулярное ограничение FK. Когда я восстановил обе базы данных из полных резервных копий, у меня были сироты в моей дочерней таблице, потому что полные резервные копии не были приняты одновременно. У меня также есть журналы транзакций. В случае аварийного восстановления можно ли восстановить обе базы данных точно в тот же момент, чтобы две базы данных были согласованы?Восстановление двух баз данных в одно и то же время
ответ
Восстановление в тот же момент времени возможно, если базы данных находятся в режиме полного восстановления и выполняются регулярные резервные копии журнала. See How to: Restore to a Point in Time (Transact-SQL).
Однако время восстановления не гарантирует согласованность транзакций между двумя транзакциями самостоятельно, вам также необходимо использовать транзакции для всех операций, логически связанных с границей базы данных. Триггеры, вероятно, обеспечили это для удаления и обновления, поскольку они выполняются в контексте родительской операции, что неявно завершает операцию пересечения границ в транзакции, но для вставок ваше приложение обычно должно обернуть вставку в родительский элемент и вставить в дочерний объект в одна транзакция.
Последовательность операций по восстановлению является самым большим препятствием при использовании приложения между различными базами данных.
Я не вижу полного решения вашей проблемы, но вы можете использовать полные резервные копии с резервными копиями журнала транзакций. во-первых, вы восстанавливаете полные резервные копии на основе оснований с опцией NORECOVERY, а затем восстанавливаете резервные копии журналов транзакций с STOPAT = 'xxxxxxxx' на обеих базах. Таким образом, вы можете восстановить обе базы данных в тот же момент времени.
Лучший способ сделать это - исправить его в том месте, где вы делаете резервное копирование. Большинство приложений с несколькими базами данных делают это:
Перед резервным копированием выполните команду для записи отмеченной транзакции в журнале транзакций каждой используемой базы данных. (НАЧАТЬ СДЕЛКУ С МАРКАМИ) Затем выполните резервное копирование.
Таким образом, вы можете позже выполнить ВОССТАНОВЛЕНИЕ С STOPAT MARK, чтобы довести их до одного и того же момента времени. Это не идеально, но много ближе, чем другие методы.
Greg, Как узнать, когда отмечать? Мне нужно восстановить после катастрофы с минимальной потерей данных. Должен ли я отмечать часто, как каждые 5 секунд? –
Приложения с несколькими базами данных могут сделать это непосредственно перед началом резервного копирования. У вас есть работа, которая делает это для каждой базы данных. Затем запустите резервные копии. –
- 1. Использование двух баз данных в то же время в кодировании
- 2. C++ Выполнение двух «процессов» в одно и то же время
- 3. Выполнение двух функций в одно и то же время
- 4. Обновление двух контрольных баров за одно и то же время
- 5. PHP, генерирующий одно и то же случайное число в одно и то же время (в секундах)
- 6. Отладка двух проектов в двух экземплярах Visual Studio в одно и то же время
- 7. TimePicker, показывающий одно и то же время в каждом TextView
- 8. Методы работы в одно и то же время
- 9. Сортировка нескольких NSArray в одно и то же время - iOS
- 10. Как масштабировать и перемещать в одно и то же время?
- 11. Использование содержит и совпадает в одно и то же время?
- 12. Прыжки и перемещение в одно и то же время ... Помогите!
- 13. jQuery и JavaScript в одно и то же время?
- 14. Анимация и переход в одно и то же время?
- 15. Запустить рамку и петлю в одно и то же время?
- 16. MYSQL + Выбрать и удалить в одно и то же время
- 17. Отображение и выбор в одно и то же время
- 18. VIM: Сохранение и запуск в одно и то же время?
- 19. Клавиша нажата и в одно и то же время
- 20. LayoutTransition исчезает и меняется в одно и то же время
- 21. Использование aio_write и запись в одно и то же время
- 22. Разделите и получите остаток в одно и то же время?
- 23. Установка WinUSB и libusb в одно и то же время
- 24. Перемещение двух спрайтов с тем же именем в одно и то же время
- 25. jQuery fadeOut & fadeВ двух изображениях точно в одно и то же время с той же скоростью
- 26. Найти, сколько слов одно и то же в двух строках
- 27. Печатать одно и то же имя в двух классах
- 28. Одно и то же сообщение GCM в двух приложениях
- 29. Deserialize двух значений в одно и то же свойство
- 30. Создайте одно и то же полуслучайное число на двух машинах
Remus, Даже если я вернусь к точному времени с точностью 3 мс, можно сделать много данных за один миллисекунду. Я думаю, что все еще могут быть сироты. –
@SQL это тоже моя точка зрения: вы не можете надежно восстановить, если база данных разделена. Межсетевые транзакции помогают уменьшить его, но не могут обеспечить его соблюдение. –
Remus, спасибо за решение! –