SQL Server 2005 日誌刪除和日誌檔案限制

xsdan發表於2009-02-19

清除日誌:

DECLARE @LogicalFileName sysname,

@MaxMinutes INT,

@NewSize INT

USE szwzcheck -- 要操作的資料庫名

[@more@]

SELECT @LogicalFileName = 'szwzcheck_Log', -- 日誌檔名

@MaxMinutes = 10, -- Limit on time allowed to wrap log.

@NewSize = 20 -- 你想設定的日誌檔案的大小(M)

-- Setup / initialize

DECLARE @OriginalSize int

SELECT @OriginalSize = size

FROM sysfiles

WHERE name = @LogicalFileName

SELECT 'Original Size of ' db_name() ' LOG is '

CONVERT(VARCHAR(30),@OriginalSize) ' 8K pages or '

CONVERT(VARCHAR(30),(@OriginalSize*8/1024)) 'MB'

FROM sysfiles

WHERE name = @LogicalFileName

CREATE TABLE DummyTrans

(DummyColumn char (8000) not null)

DECLARE @Counter INT,

@StartTime DATETIME,

@TruncLog VARCHAR(255)

SELECT @StartTime = GETDATE(),

@TruncLog = 'BACKUP LOG ' db_name() ' WITH TRUNCATE_ONLY'

DBCC SHRINKFILE (@LogicalFileName, @NewSize)

EXEC (@TruncLog)

-- Wrap the log if necessary.

WHILE @MaxMinutes > DATEDIFF (mi, @StartTime, GETDATE()) -- time

AND @OriginalSize = (SELECT size FROM sysfiles WHERE name =

@LogicalFileName)

AND (@OriginalSize * 8 /1024) > @NewSize

BEGIN -- Outer loop.

SELECT @Counter = 0

WHILE ((@Counter < @OriginalSize / 16) AND (@Counter < 50000))

BEGIN -- update

INSERT DummyTrans VALUES ('Fill Log')

DELETE DummyTrans

SELECT @Counter = @Counter 1

END

EXEC (@TruncLog)

END

SELECT 'Final Size of ' db_name() ' LOG is '

CONVERT(VARCHAR(30),size) ' 8K pages or '

CONVERT(VARCHAR(30),(size*8/1024)) 'MB'

FROM sysfiles

WHERE name = @LogicalFileName

DROP TABLE DummyTrans

SET NOCOUNT OFF

把szwzcheck換成你資料庫的名字即可,在查詢分析器裡面執行。

有全形的空格(為了顯示好看),你自己把他換一下.

收縮日誌:

企業治理器--所有任務--收縮資料庫--檔案--選日誌檔案收縮


網友回覆:上面一個可行.
再轉一個.

1: 刪除LOG
1:分離資料庫 企業治理器->伺服器->資料庫->右鍵->分離資料庫
2:刪除LOG檔案
3:附加資料庫 企業治理器->伺服器->資料庫->右鍵->附加資料庫
此法生成新的LOG,大小隻有500多K
再將此資料庫設定自動收縮
或用程式碼:
下面的示例分離 pubs,然後將 pubs 中的一個檔案附加到當前伺服器。

EXEC sp_detach_db @dbname = 'pubs'
EXEC sp_attach_single_file_db @dbname = 'pubs',
@physname = 'c:Program FilesMicrosoft SQL ServerMSSQLDatapubs.mdf'


2:清空日誌
DUMP TRANSACTION 庫名 WITH NO_LOG

再:
企業治理器--右鍵你要壓縮的資料庫--所有任務--收縮資料庫--收縮檔案--選擇日誌檔案--在收縮方式裡選擇收縮至XXM,這裡會給出一個答應收縮到的最小M數,直接輸入這個數,確定就可以了

3: 假如想以後不讓它增長
企業治理器->伺服器->資料庫->屬性->事務日誌->將檔案增長限制為2M

網友回覆:高可用性模式下日誌應該不會長這麼快吧? 究竟是非同步的, 除非你的兩臺電腦之間的網路不夠好, 導致在主資料庫上阻塞的事務太多(或者是你的映象資料庫太慢,例如在上面建立了快照資料庫)

理論上高安全性才會有這個問題(因為事務要在映象伺服器上同時應用)
網友回覆:1 樓的, 映象不能清日誌的, 映象是的工作跟日誌是有關聯的

網友回覆:建議樓主用映象監視器觀察一下映象同步的效率
網友回覆:學習老大的.
網友回覆:跟在老大後面走```
網友回覆:老大最近喜歡玩失蹤
網友回覆:謝謝鄒老大的意見,但問題您還是沒提出意見?

映象模式下,
1、怎麼刪除/壓縮 日誌檔案?
--假如必要的話,可以先停止映象,刪除日誌後,再重新映象,這樣的思路是否可行?

2、怎麼設定可迴圈的日誌檔案空間?
網友回覆:1. 無法刪除, 因為映象要用這些資訊, 假如你重建映象, 當然可以刪除, 但似乎過段時間就重建不是什麼好主意
2. 沒有設定, 也不用設定, 假如日誌空間可用, sql 會重用


所以只能建議你找原因, 再想解決辦法
網友回覆:關於日誌檔案,

自動增長限制 為20G,一旦ldf超過20G,資料庫會err,資料庫日誌空間已滿,無法寫入.

這個原因是不是在映象模式下,雖然限制了資料庫日誌空間大小,但是無法重複使用?
網友回覆:LZ的日誌空間假如設定為無限制增大,是否有自動備份日誌的作業在執行?
假如沒有的話,每個完成的事務都寫到日誌檔案,就越來越大了。
本篇文章來源於 IT者網站 原文連結:

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/262387/viewspace-1017566/,如需轉載,請註明出處,否則將追究法律責任。

相關文章