使用 bak 文件恢复数据库 - 诉诸旧日期?

1 sql-server

昨晚,我在 SQL Server 管理中对数据库进行了完整备份,当我恢复数据库而不是完整时,它丢失了过去几个月的所有数据。

完整备份是昨晚进行的,发布时间为 - 07/05/2014 16:54 但是表中的信息已恢复至 24/02/2014

任何帮助将不胜感激 -

小智 5

您的备份文件是否包含多个备份(称为备份集),并且您是否仅从备份文件中恢复最早的备份集?

要查看文件中的备份集,请运行以下命令并记下Position表示备份集的列:

RESTORE HEADERONLY FROM DISK='mybackup.bak'
Run Code Online (Sandbox Code Playgroud)

要从备份恢复特定备份集

RESTORE DATABASE ... WITH FILE = <position from previous statement>
Run Code Online (Sandbox Code Playgroud)

为什么会出现这种情况?

如果您每次在备份脚本中使用相同的文件名(例如BACKUP DATABASE MyDb TO DISK='backup.bak'),并且在备份之间未删除或更改该文件,则您的备份将添加到该文件的备份集中。如果随后RESTORE DATABASE ...不带WITH FILE=<position>子句运行,您将始终恢复备份介质中的第一个备份集 - 通常是最早的备份集。

细节:

RESTORE HEADERONLY命令对于备份文件很有用(如果您在与创建它的服务器不同的服务器上查看它)。您还可以通过运行以下命令在创建它们的服务器上查看备份:

SELECT backup_set_id, media_set_id, position, backup_finish_date 
FROM msdb.dbo.backupset
Run Code Online (Sandbox Code Playgroud)

如果您想检查刚刚从多文件介质恢复的备份集,则可以运行:

SELECT * FROM msdb.dbo.restorehistory
Run Code Online (Sandbox Code Playgroud)

请注意,backup_set_id它对应于 msdbbackupset表,并依次对应于媒体文件和该文件中的位置。

参考:

来自MSDN:RESTORE 参数 (Transact-SQL)

备份集选项

文件={备份集文件号| @backup_set_file_number }

...

未指定时,默认为 1。