【译】The Accidental DBA:SQL Server Backup

时间:2021-06-21 15:30:19

最近重新翻看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、存储备份文件的多个副本(本地/远程,线上/线下);备份保持期,灾难恢复时可以使用"相对旧"的备份来恢复