数据库的定时备份


数据库备份是一项非常重要的工作,如果有碰到过数据丢失或服务器出现故障或其他需要用到备份文件的时候,这项工作就显得更加重要。


但如果每次都手工备份则显得非常麻烦,那有没有什么办法可以让系统自动备份呢?当然有。如何做?请跟我来。


以下示例以SQL Server 2005 为例。


          建立一个要备份文件的目录,例如在E盘建一个Backup的目录,然后再在这个目录下面建立要备份数据库所对应的目录。例如我有两个数据库(TEST和KR)是要自动备份的,则需要在Backup建立两个子目录:TEST和KR这样主要是为了看起来比较清楚。


          建立备份文件的存储过程 BackupDataBase


每天0:00做一个完整备份,然后每过若干小时做一次差异备份,如果数据库比较小则一天生成一个文件就可以了,即完整备份的bak文件与差异备份的文件就是同一个文件。而如果数据库比较大则建议每次差异备份时生成一个独立的文件。脚本如下(以下为每天生成一个文件,如果是第二种情况则需要做相应修改):


/*********    
 
PROC :BackupDataBase    
 
USE: 
 備份資料庫 
    
 
CREATE BY:MARK    
 
CREATE Date:2007/6/4    
 
EXAM:EXEC BackupDataBase    
 
**********/ 
     
 
    
 
CREATE 
 PROC
 
AS 
     
 
BEGIN 
     
 
DECLARE @SQL NVARCHAR(4000)
 
IF CONVERT(CHAR(5),GETDATE(),108)='00:00'
 
BEGIN
 
SET @SQL='BACKUP DATABASE [TEST] TO DISK = N' +''''+'E:/Backup/TEST/TEST'
 
+ CONVERT(CHAR(8),GETDATE(),112)+'.bak'
 
+''''+'WITH NOFORMAT, NOINIT, NAME = N' +''''+'TEST-FullBackup'
 
+''''+', SKIP, NOREWIND, NOUNLOAD, STATS = 10'
 
END
 
ELSE
 
BEGIN
 
SET @SQL='BACKUP DATABASE [TEST] TO DISK = N' +''''+'E:/Backup/TEST/TEST'
 
+ CONVERT(CHAR(8),GETDATE(),112)+'.bak'
 
+''''+'WITH DIFFERENTIAL , NOFORMAT, NOINIT, NAME = N'
 
+''''+'TEST-' +CONVERT(CHAR(5),GETDATE(),108)
 
+''''+', SKIP, NOREWIND, NOUNLOAD, STATS = 10'
 
END
 
    
 
EXEC(@SQL)
 
    
 
END


          建立自动备份的Job(作业)


3.1选择【对象资源管理器】 -->【Sql Server代理】 -->【作业】,单击鼠标右键,在弹出的菜单中选择【新建作业(N)…】,在常规选项里面的名称输入作业名称,此处输入“AutoBackTest”


3.2选择【步骤】,点击【新建(N)…】,弹出【作业步骤属性】对话框,在步骤名称里面输入“AutoBackup”,数据库选择你要备份的数据库,例如TEST,在命令里面输入:EXEC BackupDataBase ,然后点击【确定】


3.3选择【计划】,点击【新建(N)…】,弹出【作业计划属性】对话框,在名称里面输入“EveryDay”,在计划类型里面选择“重复执行”,并且把【已启用】前面的钩选中。


3.4在频率的执行里面选择“每天”,【执行间隔】设为“1”天。在每天频率的设置如下:开始时间:0:00:00, 结束时间:23:59:59.


执行间隔自己设定一个时间就可以了,例如2小时。


持续时间选择【无结束日期】,然后点击【确定】。


3.5其他几个选择是次要的可以不设置,最后点击【确定】。


 


这样的话就可以了,另外需要把Sql Server Agent服务设为“自动”。