假设我有大量的SQL Server数据库备份(可能包括完整备份、差异备份和日志备份)。我想要编写一个程序,它可以生成一个SQL脚本,使数据库进入其最近的状态。现在,我很难找到这些备份文件的正确恢复顺序。我在MSDN中阅读了一些页面,并得到了一些基本规则。它们是:
现在我的问题是,如何确定哪一个是最新的完全备份和差异备份?如何确定在完整还原或差异还原之后应该开始还原哪个日志文件?我想这些信息可以从这些lsn中找到,但是我不确定算法。有人能帮我写一段伪码来描述算法吗?谢谢。
发布于 2012-02-06 09:04:23
通常,对文件的备份会附加时间戳(例如MyDatabase_FULL_201202060900.bak),因此您可以选择使用脚本生成给定文件目录的恢复序列。Google将给你提供几十个例子,SSC脚本库也是如此。目前我的图书馆里有这个剧本。
如果您已经备份的服务器可用,您可以从msdb表dbo.backupset和dbo.backupmediafamily、这里的例子生成恢复脚本。注SSMS将为您生成正确的脚本,您可以使用Profiler来捕获用于此操作的查询。
发布于 2012-02-06 08:59:17
就我个人而言,我喜欢我的备份被时间戳,比如文件名中的MyDB-yyyymmddhhnn-Full.bak或MyDB-yyyymmddhhnn-Log.bak。我从未实际从备份文件中读取LSN,也从未从系统表中读取LSN信息。
您可以对文件进行排序,并很容易地选择您需要的文件。
发布于 2012-02-06 16:04:19
如果备份文件名中没有时间戳,则可以使用单头恢复命令获取有关备份文件的信息。
RESTORE HEADERONLY
FROM DISK = N’e:\stemp\backup_file.bak’这将提供像ChekpointLSN、DBLSN、LatLSN和备份时间这样的信息。还有关于Servername、DB名称和执行备份的用户的信息。
https://dba.stackexchange.com/questions/12291
复制相似问题