SE の雑記

SQL Server の情報をメインに Microsoft 製品の勉強内容を日々投稿

テーブルのデータ圧縮を一括で実行する SQL

leave a comment

以前、SQL Server のデータ圧縮のサイズ見積もりを複数テーブルを対象に実施 という投稿をしたことがありました。

サイズ見積りだけでなく、実際の圧縮も一括で実行できると便利だなと思い書いてみました。
# 対象データベースの全インデックスを再構築する SQL とほとんど同じですね。

以下のような SQL を実行することでベーステーブルに対して圧縮をすることができます。

USE DataCollection
GO 
DECLARE @TableName sysname
DECLARE @SchemaName sysname 
DECLARE @basesql nvarchar(max), @sql nvarchar(max) 

SET @basesql = 'ALTER TABLE @1 REBUILD WITH (ONLINE=ON, DATA_COMPRESSION=PAGE)'

DECLARE TBLC CURSOR FOR 
SELECT 
    OBJECT_NAME(object_id) AS TableName 
	, OBJECT_SCHEMA_NAME (object_id) AS SchemaName
FROM 
    sys.objects 
WHERE 
    OBJECT_SCHEMA_NAME (object_id) <> 'sys' 
    AND 
    type = 'U' 
ORDER BY 2,1

OPEN TBLC

FETCH NEXT FROM TBLC 
INTO @TableName, @SchemaName

WHILE @@FETCH_STATUS = 0 
BEGIN 
    PRINT @SchemaName + '.' + @TableName

    SET @sql = REPLACE(@basesql, '@1', @SchemaName + '.' + @TableName) 
    
    EXECUTE (@sql)

    FETCH NEXT FROM TBLC 
    INTO @TableName, @SchemaName
END

CLOSE TBLC 
DEALLOCATE TBLC 

圧縮中はデータファイルやログファイルが使用されたかと思いますので、一括で実行する場合にはデータベースのファイルサイズには注意しておいたほうがいいかもしれないですね。

Written by masayuki.ozawa

11月 25th, 2012 at 11:54 am

Posted in SQL Server

Tagged with

Leave a Reply

*