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

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

Share

Written by Masayuki.Ozawa

11月 25th, 2012 at 11:54 am

Posted in SQL Server

Tagged with

Leave a Reply