Jow*_*wen 7 t-sql backup restore
我使用相同的.bak文件创建备份.我已经制作了一个自动恢复此备份的脚本.
RESTORE DATABASE [xxx] FROM DISK = N'xxx.bak'
WITH FILE = 10, NOUNLOAD, REPLACE, STATS = 10
GO
Run Code Online (Sandbox Code Playgroud)
此处,显式指定要还原的备份集.但是,我总是希望恢复最新的可用设置.默认情况下,它使用第一个备份集.
使用 RESTORE HEADERONLY 命令查找所需的特定备份,因为该结果集显示 BackupFinishDate。请注意名为“Position”的字段;那是文件号。
此时,如果您已经知道逻辑名称,则可以使用WITH 子句中的FILE 选项运行RESTORE 命令。
restore database yourDB
from disk = N'C:\Program Files\Microsoft SQL Server\yourDB.bak'
with
file = 3
Run Code Online (Sandbox Code Playgroud)
您可能已经知道可以使用 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
;
Run Code Online (Sandbox Code Playgroud)