SQL Server 维护计划实现数据库备份(策略实战)
一、背景
之前写过一篇关于备份的文章:SQL Server 维护计划实现数据库备份,上面文章使用完整备份和差异备份基本上能解决数据库备份的问题,但是为了保障数据更加安全,我们需要再次完善我们的备份计划;
下面这篇文章主要加入了日志备份,并对设计备份的频率和设计命名规范等问题进行实战;
二、最佳实践
(一) 备份计划
1) 每周星期日的2:00:00执行数据库的完整备份;
2) 每周星期一至星期六每天的2:00:00执行数据库的差异备份;
3) 每天在8:00:00和23:59:59之间、每1小时执行数据库的日志备份;
4) 每个月的最后一个星期日的1:00:00执行数据库的完整备份;
(二) 计划讲解
1. 根据备份文件的不同,我创建了4个文件用于存放备份文件:(Medusa是数据库名)
1) Medusa_Full:用于存放完整备份文件;
2) Medusa_Diff:用于存放差异备份文件;
3) Medusa_Log:用于存放日志备份文件;
4) Medusa_Save:用于存放保留备份文件;
上面的4个文件夹与备份计划的4个步骤是一 一对应的;

(Figure1:文件夹命名规范)
2. 创建名为Medusa的维护计划,并创建如下图的4个子计划:

(Figure2:子计划列表)
3. 设置【清除历史记录】、【清除维护】的保留时间:
1) Subplan_Full:保留完整备份文件4周;(1个*4周=4个文件)
2) Subplan_Diff:保留差异备份文件2周;(6个*2周=12个文件)
3) Subplan_Log:保留日志备份文件1周;(16个*7天=112个文件)
4) Subplan_Save:保留备份文件1年;(1个*12月=12个文件)
上面的时间策略需要根据数据库的安全级别、磁盘空间、业务特性等情况共同解决的,你可以根据的实际情况进行修改和调整;
4. 下面的Figure3、Figure4、Figure5、Figure6是具体设置的效果图:

(Figure3:子计划Full)

(Figure4:子计划Diff)

(Figure5:子计划Log)

(Figure6:子计划Save)
5. 保存维护计划后,在SQL Server代理的作业中会生成Figure7的作业列表:

(Figure7:Job列表)
6. 执行一段时间后,在各个文件夹中会生成一系列的文件:

(Figure8:Full文件)

(Figure9:Diff文件)

(Figure10:Log文件)

(Figure11:Save文件)
7. 有了这些文件之后,我们可以虽然还原到某个时间点上的数据,数据的差异为一个小时,例如你是在2012-12-11的15:48:00分误操作了数据库,我能回滚到最接近这个时间的是:2012-12-11的15:00:00

(Figure12:还原完整备份文件)

(Figure13:还原差异、日志备份文件)
在使用SSMS的还原的时候,系统会帮你找到最近的备份文件,并且进行了勾选,要完成上面的还原,根据我们之前的备份计划,我们需要文件:
1) 完整备份文件:Barfoo.Medusa_backup_2012_12_09_020005_0612500.bak
2) 差异备份文件:Barfoo.Medusa_backup_2012_12_11_020005_8354977.bak
3) 日志备份文件:
Barfoo.Medusa_backup_2012_12_11_080005_4808937.trn
Barfoo.Medusa_backup_2012_12_11_090005_4816881.trn
Barfoo.Medusa_backup_2012_12_11_100005_6543553.trn
Barfoo.Medusa_backup_2012_12_11_110005_7645233.trn
Barfoo.Medusa_backup_2012_12_11_120005_8434417.trn
Barfoo.Medusa_backup_2012_12_11_130004_9379977.trn
Barfoo.Medusa_backup_2012_12_11_140005_2044137.trn
Barfoo.Medusa_backup_2012_12_11_150005_2208329.trn
还原的步骤就是先还原完整备份文件,接着还原差异备份文件,再依次执行日志备份文件,这样就能回滚到你想要的时间点:2012-12-11的15:00
三、注意事项
- 备份计划中“每天在8:00:00和23:59:59之间、每1小时执行数据库的日志备份”很多人会问:这中间相差8个小时的数据不做日志备份呢?其实我是这样考虑的,在凌晨的时候,大部分的情况这段时间是在跑定时器处理数据,如果不是程序有BUG,一般不会造成数据错误需要恢复,而且这个时候用户操作页面也不频繁(个人认为更多数据误操作是因为人为操作不当引起的),你可以根据自己的业务情况做些调整;
- 备份计划中“每个月的最后一个星期日的1:00:00执行数据库的完整备份”,这样做的目的是尽量不影响全备份又能保留一份完整的备份文件,如果需要更加严谨一点,你可以把它换成“仅复制备份(COPY_ONLY)”,这需要在维护计划中使用T-SQL进行备份,这就可以完全不影响日志链;
- 维护计划的可以通过T-SQL脚本生成嘛?
sp_add_maintenance_plan
sp_delete_maintenance_plan_db
sp_add_maintenance_plan_db
sp_delete_maintenance_plan_job
sp_add_maintenance_plan_job
sp_help_maintenance_plan
sp_delete_maintenance_plan
四、参考文献
SQL Server 维护计划实现数据库备份(策略实战)的更多相关文章
- SQL Server 维护计划实现数据库备份(Step by Step)(转)
SQL Server 维护计划实现数据库备份(Step by Step) 一.前言 SQL Server 备份和还原全攻略,里面包括了通过SSMS操作还原各种备份文件的图形指导,SQL Server ...
- SQL Server 维护计划实现数据库备份(Step by Step)
转自:http://www.cnblogs.com/gaizai/archive/2011/11/18/2254445.html 一.前言 SQL Server 备份和还原全攻略,里面包括了通过SSM ...
- SQL Server 维护计划(数据库备份)
公司的项目都需要定期备份,程序备份关掉iis站点复制文件就可以了,难受的地方就是数据库的备份了.服务器上装的大都是英文版,一看见英文,操作都变得小心翼翼起来,生怕哪里搞错,第二天就要被安排写辞职申请了 ...
- SQL Server如何提高数据库备份的速度
对于一个数据库完整备份来说,备份的速度很大程度上取决于下面两个因素:读磁盘数据.日志文件的吞吐量,写磁盘数据文件的吞吐量. 下图是备份过程中磁盘的变化情况: 读吞吐量 读吞吐量的大小取决于磁盘读取数据 ...
- 使用SQL Server维护计划实现数据库定时自动备份
在SQL Server中出于数据安全的考虑,所以需要定期的备份数据库.而备份数据库一般又是在凌晨时间基本没有数据库操作的时候进行,所以我们不可能要求管理员每天守到晚上1点去备份数据库.要实现数据库的定 ...
- 【转载】使用SQL Server维护计划实现数据库定时自动备份
在SQL Server中出于数据安全的考虑,所以需要定期的备份数据库.而备份数据库一般又是在凌晨时间基本没有数据库操作的时候进行,所以我们不可能要求管理员 每天守到晚上1点去备份数据库.要实现数据库的 ...
- SQL Server 2012将数据库备份到网络中的共享文件夹
把计算机computer1 中的数据库备份到计算机computer2(IP:192.168.0.130)中的一个共享文件夹下 在computer2中的F盘下建一个共享文件夹叫DBBackupShare ...
- Microsoft SQL Server 2008 R2数据库备份 - 人工备份
业务介绍 数据库人工备份是指由相关管理人员通过主动的手工方式备份数据库文件.在一些特殊的时间节点,如重要资料的录入完成.软硬件环境更新前等需要特别关注数据库安全的时候,一定要进行数据库的人工备份,以保 ...
- 【数据库-Azure SQL Database】SQL Server 如何将数据库备份到 Azure Storage
打开本地的 SQL Server Management Studio.首先创建 Credentials.命令如下: IF NOT EXISTS (SELECT * FROM sys.credent ...
随机推荐
- 每天一个linux命令--定时启动
1.设置启动的时间,输入crontab -e命令 设置一种编辑器,进入编辑界面,设置启动的时间为每5分钟启动一次wanghy.sh脚本 # m h dom mon dow command # */ * ...
- python 引用传递与值传递
https://taizilongxu.gitbooks.io/stackoverflow-about-python/content/16/README.html 1.也就是如果传可变对象,就是引用传 ...
- 利用 HashSet 去过滤元素是否重复
HashSet<Integer> hashSet = new HashSet<Integer>(); for (int i = resultDoctorDetails.size ...
- 【原】iOS学习之应用之间的操作
关于应用之间的相互操作,小编一直觉得非常高大上,在一次面试中被面试官一顿暴虐,今天小编就决定学习一下!经过一顿度娘,找到一些博客,不过都比较凌乱,我就打算自己整理一下! 首先要说的是每一个APP都可以 ...
- linux opensuse 程序中上传文件大小限制
上传文件大小限制 修改nginx主配置文件 /etc/nginx/nginx.conf增加配置 client_max_body_size 40m; (说明:这里40m是最大支持上传40兆)
- 字符串、数组方法实战--charAt(),split(),indexOf(),substring()
这篇随笔根据两个面试题来实战一下数组.字符串的一些方法. 题一:一个字符串中找出出现次数最多的字符次数 var str = 'fuuhuhuhufaihuhfnkjNKCNIO'; function ...
- 常用类-StringBuffer
总结:凡是要频繁的修改字符串内容的时候,都要使用StringBuffer类来完成,而且在StringBuffer类里提供了一些在String类中没有的,包括:delete(),insert()等等 / ...
- mysql 表表连接的问题。
select * from table a, table b where a.aid = b.bid and aid >100 这样连接,如果a有数据,b没有数据, a.aid = b.bid ...
- SVN Server for Migration
SVN Server: http://mxsuse01/svn/repos/erp/Oracle_EMS Report SVN (Put to SVN Sort) 1. *.RDF 2. *CP.LD ...
- 初识Windows程序
首先,我们创建第一个Windows程序,一共分为4个步骤: 1.打开Visual Studio开发工具 2.选择"文件"→"新建"→"项目" ...