SQL SERVER2008からの新機能。
INSERT、UPDATE、DELETEステートメントの更新履歴を保管しておく機能。
これにより指定した時間の過去のデータを参照したり、データを回復したりできる。
OracleのFlashBack Query(Total Recallともいう)のようなもの。
●設定手順
1.SQL Agent サービスを有効にする。
2.sp_cdc_enable_dbでCDCを有効にする。
USE harada_lab --データベース名 EXEC sp_cdc_enable_db
3.sp_cdc_enable_tableでCDCを有効にするテーブルを指定する。
EXEC sp_cdc_enable_table @source_schema = N'dbo' ,@source_name = N'customer' --テーブル名 ,@@role_name= N'cdc_Admin'
4.CDCを有効にすると「テーブル名_CT」でテーブルが作成される。
このテーブルをSELECTすることで実行したSQLを参照できる。
5.時間指定による過去データの参照は以下の通り
--照会したいログの期間を指定 DECLARE @begin_time datetime = '2011-02-22 00:00:00.000' DECLARE @end_time datetime = '2011-02-22 13:46:00.000' DECLARE @from_lsn binary(10), @to_lsn binary(10) -- fn_cdc_map_time_to_lsn 関数で時間からログ番号を取得 SELECT @from_lsn = sys.fn_cdc_map_time_to_lsn('smallest greater than or equal', @begin_time) SELECT @to_lsn = sys.fn_cdc_map_time_to_lsn('largest less than or equal', @end_time) -- fn_cdc_get_all_changes_dbo_customerで値を取得 (spのhogeの部分はテーブル名) SELECT * FROM cdc.fn_cdc_get_all_changes_dbo_hoge(@from_lsn, @to_lsn, 'all')
また、Change Data Captureを有効にするとcdc.dbo_テーブル名_CTというテーブルが作成されるので、その中身をSELECT することで変更の履歴を照会することもできる。
SELECT * FROM cdc.dbo_hoge_CT
詳しくは以下のサイトでダウンロードできるPDFを参照。
http://www.microsoft.com/downloads/details.aspx?FamilyId=EF52E9A0-2581-4ADF-BAA6-0ADC14273A65&displaylang=ja
※1.動作確認をしようと思ったのだが、Express EditionではSQL Agent サービスが
サポートされていないようなので未検証。
※2.ということでExpress Editionではこの機能は使用できないっぽい。
※3.EnterPrise Editionで動作検証済み (2011/2/2)