文件修复

SQL数据库状态-所有你需要知道的

简介:SQL Server中的数据库总是处于以下任何一种状态:ONLINE、SUSPECT、RESTORING、RECOVERING、RECOVERY PENDING、OFFLINE和EMERGENCY。本指南将解释这些SQL Server数据库状态。此外,还将讨论如果在不同状态之间移动时数据库变得不可访问,可以做些什么。您可以尝试使用Stellar Repair for SQL来恢复数据库,而不会出现过度停机和数据丢失的风险。请下载软件的演示版本,预览和验证可恢复的数据库对象的准确性。

免费下载
免费下载

您可能会发现SQL Server数据库以特定的状态运行,如ONLINE、SUSPECT、OFFLINE或其他数据库状态。

如何查看SQL数据库状态?

您可以通过选择“sys. exe”中可用的“state_desc”列来查找所有SQL Server数据库的当前状态。数据库目录视图:

SELECT name, state_desc FROM sys.databases

下面是显示所有数据库及其当前状态的屏幕截图。如您所见,大多数数据库处于ONLINE状态,有一个数据库处于restore状态。

数据库状态

要检查特定数据库的当前状态,使用DATABASEPROPERTYEX函数和' status '属性:

SELECT DATABASEPROPERTYEX ('DBLogTest', 'status');

当前数据库状态

现在,让我们详细讨论所有七种SQL数据库状态、数据库进入特定状态时会发生什么情况、可能遇到的问题及其解决方案。

SQL Server数据库状态类型

1.在线

处于ONLINE状态的数据库是完全可用的,所有操作都可以访问它。在这种状态下,默认(即主)文件组联机,但可能仍需要完成数据库恢复的撤消阶段。

基本上,处于ONLINE状态的SQL数据库是健康的,功能正常。理想情况下,数据库在SQL Server上启动时应该移动到此状态。

2.离线

处于OFFLINE状态的SQL数据库将无法被用户访问。通过显式的用户操作将数据库设置为OFFLINE。在需要将db文件移动到新驱动器或阻止用户访问db时,将数据库状态更改为OFFLINE很有帮助。

将数据库状态设置为OFFLINE:

将DBLogTest设置为离线

您也可以使用SQL Server Management Studio (SSMS)将数据库设置为OFFLINE状态。为此,右键单击数据库,单击任务,然后点击采取离线,如下图所示。

设置SQL DB离线

数据库的数据库状态(在我们的示例中是' DBLogTest ')设置为OFFLINE。

SQL DB设置为离线状态

您可以使用以下命令使数据库联机:

将DBLogTest数据库设置为ONLINE

或者,使用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状态,使用如下命令:

将DBLogTest设置为紧急状态

设置DB为“紧急”

刷新数据库,您将看到它被设置为EMERGENCY。

DB设置为紧急状态

一旦数据库处于EMERGENCY状态,您可以通过执行DBCC CHECKDB命令来修复数据库损坏问题。但是,在执行该命令之前,请确保执行以下查询将db设置为SINGLE_USER模式:

将数据库设置为SINGLE_USER并立即回滚

设置“DB”为“单用户模式”

数据库将进入SINGLE_USER模式。您现在可以使用“REPAIR_ALLOW_DATA_LOSS”运行DBCC CHECKDB命令。

DBCC CHECKDB (' DBLogTest ', REPAIR_ALLOW_DATA_LOSS);

注意:使用修复选项执行CHECKDB命令将删除损坏的数据或索引,使数据库保持一致,但会丢失一些数据。修复数据库而不丢失数据的更好替代方法是使用SQL修复工具,该工具可以帮助修复损坏的数据库并将其恢复到原始状态。

修复数据库后,将数据库设置为MULTI_USER模式:

将数据库设置为MULTI_USER并立即回滚

数据库将被修复并上线。

如何检查SQL错误日志以确定数据库状态背后的原因?

查看SQL Server错误日志可以帮助您找到数据库没有联机或仍处于“恢复中”或“怀疑”模式的原因。要检查SQL错误日志,请执行以下步骤:

  • 开放地对地导弹,扩大SQL Server代理,然后展开错误日志
打开sql错误日志
  • 接下来,检查日志,找出数据库进入可疑模式的原因。应用过滤器可以快速发现数据库何时进入还原、怀疑或任何其他状态。中输入数据库名称“消息包含文本”“常规”部分下的文本框。接下来,选择应用过滤器复选框,然后单击好吧

在我们的示例中,我们输入了' RecoveredDeletedData_Copy '来确定它进入restore模式的原因。

过滤器错误日志
  • 阅读屏幕底部给出的消息,找出db进入还原状态的原因。
Restroning状态

数据库不上线怎么办?

如果数据库没有联机,请尝试从最近的备份恢复数据库。如果没有更新的备份,可能需要运行带有修复选项的DBCC CHECKDB命令来修复数据库。

读:如何使用DBCC CHECKDB命令修复SQL数据库

使用REPAIR_ALLOW_DATA_LOSS选项运行CHECKDB命令可能导致数据丢失。一个更好的解决方案是使用SQL恢复工具这有助于重新获得对SQL数据库的访问权限,而不会增加数据丢失的风险。使用恒星修复MS SQL恢复数据库的所有数据完好无损。

免费下载

结束

本指南解释了不同的SQL Server数据库状态,例如联机、脱机、正在恢复、正在恢复、待恢复、怀疑和紧急状态。它讨论了这些状态,以及如何从一种状态切换到另一种状态。此外,本文还讨论了在数据库进入某种状态后变得不可访问时可以做些什么来恢复数据库。

如果您的数据库似乎卡在这七种数据库状态中的任何一种,并且没有任何东西适合您,那么使用MS SQL的Stellar Repair可以证明是一个方便的工具。在数据库损坏的情况下,SQL修复工具可以帮助修复数据库文件(.mdf/.ndf)并将数据库恢复到原始形式,而不会丢失任何数据。

进步
73% 很多人觉得这篇文章很有帮助

为什么恒星®是全球领导者

为什么选择Stellar?
  • 0+

    客户

  • 0+

    卓越岁月

  • 0+

    研发工程师

  • 0+

    国家

  • 0+

    合作伙伴

  • 0+

    所获奖项

  • 我们符合iso 27001标准
  • 我们符合iso 9001标准
  • NIST
  • HIPAA验证