CREATE PROCEDURE BACKUPDB
@DATABASE VARCHAR(128)='dbname' -- 要备份的数据库
,@BACKUPPATH VARCHAR(256)='E:/DbBack/' -- 备份目录
,@WINRARPATH VARCHAR(256)='E:/tools/WinRAR/' -- winrar路径,用于压缩文件
AS
BEGIN
DECLARE @DATE VARCHAR(8);
DECLARE @CMD VARCHAR(256);
DECLARE @BACKFILE VARCHAR(256);
DECLARE @BACKUPNAME VARCHAR(128);
-- 备份名称
SET @BACKUPNAME=@DATABASE +'的完整备份';
--备份文件
SET @BACKFILE=@BACKUPPATH + lower(@DATABASE) + CONVERT(CHAR(8),GETDATE(),112) + N'.bak';
BACKUP DATABASE @DATABASE TO DISK=@BACKFILE WITH FORMAT,NAME = @BACKUPNAME;
--开启XP_CMDSHELL
EXEC SP_CONFIGURE 'SHOW ADVANCED OPTIONS', 1;RECONFIGURE;EXEC SP_CONFIGURE 'XP_CMDSHELL', 1;RECONFIGURE;
--压缩
--a 添加要压缩的文件
--ep 压缩文件夹不包含完整路径
--df 删除被压缩源文件
--inul 不显示消息
SET @CMD=@winrarpath+N'rar a -ep -df -inul ' + @BACKFILE +'.rar' +' '+@BACKFILE;
EXEC MASTER.DBO.XP_CMDSHELL @CMD;
--删除备份文件
SET @CMD='DEL '+@BACKFILE;
EXEC MASTER.DBO.XP_CMDSHELL @CMD;
--关闭XP_CMDSHELL
EXEC SP_CONFIGURE 'SHOW ADVANCED OPTIONS', 1;RECONFIGURE;EXEC SP_CONFIGURE 'XP_CMDSHELL', 0;RECONFIGURE;
END;