2009-01-30 70 views
6

我在SQL Server中的日誌文件用完了我磁盤上的所有空間。我每天晚上都運行完整備份,但日誌文件不斷增長。我能做什麼?我的日誌文件太大

+0

這是一個數據庫管理員問題。不是一個編程問題。 – EBGreen 2009-01-30 16:35:32

+4

我認爲它應該保持開放,許多小公司程序員必須充當數據庫管理員。 – 2009-01-30 17:26:04

+0

確實。有些人有點太'近乎開心':) – 2009-01-30 18:02:14

回答

5

在最繁忙的系統上,您需要查看一整天的計劃日誌備份,然後是每晚的完整備份。這是很常見的做法。

-1

刪除日誌文件?

編輯:顯然刪除日誌文件是壞的,它只是只是日誌到SQL服務器。我要留下來重申不該做的事情。

1

你可以使用某種對數輪換,並且只保留固定時間的日誌,比如最近7天。這應該是綽綽有餘。或者您可以每天晚上重置日誌,因爲您應該在備份中使用它。

1

你要備份你的日誌,以及主數據庫

0

這應該縮小它:

dbcc shrinkfile('databasename_log', 0) 
0

試試這個:

dump transaction <dbname> with no_log 

然後通過設置收縮日誌文件在sql server設置或通過autoshrink選項。

我想你也可以使用dbcc來縮小它,但我不記得語法。

4

如果您有一份計劃進行完整備份的工作,那麼這很好,應該是您的出發點,但您還需要執行常規事務日誌備份。

備份事務日誌會導致空間重新變化。一旦定義了常規事務日誌備份計劃,您可能會考慮將事務日誌縮小到更適合的大小。因爲它不會再無限制地增長。

完全恢復的備份策略包括:

* Database backups. 

* Differential backups (optional). 

* Transaction log backups. 

我建議你向下面的Microsoft參考。

http://msdn.microsoft.com/en-us/library/aa173551(SQL.80).aspx

5

在某些情況下,你可能會發現該日誌文件將無法正常截斷即使日誌備份運行。您可以使用TRUNCATE_ONLY進行備份來檢查它。當您運行它時,應該截斷事務日誌:

BACKUP LOG dbname WITH TRUNCATE_ONLY 

此問題的原因是在日誌的較早部分中打開事務。 SQL不會截斷通過此事務的日誌,這可能會導致日誌不斷增大。你需要找出哪些交易是開放的以及爲什麼。您可以監視你的日誌空間:

DBCC OPENTRAN 

或者:

select * from sys.dm_tran_database_transactions 
1

這是更好地事務日誌備份添加到

DBCC SQLPERF (LOGSPACE) 

在長時間運行的交易信息可以使用發現你的日程安排。

BACKUP LOG database TO DISK = 'D:/database_log.bak'

請記住,在完全或大容量日誌恢復模型事務日誌截斷事務日誌備份時作出,就必須備份日誌定期,以管理交易的規模登錄。否則,事務日誌文件將增長,直到沒有剩餘空間。

如果在時間點恢復中不需要並且數據庫更改不頻繁,則最好使用簡單的恢復模式(不包含事務日誌)。 在這種情況下,事務日誌會自動截斷以刪除任何不活動的虛擬日誌文件。在簡單恢復模型中,事務日誌截斷髮生在每個檢查點之後。