故障恢复和恢复模式(Crash Recovery & Recovery Models)
数据库的恢复模型是否影响故障恢复,在简单恢复模式里,你是否会丢失事务?在今天的文章里我想谈下这点,详细讨论下。
恢复模式(Recovery Models)
对于这个问题的最简单的答案是不会:恢复模型不会影响故障恢复,只用简单恢复模式你不会丢失事务。那数据库恢复模型的目的是什么?
你用恢复模型你只告诉SQL Server如何处理事务日志。SQL Server提供下列3个恢复模型:
- 完整(FULL)
- 简单(SIMPLE)
- 大容量日志(BULK_LOGGED)
我们来细谈下。每个新建的数据库默认是完整恢复模式(在完整数据库备份后!)。完整恢复模式意味着你需要进行定期事务日志备份。在事务日志备份后,SQL Server可以标记VLFs(虚拟日志文件(Vitural Log Files))为不活动,在下个检查点可以重写它们。如果你不进行定期的事务日志备份,SQL Server不能重写VLFs(因为它们还是活动的),这样的话你的事务日志会增长。
增长事务日志很慢(因为需要零值初始化(Zero Initialization))并导致日志碎片(Log Fragmentation)(大量不同的VLFs)。定期日志备份的另一个好处是你可以进行所谓的时间点恢复(Point in Time Recovery),即恢复你的数据库到指定的时间点。
如果你不在乎你的数据(我会被大家笑话的!),你可以把你的数据库恢复模式切换为简单。使用简单恢复模式,你不需要麻烦自己进行日常事务日志备份,因为在检查点(CHECKPOINT)SQL Server会标记VLFs为不活动。如果你没有长时间运行的事务,在这个恢复模式里,你的事务日志不会增长。简单恢复模式的一个副作用就是你不能进行时间点恢复(Point in Time Recovery)。
当你的数据库崩溃或损坏,你只能恢复你的数据库到你最近的完整数据库备份,外加可用的差异备份。在这个情况下你丢失多少数据取决于你最近的完整/差异备份的情况。对于OLTP数据库,我从不推荐简单恢复模式。在数据仓库的情景下倒可以使用,因为存储的数据基本不会有啥改变。
最后SQL Server还提供你大容量日志恢复模式。在SQL Server里,当你运行特定的操作,它们可以是最小化日志(Minimally Logged)(在SQL Server里没有无日志操作!)。如果你用的是大容量日志恢复模式。最小化日志意味着SQL Server不会写各个事务日志记录到事务日志,当你进行这样操作的时候。
SQL Server只通过所谓的BCM页(大容量修改映射页(Bulk Changed Map Page))标记修改的区为已修改。这样的话,当你进行最小化日志操作时,你的事务日志不会变得那么大。不好的副作用是在那期间(数据库运行在大容量日志恢复模式)你不能进行时间点恢复。因此在这个恢复模式下,你应该尽量缩短它的时间。例如:当你在运行最小化日志操作的时候,你才把数据库从完整恢复模式切换回大容量日志模式(运行完后切换回完整恢复模式)。
当你运行在大容量日志恢复模式里,你还是要进行事务日志备份。但它们的大小不会变小,因为SQL Server复制修改的分区(基于BCM页)到事务日志备份——如你从下图看到的一样。

小结
故障恢复过程绝不会受恢复模式影响。恢复模式志影响你的事务日志,还有你是否能进行时间点恢复。通常建议你应该使用默认的完整恢复模式加定期事务日志备份。因为用这个方法你可以最小化你的数据丢失。
感谢关注!
原文链接:
https://www.sqlpassion.at/archive/2016/05/23/crash-recovery-recovery-models
故障恢复和恢复模式(Crash Recovery & Recovery Models)的更多相关文章
- 二:Recovery models(恢复模式)
For each database that you create in SQL Server, with the exception of the system databases, you can ...
- Mac OS 10.12 - 在VMwear Workstation12.5.2中以两种方式进入恢复模式(Recovery)!!!
注意:如果你打算安装Mac OS10.12 到虚拟机里面学习,那么我强烈建议你在没有安装任何其它软件之前,按照我这篇博客来进入恢复模式(Recovery),禁用Rootless机制!!!这样处理后,你 ...
- 在VMwear 11中的Mac OS X 10.11+ 进入恢复模式(Recovery HD)
1,选中要启动的虚拟机,随后点击VM菜单的启动按钮后面向下箭头,随后点击菜单项”打开电源时进入固件“. 2,在虚拟机里面,用上下键移动到”Enter setup“上,随后继续下一步! 3,选中”Boo ...
- Android设备运用Clockworkmod Recovery恢复模式安装定制的Rom
Clockworkmod Recovery是一个由Cyanogen团队开发的用于Android设备的第三方定制Recovery恢复模式,也称为CWM Recovery,具体它有什么用处呢?请看关于Go ...
- 关于Google Android平台的ClockworkMod Recovery恢复模式
lockworkMod Recovery,它也被称为Clockwork与CWM,它是装载Google Android操作系统设备的一个自定义的Recovery恢复模式,它可以使得相关Android设备 ...
- Oracle实例的恢复、介质恢复( crash recovery)( Media recovery)
实例的恢复( crash recovery) 什么时候发生Oracle实例恢复? shutdown abort; 数据库异常down掉(机器死机,掉电...) 实例恢复的原因是数据有丢掉,使用redo ...
- 进入恢复模式(Recovery HD)
进入恢复模式(Recovery HD) 1,选中要启动的虚拟机,随后点击VM菜单的启动按钮后面向下箭头,随后点击菜单项”打开电源时进入固件“. 2,在虚拟机里面,用上下键移动到”Enter setup ...
- SQL Server恢复软件SysTools SQL Recovery/SysTools SQL Server Recovery Manager
SQL Server恢复软件SysTools SQL Recovery/SysTools SQL Server Recovery Manager http://www.systoolsgroup.co ...
- SQL Server中的事务日志管理(6/9):大容量日志恢复模式里的日志管理
当一切正常时,没有必要特别留意什么是事务日志,它是如何工作的.你只要确保每个数据库都有正确的备份.当出现问题时,事务日志的理解对于采取修正操作是重要的,尤其在需要紧急恢复数据库到指定点时.这系列文章会 ...
随机推荐
- 无参数实例化Configuration对象以及addResource无法加载core-site.xml中的内容
core-site.xml中配置的fs.default.name是hdfs://localhost:9000.但是这里读取出来的是本地文件系统.原因暂不知?有谁知道?
- Angular 1.x 升级到 Angular 2
原项目用ng1.5写的,现在改成ng2.0了,踩了不少坑,不过都忘记了. 如果你也正好要做这个工作,正好看到这个文章,不妨参考下. AngularJs 1.x -> 2.0 ng-repeat ...
- canvas初探3:画方画圆
绘制矩形的方法,strokeRect().fillRect()及clearRect(). 方法 描述 strokeRect(double x,double y,double w,double h) 使 ...
- SDOI 2016 生成魔咒
题目大意:一个字符串,刚开始为空,依次在后面添加一个字符,问每次添加完字符后本质不同的字符串有多少种 后缀自动机裸题,添加字符时,更新的结点个数即为新增加的子串 #include<bits/st ...
- ant 自动化编译
bulid.xml配置: <?xml version="1.0" encoding="UTF-8" ?> <project name=&quo ...
- java 引入自定义字体font后出现的硬盘吃光的问题
有个需求要用美术字体在图片上写字 用自定义的文字有两个方法: 1. Font dynamicFont = Font.createFont(Font.TRUETYPE_FONT, InputStream ...
- Windows Azure 服务总线和物联网
机器到机器 (M2M) 计算正迅速成为一种技术,所有开发人员和架构师需要拥抱. 许多研究表明一个未来世界的数百亿美元的设备 (在地球上的每一个人的出现).MSDN杂志有2篇文章讨论Azure服务总线和 ...
- 单元测试模拟框架:Nsubstitute
Nsubstitute是一个开源的框架,源码是C#实现的.你可以在这里获得它的源码:https://github.com/nsubstitute/NSubstitute NSubstitut ...
- 对改善ABP的一些建议
园子里有不少同学对ABP框架很感兴趣,而且也已经将ABP用在了商用项目中,有些可能还在操练阶段.一般来说,我们使用ABP默认的一些功能已经足够了,但还是有很多人想要自己拓展一些功能而自己实现不了或者说 ...
- [Voice communications] 声音的滤波
本系列文章主要是介绍 Web Audio API 的相关知识,以及 web语音通信 中会遇到的一些问题,阐述可能存在错误,还请多多斧正! 通过设备获取音频流会不可避免的渗入一些杂音,这些杂音可能来自你 ...