Я сделал резервную копию с SQL Server 9.0.4053, скопировал bak-файл на другой компьютер с SQL Server 10.0.2531 и попытался восстановить, используя
RESTORE DATABASE [MyDatabase] FROM DISK = N'C:\Temp\MyDatabase.bak' WITH FILE = 1, NORECOVERY, REPLACE, STATS = 10
Это завершается довольно быстро (база данных довольно мала), сокращенный вывод выглядит примерно так:
11 Prozent verarbeitet.
[...]
100 Prozent verarbeitet.
208 Seiten wurden für die 'MyDatabase'-Datenbank, Datei 'MyDatabase' für Datei 1, verarbeitet.
4 Seiten wurden für die 'MyDatabase'-Datenbank, Datei 'MyDatabase_log' für Datei 1, verarbeitet.
RESTORE DATABASE hat erfolgreich 212 Seiten in 1.014 Sekunden verarbeitet (1.631 MB/s).
После этого база данных отображается в SQL Server Management Studio как «восстанавливаемая». И это продолжается часами, без какого-либо прогресса.
Журнал событий содержит три информационных сообщения (примерно переведены здесь):
1) "MyDatabase" запускается.
2) «MyDatabase» помечена как ВОССТАНОВЛЕНИЕ и имеет статус, при котором выполнение восстановления невозможно.
3) «Моя база данных» успешно восстановлена.
Что здесь происходит? Судя по всем сообщениям, база данных была восстановлена, но я не могу получить к ней доступ, она по-прежнему помечена как «Восстановление».
Вы использовали флаг «NORECOVERY», который указывает серверу SQL, что вы хотите восстановить дополнительные резервные копии T-log. Вместо этого вы должны были использовать флаг «ВОССТАНОВЛЕНИЕ» (или ничего, поскольку он установлен по умолчанию).
Для восстановления либо восстановите недостающие T-журналы, либо, если вы больше не хотите восстанавливать журналы, выполните следующую инструкцию:
RESTORE DATABASE [MyDatabase] WITH RECOVERY
Это должно привести БД в оперативный режим.
Прочтите встроенную справку по команде восстановления. Он действительно содержит информацию, которую нельзя игнорировать.