【译】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 ...
随机推荐
- 第11天:JS中变量、字符串基础知识
一.js简介用来制作页面交互效果,提高用户体验. js页面效果:轮播图.选项卡.地图.表单验证javascript是弱变量类型的语言,变量只需要用var来声明.而java要根据变 量类型来声明, in ...
- 微信app支付android客户端以及.net服务端实现
由于公司运营需要,需要在客户端(android/ios)增加微信以及支付宝支付,在调用微信app支付时遇到一些问题,也算是一些踩过的坑,记录下来 ,希望能对.net开发者服务端网站更快的集成微信app ...
- eclipse中使用Maven管理java工程设置jdk版本为jdk1.8
使用Maven管理Java工程时,maven可以自动下载工程中依赖的jar包,这对于大型的项目非常方便.但在初次使用eclipse新建maven工程时遇到一些问题,我的jdk安装的是1.8版本,在配置 ...
- Linux基础教程
Linux基础教程之<Linux就该这么学>之学习笔记第一篇... ========================= 一.Basic Linux Commands 基本的Linux ...
- 渗透常用手工SQL注入语句合集
1.判断有无注入点; and 1=1 and 1=2 2.猜表一般的表的名称无非是admin adminuser user pass password 等..and 0<>(select ...
- 【渗透课程】第二篇下-HTTP协议的请求与响应深度剖析
[渗透课程]第二篇下-HTTP协议的请求与响应深度剖析 HTTP1.1目前支持以下7种请求方法: 常见的MIME类型如下: 第一个数字有五种可能的取值: 目录 什么是请求方法?什么是请求头? HTTP ...
- 关于aop的两种方式-基于注解和基于aspectj
spring的aop确实好用,能够在不影响业务功能的情况下,实现一些低耦合的功能. 而aop又有两种常用的实现方式,一种是用aspectj表达式去匹配,实现全局的配置,表达式还可以使用与或非符号去连接 ...
- 在Linux 环境下搭建 JDK 和 Tomcat
在Linux 环境下搭建 JDK 和 Tomcat 参考地址:http://www.cnblogs.com/liulinghua90/p/4661424.html [JDK安装] 1.首先下载 ...
- solr-geohsah 按照距离搜索分组
通过solr的domain-import,将mysql的数据通过查询,导入到solr中.java通过使用solrj,链接solr,调用domaininport,并将分页参数设置到domain-impo ...
- 一款代码扫描工具 火线!!!! fireline
1. 在火线官网进行火线相关文件的下载,下载后的文件为fireline.jar 2.运行fireline.jar文件前请先确认系统环境中已安装Java JDK. java-version 查看 3 ...