tsql - 使用脚本从 bak 文件恢复最新备份

标签 tsql backup restore

我使用相同的 .bak 文件创建备份。我制作了一个脚本来自动恢复这个备份。

RESTORE DATABASE [xxx] FROM  DISK = N'xxx.bak' 
WITH  FILE = 10,  NOUNLOAD,  REPLACE,  STATS = 10
GO

在这里,明确指定了要恢复的备份集。但是,我总是想恢复最新 设置可用。默认情况下,它使用第一个备份集。

最佳答案

使用 RESTORE HEADERONLY 命令来定位您想要的特定备份,因为该结果集显示 BackupFinishDate。注意名为 Position 的字段;那是文件号。

此时,如果您已经知道逻辑名称,则可以使用 WITH 子句中的 FILE 选项运行 RESTORE 命令。

restore database yourDB
from disk = N'C:\Program Files\Microsoft SQL Server\yourDB.bak' 
with 
  file = 3  

您可能已经知道可以使用 RESTORE FILELISTONLY 命令来查找逻辑名称。

Tibor Karaszi 在此处发布了类似(但不相同)的解决方案:http://www.karaszi.com/SQLServer/util_restore_all_in_file.asp您可以使用他的 CREATE TABLE 命令将 RESTORE HEADERONLY 的结果放入表中。我在下面粘贴的内容显示了如何将 RESTORE FILELISTONLY 的结果放入表中(也从 Tibor 中提取)。
create table FLO_results (
  LogicalName nvarchar(128),
  PhysicalName nvarchar(260),
  [Type] char(1),
  FileGroupName nvarchar(128),
  Size numeric(20,0),
  MaxSize numeric(20,0),
  FileId bigint,
  CreateLSN numeric(25,0),
  DropLSN numeric(25,0),
  UniqueId uniqueidentifier,
  ReadOnlyLSN numeric(25,0),
  ReadWriteLSN numeric(25,0),
  BackupSizeInBytes bigint,
  SourceBlockSize bigint,
  FilegroupId bigint,
  LogGroupGUID uniqueidentifier,
  DifferentialBaseLSN numeric(25),
  DifferentialBaseGUID uniqueidentifier,
  IsReadOnly int,
  IsPresent int
)  
;  
insert into FLO_results 
exec('
  restore filelistonly from disk = ''C:\Program Files\Microsoft SQL Server\yourDB.bak''
')
;
select * from FLO_results
;
drop table FLO_results
;

关于tsql - 使用脚本从 bak 文件恢复最新备份,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2543920/

相关文章:

Sql获取sql server中特定数据库的最新完整备份文件

sql - 比较同一个表中的子字符串

sql - 有没有办法在 SQL Server 游标中使用参数?

sql - 更新、查找/替换 xml 字段

mysql - 从 myd myi 文件恢复 mysql 服务器 - windows

database - 还原 Postgres 数据库时出现不重音问题

git - 意外删除bin文件夹后恢复Gitlab

xml - XQuery [value()] : 'value()' requires a singleton (or empty sequence), 找到类型为 'xdt:untypedAtomic *' 的操作数

SVN 一次性备份所有仓库

backup - 创建 TAR 文件读取标准输出