有没有办法列出数据库的“上次备份”文件?

Rac*_*SQL 5 sql-server-2008 backup

我正在尝试做一些非常简单的事情,但有一个问题:

declare @cmd varchar(1000)

set @cmd='restore verifyonly from disk =''\\server\backup_folder\''?'''

exec sp_msforeachdb @cmd
Run Code Online (Sandbox Code Playgroud)

显然它不起作用。我需要运行备份文件的名称Verifyonly(在上面的代码中,我使用的是数据库名称)。

有没有办法自动化Verifyonly,在所有备份文件中运行?

如何在我的代码中使用已创建的备份文件的名称?

非常感谢。

(人们MsForeachdb说不安全。我会尝试搜索另一个选项,例如Foreachdb

SQL 服务器 2008

EDIT1:嗯,正如我在这里看到的,我认为这不是verifyonly一个好主意,但知道如何去做会很好(仅用于知识)

Mik*_*Fal 9

这只是使用动态 SQL 处理数据的问题。您还可以利用msdb.dbo.backupsetmsdb.dbo.backupfamily查找最近的完整备份。此脚本将获取每个数据库的最新完整备份文件位置,并使用它来运行您的游标:

declare @dbname sysname
    ,@backupfile nvarchar(max)
    ,@sqlcmd nvarchar(max)

declare recscan cursor fast_forward 
for
select
    bs.database_name
    ,bm.physical_device_name
from
    msdb.dbo.backupset bs
    join msdb.dbo.backupmediafamily bm on (bs.media_set_id = bm.media_set_id)
    join (select database_name
            ,max(backup_finish_date) last_backup
          from msdb.dbo.backupset
          where type = 'D'
          group by database_name) lb on (bs.database_name = lb.database_name and bs.backup_finish_date = lb.last_backup)
where type = 'D'

open recscan
fetch next from recscan into @dbname,@backupfile

while @@fetch_status != -1
begin
    PRINT 'Validating '+@dbname
    select @sqlcmd = N'restore verifyonly from disk = '''+@backupfile+''';'

    exec sp_executesql @sqlcmd

    fetch next from recscan into @dbname,@backupfile
end

close recscan
deallocate recscan
Run Code Online (Sandbox Code Playgroud)

  • 请注意,您可以参数化路径,因此不需要动态 SQL。 (2认同)