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
----------------------------------------------------------------------
沒有留言:
張貼留言