Microsoft SQL Server、RDS for SQL Server、Azure SQL Database、Azure Managed Instanceソース データベース取り込みとレプリケーション タスクでMicrosoft SQL Serverソースを使用するには、最初にソースデータベースを準備し、使用に関する考慮事項を確認してください。SQL Serverソースタイプには、オンプレミスのSQL Server、Relational Database Service(RDS)for SQL Server、Azure SQL Database、およびAzure SQL Managed Instanceが含まれます。
ソースの準備: • SQL Serverソースタイプの場合、データベース取り込みとレプリケーション がサポートしているSQL Serverのエディションとバージョンを使用していることを確認します。KB記事「FAQ: What are the supported sources and targets for Cloud Data Ingestion and Replication service 」を参照してください。• SQL Server CDCを有効にし、データをレプリケートするために必要な権限を付与します。SQL Server権限 を参照してください。• SQL Serverソースを持ち、ログベース または[CDCテーブル] のキャプチャメソッドを使用しているデータベース取り込みとレプリケーション の増分ロードジョブと組み合わせロードジョブの場合は、ソースデータベースでSQL Server変更データキャプチャ(CDC)を有効にする必要があります。- Amazon Relational Database Service(RDS)for SQL Serverソースの場合は、マスターユーザーとしてログインし、msdb.dbo.rds_cdc_enable_db ' database_name ' ストアドプロシージャを実行します。- その他のすべてのSQL Serverソースの場合は、データベースコンテキストのsys.sp_cdc_enable_db ストアドプロシージャを実行します。sysadminロールが必要です。データベースとソーステーブルでSQL Server CDCが有効になると、SQL ServerはトランザクションログとCDCテーブルに追加情報を書き込みます。この情報は、データベース取り込みとレプリケーション が増分CDC処理中に使用します。
または、データベース取り込みとレプリケーション タスクを作成するときに、データベースおよび選択したソーステーブルのすべてのカラムでCDCを有効にするスクリプトを生成することもできます。CDCスクリプトを実行するには、適切な権限が必要です。
制約事項: データベース取り込みとレプリケーションでは、1019個を超えるカラムを含むテーブルに対してCDCを有効にすることはできません。
• クエリベースのキャプチャメソッドを使用する増分ロードジョブ、および初期ロードと増分ロードの組み合わせジョブの場合、ソーステーブルには、変更行を示すために使用されるCDCクエリカラムを含める必要があります。データベース取り込みとレプリケーション タスクを作成する前に、クエリカラムをソーステーブルに追加する必要があります。CDCクエリカラムタイプは、タイムゾーンがないタイムスタンプに相当する必要があります。クエリカラムでサポートされているSQL Serverデータ型は、DATETIMEとDATETIME2です。使用に関する考慮事項: • データベース取り込みとレプリケーション ジョブは、オンプレミスのSQL Server、Amazon RDS for SQL Server、Azure SQL Managed Instance、およびAzure SQL Databaseソースのすべてのロードタイプをサポートします。• データベース取り込みとレプリケーション では、増分ロードジョブ、または初期ロードと増分ロードの組み合わせジョブのSQL Serverソースに対して、次の代替キャプチャメソッドを提供しています。[CDCテーブル] オプションを使用すると最高のレプリケーションパフォーマンスが得られ、結果の信頼性が最大になります。
同じデータベースに対して同時に実行される複数のジョブに[ログベース] のメソッドを使用した場合は、パフォーマンスが大幅に低下する可能性があります。
各キャプチャメソッドの詳細については、
SQL Serverソースの変更キャプチャメカニズム を参照してください。
• ログベースのCDCを使用するタスクの場合にSQL ServerデータベースでCDCを有効にすると、SQL Serverは、SQL Serverエージェントによって実行されるキャプチャジョブとクリーンアップジョブを自動的に作成します。キャプチャジョブは、SQL Server CDCテーブルへの入力を担当します。クリーンアップジョブは、CDCテーブルからのレコードをクリーンアップする役割を果たします。CDCテーブルのデータ保持期間のデフォルト値は72時間、つまり3日です。sys.sp_cdc_help_jobs ストアドプロシージャを実行して結果の保持期間の値を確認すると、現在の保持期間を確認できます。ダウンタイムが3日を超えることが予想される場合は、sys.sp_cdc_change_job ストアドプロシージャまたはSQL Serverエージェントのクリーンアップジョブで保持期間を調整できます。クリーンアップジョブを一時停止することもできます。• データベース取り込みとレプリケーション はSQL Serverのページ圧縮とソースデータの行圧縮をサポートします。• データベース取り込みとレプリケーション では、ソーステーブルの各行が一意であることを想定しているため、各ソーステーブルにプライマリキーを持たせることをお勧めします。データベース取り込みとレプリケーション は、プライマリキーの代わりに一意のインデックスを許可しません。プライマリキーが指定されていない場合、データベース取り込みとレプリケーション はすべてのカラムをプライマリキーの一部であるかのように扱います。例外: SQL ServerクエリベースのCDCの場合、各ソーステーブルにプライマリキーが必要です。• トランザクションログを使用するログベースのCDCの場合、データベース取り込みとレプリケーション には、ソースデータベースに対する読み取り/書き込みアクセス権が必要です。SQL Server Always On可用性グループを使用する場合、この要件が意味するのは、データベース取り込みとレプリケーション が読み取り/書き込みプライマリレプリカから変更データをキャプチャできるが、読み取り専用セカンダリレプリカからはキャプチャできないことです。• Microsoft SQL ServerソースでAlways Encrypted方式を使用してカラムデータを暗号化している場合、データベース取り込みとレプリケーション タスクの[ソース] ページの[CDCスクリプト] フィールドから生成されたCDCスクリプトは実行できません。この問題は、SQL Serverの制限が原因で発生します。この問題は、Transparent Data Encryption(TDE)では発生しません。• データベース取り込みとレプリケーション は、データベース取り込みおよびrepoliclationincrementalロードジョブでのMicrosoft SQL Serverソースのスキーマドリフトオプションをサポートしています。次の制限が適用されます。- Microsoft SQL Serverは、変更データキャプチャ(CDC)が有効になっているテーブルとカラムの名前変更をサポートしていません。- Microsoft SQL Serverは、CDCテーブルのプライマリキーの変更をサポートしていません。- データベース取り込みとレプリケーション がCDCテーブルから変更データを直接読み取った場合、作成後にCDCテーブルが変更されることはありません。ソーステーブルで発生したDDLの変更は、CDCテーブルにNULLとしてレプリケートされます。DDLの変更をCDCテーブルにレプリケートするには、タスクウィザードの[ソース] ページでpwx.custom.sslr_cdc_manage_instancesカスタムプロパティを1に設定します。このカスタムプロパティを使用すると、CDCテーブルを変更してソーステーブルのDDLの変更を反映し、DMLキャプチャを強化することができます。CDCテーブルのアクティブな管理を有効にするには、db_ownerロールが必要です。• ソーステーブルのパーティションの変更により行セットIDが変更された場合、データベース取り込みとレプリケーション は変更を処理して、データベース取り込みとレプリケーション ジョブがテーブルからDML変更をキャプチャし続けることができるようにします。• クエリベースのCDCメソッドを使用した増分ロードおよび初期ロードと増分ロードの組み合わせジョブには、次の制限が適用されます。- 選択したソーステーブルごとにプライマリキーが必要です。ソーステーブルにプライマリキーが存在しない場合、変更データキャプチャはテーブルを無視し、選択されたソーステーブルの残りの処理を続行します。どのソーステーブルにもプライマリキーがない場合、ジョブは失敗します。- クエリベースのCDCは、削除操作をキャプチャしません。- 挿入と更新の操作はすべて更新/挿入として扱われ、監視インタフェースに表示され、更新としてログに記録されます。- ラージオブジェクト(LOB)カラムからのデータレプリケーションはサポートされていません。ソーステーブルにLOBカラムが含まれている場合、データベース取り込みとレプリケーション はこれらのカラムに対してNULLをプロパゲートします。- 特定のサイクルの開始時に夏時間またはタイムゾーンの変更が検出された場合、またはジョブが失敗状態または停止状態から再開されたときに、データベース取り込みとレプリケーション は再開してそのサイクルで発生した変更を処理します。• タスクウィザードの[ソース] ページの[詳細] で[LOBを含める] を選択した場合、データベース取り込みとレプリケーション ジョブで、Microsoft SQL Serverのラージオブジェクト(LOB)カラムからデータをレプリケートできます。サポートされるターゲットタイプは、ロードタイプによって異なります。
- 初期ロードジョブの場合: Amazon Redshift、Amazon S3、Databricks、Google BigQuery、Google Cloud Storage、Microsoft Azure Data Lake Storage Gen2、Microsoft Azure Synapse Analytics、Microsoft Fabric OneLake、Oracle、Oracle Cloud Object Storage、PostgreSQL、Snowflake、およびSQL Server。- 増分ロードジョブの場合: Azure Event Hubs、Databricks、Microsoft Fabric OneLake、PostgreSQL、Snowflake、およびSQL Server。- 初期ロードと増分ロードの組み合わせジョブの場合: Databricks、Microsoft Fabric OneLake、PostgreSQL、Snowflake、およびSQL Server。LOBデータ型は、GEOGRAPHY、GEOMETRY、IMAGE、VARBINARY(MAX)、VARCHAR(MAX)、NVARCHAR(MAX)、TEXT、NTEXT、およびXMLです。LOBデータは、ターゲットに書き込まれる前に切り詰められる場合があります。切り詰めポイントは、データ型、ターゲットタイプ、およびロードタイプによって異なります。詳細については、
Microsoft SQL Serverソースの設定 の[LOBを含める]に関する説明を参照してください。
• データベース取り込みとレプリケーション は、SQL Serverの永続化されていない計算カラムからのデータをレプリケートしません。ログベースまたはクエリベースのCDCメソッドを使用する初期ロードジョブ、増分ロードジョブ、および初期ロードと増分ロードの組み合わせジョブの場合、永続化された計算カラムはターゲットにレプリケートされます。CDCテーブルからのみ変更をキャプチャする増分ロードジョブ、および初期ロードと増分ロードの組み合わせジョブの場合、永続化された計算カラムは、カラムがNULL値を許容するかどうかに応じて、NULLまたは空の値としてレプリケートされます。• SQL ServerソースとSQL Serverターゲットを持ち、sql_variantソースカラムを含むデータベース取り込みとレプリケーション の初期ロードジョブは、ターゲット上でsql_variantデータを16進形式に変換します。データを16進形式からvarbinary形式に変換するには、次のクエリを実行します。SELECT <column_name >, CONVERT(varbinary,<column_name >) from <table_name >;
<column_name >と<table_name >を実際のターゲットカラムとテーブル名に置き換えます。
• SQL Server Hierarchyidデータ型は、データベース取り込みとレプリケーション の増分ロード、およびSnowflakeターゲットを持つ初期ロードと増分ロードの組み合わせジョブではサポートされていません。データベース取り込みとレプリケーション は、このデータ型を持つカラムに対してnullをプロパゲートします。詳細については、デフォルトのデータ型マッピング を参照してください。• 複数のエージェントが含まれるSecure Agentグループを使用していて、アクティブなエージェントが予期せずダウンした場合、データベース取り込みとレプリケーション ジョブは、Secure Agentグループ内の別の使用可能なエージェントに自動的に切り替えることができます。自動スイッチオーバーは、15分のハートビート間隔が経過した後に行われます。SQL Serverソースを持つデータベース取り込みとレプリケーション ジョブの場合、自動スイッチオーバーに次の制限があります。- ジョブで永続ストレージを有効にすることはできません。- Kafkaターゲットを持つジョブでは、チェックポイント情報をKafkaヘッダーに格納する必要があります。2025年7月リリースより前に存在していたジョブの場合、チェックポイント情報はSecure Agentのチェックポイントファイルに格納されるため、自動スイッチオーバーを実行できません。- クエリベースのCDCメソッドを使用するジョブには、Amazon Redshift、Databricks、Google BigQuery、Microsoft Azure Synapse Analytics、Oracle、PostgreSQL、Snowflake、またはSQL Serverターゲットが必要です。• SQL ServerソースがAlways On可用性グループ内にある場合、データベース取り込みとレプリケーション の増分ロードジョブおよび組み合わせロードジョブは、プライマリノードまたはセカンダリノードのトランザクションログまたはCDCテーブルから変更データをキャプチャできます。また、ノードが使用できなくなった場合、可用性グループリスナを指すようにSQL Server接続を構成していれば、データベース取り込みとレプリケーション ジョブは可用性レプリカ内のプライマリデータベースまたはセカンダリデータベースにフェールオーバーして処理を続行できます。可用性グループリスナーは、SQL Server物理インスタンス名を知らなくても、データベース取り込みとレプリケーション が可用性グループの可用性レプリカ内のデータベースにアクセスするために使用できる仮想ネットワーク名(VNN)です。• SQL Serverソースを使用したデータベース取り込みとレプリケーション ジョブの実行後、レプリケーション用に追加のソースカラムを選択してタスクを再デプロイした場合、ジョブは追加のカラムを使用してターゲットテーブルをすぐに再作成したり、それらのデータをレプリケートしたりしません。ただし、増分ロードジョブ、または初期ロードと増分ロードの組み合わせジョブでは、スキーマドリフトの[カラムの追加] オプションを[レプリケート] に設定した場合、次の新しいDML変更レコードを処理するときに、新しく選択したカラムがターゲットに追加され、データがレプリケートされます。初期ロードジョブでは、次回のジョブ実行時に、新しく選択したカラムがターゲットに追加され、データがレプリケートされます。• SQL Serverのメモリ最適化テーブルは、[クエリベース] のCDCメソッドを使用するデータベース取り込みとレプリケーション の増分ロードジョブ、および初期ロードと増分ロードの組み合わせジョブのソースとしてサポートされています。ただし、メモリ最適化テーブルは、[CDCテーブル] または[ログベース] のCDCメソッドを使用するジョブのソースとしてサポートされていません。• SQL Serverソースに永続化された計算カラムが含まれている場合、データベース取り込みおよびレプリケーションの増分ロードジョブおよび組み合わせロードジョブは、使用するCDCメソッドに関係なく、計算カラムの式の値をレプリケートすることができます。SQL Server権限 SQL Serverソースからデータをレプリケートするには、データベース取り込みとレプリケーションユーザーに一部のSQL Server権限を付与する必要があります。
SQL Server CDCの有効化の前提条件 変更をキャプチャするには、[ログベース]または[CDCテーブル]のキャプチャメソッドを使用している増分ロードジョブと組み合わせロードジョブのデータベースとソーステーブルでSQL Server CDCを有効にする必要があります。
データベースでCDCを有効にするには、次の手順を実行します。
• RDS for SQL Serverの場合は、マスタユーザーとしてログインし、次のコマンドを実行します。USE <DB>; EXEC msdb.dbo.rds_cdc_enable_db '<DB>';
• サポートされているその他のSQL Serverのタイプについては、sysadminロールが割り当てられていることを確認し、次のコマンドを実行します。USE <DB>; EXEC sys.sp_cdc_enable_db;
SQL ServerソーステーブルでCDCを有効にするには、db_ownerロールが割り当てられていることを確認し、次のコマンドを実行します。
EXEC sys.sp_cdc_enable_table @source_schema = N'<schemaname>', @source_name = N'<tablename>', @role_name = NULL;
注: sp_cdc_enable_tableの構文には、最低限必要な引数が含まれています。より多くの引数を使用することができます。詳細については、WebSphereサーバーのマニュアルを参照してください。
データのレプリケートに必要な権限 必要な権限は、ジョブのロードタイプとCDCメソッドに応じて異なります。
ユーザーの作成
データベース接続には、マスタデータベースおよびソースデータベースでログインユーザーを作成する必要があります。
USE master; CREATE DATABASE <DB>; CREATE LOGIN <login_name> WITH PASSWORD = '<password>'; CREATE USER <user> FOR LOGIN <login_name>; USE <DB>; CREATE USER <user> FOR LOGIN <login_name>;
初期ロードジョブに対する権限
初期ロードジョブには、次の最小限の権限が必要です。
GRANT SELECT ON <table> TO <user>; GRANT SELECT ON sys.system_internals_partition_columns to <user>;
増分ロードジョブ、および初期ロードと増分ロードの組み合わせジョブに対する権限
増分ロードジョブと組み合わせロードジョブの場合、初期ロードジョブに対して上記の最小限の権限に加えて、増分CDC処理に必要な追加の権限がいくつか必要となります。CDCの権限は、使用するCDCメソッドに応じて異なります。
• デフォルトの[CDCテーブル] メソッドで、SQL Server CDCテーブルに対する次の権限を付与します。USE <DB>; GRANT SELECT ON cdc.<capture_instance> TO <user>; GRANT SELECT ON cdc.ddl_history TO <user>;
CDCテーブルを管理できるようにするには、次のコマンドを実行します。
USE <DB>; EXEC sp_addrolemember 'db_owner', '<user>';
• [ログベース] メソッドを使用する場合は、次の権限を付与します。USE master; GRANT SELECT ON master.sys.fn_dblog TO <user>; GRANT VIEW SERVER STATE TO <login_name>; USE <DB>; EXEC sp_addrolemember 'db_owner', '<user>';
• [クエリベース] メソッドを使用する場合は、初期ロードジョブに対して上記のものと同じ最小限の権限のみを付与します。SQL Serverソースの変更キャプチャメカニズム データベース取り込みとレプリケーション は、SQL Serverソースから変更データをキャプチャしてそのデータをターゲットに適用するための、複数の変更キャプチャメカニズムを提供します。
CDCテーブルのみを使用した変更キャプチャ データベース取り込みとレプリケーション の増分ロードジョブは、トランザクションログを使用せずにSQL Server CDCテーブルから直接変更をキャプチャできるようになりました。CDCテーブルは、デフォルトのCDCメソッドです。
CDCテーブルのみを使用する変更キャプチャ処理には、次のコンポーネントが関わります。
• Informatica Intelligent Cloud Services Secure Agent。SQL Serverインスタンスに対してローカルまたはリモートのLinuxボックスまたはWindowsボックスで実行できます。• SQL Server CDCテーブル: cdc.lsn_time_mapping、cdc.ddl_history、およびcdc.<capture instance >_CT。ソースデータベースでCDCが有効になっている場合、SQL ServerはこれらのテーブルをCDCスキーマに作成します。1つまたは2つのcdc.<capture instance >_CTテーブル。CDCが有効になっているソーステーブルごとに作成され、ネイティブログリーダーによってキャプチャされたDML変更を格納します。• CDCキャプチャインスタンステーブルリーダー。cdc.<capture_instance >_CTテーブルから変更レコードを読み取ります。• CDCライター。変更をターゲットに書き込みます。次の図は、SQL Serverのログベースの変更データキャプチャコンポーネントとデータフローを示しています。
1 CDCキャプチャインスタンステーブルリーダーはcdcから変更を読み取ります。<capture instance >_CTテーブル内に存在する場合、キャプチャプロセスの初期化および開始中である。2 CDCキャプチャインスタンステーブルリーダーは変更レコードをCDCライターに送信します。3 CDCライターは変更レコードをフォーマットし、ターゲットに適用します。トランザクションログとCDCテーブルを使用するログベースの変更データキャプチャ ログベースのCDCを使用するデータベース取り込みとレプリケーション の増分ロードジョブは、アクティブなトランザクションログからレコードを解析し、CDCテーブルから変更レコードを直接読み取ることで、DMLとDDLの変更をキャプチャします。必要な再開ポイント(LSN)が利用可能な場合、変更データはアクティブなトランザクションログから読み取られます。キャプチャ開始点がトランザクションログ内のレコードより前の日付である場合、またはその他の特定の状況では、データベース取り込みとレプリケーション は自動的にCDCテーブルからの変更データの読み取りに移行します。CDCテーブルから変更を読み取った後、データベース取り込みとレプリケーション は、トランスペアレントな方法でアクティブなトランザクションログの読み取りに戻ります。
ログベースの変更キャプチャ処理には、次のコンポーネントが関わります。
• Informatica Intelligent Cloud Services Secure Agent。SQL Serverインスタンスに対してローカルまたはリモートのLinuxボックスまたはWindowsボックスで実行できます。• dbo.$InfaXactテーブル。オープントランザクションに関連付けられ、現在実行中のキャプチャジョブに関する情報を一時的に格納します。テーブルが存在しない場合は、変更キャプチャプロセスによって作成されます。• ログリーダーとそのサブコンポーネント。トランザクションログからDMLおよびDDL変更レコードを解析して読み取るために必要です。• SQL Server fn_dblog()関数。ログリーダーが呼び出しをループして、ソースデータベースのトランザクションログファイルのアクティブな部分からログレコードを取得します。• SQL Server CDCテーブル: cdc.lsn_time_mapping、cdc.ddl_history、およびcdc.<capture instance >_CT。ソースデータベースでCDCが有効になっている場合、SQL ServerはこれらのテーブルをCDCスキーマに作成します。1つまたは2つのcdc.<capture instance >_CTテーブル。CDCが有効になっているソーステーブルごとに作成され、ネイティブログリーダーによってキャプチャされたDML変更を格納します。• CDCキャプチャインスタンステーブルリーダー。cdc.<capture_instance >_CTテーブルから変更レコードを読み取ります。• CDCライター。変更をターゲットに書き込みます。次の図は、SQL Serverのログベースの変更データキャプチャコンポーネントとデータフローを示しています。
1 ログリーダープロセスは、ログレコードを読み取り、コミットされたトランザクションのDMLおよびDDLの変更をキャプチャします。- トランザクションマネージャサブコンポーネントは、オープントランザクションに関連付けられたdbo.$InfaXactテーブルと対話します。- ログパーサーサブコンポーネントは、fn_dblog()関数の呼び出しをループして、CDCが有効になっている選択されたソーステーブルのアクティブなトランザクションログからログレコードを読み取ります。キャプチャプロセスは、コミットされたトランザクションが完了するか、致命的なエラーによってキャプチャプロセスが停止または中断されるか、cdc.<capture_instance >_CTテーブルからの変更レコードの読み取りへの切り替えがトリガーされるまで続行されます。
2 特定の状況では、データベース取り込みとレプリケーション は、CDCキャプチャインスタンステーブルリーダーを使用して、cdc.<capture instance >_CTテーブルからの変更の読み取りに自動的に切り替わります。以下の条件下では、処理は、cdc.<capture instance >_CTテーブルに切り替わります。
3 ログリーダーとCDCキャプチャインスタンステーブルリーダーは、変更レコードをCDCライターに送信します。4 CDCライターは変更レコードをフォーマットし、ターゲットに適用します。クエリベースの変更キャプチャ データベース取り込みとレプリケーション の増分ロードジョブは、変更が発生したときに更新されるタイムスタンプカラムを照会することにで、ソースにおける挿入と更新の変更をキャプチャします。ソースの設定は、各ソーステーブルへの共通CDCクエリカラムの追加に制限されます。クエリベースのCDCメソッドはクエリカラムを使用して、指定のCDC間隔の開始以降に変更された行を識別します。
クエリベースの変更キャプチャを実装するには、タスクウィザードの[ソース] ページで次のオプションを設定します。
• CDCメソッド 。[クエリベースの] を選択して、このキャプチャメソッドを有効にします。• CDCクエリカラム名 。ソーステーブルにおけるCDCクエリカラムの、大文字小文字が区別された名前です。クエリカラムでサポートされているSQL Serverデータ型は、DATETIMEとDATETIME2です。カラムはソーステーブルに存在する必要があります。• CDC間隔 。クエリベースの変更データキャプチャサイクルの頻度。デフォルトは5分です。• 増分ロード操作の当初の開始点 。変更キャプチャサイクルを開始するポイント。デフォルトは[使用可能な最新] です。CDC間隔が経過した後、データベース取り込みとレプリケーション は、CDCクエリカラムを参照するWHERE句を含むSQLクエリを使用して、CDC間隔の間に変更を受け取った行を識別します。変更データがキャプチャされ、ターゲットに適用されます。
クエリベースのCDC用に選択されたソーステーブルにCDCクエリカラムがない場合、変更データキャプチャはこれらのテーブルを無視し、残りのテーブルで処理を続行します。スキップされたテーブルの場合、ターゲットデータベースで生成された、対応するテーブルは空になります。どのソーステーブルにもCDCクエリカラムがない場合、ジョブは実行時に失敗します。
次の図は、SQL Serverのクエリベースの変更データキャプチャコンポーネントとデータフローを示しています。
1 CDC間隔が経過した後、データベース取り込みとレプリケーション は、CDCクエリカラムを使用して変更データを抽出するSQLクエリをソースデータベースで実行します。2 変更レコードがCDCライターに送信されます。3 CDCライターは変更レコードをフォーマットし、ターゲットに適用します。