SQL-Server:为什么我们在脚本中使用 FILE = 1 来恢复数据库

Sun*_*eni 21 sql-server backup restore sql-server-2012

最近在遇到恢复数据库的脚本时,我对为什么必须使用“ FILE = 1 ”产生疑问?没有那个语句我们就不能恢复数据库吗!?基本上,它是用来做什么的?

Sol*_*zky 28

您可以在一个备份文件(即设备)中保存多个备份。FILE当文件中有多个可供选择时,该子句允许您访问特定的备份操作.bak

有关RESTORE命令的各种选项的更多信息,请参阅以下有关RESTORE Arguments 的Microsoft 文档。

如果您查看备份集选项部分(在语法说明中),您会发现:

FILE ={ backup_set_file_number | @ backup_set_file_number }

标识要恢复的备份集。例如,backup_set_file_number1表示备份介质上的第一个备份集,backup_set_file_number2表示第二个备份集。可以使用RESTORE HEADERONLY 语句获取备份集的backup_set_file_number

未指定时,默认值为 1,但 RESTORE HEADERONLY 除外,在这种情况下,将处理媒体集中的所有备份集。有关详细信息,请参阅本主题后面的“指定备份集”。

重要
此 FILE 选项与用于指定数据库文件的 FILE 选项无关,FILE = { logical_file_name_in_backup | @ logical_file_name_in_backup_var }。

是的,你应该能在没有恢复FILE = 11是默认的反正。而且,如果您的备份文件中只有一个备份集,那么它应该不会造成问题。

到帮助一个例子示出了当你可以使用FILE选项是以下内容,这是实施例BRESTORE命令文档页面(上面链接)。它显示了从单个备份文件进行两次还原:第一个RESTORE是完整备份,第二个RESTORE是 DIFFerential 备份。

RESTORE DATABASE AdventureWorks2012
   FROM DISK = 'Z:\SQLServerBackups\AdventureWorks2012.bak'
   WITH FILE = 6
      NORECOVERY;
RESTORE DATABASE AdventureWorks2012
   FROM DISK = 'Z:\SQLServerBackups\AdventureWorks2012.bak'
   WITH FILE = 9
      RECOVERY;
Run Code Online (Sandbox Code Playgroud)