Script для восстановления базы данных SQL Server из файла bak, не работает

У меня есть пустая база данных:

DB_Clients

И я хочу восстановить базу данных из файла .bak:

OldDBClients.bak

Это путь:

C:\OldDBClients.bak

И это мой script:

USE [master]
GO
    RESTORE DATABASE DB_Clients
    FROM DISK = 'C:\OldDBClients.bak'

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

Msg 3154, уровень 16, состояние 4, строка 15
Набор резервных копий содержит резервную копию базы данных, отличной от существующей базы данных "DB_Clients".
Msg 3013, уровень 16, состояние 1, строка 15
RESTORE DATABASE заканчивается аномально.

Может кто-нибудь сказать мне, почему это происходит? Я должен указать, что файл имеет права на чтение и запись.

Thank х.

Ответ 1

Вам нужно использовать опцию WITH REPLACE, чтобы перезаписать существующую базу данных.

RESTORE DATABASE DB_Clients
FROM DISK = 'C:\OldDBClients.bak'
WITH REPLACE

Вероятно, вам также нужно указать параметры WITH MOVE; в этом случае:

  • используйте RESTORE FILELISTONLY FROM DISK = 'C:\OldDBClients.bak' чтобы узнать логическое имя вашего MDF/LDF
  • используйте параметры WITH MOVE в вашем ВОССТАНОВЛЕНИИ

Например:

RESTORE DATABASE DB_Clients
FROM DISK = 'C:\OldDBClients.bak'
WITH REPLACE,
MOVE 'YourMDFLogicalName' TO '<MDF file path>',
MOVE 'YourLDFLogicalName' TO '<LDF file path>'

Обратите внимание, что вы также можете DROP ваши пустые DB_Clients базы данных и использовать простой RESTORE.

Ответ 2

Этот синтаксис должен выглядеть следующим образом:

USE [master]
GO
RESTORE DATABASE DB_Clients FROM DISK = 'C:\OldDBClients.bak' WITH 
MOVE 'DB_Clients' TO 'D:\SQLServer\Data\DB_Clients.mdf',
MOVE 'DB_Clients_log' TO 'D:\SQLServer\Log\DB_Clients.ldf', REPLACE

Он инструктирует SQL Server перезаписать существующую копию и указывает допустимое местоположение для ваших файлов данных и журналов

Ответ 3

Шаг 1: Проверьте логические имена файлов с помощью следующей команды:

RESTORE FILELISTONLY 
FROM DISK = 'E:\DBBackups\mydb.bak'

Шаг 2. Используйте логические имена, которые вы получаете из приведенного выше запроса, в следующем запросе:

 RESTORE DATABASE [mydb_new]
  FILE = N'<MDFLogicalName>'
  FROM DISK = N'E:\DBBackups\mydb.bak'
  WITH 
    FILE = 1, NOUNLOAD, STATS = 10,
    MOVE N'<MDFLogicalname>'
    TO N'E:\DBBackups\mydb_new.mdf',
    MOVE N'<LDFLogicalName>'
    TO N'E:\DBBackups\mydb_new_0.ldf'

После выполнения вышеуказанных команд с правильными значениями вы увидите вывод, подобный следующему:

10 percent processed.
20 percent processed.
30 percent processed.
40 percent processed.
50 percent processed.
60 percent processed.
70 percent processed.
80 percent processed.
90 percent processed.
100 percent processed.
Processed 7672 pages for database 'mydb_new', file '<MDFLogicalname>' on file 1.
Processed 5 pages for database 'mydb_new', file '<LDFLogicalName>' on file 1.
RESTORE DATABASE ... FILE=<name> successfully processed 7677 pages in 0.780 seconds (76.893 MB/sec).

Completion time: 2019-10-20T11:35:31.8343787+05:30