备份数据库存储过程

由于使用SSMS创建的维护计划中,完整备份的话,会打断别的备份的顺序链,而由于管理原因,往往需要有几套备份计划,所以经过时间,本人编写了一个存储过程实现我的想法。不管你用不用,反正我用了。偷笑


首先,创建一个表,用于记录备份信息。因为用DMV和系统视图的话往往要编写很多东西,对于一般人很难记住那么多表。所以使用一个表来记录更加方便。以前之前已经创建了一个库 AuditDB,用于监控数据库的DDL操作,所以这里没有再编写建库脚本。只是在这个库里面创建一个表。

USE AuditDB
GO
IF OBJECT_ID('BackupHistory') IS NOT NULL
DROP TABLE BackupHistory
GO
CREATE TABLE BackupHistory
(
	DatabaseName		NVARCHAR(128),--数据库名
	CreateDate			DATETIME,--创建时间
	Compatibilitylevel	TINYINT,--数据库兼容级别
	RecoveryModel		CHAR(10),--恢复模式
	BackupStartData		DATETIME, --备份开始时间
	BackupEndData		DATETIME, --备份结束时间
	BackupSpace			NVARCHAR(128), --备份文件大小
	Operator			NVARCHAR(128),--执行操作者
	Servername			NVARCHAR(128),	--服务器名称
	[FILENAME]			NVARCHAR(256) --备份文件名
);

建了表之后,在msdb或者AuditDB中创建这个存储过程。一般不要在客户数据中创建。


/*
注意:由于用GUI备份会导致备份链中断,而作业无法实现“仅复制备份”,所以使用脚本备份
create by huangzj 20120510
EXEC 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
备注:此处只是完整备份的例子,如果需要别的备份,那么要修改脚本。


                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
PostgreSQL是以加州大学伯克利分校计算机系开发的POSTGRES,现在已经更名为PostgreSQL. PostgreSQL支持大部分SQL标准并且提供了许多其它现代特性:复杂查询、外键、触发器、视图、事务完整性等。PostgreSQL 是一个免费的对象-关系数据库服务器(数据库管理系统),它在灵活的 BSD-风格许可证下发行。它提供了相对其他开放源代码数据库系统(比如 MySQL 和 Firebird),和专有系统(比如 Oracle、Sybase、IBM 的 DB2 和 Microsoft SQL Server)之外的另一种选择。事实上, PostgreSQL 的特性覆盖了 SQL-2/SQL-92 和 SQL-3/SQL-99,首先,它包括了可以说是目前世界上最丰富的数据类型的支持,其中有些数据类型可以说连商业数据库都不具备, 比如 IP 类型和几何类型等;其次,PostgreSQL 是全功能的自由软件数据库,很长时间以来,PostgreSQL 是唯一支持事务、子查询、多版本并行控制系统(MVCC)、数据完整性检查等特性的唯一的一种自由软件的数据库管理系统。 Inprise 的 InterBase 以及SAP等厂商将其原先专有软件开放为自由软件之后才打破了这个唯一。最后,PostgreSQL拥有一支非常活跃的开发队伍,而且在许多黑客的努力下,PostgreSQL 的质量日益提高。从技术角度来讲,PostgreSQL 采用的是比较经典的C/S(client/server)结构,也就是一个客户端对应一个服务器端守护进程的模式,这个守护进程分析客户端来的查询请求,生成规划树,进行数据检索并最终把结果格式化输出后返回给客户端。为了便于客户端的程序的编,由数据库服务器提供了统一的客户端 C 接口。而不同的客户端接口都是源自这个 C 接口,比如ODBC,JDBC,Python,Perl,Tcl,C/C++,ESQL等, 同时也要指出的是,PostgreSQL 对接口的支持也是非常丰富的,几乎支持所有类型的数据库客户端接口。这一点也可以说是 PostgreSQL 一大优点。本课程作为PostgreSQL数据库管理一,主要讲解以下内容: 1.     PostgreSQL 存储过程基本知识2.     PostgreSQL 用户自定义函数3.     PostgreSQL 控制结构4.     PostgreSQL 游标和存储过程5.     PostgreSQL 索引6.     PostgreSQL 视图7.     PostgreSQL 触发器8.     PostgreSQL 角色、备份和还原9.     PostgreSQL 表空间管理
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值