【译】The Accidental DBA:SQL Server Backup
最近重新翻看The Accidental DBA,将SQL Server Backup部分稍作整理,方便以后查阅。此篇是Part 1
Part 2:The Accidental DBA:Troubleshooting Performance
Part 3:The Accidental DBA:Troubleshooting
一、Understanding RTO and RPO
1.1、RTO(Recovery Time Objective),停机时间,how much downtime is acceptable
--downtime per year(24*365,5-nines means 99.999% up-time)
select 60*24*365*(1-0.99999) --5.25600 minutes
select 60*24*365*(1-0.9999) --52.5600 minutes
select 24*365*(1-0.999) --8.760 hours
1.2、RPO(Recovery Point Objective),数据丢失,how much data or work it’s acceptable to lose
二、Recovery Models and Backup Types
2.1、Recovery Models(恢复模式)
完整:数据库中所有修改完整记录日志;仅在执行事务日志备份才截断日志
大容量日志:部分修改(比如索引重建或批量导入)能最小化记录日志;仅在执行事务日志备份才截断日志
简单:部分修改(比如索引重建或批量导入)能最小化记录日志;进行检查点(checkpoint)操作时会截断日志;不能进行事务日志备份
总之,如果你的数据库使用完整/大容量日志恢复模式,你必须周期性的执行事务日志备份,否则事务日志会不断的增长。
2.1、Backup types(备份类型)
完整:备份整个数据库,它是其他备份的基础。完整备份会备份数据文件中的所有数据+部分事务日志记录。事务日志记录用于恢复此数据库时恢复到事务一致性。完整备份不会截断事务日志,实际上它不会以任何方式影响事务日志。
事务日志:备份自上次事务日志备份后产生的所有事务日志记录。事务日志备份不能执行,直到一个完整备份已经执行;但是一旦完整备份执行,事务日志备份和完整备份不再受任何一方影响。
差异:备份自上次完整备份后所有变更的数据。差异备份是累积的,而不是增量的。差异备份用于加快恢复速度,它本质上等效于最近一次完整备份之后的所有事务日志备份的净效果。
其他更小粒度的数据备份:完整文件组备份、完整文件备份、差异文件组备份、差异文件备份
灾难发生的第一件事是执行一个事务日志备份(尾日志备份),捕获自上次调度事务日志备份之后的所有事务日志。然后按照完整备份+差异备份+事务日志备份+尾日志备份的顺序恢复。
三、Planning a Recovery Strategy
你必须明确需要多快恢复数据库到某个Point,然后使用这些信息设置备份并且在灾难来袭时可以正确恢复。
就数据丢失而言,能容忍的数据丢失定义了事务日志备份的执行频率。如果能容忍15分钟的数据丢失,那么你必须至少每15分钟执行一次事务日志备份。如果零容忍数据丢失,依赖事务日志备份是很危险的,因为灾难可能破坏数据和日志文件,以致无法进行尾日志备份。这种情况下,你应该选择数据镜像、AlwaysOn等同步技术。
就停机时间而言,能容忍的停机时间定义了整个恢复序列完成需要多快,从最近的完整备份到最后的事务日志备份恢复。这意味着你将不得不对恢复进行测试,以确保在最坏的情况下可以在停机时间内恢复。
3.1、恢复策略
1、定义数据库的停机时间和数据丢失需求
2、计算满足步骤1所需的恢复
3、计算满足步骤2所需的备份
4、测试恢复序列确保其满足步骤1的条件
5、如果恢复序列不满足步骤1,则返回到步骤3(或者推迟停机需求,或提供一个高可用解决方案允许快速故障转移到数据库的冗余副本)
四、Essential BACKUP Options
COMPRESSION:压缩备份,减小备份文件,加快备份恢复速度
COPY_ONLY:对于周期备份计划,想单独获取一个备份文件,使用此选项不影响差异备份基准/事务日志备份链
DESCRIPTION and File Names:备份描述,并提供明了的文件名称
CHECKSUM:写入介质前检查校验和
STATS:打印执行进度
五、Backup Testing for Validation
如果你的备份有使用CHECKSUM选项,你至少应该做类似的事情:
RESTORE VERIFYONLY
FROM DISK = N'F:\SQLskills\20130609_SalesDB_Full.bck'
WITH CHECKSUM;
GO
最好是实际执行恢复操作,使用CHECKSUM选项;然后运行一致性检查(DBCC CHECKDB),以确保你将使用的备份都有效。
如果你发现你的备份损坏了,你可以进行新的备份,或者使用"相对旧"的备份,这些备份是你一直保留的。
六、Backup Storage and Retention
6.1、备份存储
存储备份的最糟糕的地方就是与数据库本身相同的I/O子系统。
一个常见的备份存储策略:首先备份到本地磁盘存储,备份到网络共享,或者备份本地存储然后拷贝到网络共享,然后将备份拷贝到线上归档系统并且创建一个离线备份。
6.2、备份保持期
如果你不能使用最新的完整备份,那么最好就是使用它之前的那个完整备份,然后结合其他的差异+事务日志备份,你就可以恢复数据。
如果备份策略是完整备份/周+差异备份/天+事务日志备份/30分钟,我会尽量保持线上一个月的备份,线下三个月的备份。
总结
1、什么是停机时间(RTO)和数据丢失(RPO)需求,为什么它们对你的数据库很重要
2、三种恢复模式,它们是如何影响日志和日志备份的;三种主要的备份类型(完整、差异、事务日志)
3、如何设计一个将RPO和RTO需求考虑在内的恢复策略,并依此创建备份策略
4、常用的备份选项
5、验证备份文件确保在你需要的时候,它们可用
6、存储备份文件的多个副本(本地/远程,线上/线下);备份保持期,灾难恢复时可以使用"相对旧"的备份来恢复
【译】The Accidental DBA:SQL Server Backup的更多相关文章
- 【译】第二篇 SQL Server代理作业步骤和子系统
本篇文章是SQL Server代理系列的第二篇,详细内容请参考原文. SQL Server代理作业由一系列的一个或多个作业步骤组成.一个作业步骤分配给一个特定的作业子系统(确定作业步骤去完成的工作). ...
- 【译】第一篇 SQL Server代理概述
本篇文章是SQL Server代理系列的第一篇,详细内容请参考原文. SQL Server代理是SQL Server的作业调度和告警服务,如果使用得当,它可以大大简化DBA的工作量.SQL Serve ...
- 【译】第九篇 SQL Server安全透明数据加密
本篇文章是SQL Server安全系列的第九篇,详细内容请参考原文. Relational databases are used in an amazing variety of applicatio ...
- 【译】第一篇 SQL Server安全概述
本篇文章是SQL Server安全系列的第一篇,详细内容请参考原文. Relational databases are used in an amazing variety of applicatio ...
- 【译】第二篇 SQL Server安全验证
本篇文章是SQL Server安全系列的第二篇,详细内容请参考原文. 验证是检验主体的过程.主体需要唯一标识,那样SQL Server可以确定主体有哪些权限.正确的验证是提供安全访问数据库对象的必要的 ...
- 【译】第九篇 SQL Server代理了解作业和安全
本篇文章是SQL Server代理系列的第九篇,详细内容请参考原文 在这一系列的上一篇,学习了如何在SQL Server代理作业步骤启动外部程序.你可以使用过时的ActiveX系统,运行批处理命令脚本 ...
- SQL Server Backup & Restore
USE [master]; GO CREATE DATABASE test; GO CREATE DATABASE test2; GO BACKUP DATABASE test TO DISK = ' ...
- 【译】The Accidental DBA:Troubleshooting
最近重新翻看The Accidental DBA,将Troubleshooting部分稍作整理,方便以后查阅.此篇是Part 3Part 1:The Accidental DBA:SQL Server ...
- 【译】The Accidental DBA:Troubleshooting Performance
最近重新翻看The Accidental DBA,将Troubleshooting Performance部分稍作整理,方便以后查阅.此篇是Part 2Part 1:The Accidental DB ...
随机推荐
- Oozie调用Spark实例
oozie调用spark有三样是必须有的: workflow.xml(不可改名) , job.properties(可改名) , jar包(自备). 1.workflow.xml workflow.x ...
- JavaScript+html5 canvas实现本地截图教程
这篇文章主要介绍了JavaScript+html5 canvas实现本地截图教程,对截图功能感兴趣的小伙伴们可以参考一下 最近有时间了解了下html5的各API,发现新浪微博的头像设置是使用canva ...
- js 在遍历时只会显示最后一个遍历到的结果
在做项目时遇到了一个关于遍历的问题, 前提是:在ul中有n个li每个li从后台获取的数据中有一个sign的字段,当sign等于0时(li未被点击过)li会显示一个红点,当sign不等于0时(li已被点 ...
- hdu 6107--Typesetting(倍增)
题目链接 Problem Description Yellowstar is writing an article that contains N words and 1 picture, and t ...
- Java内存模型_基础
线程之间的通信机制有两种: 1.共享内存:线程之间共享程序的公共状态,通过写-读内存中的公共状态进行隐式的通信. 2.消息传递:线程之间没有公共状态,线程之间必须发送消息来显示的进行通信 同步:是指程 ...
- String 操作
String nbbms ="col_1_1_1_1,col_2_2_2_@,"; @ 实现将最后一个逗号去掉:从第一个字符串到最后一个逗号之前的字符串截取[java] Strin ...
- 两个input在同一行连着不留缝隙
方法1:让两个input 连在一起写 不换行 <div class="inputDiv"> <input type="text" placeh ...
- Spring之声明式事务
在讲声明式事务之前,先回顾一下基本的编程式事务 编程式事务: //1.获取Connection对象 Connection conn = JDBCUtils.getConnection(); try { ...
- zbrush曲面增加厚度
把曲面增加厚度方便雕刻机雕刻. 可以使用zbrush中的边循环功能. 1.准备好需要增加厚度的曲面,把曲面的边缘调整好,尽量的变得平滑. 2.将模型导入到zbrush中,开启双面显示,以方便观察模型的 ...
- 比较两个date返回日期相差天数
public static int daydiff(Date fDate, Date oDate) { Calendar aCalendar = Calendar.getInstance(); aCa ...