日期:2014-05-17  浏览次数:20454 次

如何自动还原最新的备份数据库?
在 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掉之前的连接或者修改单用户访问