変更データ キャプチャでの時間指定での過去データの参照

SQL Server 2008 からの新機能である「変更データ キャプチャ」では、特定の時間を指定して、昔のデータの参照することも簡単に行えます。変更データ キャプチャでは、「lsn_time_mapping」という名前のテーブルが自動的に作成されて、LSN と時刻とのマッピングが管理されているからです。これは、次のように確認できます。

SELECT * FROM cdc.lsn_time_mapping



このマッピング テーブルは、「fn_cdc_map_time_to_lsn」関数を利用すると、時刻をもとに LSN 番号を取得することができるので、この LSN 番号を「fn_cdc_get_all_changes_テーブル名」関数へ与えるようにすると、特定の時間の範囲を指定して、昔のデータを参照できるようになります。これは次のように利用できます。

/*--------------------------------------------------------------
 2008/03/23 20:51:22 以降から現在までの間に更新されたデータの参照
---------------------------------------------------------------*/
DECLARE @begin_time datetime = '2008/03/23 20:51:22'
DECLARE @end_time   datetime = GETDATE()
DECLARE @from_lsn binary(10), @to_lsn binary(10)

-- fn_cdc_map_time_to_lsn 関数により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_商品関数
SELECT * FROM 
 cdc.fn_cdc_get_all_changes_dbo_商品(@from_lsn, @to_lsn, 'all')


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