1. 程式人生 > >sql server 2008資料庫日誌太大解決方法

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

為您的資料庫名稱)

  1. 建立一個空庫,資料庫名與原名稱一致。

  2. 停止控制檯的服務MSSQLSERVER,將有資料的.mdf檔案複製過來覆蓋現有的空庫的.mdf檔案。

  3. 啟動控制檯的服務MSSQLSERVER,開啟企業管理器,這時發一點選資料TestDB時,就報錯。

  4. 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.  資料庫――右鍵――屬性――檔案,這時可以看到日誌檔案的路徑在哪裡,以後要定時觀察。

防止資料庫日誌過大最好的辦法是定時檢視日誌,清空日誌。

同時做好資料庫的備份工作。