您可能会发现SQL Server数据库以特定的状态运行,如ONLINE、SUSPECT、OFFLINE或其他数据库状态。
如何查看SQL数据库状态?
您可以通过选择“sys. exe”中可用的“state_desc”列来查找所有SQL Server数据库的当前状态。数据库目录视图:
下面是显示所有数据库及其当前状态的屏幕截图。如您所见,大多数数据库处于ONLINE状态,有一个数据库处于restore状态。
要检查特定数据库的当前状态,使用DATABASEPROPERTYEX函数和' status '属性:
现在,让我们详细讨论所有七种SQL数据库状态、数据库进入特定状态时会发生什么情况、可能遇到的问题及其解决方案。
SQL Server数据库状态类型
1.在线
处于ONLINE状态的数据库是完全可用的,所有操作都可以访问它。在这种状态下,默认(即主)文件组联机,但可能仍需要完成数据库恢复的撤消阶段。
基本上,处于ONLINE状态的SQL数据库是健康的,功能正常。理想情况下,数据库在SQL Server上启动时应该移动到此状态。
2.离线
处于OFFLINE状态的SQL数据库将无法被用户访问。通过显式的用户操作将数据库设置为OFFLINE。在需要将db文件移动到新驱动器或阻止用户访问db时,将数据库状态更改为OFFLINE很有帮助。
将数据库状态设置为OFFLINE:
您也可以使用SQL Server Management Studio (SSMS)将数据库设置为OFFLINE状态。为此,右键单击数据库,单击任务,然后点击采取离线,如下图所示。
数据库的数据库状态(在我们的示例中是' DBLogTest ')设置为OFFLINE。
您可以使用以下命令使数据库联机:
或者,使用SSMS将数据库重新联机,方法是右键单击数据库,选择任务,然后单击将在线选择。
注意:如果SQL数据库被损坏,它也可能变成离线。在这种情况下,您可以尝试从备份中恢复数据库。如果此操作失败,则需要修复数据库。
3.恢复
当数据库恢复过程启动时,数据库将移动到恢复状态。这通常发生在从备份恢复db时。在此状态下,一个或多个数据文件(恢复主文件组的. mdf或.ndf),或者以OFFLINE模式恢复一个或多个辅助文件(.ndf)。
数据库进入还原状态后将不可用。使用“WITH RECOVERY”作为数据库恢复选项有助于在完成恢复过程后使数据库重新联机。但是,当使用“NORECOVERY”恢复选项恢复多个备份文件时,除非使用WITH RECOVERY选项到达最后一个备份文件,否则数据库将保持在restore模式。
有关如何使用RECOVERY和NORECOVERY执行数据库恢复的详细信息,请参阅本文链接。
有时候,SQL数据库卡在恢复状态。在这种情况下,您可以尝试删除数据库并从一个已知的备份副本恢复它。
4.恢复
重新启动SQL Server或将数据库附加到服务器时,数据库状态暂时变为恢复状态。当数据库进入恢复状态时,它被标记为“在恢复中”,并且在恢复过程完成之前仍然不可用。
在执行数据库恢复时,数据库可能会卡在recovery模式中。但是,数据库仍然处于恢复状态,并且会经历三个不同的阶段,这些阶段可以根据数据库的大小来完成。这些阶段包括分析,重做,撤销阶段。
脏页表(Dirty Page Table, DPT)是在分析阶段创建的,它有助于识别服务器崩溃期间的所有脏页。此外,在此阶段,将创建一个活动事务表(Active Transaction Table, ATT),以便在SQL Server停止时确定未提交的事务。
在Redo阶段,所有提交的事务都被回滚。
最后,数据库进入Undo阶段,此时回滚任何未提交的事务。
有时,您可能会发现数据库卡在在复苏”状态。由于事务日志文件过大、SQL Server错误等原因,可能会出现这种情况。在这种情况下,您必须耐心等待恢复过程完成。恢复过程完成后,数据库变为ONLINE。如果此过程失败,则数据库状态更改为SUSPECT或RECOVERY PENDING。
5.恢复挂起
当数据库不能联机时,它被标记为“RECOVERY PENDING”。
如果您需要修复卡在RECOVERY PENDING模式中的数据库,请参考此内容链接。
6.怀疑
当数据库恢复失败或数据库损坏时,它将进入SUSPECT模式。标记为SUSPECT的数据库不可用于用户访问。方法使数据库可用“恢复和恢复”方法或运行'带有REPAIR_ALLOW_DATA_LOSS的DBCC CHECKDB '。
要了解关于处于SUSPECT状态的数据库以及如何修复它的更多信息,请参考本文链接。
7.紧急
用户可以将数据库的状态更改为EMERGENCY,以修复或恢复数据库。将数据库设置为EMERGENCY状态,进入SINGLE_USER模式,并标记为READ_ONLY,限制只有sysadmin角色成员才能访问数据库。
将数据库置于这种状态的主要目的是对数据库的问题进行故障排除。例如,可以将进入SUSPECT模式的数据库设置为EMERGENCY状态,允许对该数据库进行只读访问。
设置db为EMERGENCY状态,使用如下命令:
刷新数据库,您将看到它被设置为EMERGENCY。
一旦数据库处于EMERGENCY状态,您可以通过执行DBCC CHECKDB命令来修复数据库损坏问题。但是,在执行该命令之前,请确保执行以下查询将db设置为SINGLE_USER模式:
数据库将进入SINGLE_USER模式。您现在可以使用“REPAIR_ALLOW_DATA_LOSS”运行DBCC CHECKDB命令。
注意:使用修复选项执行CHECKDB命令将删除损坏的数据或索引,使数据库保持一致,但会丢失一些数据。修复数据库而不丢失数据的更好替代方法是使用SQL修复工具,该工具可以帮助修复损坏的数据库并将其恢复到原始状态。
修复数据库后,将数据库设置为MULTI_USER模式:
数据库将被修复并上线。
如何检查SQL错误日志以确定数据库状态背后的原因?
查看SQL Server错误日志可以帮助您找到数据库没有联机或仍处于“恢复中”或“怀疑”模式的原因。要检查SQL错误日志,请执行以下步骤:
- 开放地对地导弹,扩大SQL Server代理,然后展开错误日志。
- 接下来,检查日志,找出数据库进入可疑模式的原因。应用过滤器可以快速发现数据库何时进入还原、怀疑或任何其他状态。中输入数据库名称“消息包含文本”“常规”部分下的文本框。接下来,选择应用过滤器复选框,然后单击好吧。
在我们的示例中,我们输入了' RecoveredDeletedData_Copy '来确定它进入restore模式的原因。
- 阅读屏幕底部给出的消息,找出db进入还原状态的原因。
数据库不上线怎么办?
如果数据库没有联机,请尝试从最近的备份恢复数据库。如果没有更新的备份,可能需要运行带有修复选项的DBCC CHECKDB命令来修复数据库。
使用REPAIR_ALLOW_DATA_LOSS选项运行CHECKDB命令可能导致数据丢失。一个更好的解决方案是使用SQL恢复工具这有助于重新获得对SQL数据库的访问权限,而不会增加数据丢失的风险。使用恒星修复MS SQL恢复数据库的所有数据完好无损。
结束
本指南解释了不同的SQL Server数据库状态,例如联机、脱机、正在恢复、正在恢复、待恢复、怀疑和紧急状态。它讨论了这些状态,以及如何从一种状态切换到另一种状态。此外,本文还讨论了在数据库进入某种状态后变得不可访问时可以做些什么来恢复数据库。
如果您的数据库似乎卡在这七种数据库状态中的任何一种,并且没有任何东西适合您,那么使用MS SQL的Stellar Repair可以证明是一个方便的工具。在数据库损坏的情况下,SQL修复工具可以帮助修复数据库文件(.mdf/.ndf)并将数据库恢复到原始形式,而不会丢失任何数据。