none
SQL交易記錄檔要如何清除 RRS feed

  • 問題

  •  

    請問SQL交易記錄檔要如何清除,一直愈來愈大,資料也不過就1GB,結果交易記錄檔已經到快20GB,定期壓縮資料庫也沒有用,除非copy另一個新的資料庫,然後匯出來,這樣實在很麻煩,這是不是SQL2000的bug
    2007年10月21日 上午 08:53

解答

  • 程式碼區塊

    BACKUP LOG [database_name] WITH TRUNCATE_ONLY

    DBCC SHRINKFILE ([database_log_file_name], [target_size])

     

     

    例如你可以將資料庫的交易記錄縮到 2MB:

     

    程式碼區塊

    BACKUP LOG TestDB WITH TRUNCATE_ONLY

    DBCC SHRINKFILE ('TestDB_Log', 2)

     

     

    記住,這個動作一定要在資料庫做完完全備份後再做,比較安全。

    2007年10月21日 上午 10:54
    版主
  • 交易記錄檔是在外部程式或內部執行交易程序時,記錄在交易過程中的異動資料用的。

     

    記錄的範圍是以下 BEGIN TRANSACTION 開始,到 COMMIT TRANSACTION 之間,所有的資料表異動狀況,所以交易記錄檔膨脹速度很快,這很正常。

     

    我為什麼要叫你先做完整備份,因為完整備份是最完整的備份資料,不必再由交易記錄檔把資料復原,只有在最後一次備份之後到下一次備份前,資料庫發生問題(損毀或其他原因使資料遺失)時,可以藉由交易記錄檔來復原到最後執行完成交易的時間點,達到資料損失最小化的目的。

     

    會要做到交易記錄檔備份,那表示資料庫並未做完整備份,只做了差異備份,而交易記錄檔仍然需要,所以才要備份交易記錄檔,做了完整份備份後即可清除。但清除不代表 SQL Server 會將清空的記錄檔大小還給作業系統,而是透過填充的方式來使用空白的空間,只有透過壓縮檔案 (DBCC SHRINKFILE) 的方式,才能把清空的記錄檔大小還給作業系統。

     

    2007年10月22日 上午 04:12
    版主

所有回覆

  • 程式碼區塊

    BACKUP LOG [database_name] WITH TRUNCATE_ONLY

    DBCC SHRINKFILE ([database_log_file_name], [target_size])

     

     

    例如你可以將資料庫的交易記錄縮到 2MB:

     

    程式碼區塊

    BACKUP LOG TestDB WITH TRUNCATE_ONLY

    DBCC SHRINKFILE ('TestDB_Log', 2)

     

     

    記住,這個動作一定要在資料庫做完完全備份後再做,比較安全。

    2007年10月21日 上午 10:54
    版主
  •  

    謝謝,請問你說的資料庫備份是你給我的

    BACKUP LOG [database_name] WITH TRUNCATE_ONLY

    這一行?還是用Enterprise Manager工具去備份資料庫?

    我試過了,LOG有被清掉,但為什麼之前用Enterprise Manager工具去壓縮資料庫,就是無法完全壓縮

    還有現在給我的這個指令清除記錄檔為什麼要先備份資料庫,失敗性很高嗎?

    2007年10月21日 下午 12:17
  • BACKUP LOG [database_name] WITH TRUNCATE_ONLY 這一行指令主要是把資料庫的交易檔清除,因為資料庫備份不管是差異、全備的備份方式皆不會自動把備份檔,只有當你使用交易檔備份的時才會把交易檔清除,這樣你壓縮資料庫時,因為交易檔已經空了,所以壓縮資料庫才有用,建議你在備份完資料庫後再清除的用意在於因為當你的資料庫毀損壞時,交易檔又被清除時,你就無法將資料庫回複到特定的時間點了,並不是指清除記錄檔的指令失敗性很高。

    2007年10月21日 下午 01:35
  •  

    謝謝,那再請問一下,資料庫毀損壞時,可以用交易記錄檔來還原?交易記錄檔有何功能,只是覺得好像是比資料庫檔成長的速度還快好多倍
    2007年10月21日 下午 01:46
  • 交易檔的好處就是比如說你的備份是在中午12點,而你在1點的時候不小心把資料刪除時,你就只能把資料庫回複到12點,或是找另外一台電腦把資料庫回複後,再把資料Copy回到正式資料庫中,而你使用交易檔的話,你就可以利用交易檔將資料回複到以前的時間點,所以在資料的損失上就可以大大的降低。

    2007年10月21日 下午 02:02
  •  

    謝謝,不過我還是有一點不了解,如果我又沒有設定排程每個小時去備份,只是一天設定一次,我所設定的備份,若資料有問題我會用這個備份檔去還原,但你說的交易記錄檔,又要如何使用還原?
    2007年10月21日 下午 02:20
  • 我先分享我的備份方式,當然如果你的記錄檔備份如果時間排的越密集的話,當然你的資料漏失的風險就越小,但還是決定於你公司在於資料漏失上的定義與公司的作業時間而定,

     

    還原方式:

    方案一:先還原完全備份 -> 差異性備份 -> 交易檔備份。

    方案二:資料庫快照 -> 記錄檔備份

     

    完全備份:每週日晚上12點

    差異性備份:星期一到星期六的晚上12點

    記錄檔備份:每小時(上班時間)

    資料庫快照:中午12點,下午四點(二個時段)

     

    下列的網址為備份檔還原教學,你參考一下:

    http://technet.microsoft.com/zh-tw/library/ms187495.aspx

    2007年10月21日 下午 04:36
  • 謝謝,我剛剛看了一下備份,才發現有四個選項,資料庫-完整備份,資料庫-差異備份,交易記錄檔,檔案及標案群組,但我只有在用資料庫-完整備份,其它的從來也沒有用過,但我剛剛試了其它差異性與交易記錄檔,發現完整備份的檔備份完是大約30MB,差異性是4MB,交易記錄檔是117MB,奇怪的是我以前用的都是資料庫-完整備份,但如果還原這個備份檔案,發現交易記錄檔也還原,但我以容量來看如果以單單只有交易記錄檔的備份是117MB,這樣資料庫-完整備份才30MB,裏面怎麼可能會連交易記錄檔也有備份起來?

     

    我從來沒有用過資料庫-完整備份以外的,差異性我大概了解,但我不了解為何要備份交易記錄檔,交易記錄檔有何做用

    2007年10月22日 上午 02:34
  • 交易記錄檔是在外部程式或內部執行交易程序時,記錄在交易過程中的異動資料用的。

     

    記錄的範圍是以下 BEGIN TRANSACTION 開始,到 COMMIT TRANSACTION 之間,所有的資料表異動狀況,所以交易記錄檔膨脹速度很快,這很正常。

     

    我為什麼要叫你先做完整備份,因為完整備份是最完整的備份資料,不必再由交易記錄檔把資料復原,只有在最後一次備份之後到下一次備份前,資料庫發生問題(損毀或其他原因使資料遺失)時,可以藉由交易記錄檔來復原到最後執行完成交易的時間點,達到資料損失最小化的目的。

     

    會要做到交易記錄檔備份,那表示資料庫並未做完整備份,只做了差異備份,而交易記錄檔仍然需要,所以才要備份交易記錄檔,做了完整份備份後即可清除。但清除不代表 SQL Server 會將清空的記錄檔大小還給作業系統,而是透過填充的方式來使用空白的空間,只有透過壓縮檔案 (DBCC SHRINKFILE) 的方式,才能把清空的記錄檔大小還給作業系統。

     

    2007年10月22日 上午 04:12
    版主
  •  Cary Hsu 寫信:

    我先分享我的備份方式,當然如果你的記錄檔備份如果時間排的越密集的話,當然你的資料漏失的風險就越小,但還是決定於你公司在於資料漏失上的定義與公司的作業時間而定,

     

    還原方式:

    方案一:先還原完全備份 -> 差異性備份 -> 交易檔備份。

    方案二:資料庫快照 -> 記錄檔備份

     

    完全備份:每週日晚上12點

    差異性備份:星期一到星期六的晚上12點

    記錄檔備份:每小時(上班時間)

    資料庫快照:中午12點,下午四點(二個時段)

     

    下列的網址為備份檔還原教學,你參考一下:

    http://technet.microsoft.com/zh-tw/library/ms187495.aspx

     

    謝謝,請問你是每一週才完全備份一次,如果說資料庫是在週日晚上12點前1個小時損壞,這樣你要還原的方式是

    1先還原完全備份

    2還原星期六晚上差異備份

    3還原週日晚12點前1小時的記錄檔

    是這樣嗎?

    2007年10月22日 下午 04:34
  • 有兩種作法:

    1、先還原完全備份 -> 星期一到星期六的差異備份 -> 1點到23點的記錄檔備份

    2、資料庫快照(星期六下午四點) -> 5點到23點的記錄檔備份

     

    以上兩種方式皆可。

    2007年10月23日 下午 05:57
  • 謝謝,請問記錄檔備份你是設定1個小時一次,那請問一下,這一個小時備份好了,下一個小時在備份在同一個檔,選覆蓋過去,那是不是只會備份這一個小時,還是就一直從你備份的開始時間備份到往後的時間
    2007年10月24日 上午 08:15
  • 基本上你備份完記錄檔後,系統便會自動將記錄檔截斷,所以當你下一個小時備份的時候,就不會有覆蓋的問題產生。

     

    三種備份方式(完整、差異、記錄檔)只有記錄檔備份會主動的截斷,其他的方式皆不會,所以你如果只有使用完整備份時,又沒有手動截斷記錄檔時,就會有記錄檔滿載的情況發生。

    2007年10月24日 下午 12:48
  •  

    您好,請問可以如何解決備份的資料檔案過大的問題呢?

     

    系統: Windows 2003 Standard SP2 + SQL Server 2005 Standard SP2

     

    我目前資料庫(AA) MDF檔案=901MB
    備份的方式如下:
    01:00起,每6小時附加一次完整備份
    01:30起,每兩小時附加差異備份
    02:00起,每兩小時附加交易備份
    備份一週的結果,目前備份檔案(AA.bak)已經長到7.12GB
    這是個購物用的資料庫,所以商品上下架與購物交易的筆數滿頻繁的~
    原本是希望能做到:
    每週將原本的備份檔案copy到另外的目錄下,
    原本的目錄再作一個同檔名但是是重新做過完整備份的檔案(以覆寫方式)
    繼續每週的備份循環...
    不過不知道這樣的方式好不好?

     

    可能我備份的方式或者觀念不夠正確
    可否請各位大大提供一些建議呢?
    非常感謝喔!

    2007年11月26日 上午 03:12
  • 這邊我有些疑問,

     

    差異備份應該是從完整備份之後的異動備份,

     

    是以完整備份為基底,並非差異備份本身為基底,

     

    所以 

    1、先還原完全備份 -> 星期一到星期六的差異備份 -> 1點到23點的記錄檔備份

     

    上述的解答

     

    應該是    先還原完全備份 -> 星期六的差異備份 -> 1點到23點的記錄檔備份

     

    這樣才對

    2008年3月14日 上午 02:44