錯誤 5173:「一個或多個文件與數據庫的主文件不匹配...日志文件與主文件不匹配,該文件可能來自另一數據庫,或者以前重新生成了日志。」典型場景:僅有 .mdf 文件,嘗試 ATTACH_REBUILD_LOG 或手動重建日志失敗。
-- 嘗試 1: ATTACH_REBUILD_LOG (需數據庫正常關閉)
CREATE DATABASE [GPOSDB] ON (FILENAME = N'D:\GPOSDB.mdf') FOR ATTACH_REBUILD_LOG;
-- 錯誤: 由於數據庫沒有完全關閉,無法重新生成日志。
-- 嘗試 2: 允許系統表更新 + 緊急模式 + DBCC CHECKDB REPAIR (SQL 2000 風格)
EXEC sp_configure 'allow updates', 1; RECONFIGURE WITH OVERRIDE;
ALTER DATABASE [GPOSDB] SET EMERGENCY;
ALTER DATABASE [GPOSDB] SET SINGLE_USER;
UPDATE sysdatabases SET status = -32768 WHERE dbid = DB_ID('GPOSDB'); -- SQL 2005+ 禁止
DBCC CHECKDB (GPOSDB, REPAIR_ALLOW_DATA_LOSS);
-- 錯誤: 不允許對系統目錄進行即席更新 / 5173 持續
REBUILD_LOG、或跨實例複製,內部元數據與現有/新建 .ldf 不匹配 → 5173。若有完整備份 + 日志備份鏈,直接還原,RPO=0,避免一切修復風險。
dbi_LogFileId、dbi_LogFilePath、dbi_CreateLSN 等字段。ATTACH_REBUILD_LOG。⚠️ 一點偏差導致數據庫完全損壞,**僅作最後手段,必須在副本上操作**。
-- 1. 建立同名空庫
CREATE DATABASE [GPOSDB];
-- 2. 停止服務
-- 3. 用問題 MDF 覆蓋空庫 MDF
-- 4. 啟動服務 → 庫顯示「置疑」或直接可用
-- 5. 若置疑,執行緊急模式修復
ALTER DATABASE [GPOSDB] SET EMERGENCY;
ALTER DATABASE [GPOSDB] SET SINGLE_USER;
DBCC CHECKDB ([GPOSDB], REPAIR_ALLOW_DATA_LOSS);
ALTER DATABASE [GPOSDB] SET MULTI_USER;
ALTER DATABASE [GPOSDB] SET ONLINE;
成功率取決於 MDF 內部一致性;若頁面校驗和損壞,`REPAIR_ALLOW_DATA_LOSS` 會刪除壞頁導致數據丟失。
ALTER DATABASE ... SET PAGE_VERIFY CHECKSUM。ALTER DATABASE ... SET OFFLINE 或停止服務)。ALTER DATABASE ... MODIFY FILE + 離線移動 + 上線。5173 錯誤本質是 **MDF 與 LDF 元數據不匹配**。SQL Server 2005+ 封堵了底層修補路徑,**備份還原是唯一標準答案**;無備份時,第三方工具 > 手工修補 > 空庫替換法。將「無備份不上線」作為鐵律落地。