USE master;
GO
DECLARE @dbname VARCHAR(255) = 'YourDatabaseName';
-- 切換至單用戶模式,防止並發干擾
EXEC sp_dboption @dbname, 'single user', 'true';
-- 階段 1:允許資料遺失的修復(最後手段)
DBCC CHECKDB(@dbname, REPAIR_ALLOW_DATA_LOSS);
-- 階段 2:重建修復(保留資料)
DBCC CHECKDB(@dbname, REPAIR_REBUILD);
-- 恢復多用戶模式
EXEC sp_dboption @dbname, 'single user', 'false';
-- 驗證修復結果
DBCC CHECKDB(@dbname);
USE YourDatabaseName;
GO
DECLARE @dbname VARCHAR(255) = 'YourDatabaseName';
DECLARE @tblname VARCHAR(255) = 'ProblemTableName'; -- 從 CHECKDB 錯誤訊息獲取
EXEC sp_dboption @dbname, 'single user', 'true';
DBCC CHECKTABLE(@tblname, REPAIR_ALLOW_DATA_LOSS);
DBCC CHECKTABLE(@tblname, REPAIR_REBUILD);
EXEC sp_dboption @dbname, 'single user', 'false';
| 選項 | 行為 | 資料風險 | 適用時機 |
|---|---|---|---|
| REPAIR_REBUILD | 執行修復但不刪除資料(重建索引、修正頁連結) | 無資料遺失 | 首選,輕微不一致 |
| REPAIR_ALLOW_DATA_LOSS | 刪除損壞頁/資料列以達成一致性 | 可能遺失資料 | 嚴重損壞、無備份、最後手段 |
| REPAIR_FAST | 語法相容性保留,實際無修復動作 | 無 | 不建議使用 |
-- 重建指定表所有索引
DBCC DBREINDEX ('TableName', '');
-- 檢查並修正識別欄位種子值
DBCC CHECKIDENT ('TableName', RESEED, 0);
-- 更新資料庫使用空間統計
DBCC UPDATEUSAGE (0);
REPAIR_REBUILD,失效才用 REPAIR_ALLOW_DATA_LOSSDBCC CHECKDB 確認無錯誤DBCC CHECKDB 排程(維護計畫)PAGE_VERIFY CHECKSUM(資料庫屬性)⚠ REPAIR_ALLOW_DATA_LOSS 會刪除資料! 無完整備份時嚴禁使用。生產環境修復前必須經 DBA 主管簽核並通知業務方。