2012年11月23日 星期五

MS SQL ldf檔太大處理

方法:截斷交易記錄檔->壓縮交易記錄檔

  1. 截斷交易記錄檔:將資料庫「復原模式」改為「簡單」,即可即斷交易記檔

    關於復原模式的官方說明:
    http://msdn.microsoft.com/zh-tw/library/ms189275%28v=sql.105%29.aspx


    可以從 SQL Server Management Studio
    在資料庫上按右鍵->「屬性」->「選項」->「復原模式」進行修改,
    或是直接執行以下指令修改。
    ALTER DATABASE 資料庫名稱 SET RECOVERY SIMPLE
    
  2. 查 ldf 檔的邏輯名稱(name)
    執行
    SP_HELPDB 資料庫名稱

    use 資料庫名稱
    GO
    select * from sys.database_files
    
    此時可查得 ldf 檔對應到的邏輯名稱(name),一般會是"資料庫名稱_log",
    但若之前是從備份資料還原到不同名稱的資料庫,邏輯名稱(name)就可能不一樣。
  3. 壓縮交易記錄檔
    執行以下指令後,應該可以發現ldf的檔案大小縮小成2MB
    use 資料庫名稱
    GO
    DBCC SHRINKFILE('ldf的邏輯名稱',2)
    
  4. 將資料庫「復原模式」改回「完整」
    執行
    ALTER DATABASE 資料庫名稱 SET RECOVERY FULL



  • 備註1:mdf 和 ldf 檔的邏輯名稱(name)修改指令如下
    alter database 資料庫名稱 modify file(name=舊mdf的name, newname=新mdf的name)
    alter database 資料庫名稱 modify file(name=舊ldf的name, newname=新ldf的name)
    
  • 備註2:經測試,將資料庫「復原模式」改成「簡單」,接著改回「完整」,最後再進行「壓縮交易記錄檔」的操作,似乎也是可行。
  • 備註3:MS SQL 2005 以前的版本,
    可以使用"BACKUP LOG 資料庫名稱 WITH NO_LOG"
    或"BACKUP LOG 資料庫名稱 WITH TRUNCATE_ONLY"截斷交易記錄檔,
    但在MS SQL 2008之後已不建議使用這兩個指令。
    http://msdn.microsoft.com/en-us/library/ms144262%28v%3Dsql.100%29.aspx

沒有留言:

張貼留言