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
一个好主意,但知道如何去做会很好(仅用于知识)
这只是使用动态 SQL 处理数据的问题。您还可以利用msdb.dbo.backupset
和msdb.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)