Восстановите базу данных SQL из файла BAK, используя запрос SQL

У меня есть резервная копия базы данных на жесткий диск в формате файла BAK. Я пытаюсь восстановить эту резервную копию, но не могу этого сделать.

Вот мой запрос:

ALTER DATABASE DBASE
SET SINGLE_USER WITH
ROLLBACK IMMEDIATE

RESTORE DATABASE DBASE
FROM DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.DBASE\MSSQL\Restore\DBASE.BAK'
WITH
MOVE 'DBASE' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.DBASE\MSSQL\DATA\DBASE.MDF',
MOVE 'DBASE' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.DBASE\MSSQL\DATA\DBASE_1.LDF',
MOVE 'DBASE' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.DBASE\MSSQL\DATA\DBASE_2.LDF'

ALTER DATABASE DBASE SET MULTI_USER
GO

Когда я запускаю запрос, я получаю следующую ошибку:

Выполнено от имени пользователя: NT AUTHORITY\SYSTEM. RESTORE не может обработать базу данных DBASE, поскольку она используется этим сеансом. Рекомендуется использовать главную базу данных при выполнении этой операции. [SQLSTATE 42000] (Ошибка 3102) RESTORE DATABASE завершается ненормально. [SQLSTATE 42000] (ошибка 3013). Шаг не удался.

Я не хочу восстанавливать основную базу данных. Может кто-нибудь сказать мне, как я могу восстановить свою базу данных с помощью файла BAK, используя SQL-запрос?

3 ответа

Это не просит вас восстановить мастера. Он просит вас не быть в DBASE, пока вы пытаетесь восстановить DBASE.

Пытаться:

USE MASTER
GO

ALTER DATABASE DBASE
SET SINGLE_USER WITH
ROLLBACK IMMEDIATE    
GO

RESTORE DATABASE DBASE
FROM DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.DBASE\MSSQL\Restore\DBASE.BAK'
WITH
MOVE 'DBASE' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.DBASE\MSSQL\DATA\DBASE.MDF',
MOVE 'DBASE_LOG' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.DBASE\MSSQL\DATA\DBASE_1.LDF', REPLACE    
GO

ALTER DATABASE DBASE SET MULTI_USER
GO

Я бы начал с проверки файла резервной копии, используя следующие утверждения:

restore headeronly from disk = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.DBASE\MSSQL\Restore\DBASE.BAK'

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

restore verifyonly from disk = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.DBASE\MSSQL\Restore\DBASE.BAK'

... Проверяет резервную копию, но не восстанавливает ее и проверяет, завершен ли набор резервных копий и доступна ли для чтения вся резервная копия. Однако RESTORE VERIFYONLY не пытается проверить структуру данных, содержащихся в томах резервных копий. В Microsoft SQL Server функция RESTORE VERIFYONLY была усовершенствована, чтобы выполнять дополнительную проверку данных для увеличения вероятности обнаружения ошибок. Цель состоит в том, чтобы максимально приблизиться к реальной операции восстановления.

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

USE MASTER
GO
ALTER DATABASE DBASE SET OFFLINE WITH ROLLBACK IMMEDIATE;
go
ALTER DATABASE DBASE SET ONLINE
go
ALTER DATABASE DBASE SET RESTRICTED_USER   
GO

(убедитесь, что в вашей SQL Server Management Studio нет базы данных DBASE, выбранной в выпадающем меню в окне запросов.)

После чего вы можете начать восстановление базы данных с помощью.

USE MASTER
GO
RESTORE DATABASE DBASE 
FROM DISK = 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.DBASE\MSSQL\Restore\DBASE.BAK'
WITH 
MOVE 'DBASE' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.DBASE\MSSQL\DATA\DBASE.MDF',
MOVE 'DBASE_LOG' TO 'C:\Program Files\Microsoft SQL Server\MSSQL10_50.DBASE\MSSQL\DATA\DBASE_1.LDF', 
REPLACE, 
RECOVERY,
STATS = 10
GO

Если вы не восстанавливаете резервную копию в новом месте, вы можете пропустить команды MOVE, так как они требуются только при восстановлении в новом месте.

Это должно вернуть вашу базу данных в оперативный режим.

Кстати, наличие нескольких файлов журнала транзакций мало что даст, если у вас не останется свободного места на диске во время инцидента. Файлы журнала транзакций записываются последовательно, а не параллельно. Единственная причина временно иметь несколько файлов журнала транзакций:

Альтернативы для ответа на полный журнал транзакций включают в себя

  • Добавление файла журнала на другой диск.

... как можно найти здесь: Устранение неполадок полного журнала транзакций (ошибка SQL Server 9002)

Удачи в восстановлении.

Вы можете восстановить резервную копию базы данных, выполнив следующую команду:

RESTORE DATABASE AdventureWorks FROM DISK = 'C:\AdventureWorks.BAK'
WITH REPLACE
GO

Это заменит существующую базу данных на более новую.

Другие вопросы по тегам