Восстановите базу данных 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
Это заменит существующую базу данных на более новую.