我们有一个存储过程,它将备份从数据库到指定位置。有时备份过程运行不止一次。它会导致在同一个文件名上拥有多个备份集。当我们编写 T-SQL 使用这个备份文件恢复目标 db 时,我们如何告诉 SQL 恢复目标数据库上的最新 db 备份集(使用 T-SQL 命令)?
当我们使用 MS SQL 管理工作室恢复备份时,我们可以简单地选择我们想要恢复的备份集。但是我需要使用 T-SQL 运行还原,并且想知道如何确定 SQL 使用最新的数据库备份集进行还原。例如,从下图中,我想恢复最后一个备份集(以黄色突出显示):
我检查了这个网站,但找不到答案。如果您能提供帮助,我将不胜感激。
谢谢。
如果您无法访问原始服务器并且您只有备份文件,那么您需要首先从备份文件中恢复标头以查看其中的内容。
您可以通过以下方式做到这一点:
您现在有一个临时表(
#headers
),其中包含该设备文件中包含的所有备份的详细信息。为了找到最新的完整数据库备份,我们仅筛选完整数据库备份 (
backupType=1
),然后在设备中查找最新的备份,这将是具有最大 LSN 的备份。这为我们提供了位置值,该值在RESTORE
命令中用于向 SQL Server 指定我们要恢复的备份:正如您所说,您仍然可以访问原始服务器,然后我们可以查询 SQL Server 用于存储此信息的 msdb 中的表。
以下查询假设您在原始服务器上的 SQL 会话中运行它们。如果您不允许这样做,那么您需要考虑使用链接服务器和 4 部分命名。
有 2 种方法可以指定要查看的备份集。一种是通过备份文件的路径,另一种是通过引用备份设备上的名称。我已将两者都包含在此查询中,并附有一些注释,说明要注释掉的行取决于您的操作方式。
这将生成一个
RESTORE
可以在单独的 SSMS 会话中运行的语句。我还在底部提供了一个示例,说明如何自动执行此操作,尽管您需要事先进行一些测试以确保它正在执行您想要的操作。这应该给你一个开始: