У меня есть резервная копия моей базы данных на жесткий диск в формате файла 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-запроса?
Он не просит вас восстановить мастера. Он просит вас не находиться в 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
Это заменит существующую базу данных на более новую.