您现在的位置: 首页  > SQLServer > 高可用性和HA
通行证登录
 

数据库快照的脚本1:新建数据库快照

作者:[51ak ]
 数据库快照的脚本1:新建数据库快照
 数据库快照的脚本2:删除数据库快照
 数据库快照的脚本3:更新快照物作业

这是我写的三个存储过程,可以用来快速完成数据库快照的生成和更新

create proc usp_SnapShot_create(

 @dbname varchar(255), --数据库名

 @snapname varchar(255),--快照名

 @snap_dir varchar(255),--保存路径

 @ischeck_dir bit =0 --是否检查和创建保存路径

)

as

/*

exec usp_SnapShot_create 'NorthWind','NorthWind','E:\Wokofo_Data_test'

用于创建数据库快照的脚本 2011-7-28

 

调试实例

declare @dbname varchar(255)

declare @snapname varchar(255)

declare @snap_dir varchar(255)

set @dbname='NorthWind'

set @snapname='NorthWind_snap1'

set @snap_dir='E:\Wokofo_Data_test'

*/

set nocount on 

declare @db_files table(fname varchar(255))

 

insert into @db_files

Select name from master.sys.sysaltfiles where dbid=DB_ID(@dbname) and name not like '%_log'

 

if not exists(Select fname from @db_files)

 begin

     print 'ERR:没有找到对应的数据库或数据文件'

     RETURN

 end

 

 --准备工作

if(RIGHT(@snap_dir,1)<>'\')

begin

     set @snap_dir=@snap_dir+'\' ;

end

 

if(CHARINDEX(@dbname,@snap_dir)<3)

begin

     set @snap_dir=@snap_dir+@snapname+'\' ;

end

--检查和创建文件夹

if(@ischeck_dir=1)

     begin

     begin try   

      DECLARE @mddir NVARCHAR(255)

      SET @mddir='md '+@snap_dir

         EXEC sp_configure'show advanced options', 1

         reconfigure with override

         EXEC sp_configure'xp_cmdshell',

         reconfigure with override

         EXEC master..xp_cmdshell@mddir

         EXEC sp_configure'xp_cmdshell', 0

         reconfigure with override

         EXEC sp_configure'show advanced options', 0

         reconfigure with override       

     end try

     BEGIN CATCH

         print 'ERR:创建路径时出现错误'+Error_Message();

     end catch

end

--开始准备脚本

declare @sqlstr varchar(max)

set @sqlstr='CREATE DATABASE '+@snapname+ ' on'

 

while exists(Select fname from @db_files)

begin

     declare @t_name varchar(255)    

      Select top 1 @t_name=fname from @db_files

     set @sqlstr=@sqlstr+'

     (NAME = N'''+@t_name+''', FILENAME = N'''+@snap_dir+@t_name+'.snap'')';

     if((Select COUNT(1) from @db_files)>1)

     begin

         set @sqlstr=@sqlstr+','

     end

    

     delete @db_files where fname=@t_name

end

set @sqlstr=@sqlstr+' as snapshot of '+@dbname

 

 

print '生成快照的语句'

print @sqlstr

begin try

     exec(@sqlstr)

     print '创建数据库快照'+@snapname+'成功' 

end try

BEGIN CATCH

     print 'ERR:创建数据库快照'+@snapname+'失败' +Error_Message();

end catch