公告

國明的網路筆記

2013年6月28日 星期五

截斷 MS SQL Server Log 檔案

幾年前,學校的選課系統的資料庫選用 MS SQL Server,因資料庫的Log檔案會無盡的擴大,常常比資料庫還要大上好幾倍,最後造成硬碟空間不足,雖然近年來,硬碟容量越來越大,已經不在發現類式問題,但Log檔案還是會造成資料讀取的速度問題,之前就索性將Log檔案給予截斷,採用 T_SQL 指令

dump transaction database_name with truncate_only
再利用工具壓縮資料庫(按右鍵->所有工作->壓縮資料庫)即可 (SQL 的壓縮有可能就是 Pack)



Backup Log database_name with truncate_only
DBCC ShrinkDataBase(database_name, 30, truncateonly ) --實際釋放空間, 留30%空間

// --------------------------------------
從網路上查到:
下列語法是針對MS-SQL 2000及MS-SQL 2005的截斷Scritp:
--1.截斷交易記錄
BACKUP LOG [資料庫名稱] WITH TRUNCATE_ONLY

--2.顯示資料庫檔案,找出交易記錄檔的邏輯檔名
EXEC sp_helpdb '資料庫名稱'

--3.壓縮交易記錄檔
USE 資料庫名稱
DBCC SHRINKFILE([資料庫名稱_log],2)
------------------------------------------------
--進行Log瘦身
--SQL 2000及SQL2005適用
BACKUP LOG 資料庫名稱 TO Disk='C:\LogTemp\DevLog.bak' WITH  init  --先備份Log檔
DBCC SHRINKDATABASE(資料庫名稱,30,NOTRUNCATE)    -- 先挪空間,NoTruncate表示不截斷,30表示留30%大小
DBCC SHRINKDATABASE(資料庫名稱,30,TRUNCATEONLY ) --實際釋放空間

--SQL 2008 Log瘦身適用
-- SQL 2008要截斷Log必須先改成簡單模式.
ALTER DATABASE 資料庫名稱  
    SET RECOVERY SIMPLE;
GO
-- Shrink the truncated log file to 1 MB.
DBCC SHRINKFILE (資料庫Log名稱, 100);
GO
-- Reset the database recovery model.
ALTER DATABASE資料庫名稱  
    SET RECOVERY FULL;
GO
// --------------------------------------------

-- 總整理 --

SQL SERVER 2008

USE [資料庫名稱]
GO
ALTER DATABASE [資料庫名稱] SET RECOVERY SIMPLE WITH NO_WAIT
DBCC SHRINKFILE(記錄檔邏輯名稱, 1)
ALTER DATABASE [資料庫名稱] SET RECOVERY FULL WITH NO_WAIT
GO

邏輯名稱可在資料庫上按右鍵=>[屬性]=>[檔案]中查看,注意邏輯名稱不一定會和檔名相同,例如:

USE [TestDB]
GO
ALTER DATABASE [TestDB] SET RECOVERY SIMPLE WITH NO_WAIT
DBCC SHRINKFILE(TestDB_log, 1)
ALTER DATABASE [TestDB] SET RECOVERY FULL WITH NO_WAIT
GO

----------------------------------------------------------------------

之前的版本(SQL SERVER 2000, 2005)的話可以使用以下指令:

USE [資料庫名稱]
GO
DBCC SHRINKFILE(記錄檔邏輯名稱, 1)
BACKUP LOG [資料庫名稱] WITH TRUNCATE_ONLY
DBCC SHRINKFILE(記錄檔邏輯名稱, 1)
GO

例如:

USE [TestDB]
GO
DBCC SHRINKFILE(TestDB_log, 1)
BACKUP LOG [TestDB] WITH TRUNCATE_ONLY
DBCC SHRINKFILE(TestDB_log, 1)
GO
----------------------------------------------------------------------