MSDN 关于命令“DBCC CHECKDB”的文章在语法部分解释了执行数据库修复的三种方法:
- REPAIR_ALLOW_DATA_LOSS
- REPAIR_FAST
- REPAIR_REBUILD
但是我在寻找如何修复可疑数据库(我在这种模式下执行这些步骤)时发现了以下语句,我无法理解它是三种模式中的哪一种:
DBCC CHECKDB(数据库名称,修复)
我执行了声明,它工作正常。我很困惑,因为在没有用“_allow_data_loss”、“_fast”或“_rebuild”结束这个词的情况下,没有单独提到“修复”参数。
如果我尝试在处于紧急状态的数据库上运行“DBCC CHECKDB ( databaseName , repair_rebuild )”,我会收到一条错误消息,指出当数据库处于紧急状态时我无法执行该级别的修复。所以,我放弃了单独的“修复”是“repair_rebuild”。
该语句是我发现的脚本中的第三行:
- ALTER DATABASE 数据库名称 SET EMERGENCY;
- ALTER DATABASE 数据库名称 SET SINGLE_USER;
- DBCC CHECKDB(数据库名称,修复)ALL_ERRORMSGS
- ALTER DATABASE 数据库名称 SET MULTI_USER;
- ALTER DATABASE 数据库名 SET ONLINE;
如果我读取第三条语句执行的输出,我会看到有关该过程的信息,但与修复中使用的级别无关。
提前致谢,
在严重损坏的数据库上运行此命令会导致以下错误消息:
这使我估计这
REPAIR
只是REPAIR_ALLOW_DATA_LOSS
. 至少,当涉及到对所讨论数据库的可恢复性的期望时,我会将其视为相同的。换句话说,这应该被认为是不得已的操作,只有在其他方法都失败时才会尝试。确保在运行此过程之前创建数据库的物理副本。