常常人工备份是不现实的,一定要系统自动定期备份。 备份思想: 0、定期备份,非作业莫属。 1、重要的数据应该每几个小时就做一次差异备份;普通数据每周做一次。(我们的数据库是简单恢复模式) 2、硬盘容量有限,数据库又很大,不能容纳太多备份文件,采用
常常人工备份是不现实的,一定要系统自动定期备份。
备份思想:
0、定期备份,非作业莫属。
1、重要的数据应该每几个小时就做一次差异备份;普通数据每周做一次。(我们的数据库是简单恢复模式)
2、硬盘容量有限,数据库又很大,不能容纳太多备份文件,采用2个备份文件策略,轮流覆盖。所以每个数据库永远都只有2个备份文件。
备份作业:
1、获取单双周函数,用于确定备份文件名称。保持每个数据库永远只有2个备份文件
use [master]go-- =============================================-- author: leftfist-- create date: 2010-- description: 用于为备份文件起名-- =============================================create function [dbo].[jo_func_byweek]()returns tinyintasbegin declare @jo int; set @jo = convert(int,datename(ww,getdate())); return (@jo % 2);end
2、根据数据库名称,创建同名文件夹,用于存放备份文件exec sp_configure 'show advanced options', 1goreconfiguregoexec sp_configure 'xp_cmdshell', 1goreconfiguregodeclare @folder varchar(300);set @folder = 'c:\backup\db\';declare @name varchar(50);declare @sql varchar(1000);declare curt cursor for select name from sys.databases where database_id2;open curt;fetch next from curt into @name;while @@fetch_status = 0begin set @sql = 'mkdir ' + @folder + @name; exec xp_cmdshell @sql; fetch next from curt into @name;endclose curt;deallocate curt;exec sp_configure 'xp_cmdshell', 0goreconfiguregoexec sp_configure 'show advanced options', 0goreconfigurego
3、备份所有数据库(tempdb除外)
use [master]godeclare @name varchar(50);declare @sql varchar(1000);declare @jo tinyint;declare @filename nvarchar(100);--[jo_func_byweek]是自定义函数,单周返回0,双周返回1set @jo = [master].dbo.[jo_func_byweek]();--备份所有数据库(tempdb除外)declare curt cursor for select name from sys.databases where database_id2open curt;fetch next from curt into @name;while @@fetch_status = 0begin --每个数据库存放于同名的文件夹。文件夹预先建好 set @filename = @name + '\' + @name + '_' + cast(@jo as char(1)) + '.bak'; set @sql='backup database [' + @name + '] to disk = ''c:\backup\db\' + @filename + ''' with init , name = n''' + @name + ''', noskip , stats = 10, noformat'; exec(@sql); fetch next from curt into @name;endclose curt;deallocate curt;
将步骤3做成一个作业,定期运行,例如周六凌晨,就可以定期得到备份文件了。
那么,作业本身怎么备份呢?
按我的理解,备份了master、msdb、model之后,作业应该也在里面了。但怎么单独备份作业呢?
网上有高手写了2篇文章介绍,我看不大懂,先记下地址:
sql server 作业的备份(备份作业非备份数据库)
sql server 作业同步 (结合备份作业)
好在作业的更新频率并不高,我们完全可以在新增、修改作业以后,手动备份一份。
方法很简单:选中作业,右键选 编写作业脚本 就可以了。