几个星期前一个网友问我,设置数据库恢复模式为简单是不是个好的作法,还有这个作法有什么缺点?web
我不能特别强调,但对于OLTP工做负荷(典型读写操做)的数据库,使用简单恢复模式真的不是好主意。并且设置数据库模式为简单真的……(本身想象省略号是啥)。但我不想在这篇文章里说明这个事实,我只想向你展现下,在OLTP数据库运行简单恢复模式,有什么反作用。sql
当我进行SQL Server体检时,或者当我进行现场客户咨询时,有时我会看到生产OLTP数据库在简单恢复模式里运行,我被完全战胜了!你在和你的生活和工做开玩笑!数据库
当我和DBA们谈论这个问题时,他们大多说,设置数据库为简单恢复模式是由于它们有自增加的事务日志问题。不少人他们还不知道能够经过按期日志文件备份来保持事务日志大小可控。这也是默认完整恢复模式的重要前提:按期事务日志备份!ide
在简单恢复模式里,你不须要任何事务日志备份(也不可能备份),由于SQL Server本身为你管理事务日志, 且按期覆盖它。做为反作用,你不须要事务日志备份,你的事务日志不会增加。idea
但缺点是什么?你不能进行事务日志备份!按期事务日志备份是任何OLTP数据库的最重要的一部分——无论你使用的是哪一个关系数据库(RDBMS)!当你在简单恢复模式里运行你的数据库,你只能进行完整和差别数据库备份。没别的!spa
但如今假设你的最后完成或差别比分是几天前(甚至几个星期前),如今由于一些问题(用户误操做,损坏的数据库等等)。你必须还原你的数据库。哈!你的数据丢失会很大,由于自上一次备份后的数据会直接丢失!日志
但当你进行按期事务日志备份(你使用完整恢复模式),在你要还原数据库的时候,状况就彻底不同。由于当你还原上一次完整和差别备份,你也能够还原全部各个随后发生的事务日志备份。这就是说你会尽量丢失更少的数据,由于你已经进行了按期和频繁的事务日志备份。事务
多少频率?这取决于你打算丢失多少数据。这也是你所谓的恢复点目标(Recovery Point Objective (RPO))。这主要取决于你的业务需求。我见过每小时,每15分钟,甚至每分钟备份事务日志的用户。并且事务日志还在继续进行:一个接一个的备份。这真的取决于你的RPO,还有你投入的资金。数据永不丢失(每一个业务都想这样)是机会不可能的,并且很是昂贵……get
当你在简单恢复模式里运行你的数据库,你的高可用性选项也很是有限。几乎当下SQL Server每一个HA技术(AlwaysOn 可用性组,数据库镜像,事务日志传递)都依赖于事务日志和按期事务日志备份。若是你想使用可用性组或数据库镜像,你的数据库要运行在完整恢复模式。其余模式不支持,技术上也是不可能的。it
若是你想使用事务日志传递(仍是个很好的技术!)你要在大容量日志模式里运行你的数据库。若是你使用简单,你不能使用事务日志传递。下次你想修改你的数据库恢复模式是就要考虑下它的反作用。
说实话:若是你有生产OLTP数据库,而且你在意你的数据,你必须使用完整恢复模式。没有什么取决于……的建议。设置数据库为简单并非好的主意。所以下次你想修改数据库恢复模式时,认真考虑下这些事情。
http://www.sqlpassion.at/archive/2016/11/14/why-the-recovery-model-simple-is-a-really-bad-idea/