关于sqlserver2005异地自动备份
2012-10-23 11:29
363 查看
/* 脚本说明:数据库备份 要点: 1 备份文件名规则:库名_backup_yyyymmdd 2 全备后缀为 bak 差异备份后缀为 dif 日志备份后缀为 trn 2 在指定路径生成指定类型备份,备份细节由初始参数决定 注意: 在try catch中只能捕获最后一条错误日志,要得到详细的错误原因,需要去掉try捕获 */ --定义参数 DECLARE @DatabaseName VARCHAR(100) DECLARE @Path VARCHAR(200) DECLARE @PathfileName VARCHAR(200) DECLARE @BackupName VARCHAR(200) --备份名 DECLARE @NowDateTime VARCHAR(100) --当前日期时间 DECLARE @v1 VARCHAR(500) --参数1 DECLARE @Err VARCHAR(500) DECLARE @mail VARCHAR(500) DECLARE @mailUser VARCHAR(500) DECLARE @backupSetId AS INT DECLARE @Date VARCHAR(8) --yyyymmdd日期 DECLARE @command VARCHAR(50) DECLARE @backType VARCHAR(50) -- full 全备 dif 差异备 log 日志备 DECLARE @IsdateDir INT --是否建立日志格式之文件夹 DECLARE @log_level INT --参数设定 SET @DatabaseName = 'ZXFinance_Test3' SET @Path = 'E:\DBBackup\' SET @backType='full' -- full 全备 dif 差异备 log 日志备 SET @IsdateDir=1 --1 path中建立日期文件夹 0 保存于path中的根目录 SET @log_level=1 -- 0 异常邮件通知 ,1全备通知,2备份通知 SET @mailUser='zhao' --操作员账号 --生成当前时间戳 SELECT @NowDateTime = STUFF(REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR(17), GETDATE(), 120), '-', ''), ' ', ''), ':', ''),9,0,'_') SELECT @Date=CONVERT(VARCHAR(17), GETDATE(), 112) --路径结尾补全 IF SUBSTRING(@Path,len(@Path),1)<>'\' SET @Path=@Path+'\' --建立子文件夹 IF @IsdateDir=1 BEGIN SET @Path=@Path+@Date+'\' SET @command='mkdir '+@Path EXEC xp_cmdshell @command END --防止文件夹不存在报错 IF @IsdateDir=0 BEGIN SET @Path=@Path SET @command='mkdir '+@Path EXEC xp_cmdshell @command END --生成文件名 SET @BackupName = @DatabaseName + '_backup_'+@backType+'_'+@NowDateTime SELECT @PathfileName = @Path + @DatabaseName + '_backup_'+@backType+'_'+@Date+ (CASE @backType WHEN 'dif' THEN '.dif' WHEN 'log'THEN '.trn' WHEN 'full'THEN '.bak' end) BEGIN TRY if @backType='dif' begin --差异备份 BACKUP DATABASE @DatabaseName TO DISK = @PathfileName WITH DIFFERENTIAL , NOFORMAT, NOINIT, NAME = @BackupName, SKIP, REWIND, NOUNLOAD, COMPRESSION, STATS = 10 END IF @backType='full' BEGIN --全备份 BACKUP DATABASE @DatabaseName TO DISK = @PathfileName WITH NOFORMAT, NOINIT, NAME = @BackupName, SKIP, REWIND, NOUNLOAD, COMPRESSION, STATS = 10 END IF @backType='log' BEGIN --日志备份 BACKUP LOG @DatabaseName TO DISK = @PathfileName WITH NOFORMAT, NOINIT, NAME = @BackupName, SKIP, REWIND, NOUNLOAD, COMPRESSION, STATS = 10 END --提取备份状态 SELECT @backupSetId = position FROM msdb..backupset WHERE database_name = @DatabaseName AND backup_set_id = ( SELECT MAX(backup_set_id) FROM msdb..backupset WHERE database_name = @DatabaseName ) IF @backupSetId IS NULL BEGIN SET @V1 = '验证失败。找不到数据库' + @DatabaseName + '的备份信息。' RAISERROR(@V1, 16, 1) EXECUTE msdb.dbo.sp_notify_operator @name = @mailUser, @subject = N'备份异常', @body = @V1 END --备份校验 RESTORE VERIFYONLY FROM DISK = @PathfileName WITH FILE = @backupSetId, NOUNLOAD, NOREWIND --备份完成通知管理员 SET @mail = '备份完成,备份文件路径:' + @PathfileName IF (@log_level=1 AND @backType IN('full') ) OR (@log_level=2 AND @backType IN( 'full','dif','log')) EXECUTE msdb.dbo.sp_notify_operator @name = @mailUser, @subject = N'备份完成', @body = @mail END TRY BEGIN CATCH SELECT ERROR_NUMBER() AS ErrorNumber , ERROR_SEVERITY() AS ErrorSeverity , ERROR_STATE() AS ErrorState , ERROR_PROCEDURE() AS ErrorProcedure , ERROR_LINE() AS ErrorLine , ERROR_MESSAGE() AS ErrorMessage ; SET @Err = @backType+'备份异常!错误原因:' + ERROR_MESSAGE() EXECUTE msdb.dbo.sp_notify_operator @name = @mailUser, @subject = '备份异常', @body = @Err END CATCH
相关文章推荐
- Navicat如何实现异地自动备份mysql数据库
- 关于百宝云自动备份功能
- 关于postgresql本地自动备份
- 异地(公网)数据库容灾,SQL SERVER互联网自动备份,SQL SERVER数据库镜像
- 自动异机(异地)备份
- SQLServer2005利用维护计划自动备份数据库
- SQL自动异地备份
- Linux本地加异地自动备份方案
- Sqlserver2005自动定期备份、Rar压缩并删除过期备份
- 关于Documents下文件自动备份到iCloud--(db保存在documents被拒的原因)
- SqlServer2005自动备份
- SQL Server自动异地备份方法 (精选)
- MYSQL数据库自动本地/异地双备份/MYSQL增量备份
- SqlServer2005 自动备份并存储另一电脑上的存储过程函数
- Rsync企业实战之自动异地备份 推荐
- SQLServer2005 用“作业”自动备份数据库
- MYSQL数据库自动本地/异地双备份/MYSQL增量备份[连载之构建百万访问量电子商务网站]
- 关于SQL数据库的异地备份(一)
- 关于SQL异地备份的方法
- 数据库Oracle数据的异地的自动备份