sqlserver2008數據庫自動備份腳本

CREATE proc [dbo].[usp_autoBackupDB]

@dbname sysname=null --要備份的數據庫名,不指定即爲全部備份

,@path nvarchar(128)='d:\' --備份目錄路徑

,@backup_type varchar(16)='database' --備份類型,可以爲database,log

,@backup_sysdb int=0 --是否備份系統數據庫,0爲不備份,1爲備份

as

set nocount on;

declare @dbcnt int =0

,@sql varchar(2000)=''

,@except_db varchar(1000)=case @backup_sysdb 

when 0 then ''''+'master'+''''+','+'''' +'msdb'+''''+','+''''+'tempdb'+''''+','+''''+'model'+''''

when 1 then '' end;

declare @db_list table(id int identity(1,1) not null,name sysname);

declare @backup_err_list table(id int identity(1,1) not null,name sysname);

 if right(@path,1)<>'\'

set @path=@path+'\'

if @dbname is null or @dbname in ('all','*')

begin

--將所有數據庫名存到一張臨時表上

set @sql='select name from sys.databases where name not in ('+@except_db+');'

insert into @db_list(name) exec(@sql);

--得到一共有多少個數據庫

select @dbcnt=count(1) from @db_list;

--開始循環

while @dbcnt>0

begin

--從臨時表中獲得最後一個數據庫的名字

select @dbname=name from @db_list where id=@dbcnt;

set @sql='backup '+@backup_type+' '+@dbname+' to disk='+''''+@path+@backup_type+'_'+@dbname+'.'+convert(varchar(8),getdate(),112)+'.'+DATENAME(HH,GETDATE())+''''

--開始循環備份

exec (@sql);

if @@ERROR<>0

insert into @backup_err_list(name) values(@dbname);

set @dbcnt=@dbcnt-1

end

end

else

begin

set @sql='backup '+@backup_type+' '+@dbname+' to disk='+''''+@path+@backup_type+'_'+@dbname+'.'+convert(varchar(8),getdate(),112)+'.'+DATENAME(HH,GETDATE())+''''

--僅備份一次

exec (@sql);

if @@ERROR<>0

insert into @backup_err_list(name) values(@dbname);

end

if exists(select * from @backup_err_list)

select ID ,name as 'backup_err_dbname' from @backup_err_list;

else print 'backup success';

set nocount off;

GO


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章