Назад | Перейти на главную страницу

Восстановление базы данных 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-запроса?

Он не просит вас восстановить мастера. Он просит вас не находиться в 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

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