変更データ キャプチャ(CDC: Change Data Capture)による更新履歴の保管(SQL Server 2008)

SQL Server 2008 からは、「変更データ キャプチャ」機能がサポートされました。この機能は、UPDATE や INSERT、DELETE ステートメントによる更新履歴を保管できる(変更データをキャプチャできる)機能です。これにより、Oracle 11g における Total Recall 機能のように、指定した時間の過去のデータを参照したり、オペレーション ミス時のデータ回復などで利用できるようになります。変更データ キャプチャは、悪意のあるユーザーによって、データが改ざんされた場合などに、改ざんされる前のデータを復旧する目的としても利用することができます。


変更データ キャプチャを利用する手順は、次のとおりです。
まずは、データベースに対して「sp_cdc_enable_db」ストアド プロシージャを実行して、変更データ キャプチャ(CDC)を有効化します。

USE データベース名
EXEC sys.sp_cdc_enable_db

次に、変更データ キャプチャを設定したいテーブルに対して、「sp_cdc_enable_table」ストアド プロシージャを実行して、CDC を有効化します。

EXEC sys.sp_cdc_enable_table 
	    @source_schema = N'スキーマ名'
	   ,@source_name = N'テーブル名'
	   ,@role_name = N'cdc_Admin'

以上で、変更データ キャプチャの設定が完了です。変更データ キャプチャを有効にすると、「スキーマ名_テーブル名_CT」という名前のテーブルが自動的に作成されて、このテーブルへ更新履歴が記録されていくようになります

変更データ キャプチャを設定後、次のように UPDATE/INSERT/DELETE ステートメントを実行して、データを更新したとします。

-- データの変更
UPDATE 商品 SET 商品名 = 'XXX' WHERE 商品コード = 1

-- データの追加
INSERT INTO 商品(商品コード, 商品名, 生産中止) VALUES (199, 'AAAAAA', 1)

-- データの削除
DELETE FROM 商品 WHERE 商品コード = 2

この後、「dbo_商品_CT」テーブルを参照すると、次のように更新履歴が格納されていることを確認できます。

Operation 列で更新前データか更新後データなのか、INSERT/DELETE されたデータなのかを確認することができます。start_lsnend_lsn 列で LSN(Log Sequence Number:ログ順序番号)を確認できます。


なお、そのほかの SQL Server 2008 の新機能の具体的な利用方法については、弊社執筆の SQL Server 2008 自習書シリーズ(下記 URL)の「SQL Server 2008 の注目の新機能をイチ早く試してみよう! 」編を参考にしてみてください。
http://www.microsoft.com/japan/sqlserver/2008/self-learning/default.mspx