Sql-Server

“DBCC CHECKDB (databasename, repair)”屬於哪一種修復級別?

  • December 17, 2015

MSDN 關於命令“DBCC CHECKDB”的文章在語法部分解釋了執行數據庫修復的三種方法:

- REPAIR_ALLOW_DATA_LOSS
- REPAIR_FAST
- REPAIR_REBUILD

但是我在尋找如何修復嫌疑人(我在這種模式下執行這些步驟)數據庫時發現了以下語句,我無法理解它是三種模式中的哪一種:

DBCC CHECKDB(數據庫名稱,修復

我執行了該語句,它工作正常。我很困惑,因為沒有用“_allow_data_loss”、“_fast”或“_rebuild”完成單詞,就沒有單獨引用“repair”參數。

如果我嘗試在緊急狀態下對我的數據庫執行“DBCC CHECKDB ( databaseName , repair_rebuild )”,我會收到一條錯誤消息,指出當數據庫處於緊急狀態時我無法執行該級別的修復。所以,我放棄了“修復”單獨是“repair_rebuild”。

該語句是我發現的腳本中的第三行:

  1. ALTER DATABASE 數據庫名稱 SET EMERGENCY;
  2. ALTER DATABASE 數據庫名稱 SET SINGLE_USER;
  3. DBCC CHECKDB(數據庫名稱,修復)ALL_ERRORMSGS
  4. ALTER DATABASE 數據庫名稱 SET MULTI_USER;
  5. ALTER DATABASE 數據庫名稱 SET ONLINE;

如果我閱讀第三條語句執行的輸出,我會看到有關該過程的資訊,但與修復中使用的級別無關。

提前致謝,

在充分損壞的數據庫上執行它會導致以下錯誤消息:

消息 7909,第 20 層,狀態 1,第 1 行

緊急模式修復失敗。您必須從備份中恢復。

這使我估計REPAIR只是REPAIR_ALLOW_DATA_LOSS. 至少,當涉及到對相關數據庫可恢復性的期望時,我會將其視為相同的。換句話說,這應該被認為是最後手段的操作,只有在其他所有方法都失敗時才能嘗試。確保在執行此過程之前製作數據庫的物理副本。

引用自:https://dba.stackexchange.com/questions/123959