変更データ キャプチャ(CDC)を有効にする

このページでは、Cloud SQL for SQL Server で変更データ キャプチャ(CDC)を有効にする方法について説明します。この機能は、インスタンスのデータベースで使用できます。

CDC を使用すると、さまざまな種類の変更をキャプチャできます。CDC の有効化と無効化については、Microsoft のドキュメントをご覧ください。

インスタンスに接続すると、sqlserver ユーザーは多くの CDC オペレーションを実行できます。

変更データの操作もご覧ください。

始める前に

インスタンスに CDC を実装する前に、このページのすべての情報を確認してください。

利用できる機能の確認

CDC は、次の Cloud SQL for SQL Server データベース バージョンで使用できます。

  • SQL Server 2022 Standard
  • SQL Server 2022 Enterprise
  • SQL Server 2019 Standard
  • SQL Server 2019 Enterprise
  • SQL Server 2017 Standard
  • SQL Server 2017 Enterprise

CDC の有効化と CDC キャプチャ ジョブの開始

データベースには、sqlserver ユーザーが使用できる次のストアド プロシージャがあります。

  • msdb.dbo.gcloudsql_cdc_enable_db
  • msdb.dbo.gcloudsql_cdc_disable_db

CDC を有効にする

データベースでこの機能を有効にするには、必要なストアド プロシージャを実行して、データベース名を渡します。例:

EXEC msdb.dbo.gcloudsql_cdc_enable_db 'DATABASE_NAME'

CDC を無効にする

データベースでこの機能を無効にするには、次のようなコマンドを実行します。

EXEC msdb.dbo.gcloudsql_cdc_disable_db 'DATABASE_NAME'

CDC キャプチャ ジョブの開始

CDC を有効にすると、キャプチャとクリーンアップのためのジョブが作成されます。ジョブは SQL Server Management Studio(SSMS)の sqlserver ユーザーには表示されません。ただし、組み込みストアド プロシージャを使用してジョブを変更できます。さらに、次のストアド プロシージャを使用してジョブを表示できます。

クリーンアップ ジョブを開始するには、次のコマンドを使用します。

EXEC sys.sp_cdc_start_job @job_type = N'cleanup'

ジョブ パラメータを変更するには、次のようなコマンドを使用できます。

EXEC sys.sp_cdc_change_job  @job_type = N'capture',
        @maxtrans = 20,
        @pollinginterval = NULL,
        @maxscans = NULL,
        @continuous = NULL

ジョブの開始と変更の詳細については、次をご覧ください。

sys.sp_cdc_add_job もご覧ください。

テーブルの CDC の有効化

データベースの CDC を有効にすると、dbo(データベース オーナー)のアクセス権を持つすべてのユーザーが、データベース内のテーブルのトラッキングを設定できます。

標準の CDC コマンドとオプションについては、変更データ キャプチャの有効化と無効化をご覧ください。

テーブル内の変更のトラッキング

テーブルをトラッキングするには、sys.sp_cdc_enable_table ストアド プロシージャを使用します。

たとえば、次のようなコマンドを指定できます。

EXEC sys.sp_cdc_enable_table
  @source_schema = N'dbo',
  @source_name = N'customer',
  @role_name = N'CDC'

テーブルで CDC が有効になっているかどうかを確認する

テーブルで CDC が有効になっているかどうかを確認するには、sys.sp_cdc_help_change_data_capture ストアド プロシージャを使用します。

たとえば、次のようなコマンドを指定できます。

EXECUTE sys.sp_cdc_help_change_data_capture
  @source_schema = N'dbo',
  @source_name = N'customer'

CDC の変更テーブルによるクエリ変更

テーブルで CDC の変更を表示するには、そのテーブルで CDC が有効になると作成されるテーブルに対して SELECT クエリを使用します。

テーブルには、次のように名前が付けられます。

<schema>_<table_name>_CT

たとえば、次のようなコマンドを指定できます。

SELECT * FROM cdc.dbo_customer_CT

キャプチャ インスタンスが指定されているテーブルでの CDC の有効化

「キャプチャ インスタンス」を使用してテーブルをトラッキングするには、sys.sp_cdc_enable_table ストアド プロシージャを使用します。

たとえば、次のようなコマンドを指定できます。

EXEC sys.sp_cdc_enable_table
    @source_schema = N'dbo',
    @source_name = N'customer',
    @role_name = N'CDC',
    @capture_instance = N'customer_cdc',
    @supports_net_changes = 1

キャプチャ インスタンス内のすべての変更のクエリ

「キャプチャ インスタンス」内のテーブルに対して行われた CDC の変更を表示するには、cdc.fn_cdc_get_all_changes_<capture_instance> ストアド プロシージャを使用します。

たとえば、次のような SQL ステートメントを指定できます。

DECLARE @from_lsn binary(10), @to_lsn binary(10)
SET @from_lsn = sys.fn_cdc_get_min_lsn(N'customer_cdc')
SET @to_lsn = sys.fn_cdc_get_max_lsn()
SELECT * FROM cdc.fn_cdc_get_all_changes_customer_cdc(@from_lsn, @to_lsn, N'all');

テーブルの CDC の無効化

テーブルの CDC トラッキングを無効にするには、sys.sp_cdc_disable_table ストアド プロシージャを使用します。無効にするには、キャプチャ インスタンスを指定します。または、キャプチャ インスタンスを 'all' として指定します。

たとえば、テーブルの CDC を無効にするには、次のようなコマンドを指定します。

EXEC sys.sp_cdc_disable_table
  @source_schema = N'dbo',
  @source_name = N'customer',
  @capture_instance = N'all'

CDC 対応データベースの削除

CDC が有効になっているデータベースを削除しようとすると、エラーが発生することがあります。その場合は、データベースの CDC を無効にしてから、データベースを削除します。

たとえば、データベースを無効にして削除するには、次のようなコマンドを指定します。

EXEC msdb.dbo.gcloudsql_cdc_disable_db 'DATABASE_NAME'
DROP DATABASE 'DATABASE_NAME'

開いている接続があるためデータベースを削除できない場合は、次のクエリを使用して接続を確認します。

select db_name(dbid),* from sys.sysprocesses where db_name(dbid)= 'DATABASE_NAME'

開いているすべての接続を閉じます。データベースの CDC を無効にしてから、データベースを削除します。

CDC 対応データベースのインポート

CDC 対応のデータベースをインポートする場合は、Cloud SQL for SQL Server で KEEP_CDC フラグを有効にし、デフォルトのパラメータを使用してキャプチャ ジョブとクリーンアップ ジョブを自動的に作成します。