我目前正在尝试使用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月4日,这是它拥有的第二个最后一次备份。
然而,当我SSMS和恢复数据库时,它将它恢复到最新的备份时间,这是我想要的。
如何让T-SQL语句执行同样的操作?
发布于 2020-04-13 14:07:39
你可以通过下面的脚本找到你的备份信息,然后你就可以恢复你想要的备份文件。
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发布于 2020-04-13 15:49:05
不要忘记,备份文件是虚拟磁盘,并且您可以在一个磁盘中放置多个备份。默认情况下,备份到文件(如果存在)会将新备份附加到文件中。我认为您可以在执行以下命令时看到问题所在:
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助手在执行之前抛出的脚本,我总是推荐这个脚本!
https://stackoverflow.com/questions/61181919
复制相似问题