今天发现一个很好的图,非常清晰的展示了sqlserver的各种状态及切换原因/方法。
简单介绍一下各种状态:
ONLINE(在线):数据库正常运行。只有数据库成功恢复后会进入这个状态,也只有这种状态数据库是正常可用的。
RESTORING(正在还原):正在执行数据库还原。如果还原时使用NORECOVERY 模式,数据库会一直是该状态;如果使用WITH RECOVERY的模式,还原完成后会进入RECOVERING状态。
RECOVERING(正在恢复):执行CREATE DATABASE 、DATABASE STARTUP、ALTER ONLINE和RESTORE WITH RECOERY操作都会经过这个状态。如果遇到问题就进入RECOVERY_PENDING,如果成功则变成ONLINE。
RECOVERY_PENDING(等待恢复):数据库在恢复时遇到资源相关错误,恢复进程被挂起,最可能的原因是丢失数据文件或日志文件。要不用ALTER ONLINE命令使SQLSERVER做一次上线,要不就只能放弃当前数据库,还原备份。
SUSPECT(置疑):恢复时由于数据文件或日志文件损坏而失败,会进入SUSPECT状态,此时DBA只有3种选择。
- 再做一次ALTER ONLINE ,让SQLSERVER再做一次恢复
- 放弃当前数据库,还原备份
- 将数据库状态设置为EMERGENCY,继续尝试修复数据库
EMERGENCY(紧急):这个状态下,SQLSERVER对没有完成恢复的数据库开放一个只读窗口,让DBA在没有备份的情况下尽量挽救数据。
OFFLINE(脱机):离线状态,数据库不能被访问。可以使用ALTER ONLINE命令让数据库开始恢复从而进入ONLINE状态。