最近重新翻看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的更多相关文章

  1. 【译】第二篇 SQL Server代理作业步骤和子系统

    本篇文章是SQL Server代理系列的第二篇,详细内容请参考原文. SQL Server代理作业由一系列的一个或多个作业步骤组成.一个作业步骤分配给一个特定的作业子系统(确定作业步骤去完成的工作). ...

  2. 【译】第一篇 SQL Server代理概述

    本篇文章是SQL Server代理系列的第一篇,详细内容请参考原文. SQL Server代理是SQL Server的作业调度和告警服务,如果使用得当,它可以大大简化DBA的工作量.SQL Serve ...

  3. 【译】第九篇 SQL Server安全透明数据加密

    本篇文章是SQL Server安全系列的第九篇,详细内容请参考原文. Relational databases are used in an amazing variety of applicatio ...

  4. 【译】第一篇 SQL Server安全概述

    本篇文章是SQL Server安全系列的第一篇,详细内容请参考原文. Relational databases are used in an amazing variety of applicatio ...

  5. 【译】第二篇 SQL Server安全验证

    本篇文章是SQL Server安全系列的第二篇,详细内容请参考原文. 验证是检验主体的过程.主体需要唯一标识,那样SQL Server可以确定主体有哪些权限.正确的验证是提供安全访问数据库对象的必要的 ...

  6. 【译】第九篇 SQL Server代理了解作业和安全

    本篇文章是SQL Server代理系列的第九篇,详细内容请参考原文 在这一系列的上一篇,学习了如何在SQL Server代理作业步骤启动外部程序.你可以使用过时的ActiveX系统,运行批处理命令脚本 ...

  7. SQL Server Backup & Restore

    USE [master]; GO CREATE DATABASE test; GO CREATE DATABASE test2; GO BACKUP DATABASE test TO DISK = ' ...

  8. 【译】The Accidental DBA:Troubleshooting

    最近重新翻看The Accidental DBA,将Troubleshooting部分稍作整理,方便以后查阅.此篇是Part 3Part 1:The Accidental DBA:SQL Server ...

  9. 【译】The Accidental DBA:Troubleshooting Performance

    最近重新翻看The Accidental DBA,将Troubleshooting Performance部分稍作整理,方便以后查阅.此篇是Part 2Part 1:The Accidental DB ...

随机推荐

  1. JavaScript模块化 --- Commonjs、AMD、CMD、es6 modules

    随着前端js代码复杂度的提高,JavaScript模块化这个概念便被提出来,前端社区也不断地实现前端模块化,直到es6对其进行了规范,下面就介绍JavaScript模块化. 这篇文章还是希望能给大家一 ...

  2. tensorflow笔记(五)之MNIST手写识别系列二

    tensorflow笔记(五)之MNIST手写识别系列二 版权声明:本文为博主原创文章,转载请指明转载地址 http://www.cnblogs.com/fydeblog/p/7455233.html ...

  3. C/C++资料网站

    1.C语言基础知识讲解 http://c-faq-chn.sourceforge.net/ccfaq/node1.html 2.C++参考手册中文版 http://zh.cppreference.co ...

  4. JS中的事件以及DOM 操作

    [DOM树节点] DOM节点分为三大节点:元素节点,文本节点,属性节点. 文本节点,属性节点为元素节点的两个子节点通过getElment系列方法,可以去到元素节点 [查看节点] 1 document. ...

  5. 一起来学linux:shell script(一)关于变量

    p { margin-bottom: 0.25cm; line-height: 120% } (一)首先来看什么是变量,在shell中打印出变量采用的是echo $path或者echo ${path} ...

  6. JAVA线程池应用的DEMO

    在做很多高并发应用的时候,单线程的瓶颈已经满足不了我们的需求,此时使用多线程来提高处理速度已经是比较常规的方案了.在使用多线程的时候,我们可以使用线程池来管理我们的线程,至于使用线程池的优点就不多说了 ...

  7. log4j与log4j.properties的配置

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt233 摘要: 一.配置步骤 1.  在应用程序中使用log4j 2.  把l ...

  8. 设置SQL Server 2005数据库使之可以远程连接

    1. 开启sql2005远程连接功能,开启办法如下: 配置工具->SQL Server外围应用配置器->服务和连接的外围应用配置器->打开MSSQLSERVER节点下的Databas ...

  9. SVN服务器搭建(一)

    本教程以64位win10系统为例在本地搭建svn服务器,安装完成后,即可访问本地svn服务器上的项目,也可以访问网上其他svn服务器上的项目. 一.首先准备三个软件: 1.VisualSVN-Serv ...

  10. 转:【Java集合源码剖析】Hashtable源码剖析

    转载请注明出处:http://blog.csdn.net/ns_code/article/details/36191279 Hashtable简介 Hashtable同样是基于哈希表实现的,同样每个元 ...