清除SQL Server Log檔 (交易紀錄)

資料庫使用久了,Log檔(交易紀錄)也會持續增加,如果沒有限制Log的成長,某天可能會發現硬碟滿了,資料庫會出現這樣的錯誤訊息

訊息 9002 …

資料庫 ‘northwind’ 的交易記錄已滿。如果要了解為何無法重複使用記錄中的空間,請參閱 sys.databases 中的 log_reuse_wait_desc 資料行。

查詢資料庫容量

如果想知道資料庫用掉多少容量,可以透過 報表 檢查磁碟使用量,在[資料庫]上按右鍵 > 報表 > 標準報表 > 磁碟使用量

image

清除當前資料庫的紀錄

目前實測 Server 2008~2019 都可以使用

如果已經是在指定的資料庫,可以直接執行這一段語法,就會清除該資料庫的紀錄

DECLARE @LogicalName nvarchar(128)
DECLARE @DataBaseName nvarchar(128)

SELECT @LogicalName =  f.name, @DataBaseName = d.name
FROM sys.master_files f
INNER JOIN sys.databases d ON d.database_id = f.database_id
where d.name = DB_NAME()

ALTER DATABASE CURRENT SET RECOVERY SIMPLE WITH NO_WAIT
DBCC SHRINKFILE(@LogicalName, 1)
ALTER DATABASE CURRENT SET RECOVERY FULL WITH NO_WAIT
image 1

再查一次報表, 交易檔變小了.

image 2

查看實體檔, 也與報表一致.

image 4

清除指定資料庫的紀錄

上述的作法會取得目前的資料庫與邏輯紀錄檔名稱,假設要手動指定資料庫也可以,將下列的資料庫名稱與記錄檔邏輯名稱換掉即可

USE [資料庫名稱]
GO
ALTERDATABASE [資料庫名稱] SETRECOVERY SIMPLE WITHNO_WAIT
DBCC SHRINKFILE(記錄檔邏輯名稱, 1)
ALTERDATABASE [資料庫名稱] SETRECOVERY FULLWITHNO_WAIT
GO

換完之後大概長這樣

USE [northwind]
GO

ALTER DATABASE [northwind] SET RECOVERY SIMPLE WITH NO_WAIT
DBCC SHRINKFILE(northwind_log, 1)
ALTER DATABASE [northwind] SET RECOVERY FULL WITH NO_WAIT
GO

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *


內容索引