次の方法で共有


変更データ キャプチャとその他の SQL Server 機能

このトピックでは、次の機能が変更データ キャプチャと対話する方法について説明します。

変更の追跡

変更データ キャプチャと 変更の追跡 は、同じデータベースで有効にすることができます。 特に注意が必要な点はありません。 詳細については、「 変更の追跡の操作 (SQL Server)」を参照してください。

データベース ミラーリング

変更データ キャプチャが有効になっているデータベースをミラー化できます。 フェールオーバー後にキャプチャとクリーンアップが自動的に行われるようにするには、次の手順に従います。

  1. 新しいプリンシパル サーバー インスタンスで SQL Server エージェントが実行されていることを確認します。

  2. 新しいプリンシパル データベース (以前のミラー データベース) でキャプチャ ジョブとクリーンアップ ジョブを作成します。 ジョブを作成するには、 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を使用して、復元されたデータベースまたはアタッチされたデータベースから変更データ キャプチャを削除できます。

Change Data Capture と AlwaysON

AlwaysON を使用する場合は、プライマリのディスク負荷を軽減するために、セカンダリ レプリケーションで変更列挙を行う必要があります。

こちらもご覧ください

変更データ キャプチャの管理と監視 (SQL Server)