在 e:\db_bk下有多个完全备份的数据库(如:backup_201307260230.bak等),希望编写SQL脚本自动查找目录下最新的bk文件,然后还原,每天6点自动还原。
------解决方案--------------------
写个SP,动态产生恢复指令就OK啦
------解决方案--------------------
create table #t
(id int not null identity(1,1), filenames varchar(500))
insert into #t(filenames)
exec master..xp_cmdshell 'dir /b/s e:\db_bk\*.bak'
declare @filename varchar(500),@tsql varchar(6000)
select @filename=max(replace(replace(filenames,'e:\db_bk\',''),'.bak',''))+'.bak'
from #t
where filenames is not null
select @tsql='restore database [数据库名] from disk=''e:\db_bk\'+@filename+''' with replace '
exec(@tsql)
drop table #t
------解决方案--------------------
USE msdb
GO
SELECT physical_device_name
FROM backupmediafamily
WHERE media_set_id = (
SELECT MAX(media_set_id)
FROM backupset
WHERE database_name = 'data'
AND backupset.[type] = 'D'
)
data是你的数据库名称
'D'是完全备份
再用上面的文件名还原数据库
------解决方案--------------------
楼上给出脚本了,MSDB会纪录详细的备份信息,按照备份日期排序就找到最新备份文件了然后还原。还原的时候要先KILL掉之前的连接或者修改单用户访问