自动备份数据库,相信大家都很清楚,我们可以利用SQL Server的作业来完成,然而我们需要备份的数据库文件较大,这时我们可能会想到利用xp_makecab来压缩,然后使用DEL命令删除已经压缩过的文件。示例如下:
/*
备份数据库,用于作业中,分三步1、备份指定库、压缩指定文件、删除指定文件
*/
--第一步备份指定库
DECLARE @path varchar(100) --声名备份路径
SELECT @path = 'E:/BackData/HCMS'+ convert(varchar(30),getdate(),12) + ltrim(str(DATEPART (hh, getdate())))
backup database HCMS to disk=@path with init --备份
--第二步压缩指定文件(注此压缩对大于2G的文件会失败)
DECLARE @path varchar(100)
DECLARE @command varchar(200)
--备份数据库
SELECT @path = 'E:/BackData/HCMS'+ convert(varchar(30),getdate(),12) + ltrim(str(DATEPART (hh, getdate())))
SELECT @command = @path+'.cab'
exec master.dbo.xp_makecab @command,mszip,1,@path
GO
--第三步删除指定的文件
DECLARE @command varchar(200)
SELECT @command = 'DEL ' + 'E:/BackData/HCMS'+ convert(varchar(30),getdate(),12) + ltrim(str(DATEPART (hh, getdate())))
EXEC master.dbo.xp_cmdshell @command, NO_OUTPUT
然而随着时间的流逝,数据库文件越来越大,忽然有一天发送压缩失败,原来xp_makecab命令不能压缩超过2G的文件,所以导致上面的第二步就会失败,怎么办呢?我们可利用压缩工具Rar和Windows任务计划来实现。
我们可以建一个bat文件, bat文件内容如下:(此示例仅演示压缩示例,大家可根据需要参照RAR命令帮助自行更改)
@echo off
echo.
echo.
color a
cls
@echo off
echo.
echo 欢迎来到数据库备份压缩批处理
echo.
echo.
echo.
echo. ....正在自动压缩备份数据....
echo ------------------------------------------------------------------------------
echo.
echo.
echo.
echo.
echo.
@echo off
if not exist E:/Temp/HCMS%date:~0,4%%date:~5,2%%date:~8,2%1830.bak goto existfile --检查是否存在未被压缩数据库备份文件
goto backup
:backup
echo 已经找到备份好的备份文件HCMS%date:~0,4%%date:~5,2%%date:~8,2%1830.bak
echo .
echo !!!提示:正在压缩备份文件....!!!
echo .
echo !!!提示:正在将备份文件HCMS%date:~0,4%%date:~5,2%%date:~8,2%1830.bak压缩到G:/Cabfiles/HCMS%date:~0,4%%date:~5,2%%date:~8,2%2000.RAR文件中....... --只是显示屏幕而已,中间的文件名没实际用处
"C:/Program Files"/WinRAR/winrar.exe a -as -ibck E:/HCMS.rar -m3 -agyyyymmddhhmmss E:/Temp/HCMS%date:~0,4%%date:~5,2%%date:~8,2%1830.bak --如不知道什么意思,WINRAR命令行的参数参考一下。
goto end
:existfile
echo.
echo !!!备份失败!!!
echo 没有找到已经备份好的备份文件HCMS%date:~0,4%%date:~5,2%%date:~8,2%1830.bak
echo.
echo.
echo.
pause
goto end
:end
echo 操作完毕
更多资料请查看http://download.csdn.net/source/2813346