восстановить базу данных из проблемы журнала транзакций - PullRequest
0 голосов
/ 11 марта 2011

Я следую инструкциям здесь , чтобы сохранить состояние базы данных и восстановить его из любого ранее сохраненного состояния. Однако я не могу получить ВОССТАНОВЛЕНИЕ, приведенное в примере, где он работает. Я всегда получаю сообщение

Этот файл журнала содержит записи в журнале до обозначенного знака. база данных остается в Восстановление состояния, чтобы вы могли подать заявку другой файл журнала.

Я думаю, что проблема в версии FILE, но из того, что я вижу в примере, это должно быть N в БД и N-1 в Журнале, и именно так я всегда его устанавливаю. Любая помощь будет оценена.

Ответы [ 2 ]

1 голос
/ 22 мая 2011

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

RESTORE DATABASE Blah FROM DISK = 'blah 201105210000.bak' WITH NORECOVERY;
RESTORE LOG Blah_Log FROM DISK = 'blah 201105210100.trn' WITH NORECOVERY;
RESTORE LOG Blah_Log FROM DISK = 'blah 201105210200.trn' WITH NORECOVERY;
RESTORE LOG Blah_Log FROM DISK = 'blah 201105210300.trn' WITH NORECOVERY;
RESTORE LOG Blah_Log FROM DISK = 'blah 201105210400.trn' WITH NORECOVERY;
RESTORE LOG Blah_Log FROM DISK = 'blah 201105210500.trn' WITH STOPAT 'x', RECOVERY;

Мой синтаксис может быть не идеальным, но концепция надежна, вам нужно восстановить все журналы транзакций по порядку. Если вы выберете t-log слишком рано, вы получите сообщение об этом, или если вы выберете слишком поздно, вы получите другое сообщение. Отправленное вами сообщение указывает мне на то, что t-log, который вы пытаетесь применить, имеет записи журнала полностью до идентификатора транзакции последнего примененного восстановления. Найдите больше т-журналов после этого.

Если t-журналы не должны отсутствовать, но есть, посмотрите в заданиях SQL или планах обслуживания, чтобы увидеть, есть ли у вас две резервные копии t-log, работающие по разным графикам. Если это происходило, вы должны собрать все t-журналы из обеих резервных копий, поскольку только все вместе они могут быть правильной и непрерывной цепочкой, которая позволит вам восстановить до нужного момента времени.

0 голосов
/ 24 апреля 2012

Если указан аргумент STOPAT, SQL Server (по крайней мере, 2008 Express) принимает параметр NORECOVERY, даже если указан параметр RECOVERY. Я предполагаю, что именно поэтому он генерирует сообщение (не фактическая ошибка, правильно?). Для завершения операции к процессу может быть добавлен дополнительный шаг.

...
RESTORE LOG      Blah_Log FROM DISK = 'blah 201105210500.trn' WITH STOPAT 'x' WITH NORECOVERY;
RESTORE DATABASE Blah_Log WITH RECOVERY;
...