SQLSERVER 运维日记-数据库状态

背景

新年伊始,小伙伴是否是还处于假期综合症的状态。咱们在平常运维数据库的时候,会时常查看数据库的状态,检查数据库是否正常运行。对于这些状态的熟悉对于咱们处理数据库没法访问的数据库

问题很是重要。当数据库忽然变成一个你没有见到过的状态时,你就会很是慌乱,手足无措。这里给小伙伴普及下数据库的各个状态。已经他们是怎么转换的运维

 

案例

 

前两天在处理一个客户问题,忽然某个数据库没法访问了。数据库下面的表也没法查看。从SSMS界面上看数据库是正常的状态(就是数据库名字后面没有显示特别的状态)。查看ide

SYS.DATABASES 查看状态列,发现是ONLINE。此时其余数据库是正常的,就这个库有问题。确定是数据库状态不对。 那么问题出在哪里呢? 仔细观察发现这个问题的数据库 collation_name 是null 值。学习

原来问题在这,ui

刚刚联机的数据库不必定立刻能接受链接。 要肯定数据库什么时候能够接受链接,能够查询 sys.databases 的 collation_name 列或 DATABASEPROPERTYEX 的 Collation 属性。 在数据库排序规则返回非 Null 值以后,数据库就能够接受链接了。spa

 

因而用命令把数据库设置为脱机,而后立刻联机,再查看sys.databases 的 collation_name 列 变成了非null值。此时数据库恢复正常。3d

 

 

状态的转换

数据库有不少状态。他们是如何在这些状态之间进行切换的呢?下面这个图很是清晰的标示了各个状态的切换。在我刚学习数据库的时候,这个图给了我很大的帮助,日志

让我对数据库各个状态的转换有了很清楚的认识。blog

 

 

ONLINE (在线) 排序

数据库可正常运行

RESTORING (正在还原)

数据库正在还原,当咱们还原数据库使用NORECOVERY 模式时,数据库就会变成该状态

RECOVERING (正在恢复)

数据库启动,数据库建立,ALTER ONLINE,RESTORE WITH RECOERY 时,会通过这个状态,进行REDO,UNDO等操做。此时若是遇到问题就进入RECOVERY_PENDING。若是正常就会变成ONLINE。

RECOVERY_PENDING(等待恢复)

数据库在还原时遇到跟资源相关的错误,代表还原进程被挂起,数据库不能开始数据库的数据和日志的还原进程,这种状况下,最可能的缘由是丢失数据文件或日志文件。

SUSPECT  (置疑)

数据库可能损坏了

EMERGENCY (紧急)

供DBA用来修复数据库的状态

OFFLINE (脱机)

离线状态

 

总结

了解数据库处于的状态很是重要。咱们若是还不熟悉的小伙伴能够看看。

相关文章
相关标签/搜索