备份数据库存储过程
来源:互联网 发布:阿里妈妈淘宝联盟官网 编辑:程序博客网 时间:2024/05/17 05:57
由于使用SSMS创建的维护计划中,完整备份的话,会打断别的备份的顺序链,而由于管理原因,往往需要有几套备份计划,所以经过时间,本人编写了一个存储过程实现我的想法。不管你用不用,反正我用了。
首先,创建一个表,用于记录备份信息。因为用DMV和系统视图的话往往要编写很多东西,对于一般人很难记住那么多表。所以使用一个表来记录更加方便。以前之前已经创建了一个库 AuditDB,用于监控数据库的DDL操作,所以这里没有再编写建库脚本。只是在这个库里面创建一个表。
USE AuditDBGOIF OBJECT_ID('BackupHistory') IS NOT NULLDROP TABLE BackupHistoryGOCREATE TABLE BackupHistory(DatabaseNameNVARCHAR(128),--数据库名CreateDateDATETIME,--创建时间CompatibilitylevelTINYINT,--数据库兼容级别RecoveryModelCHAR(10),--恢复模式BackupStartDataDATETIME, --备份开始时间BackupEndDataDATETIME, --备份结束时间BackupSpaceNVARCHAR(128), --备份文件大小OperatorNVARCHAR(128),--执行操作者ServernameNVARCHAR(128),--服务器名称[FILENAME]NVARCHAR(256) --备份文件名);
建了表之后,在msdb或者AuditDB中创建这个存储过程。一般不要在客户数据中创建。
/*注意:由于用GUI备份会导致备份链中断,而作业无法实现“仅复制备份”,所以使用脚本备份create by huangzj 20120510EXEC Backup_By_DBA 'auditdb','e:\新建文件夹\'*/ALTER PROC Backup_By_DBA(@dbname NVARCHAR(128),@bakpath NVARCHAR(128)='E:\')AS--不备份系统表IF @dbname IN ( 'master', 'msdb', 'model', 'tempdb' ) BEGIN RETURN END ELSE BEGIN--定义备份时间,精确到秒 DECLARE @date NVARCHAR(64) SELECT @date = SUBSTRING(CONVERT(VARCHAR(20), GETDATE(), 121), 1, 4) + '_' + SUBSTRING(CONVERT(VARCHAR(20), GETDATE(), 121), 6, 2) + '_' + SUBSTRING(CONVERT(VARCHAR(20), GETDATE(), 121), 9, 2) + '_' + CONVERT(CHAR(2), DATEPART(hh, GETDATE())) + CONVERT(CHAR(2), DATEPART(mi, GETDATE())) + CONVERT(CHAR(2), DATEPART(ss, GETDATE()))--定义要备份的数据库名 DECLARE @db NVARCHAR(20) SET @db = '' + '' + @dbname + '' + ''--定义备份文件的全名 DECLARE @bakname NVARCHAR(128) SELECT @bakname = @db + '_' + @date--定义备份存放路径 DECLARE @disk NVARCHAR(256) SELECT @disk = @bakpath + @bakname + '.bak'--定义备份描述 DECLARE @name NVARCHAR(128) SELECT @name = @db + '-完整 数据库 备份'--定义错误信息 DECLARE @error NVARCHAR(128) SELECT @error = '验证失败。找不到数据库“' + @db + '”的备份信息。' BACKUP DATABASE @db TO DISK = @disk WITH COPY_ONLY, NOFORMAT, NOINIT, NAME =@name, SKIP, NOREWIND, NOUNLOAD, STATS = 10, CHECKSUM ; DECLARE @backupSetId AS INT SELECT @backupSetId = position FROM msdb..backupset WHERE database_name = @db AND backup_set_id = ( SELECT MAX(backup_set_id) FROM msdb..backupset WHERE database_name = @db ) IF @backupSetId IS NULL BEGIN RAISERROR(@error, 16, 1) END RESTORE VERIFYONLY FROM DISK = @disk WITH FILE = @backupSetId, NOUNLOAD, NOREWIND INSERT INTO AuditDB.dbo.BackupHistory(DatabaseName,CreateDate,Compatibilitylevel,RecoveryModel,BackupStartData,BackupEndData,BackupSpace,Operator,Servername,[FILENAME]) SELECT a.[name] ,create_date,a.[compatibility_level] ,recovery_model_desc,S.backup_start_date,S.backup_finish_date,CONVERT(VARCHAR(20),CONVERT(DECIMAL(10,2),S.compressed_backup_size/(1024*1024)))+'MB', S.[user_name],S.[server_name],physical_device_name FROM sys.databases a INNER JOIN msdb.dbo.backupset S ON a.name=S.database_name Inner Join msdb.dbo.backupmediafamily M ON S.media_set_id =M.media_set_id WHERE a.name=db_name() AND physical_device_name=@disk END
备注:此处只是完整备份的例子,如果需要别的备份,那么要修改脚本。- 备份数据库存储过程
- 数据库备份存储过程
- 备份数据库存储过程
- 数据库还原备份存储过程
- 数据库作业备份存储过程
- 备份数据库(存储过程)
- 数据库批量备份存储过程
- SQL 存储过程备份数据库
- 数据库备份与恢复的存储过程
- 通用分页 数据库备份 恢复存储过程
- 备份数据库的存储过程.sql
- 定时备份数据库的存储过程.sql
- SQLServer 2000 数据库备份还原存储过程
- 备份与恢复数据库的存储过程
- java备份sql server数据库 存储过程
- 备份与恢复数据库的存储过程
- 使用存储过程实现数据库备份
- 使用存储过程实现数据库备份
- spring使用模板发送邮件及附件笔记
- 我眼中的云计算4-负载均衡
- 带宽的概念
- 【转】深入理解Linux的系统调用
- GridView分页问题
- 备份数据库存储过程
- 更改linux系统中键盘设置
- drawable mdpi ldpi hdpi的区别
- 测试的一个比喻!
- 打印 1...nX8+n=n...1
- Cookie机制详解和注意事项
- JDBC常用连接URL
- 用HTML5创建一个图片浏览器
- The NIST Definition of Cloud Computing