自动还原SQL数据库,并让数据库处于时时还原状态,保证数据安全。

 

USE [master]
GO
/****** 对象:  StoredProcedure [dbo].[pro_restore_log]    脚本日期: 11/09/2010 18:56:32 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER proc [dbo].[pro_restore_log]

--数据库名
@databasename varchar(10),
--数据库备份文件路径(文件夹)
@SourceDirBackupFiles varchar(100)
as

--判断是否存在表restore_log(记录之前还原过的日志文件),如不存在,就新建这张表
if object_id('restore_log') is null
begin
 create table restore_log(
 id int identity(1,1),
 rq datetime,
 log_filename varchar(100)
 )
end
--DROP TABLE restore_log

--创建临时表,保存目录下面所有文件的信息
create table #tb_temp(
id_num int IDENTITY(1,1),
subdirectory varchar(50),
depth int,
files int
)
--将目录下面所有备份文件名称插入到临时表中
insert into #tb_temp(subdirectory,depth,files)
exec master..xp_dirtree @SourceDirBackupFiles,1,1

declare @a int,@b int,@subdirectory varchar(100)
set @b=1
select @a=count(id_num) from #tb_temp
--用当前文件序号与总序号判断,如果小于就循环,避免由于最后一个文件正在拷贝,导致无法还原,故排除最后一个文件
while (@b<@a)
begin
 select @subdirectory=subdirectory from #tb_temp where id_num=@b
 --判断是否还原过此文件,若为是,跳过,否则才还原
 if NOT exists(select 1 from restore_log where log_filename=@subdirectory)
 --正式还原
 begin
  declare @sql varchar(200),@del varchar(200)
  print @subdirectory
  set @sql='restore log '+@DatabaseName+' from disk = '''+@SourceDirBackupFiles+'\'+@subdirectory+''''+'  WITH  FILE = 1,  NORECOVERY,  NOUNLOAD ,  STATS = 10 '
        EXEC (@sql)
        if @@error<>0
        goto return_lab
        --保存还原过的文件信息
  insert into restore_log(rq,log_filename) values(getdate(),@subdirectory)
  --删除当前的日志文件,避免空间不足
  --set @del=''' del '+@SourceDirBackupFiles+'\'+@subdirectory+''''
  --exec master..xp_cmdshell  @del
 END
 SET @b=@b+1
end
goto return_lab

return_lab:
drop table #tb_temp


--exec pro_restore_log 'ccerp_aks','F:\backup\logbak'