T- SQL Восстановление базы данных дает другой результат использования SSMS - PullRequest
0 голосов
/ 13 апреля 2020

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

RESTORE DATABASE database_name
FROM DISK = 'D:\Backup\database_name.bak'
WITH 
   MOVE 'dandenong' TO 'C:\Users\alans\Desktop\Database Files\database_name.mdf', 
   MOVE 'dandenong_log' TO 'C:\Users\alans\Desktop\Database Files\database_name.ldf',
GO

Это работает, однако восстанавливает его до 4 апреля, который был вторым последним резервное копирование у него было.

Однако, когда я SSMS и восстановление базы данных, он восстанавливает его в самое позднее время резервного копирования, что я хочу.

Как я могу получить T- SQL Скажите, чтобы сделать то же самое?

Ответы [ 2 ]

1 голос
/ 13 апреля 2020

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

SELECT  physical_device_name 
FROM msdb.dbo.backupmediafamily 
INNER JOIN msdb.dbo.backupset ON msdb.dbo.backupmediafamily.media_set_id = msdb.dbo.backupset.media_set_id 
WHERE (CONVERT(datetime, msdb.dbo.backupset.backup_start_date, 102) >= GETDATE() - 7) 
AND msdb.dbo.backupset.database_name ='database_name'
ORDER BY 
msdb.dbo.backupset.backup_finish_date DESC
0 голосов
/ 13 апреля 2020

Не забывайте, что РЕЗЕРВНЫЕ ФАЙЛЫ - это виртуальные диски , и на диск можно поместить более одного РЕЗЕРВНОГО КОПИРОВАНИЯ. По умолчанию BACKUP в файл, если он существует, добавляет новую резервную копию в файл. Я думаю, что вы можете увидеть матер в выполнении следующей команды:

RESTORE HEADERONLY FROM DISK = 'D:\Backup\database_name.bak'

Итак, когда вы восстанавливаете с помощью этой команды:

RESTORE DATABASE database_name
FROM DISK = 'D:\Backup\database_name.bak'
WITH 
   MOVE 'dandenong' TO 'C:\Users\alans\Desktop\Database Files\database_name.mdf', 
   MOVE 'dandenong_log' TO 'C:\Users\alans\Desktop\Database Files\database_name.ldf'
GO

Вы просто восстанавливаете первую старую резервную копию, которая эквивалентно этой команде:

RESTORE DATABASE database_name
FROM DISK = 'D:\Backup\database_name.bak'
WITH 
   MOVE 'dandenong' TO 'C:\Users\alans\Desktop\Database Files\database_name.mdf', 
   MOVE 'dandenong_log' TO 'C:\Users\alans\Desktop\Database Files\database_name.ldf'
WITH FILE = 1
GO

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

RESTORE DATABASE database_name
FROM DISK = 'D:\Backup\database_name.bak'
WITH 
   MOVE 'dandenong' TO 'C:\Users\alans\Desktop\Database Files\database_name.mdf', 
   MOVE 'dandenong_log' TO 'C:\Users\alans\Desktop\Database Files\database_name.ldf'
WITH FILE = 2
GO

Вы можете взглянуть на скрипт что ассистент SSMS сгенерирует перед выполнением, что я рекомендую всегда!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...