前言
一个SQLSERVER数据库会处于很多种状态,例如 ONLINE 、RESTORING 、RECOVERING 、RECOVERY_PENDING 、SUSPECT、EMERGENCY 、OFFLINE等等。
只有在ONLINE的状态下,数据库才能被正常访问。
下图主要反映了数据库的主要状态之间的切换路径
下面说一下这些状态:
RECOVERING:正在恢复
SQLSERVER正做数据库修改的时候,是先写日志,然后再修改内存中的数据页。至于硬盘上的数据页内容,将在检查点或者是SQLSERVER做LAZY WRITE的时候完成。所以在大部分时间,都会有一些硬盘上的数据不是最新的版本。如果数据库在这种时间点被关闭,下次SQLSERVER重新打开数据库的时候,为了维护数据库的一致性,SQLSERVER必须做两件事情:
- 1、重做redo
- 2、回滚和撤销 undo/rollback
在上次数据库被关闭的时候,可能有一些修改已经在数据页上完成,但是事务本身没有提交。对于这些做到一半的事务,SQLSERVER一律回滚,以保证数据库事务的一致性。所以磁盘里被改过的数据还要再改过来。
做这两件事情的过程,叫做数据库恢复。只有经过恢复的数据库,才能保证是一个“一致的”数据库,才能被安全地访问。
从图中可以看出,下面的动作会让SQLSERVER决定对数据库做恢复
- &#x