変更データ キャプチャとその他の SQL Server 機能
このトピックでは、次の機能と変更データ キャプチャとの連携について説明します。
変更の追跡
データベース ミラーリング
トランザクション レプリケーション
変更データ キャプチャが有効になっているデータベースの復元またはアタッチ
変更の追跡
変更データ キャプチャと変更の追跡は、同じデータベースで有効にすることができます。 特に注意が必要な点はありません。 詳細については、「変更の追跡のしくみ (SQL Server)」を参照してください。
データベース ミラーリング
変更データ キャプチャが有効になっているデータベースをミラー化できます。 フェールオーバー後にキャプチャとクリーンアップが自動的に行われるようにするには、次の手順を実行します。
新しいプリンシパル サーバー インスタンスで SQL Server エージェントが実行されていることを確認します。
新しいプリンシパル データベース (以前のミラー データベース) にキャプチャ ジョブとクリーンアップ ジョブを作成します。 ジョブを作成するには、sp_cdc_add_job ストアド プロシージャを使用します。
クリーンアップまたはキャプチャ ジョブの現在の構成を表示するには、新しいプリンシパル サーバー インスタンスで sys.sp_cdc_help_jobs ストアド プロシージャを使用します。 特定のデータベースに対し、キャプチャ ジョブの名前は cdc.database_name_capture に、クリーンアップ ジョブの名前は cdc.database_name_cleanup になります (database_name はデータベースの名前)。
ジョブの構成を変更するには、sys.sp_cdc_change_job ストアド プロシージャを使用します。
データベース ミラーリングの詳細については、「データベース ミラーリング (SQL Server)」を参照してください。
トランザクション レプリケーション
変更データ キャプチャとトランザクション レプリケーションは、同じデータベースで共存できます。ただし、両方の機能が有効になっている場合、変更テーブルが異なる方法で作成されます。 変更データ キャプチャとトランザクション レプリケーションでは、トランザクション ログから変更を読み取る際に、常に同じプロシージャ (sp_replcmds) が使用されます。 変更データ キャプチャのみが有効になっている場合は、SQL Server エージェント ジョブによって sp_replcmds が呼び出されます。 同じデータベースで両方の機能が有効になっている場合は、ログ リーダー エージェントによって sp_replcmds が呼び出されます。 このエージェントは、変更テーブルとディストリビューション データベース テーブルの両方を作成します。 詳細については、「レプリケーション ログ リーダー エージェント」を参照してください。
AdventureWorks2012 データベースで変更データ キャプチャが有効になっており、2 つのテーブルでキャプチャが有効になっているシナリオについて考えてみます。 変更テーブルを作成するために、キャプチャ ジョブによって sp_replcmds が呼び出されます。 データベースでトランザクション レプリケーションが有効になり、パブリケーションが作成されます。 次に、ログ リーダー エージェントがデータベースに対して作成され、キャプチャ ジョブが削除されます。 ログ リーダー エージェントは、変更テーブルにコミットされた最後のログ シーケンス番号からログのスキャンを続行します。 これにより、変更テーブル内のデータの一貫性が確保されます。このデータベースでトランザクション レプリケーションが無効になっている場合、ログ リーダー エージェントが削除され、キャプチャ ジョブが再作成されます。
注 |
---|
変更データ キャプチャとトランザクション レプリケーションの両方でログ リーダー エージェントを使用している場合、レプリケートされた変更が最初にディストリビューション データベースに書き込まれます。 次に、キャプチャされた変更が変更テーブルに書き込まれます。 両方の操作は同時にコミットされます。 ディストリビューション データベースへの書き込みの際に遅延が生じた場合、変更テーブルに変更が表示される前に、それに対応する遅延が発生します。 |
変更データ キャプチャが有効な場合、トランザクション レプリケーションの proc exec オプションは使用できません。
変更データ キャプチャが有効になっているデータベースの復元またはアタッチ
SQL Server では、データベースが復元またはアタッチされた後に変更データ キャプチャを有効のままにするかどうかを、次のロジックに従って判断します。
データベースを同じサーバーに同じデータベース名で復元した場合、変更データ キャプチャは有効のままです。
データベースを別のサーバーに復元した場合、既定では変更データ キャプチャが無効になり、関連するメタデータがすべて削除されます。
変更データ キャプチャを保持するには、データベースを復元する際に KEEP_CDC オプションを使用します。 このオプションの詳細については、「RESTORE」を参照してください。
データベースをデタッチしてから、同じサーバーまたは別のサーバーにアタッチした場合、変更データ キャプチャは有効のままです。
KEEP_CDC オプションを使用してデータベースを Enterprise 以外のエディションにアタッチまたは復元しようとすると、操作がブロックされます。これは変更データ キャプチャが SQL Server Enterprise を必要とするためです。エラー メッセージ 934 が表示されます。
SQL Server cannot load database '%.*ls' because change data capture is enabled. The currently installed edition of SQL Server does not support change data capture. Either disable change data capture in the database by using a supported edition of SQL Server, or upgrade the instance to one that supports change data capture.
sys.sp_cdc_disable_db を使用すると、復元またはアタッチされたデータベースから変更データ キャプチャを削除できます。