自动还原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'