このページでは、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 フラグを有効にし、デフォルトのパラメータを使用してキャプチャ ジョブとクリーンアップ ジョブを自動的に作成します。