USE master;
DECLARE @db SYSNAME = N'YourDB';
EXEC sp_dboption @db, N'single', N'true'; -- 2005/2008 語法
-- 或 ALTER DATABASE [YourDB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE; (2012+)
-- 允許資料遺失的修復(最後手段)
DBCC CHECKDB (@db, REPAIR_ALLOW_DATA_LOSS);
-- 重建索引修復(不遺失資料,僅修復索引不一致)
DBCC CHECKDB (@db, REPAIR_REBUILD);
執行順序建議:先跑 REPAIR_REBUILD,若仍報錯才考慮 REPAIR_ALLOW_DATA_LOSS(可能刪除損壞頁面資料)。
-- 針對 CHECKDB 報錯的特定表
DBCC CHECKTABLE ('YourTable', REPAIR_ALLOW_DATA_LOSS);
DBCC CHECKTABLE ('YourTable', REPAIR_REBUILD);
適用於僅少數表損壞,避免全庫掃描耗時。
DBCC CHECKDB (@db); -- 無錯誤訊息即代表修復成功
EXEC sp_dboption @db, N'single', N'false';
-- 或 ALTER DATABASE [YourDB] SET MULTI_USER;
-- 重建指定表所有索引
DBCC DBREINDEX ('YourTable', '');
-- 重建單一索引
DBCC DBREINDEX ('YourTable', 'IX_YourIndex');
SQL 2005+ 建議改用 ALTER INDEX ... REBUILD(支援 ONLINE、MAXDOP、DATA_COMPRESSION 等選項)。
| 指令 | 用途 |
|---|---|
DBCC CHECKIDENT ('Table', RESEED, 0) | 重設身分識別欄位種子值 |
DBCC CLEANTABLE (db_id, 'Table') | 回收變長欄位卸除後的空間 |
DBCC UPDATEUSAGE (db_name) | 修正 sysindexes 頁面/資料列計數不準 |
DBCC FREEPROCCACHE | 清除計畫快取(謹慎使用) |
REPAIR_ALLOW_DATA_LOSS 可能永久刪除資料。DBCC CHECKDB(建議每週)並保留輸出日誌,早發現早處理。PAGE_VERIFY CHECKSUM(資料庫屬性)讓 SQL Server 自動偵測頁面損壞。