为什么简单恢复模式模式真的是坏主意?

几个星期前一个网友问我,设置数据库恢复模式为简单是否是个好的做法,还有这个做法有什么缺点?

我不能特别强调,但对于OLTP工作负荷(典型读写操作)的数据库,使用简单恢复模式真的不是好主意。而且设置数据库模式为简单真的……(自己想象省略号是啥)。但我不想在这篇文章里说明这个事实,我只想向你展示下,在OLTP数据库运行简单恢复模式,有什么副作用。

你的备份/还原策略——简单恢复模式

当我进行SQL Server体检时,或者当我进行现场客户咨询时,有时我会看到生产OLTP数据库在简单恢复模式里运行,我被彻底打败了!你在和你的生活和工作开玩笑!

当我和DBA们谈论这个问题时,他们大多说,设置数据库为简单恢复模式是因为它们有自增长的事务日志问题。很多人他们还不知道可以通过定期日志文件备份来保持事务日志大小可控。这也是默认完整恢复模式的重要前提:定期事务日志备份!

在简单恢复模式里,你不需要任何事务日志备份(也不可能备份),因为SQL Server自己为你管理事务日志, 且定期覆盖它。作为副作用,你不需要事务日志备份,你的事务日志不会增长。

但缺点是什么?你不能进行事务日志备份!定期事务日志备份是任何OLTP数据库的最重要的一部分——不管你使用的是哪个关系数据库(RDBMS)!当你在简单恢复模式里运行你的数据库,你只能进行完整和差异数据库备份。没别的!

但现在假设你的最后完成或差异比分是几天前(甚至几个星期前),现在因为一些问题(用户误操作,损坏的数据库等等)。你必须还原你的数据库。哈!你的数据丢失会很大,因为自上一次备份后的数据会直接丢失!

但当你进行定期事务日志备份(你使用完整恢复模式),在你要还原数据库的时候,情况就完全不一样。因为当你还原上一次完整和差异备份,你也可以还原所有各个随后发生的事务日志备份。这就是说你会尽可能丢失更少的数据,因为你已经进行了定期和频繁的事务日志备份。

多少频率?这取决于你打算丢失多少数据。这也是你所谓的恢复点目标(Recovery Point Objective (RPO))。这主要取决于你的业务需求。我见过每小时,每15分钟,甚至每分钟备份事务日志的用户。而且事务日志还在继续进行:一个接一个的备份。这真的取决于你的RPO,还有你投入的资金。数据永不丢失(每个业务都想这样)是机会不可能的,而且非常昂贵……

你的高可用性(HA)选项——没有!

当你在简单恢复模式里运行你的数据库,你的高可用性选项也非常有限。几乎当下SQL Server每个HA技术(AlwaysOn 可用性组,数据库镜像,事务日志传递)都依赖于事务日志和定期事务日志备份。如果你想使用可用性组或数据库镜像,你的数据库要运行在完整恢复模式。其他模式不支持,技术上也是不可能的。

如果你想使用事务日志传递(还是个很好的技术!)你要在大容量日志模式里运行你的数据库。如果你使用简单,你不能使用事务日志传递。下次你想修改你的数据库恢复模式是就要考虑下它的副作用。

小结

说实话:如果你有生产OLTP数据库,并且你在乎你的数据,你必须使用完整恢复模式。没有什么取决于……的建议。设置数据库为简单并不是好的主意。因此下次你想修改数据库恢复模式时,认真考虑下这些事情。

原文链接

http://www.sqlpassion.at/archive/2016/11/14/why-the-recovery-model-simple-is-a-really-bad-idea/

posted @ 2016-11-22 12:29  Woodytu  阅读(2132)  评论(0编辑  收藏  举报