sql server 2008資料庫日誌太大解決方法
環境:
資料檔案.mdf為22G,日誌檔案.ldf為33G,用常規方法清除日誌檔案時,報錯:
USE [master] GO ALTER DATABASE TestDB SET RECOVERY SIMPLE WITH NO_WAIT GO ALTER DATABASE TestDB SET RECOVERY SIMPLE --簡單模式 GO USE CHIANG_SCM_DB GO DBCC SHRINKFILE (N'Test_log' , 5, TRUNCATEONLY) USE [master] GO ALTER DATABASE Test SET RECOVERY FULL WITH NO_WAIT GO ALTER DATABASE Test SET RECOVERY FULL --還原為完全模式 GO
訊息 5069,級別 16,狀態 1,第 1 行
ALTER DATABASE 語句失敗。
訊息 9002,級別 17,狀態 6,第 1 行
資料庫 'TestDB' 的事務日誌已滿。若要查明無法重用日誌中的空間的原因,請參閱 sys.databases 中的 log_reuse_wait_desc 列。
因為資料檔案和日誌檔案都很,不好移動,當時硬碟空間也不夠大,於是只要刪除掉日誌檔案。
這時一定要保持原庫的.mdf 檔案是完好。條件允許最好有多個備份。
請在SQL Server的查詢分析器中按以下步驟執行
假設資料庫名為: TestDB(如果您的資料庫名不是TestDB,需要更改以下語句中相應的TestDB
-
建立一個空庫,資料庫名與原名稱一致。
-
停止控制檯的服務MSSQLSERVER,將有資料的.mdf檔案複製過來,覆蓋現有的空庫的.mdf檔案。
-
啟動控制檯的服務MSSQLSERVER,開啟企業管理器,這時發一點選資料TestDB時,就報錯。
-
在master資料庫開啟查詢分析器,執行下面命令,注意要一條一條地執行。
--修改資料庫為緊急模式
ALTER DATABASE TestDB SET EMERGENCY
--使資料庫變為單使用者模式
ALTER DATABASE TestDB SET SINGLE_USER
--修復資料庫日誌重新生成,此命令檢查的分配,結構,邏輯完整性和所有資料庫中的物件錯誤。當您指定“REPAIR_ALLOW_DATA_LOSS”作為DBCC CHECKDB命令引數,該程式將檢查和修復報告的錯誤。但是,這些修復可能會導致一些資料丟失。
DBCC CheckDB(TestDB,REPAIR_ALLOW_DATA_LOSS)--執行到這條時就會發現報錯,不理它,繼續執行第四條
--使資料庫變回為多使用者模式
ALTER DATABASE TestDB SET MULTI_USER
5. 重新整理資料TestDB,這時發資料庫已經可以,各個節點的“+”號都可以展開,表也可以查詢,也可以建表了,資料庫可以用了。
6. 資料庫――右鍵――屬性――檔案,這時可以看到日誌檔案的路徑在哪裡,以後要定時觀察。
防止資料庫日誌過大最好的辦法是定時檢視日誌,清空日誌。
同時做好資料庫的備份工作。