“DBCC CHECKDB (databasename, repair)”是哪种修复级别?

agd*_*iaz 5 sql-server dbcc dbcc-checkdb

MSDN关于命令“DBCC CHECKDB”的文章在语法部分解释了三种执行数据库修复的方法:

- REPAIR_ALLOW_DATA_LOSS
- REPAIR_FAST
- REPAIR_REBUILD
Run Code Online (Sandbox Code Playgroud)

但是当我在寻找如何修复嫌疑人(我在执行这些步骤时置于此模式下)数据库时发现以下语句,我无法理解它是三种模式中的哪一种:

DBCC CHECKDB(数据库名称修复

我执行了该语句,它运行良好。我很困惑,因为在没有用“_allow_data_loss”、“_fast”或“_rebuild”结束单词的情况下,没有单独提到“修复”参数。

如果我尝试在处于紧急状态的数据库上运行“DBCC CHECKDB ( databaseName , repair_rebuild )”,我会收到一条错误消息,指出我无法在数据库处于紧急状态时执行该级别的修复。所以,我放弃了“修复”本身就是“修复重建”。

该语句是我发现的脚本中的第三行:

  1. ALTER DATABASE databaseName SET EMERGENCY;
  2. ALTER DATABASE 数据库名称 SET SINGLE_USER;
  3. DBCC CHECKDB(数据库名称,修复)ALL_ERRORMSGS
  4. ALTER DATABASE databaseName SET MULTI_USER;
  5. ALTER DATABASE databaseName SET ONLINE;

如果我阅读第三个语句执行的输出,我会看到有关该过程的信息,但与修复中使用的级别无关。

提前致谢,

Han*_*non 3

在严重损坏的数据库上运行此命令会导致以下错误消息:

消息 7909,20 级,状态 1,第 1 行

紧急模式修复失败。您必须从备份恢复。

这让我估计只是REPAIR的缩写形式REPAIR_ALLOW_DATA_LOSS。至少,当涉及到有关数据库的可恢复性的期望时,我会将其视为相同的。换句话说,这应该被视为最后的手段,只有在所有其他方法都失败时才尝试。确保在运行此过程之前创建数据库的物理副本。