> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sync.cdata.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 変更データキャプチャ

export const companyName = "CData";

export const siteNameShort = "Sync";

export const siteName = "CData Sync";

一部のデータソースでは\*変更データキャプチャ（CDC）\*をサポートしており、データソースはログファイルを使用して、データベースに変更を加えるイベント（`挿入`、`更新`、または`削除`）をログに記録します。{siteName} は、データソーステーブルに変更をクエリするのではなくログファイルを読み込んで変更イベントを確認します。次に、アプリケーションはレプリケーションのためのそれらの変更をほぼリアルタイムで抽出し、次回のレプリケーション用に現在のログを保存します。

<a name="sources" />以下のデータソースは、CDC の機能をサポートします。これらの一部は、[CDC エンジン](#cdc-engine)を使用してニアリアルタイムで変更をキャプチャしてストリーミングします（CDC エンジンを使用するデータソースの一覧については、[CDC エンジンソースの変更データキャプチャの有効化](#enabling-change-data-capture-for-cdc-engine-sources)を参照してください）。

* **DB2 (Native)：** 補足ロギングを使用します。
* **DB2 for i (Native)：** ジャーナリングを使用します。
* **Informix (Native)：** 変更データキャプチャAPI を使用します。
* **MariaDB：** バイナリログを使用します。
* **Microsoft Dynamics 365：** 変更の追跡を使用します。
* **MySQL：** バイナリログを使用します。
* **Oracle (Native)：** Oracle LogMiner を使用します。
* **PostgreSQL (Native)：** 論理レプリケーションを使用します。
* **SAP ERP：** 変更データキャプチャAPI を使用します。
* **SAP HANA：** トリガーベースのCDC を使用します。
* **SQL Server：** CDC または変更の追跡のいずれかを使用します。両方のメソッドがテーブルで有効になっている場合、{siteNameShort} はCDC を使用します。

  <Note>SQL Server のソーステーブルに`Always Encrypted` カラムが含まれている場合、{siteNameShort} がJDBC 経由で接続する際にCDC はこれらのカラムをサポートします。JDBC ドライバーは、暗号化された（バイナリまたは16進数の）表現の代わりに復号化されたプレーンテキスト値を返すため、読み取りエラーを発生させることなく、暗号化されたカラムをCDC ベースのレプリケーションワークフローに含めることができます。</Note>

このドキュメントでは、以下のコンセプトとタスクについて説明します：

* CDC パイプラインの定義
* CDC を使用する場合かどうかの判断
* ソースデータベースのCDC を有効化
* {siteNameShort} でCDC ジョブを作成
* CDC ジョブにタスクを追加
* Post-Job 変換を追加

## CDC パイプラインとは？

\*変更データキャプチャ（CDC）\*は、データソースからサポートされている同期先にデータ変更をストリーミングできるパイプラインを作成し、そのデータに対して変換を実行できるようにします。サポートされている同期先は、以下のいずれかの構造を含めることができます：

* 別のリレーショナルデータベース
* クラウドストレージシステムまたはデータレイク
* データウェアハウス（例えばSnowflake、Amazon Redshift、Google BigQuery など）
* ファイルストレージシステム
* メッセージキュー（Kafka またはKinesis など）

## CDC を使用するかどうかの判断

CDC のアプローチは、ソースデータベースに加えられた変更を識別、キャプチャ、配信するプロセスを通じてデータを統合します。それらのデータ変更はトランザクションログに保存されます。

このアプローチは、次のような状況で有効です：

* CDC をサポートするデータソースの1つを使用している場合。前述のとおり、{siteNameShort} はMySQL、Oracle、PostgreSQL、およびSQL Server のネイティブのログベースの変更データキャプチャをサポートしています。
* リアルタイムに近いデータを必要としている場合。CDC プロセスは、ETL やELT 処理においてほぼリアルタイムでのデータ転送を提供します。
* リソースの使用を制限または保持したい場合。CDC データ統合は、アプリケーションレベルで変更を加えたり、トランザクションテーブルをスキャンしたりしないので、システムへ与える影響は小さくなります。

## ソースデータベースのCDC を有効化

CDC を有効化する方法は、CDC をサポートするデータベースソースごとに異なります。使用するデータソースのCDC を有効にする方法については、以下の該当するリンクをクリックしてください。

* [MariaDB](../connections/sources/mariadb-source#enable-binary-logging-for-change-data-capture)
* [Microsoft Dynamics 365](../connections/sources/microsoft-dynamics-365-source#configure-change-tracking)
* [SAP ERP](../connections/sources/sap-erp-source#enabling-cdc-in-cdata-sync)
* [SQL Server](../connections/sources/sql-source#sql-server-の変更データキャプチャのセットアップ)

## {siteName} でCDC ジョブを作成

ジョブを作成するには、事前設定されたデータソースと同期先の接続が必要です。データソースおよび同期先接続の作成に関する詳細は、[接続](../getting-started/administration/connections-page)を参照してください。

データソースへの接続と、同期先データベースを定義後、次の手順に従って新しいジョブを作成します。

1. {siteNameShort} の**ジョブ**タブで、**ジョブを追加 > 新しいジョブを追加**を選択します。**ジョブを追加**ダイアログボックスが開きます。
2. ダイアログボックスで、ジョブ名を入力し、[サポートされているCDC データソース](#enabling-cdc-for-the-source-database)の1つを選択し、さらに同期先も選択します。
3. レプリケーションタイプとして**変更データキャプチャ**を選択します。
4. **同期先スキーマ**リストからスキーマを選択します。
5. **ジョブを追加**をクリックしてジョブを作成します。
6. **ジョブ**ページに戻り、ジョブにアクセスします。

## CDC ジョブにタスクを追加

*タスク*はデータソースから同期先へのデータフローを制御します。通常のレプリケーションジョブでは、すべてのデータソーステーブルをレプリケーションタスクとしてジョブに追加できます。

テーブルをレプリケーションタスクとして追加するには：

1. {siteNameShort} の**ジョブ**タブで、ジョブをクリックします。
2. **ジョブ / *ジョブ名***ページの**ジョブ設定**セクションで**タスクを追加**をクリックします。このアクションにより**スキーマを選択**ダイアログボックスが開きます。
3. スキーマリストからスキーマ（例：**public**）を選択します。
4. ダイアログボックスで特定のテーブルを選択するか、データソース名の横のチェックボックスを選択して、すべてのテーブルを選択します。
5. **タスクを追加**をクリックして新しいタスクを追加します。
6. **ジョブ**ページに戻り、ジョブにアクセスして実行します。

タスクの作成について、詳しくは[タスク](./tasks/tasks)を参照してください。

## 主キーを持たないテーブルに対するCDC のサポート

{siteNameShort} は、同期先テーブルに新しいカラム（`_cdatasync_id`）を追加することで、主キーのないソーステーブルのCDC をサポートします。このカラムには、行全体のコンテンツから生成されたハッシュ値が格納されます。このハッシュ値は、内容に基づいて行の一意の識別子として機能します。行のいずれかの値が変更されるとハッシュ値も変更されるため、{siteNameShort} は主キーがなくても行が更新されたことを認識できます。

{siteNameShort} が`_cdatasync_id` カラムを追加すると、アプリケーションはINSERT、UPDATE、およびDELETE 操作を次のように処理します：

* **INSERT：** データソースで新しい行が検出されると、{siteNameShort} は`_cdatasync_id` 値を生成し、その行を同期先に挿入します。
* **UPDATE：** {siteNameShort} は、`_cdatasync_deleted=true` を設定することで、既存の行の論理削除を実行します。その後、{siteNameShort} は新しい行を挿入します。
* **DELETE：** {siteNameShort} は、`_cdatasync_deleted=true` を設定することで、行の論理削除を実行します。

このアプローチ（新しいカラムの追加）により、主キーを持たないソーステーブルに対して正確なCDC を実現できます。

## Post-Job 変換の追加

{siteNameShort} は、ジョブ完了後のデータ変換プロセスをサポートします。高度なSQL クエリを使用するか、既存のdbt Core およびdbt Cloud プロジェクトを活用することで、単一のプラットフォームですべてのデータニーズに対応できます。

SQL 変換についての詳細は、[SQL Transformation](../transformations/post-job-elt/sql-transformations) を参照してください。DBT 変換についての詳細は、[DBT Transformation](../transformations/post-job-elt/dbt-transformations) を参照してください。

## {siteNameShort} CDC エンジンの使用方法

{siteNameShort} の一部の変更データキャプチャ（CDC）ソースは、CDC エンジンを使用してニアリアルタイムでデータ変更をキャプチャしてストリーミングします。CDC エンジンは、データベーストランザクションログを継続的に監視し、{siteNameShort} が処理する変更イベントをステージングします。

### CDC エンジン

*CDC エンジン*は、{siteNameShort} アプリケーションのコンポーネントで、ソースデータベースからのリアルタイムデータ変更を追跡しストリーミングします。CDC エンジンは、トランザクションログ（ログ先行書き込みやREDO ログなど）を監視することでデータの更新を識別し、これらの変更イベントをステージングエリアにファイルとして一時的に保存して、さらに処理できるようにします。このステージングエリアは、アプリケーションディレクトリの`jobs` フォルダにあります（`C:\ProgramData\CData\sync\jobs`）。

CDC エンジンを使用する各CDC ジョブには、ステージングエリア内に専用のサブフォルダを持つ専用のエンジンインスタンスがあります。ジョブに含まれる各テーブルに対して、{siteNameShort} はステージングされた変更イベントファイルを含む対応するサブフォルダを作成します。

#### ステージファイルの管理

変更イベントの保存を最適化するには、1つのステージファイルに書き込むことができる最大行数を指定する`stage.file.max.rows` プロパティを設定します。デフォルトでは、この値は100,000行に設定されています。多数のカラムを持つテーブルや大きなオブジェクト（バイナリデータなど）を含むジョブの場合、{companyName} ではこのプロパティの値を減少させることをお勧めします。

次の例に示すように、ジョブの**高度な設定**タブでテーブルスキーマに応じてこのプロパティを設定できます：

<img src="https://mintcdn.com/cdata-sync/I6gJ4qR9mocXqHNN/images/Change-Data-Capture_stage-file-config_1.png?fit=max&auto=format&n=I6gJ4qR9mocXqHNN&q=85&s=e5fc78ece6a17232b9550dc106c43f75" width="400" alt="高度な設定タブでのステージファイル設定" data-path="images/Change-Data-Capture_stage-file-config_1.png" />

#### ステージリミットの管理

すべてのCDC ジョブは同じステージングエリアを共有するため、ステージングエリアのサイズを慎重に管理することが重要です。デフォルトでは、ディスクのオーバーロードを防ぐためにステージは10GB に制限されています。この制限は`stagemaxsize` プロパティを調整することで変更できます。これを行うには、**設定 > 高度な設定 > 追加設定 > その他の設定**に移動し、以下に示すようにプロパティを適切な値（例えば、`stagemaxsize=20`）に設定します。

<img src="https://mintcdn.com/cdata-sync/I6gJ4qR9mocXqHNN/images/Change-Data-Capture_managing-the-stage-limit_1.png?fit=max&auto=format&n=I6gJ4qR9mocXqHNN&q=85&s=dc98e6096eac5931a6810498dbe6e24a" width="400" alt="設定での制限値設定" data-path="images/Change-Data-Capture_managing-the-stage-limit_1.png" />

<Note><span><code style={{padding: "0"}}>stagemaxsize</code> プロパティは整数値のみを受け入れ、デフォルトではギガバイト（GB）単位で解釈されます。</span></Note>

ステージングエリアがサイズ制限に達すると、すべてのCDC エンジンが自動的に停止します。このような場合、手動でジョブを実行するか、スケジュールされたジョブの実行を待って、蓄積された変更イベントを同期先に複製してステージングエリアを解放する必要があります。最大ステージサイズの3分の1が解放されると、すべてのCDC エンジンが自動的に起動し、リアルタイムデータストリーミング処理を再開します。

オプションとして、**概要**タブの**開始**ボタンをクリックしてCDC エンジンを再起動することもできます。

<Note>CDC エンジンは継続的に動作し、変更イベントをリアルタイムでストリームするため、ベストプラクティスとして、ジョブを頻繁に実行するようにスケジュールする必要があります。この方法により、ステージングエリアがサイズ制限に達するのを防ぎながら、ニアリアルタイムのレプリケーションが保証されます。</Note>

### CDC エンジンソースの変更データキャプチャの有効化

変更データキャプチャ（CDC）を有効化するために必要な手順は、ソースデータベースによって異なります。CDC エンジンを使用するソースでは、{siteNameShort} がトランザクションログまたはネイティブの変更追跡メカニズムから変更をキャプチャできるようにするために、追加の設定が必要になる場合があります。

ご使用のソースに対応する以下のリンクを選択して、具体的な設定手順を参照してください。

* [DB2 (Native)](../connections/sources/db2-native-source#set-up-db2-for-change-data-capture)
* [DB2 for i (Native)](../connections/sources/db2-i-native-source#set-up-db2-for-i-for-cdc)
* [Informix (Native)](../connections/sources/informix-native-source#set-up-informix-for-cdc)
* [MySQL](../connections/sources/mysql-source#enable-binary-logging-for-change-data-capture)
* [Oracle (Native)](../connections/sources/oracle-native-source#set-up-oracle-for-cdc)
* [PostgreSQL (Native)](../connections/sources/postgresql-native-source#set-up-postgresql-for-cdc)

### CDC エンジンを使用するジョブの作成

CDC エンジンを使用するジョブを作成するには、事前設定されたデータソースと同期先の接続が必要です。データソースおよび同期先接続の追加については、[接続](../getting-started/administration/connections-page)を参照してください。

データソースへの接続と、同期先データベースを定義後、次の手順に従って新しいジョブを作成します。

1. {siteNameShort} の**ジョブ**タブで、**ジョブを追加 > 新しいジョブを追加**をクリックします。**ジョブを追加**ダイアログボックスが開きます。
2. ダイアログボックスでジョブ名を入力し、CDC をサポートするデータソースと同期先を選択します。CDC エンジンを使用するソースの場合、{siteNameShort} は自動的にエンジンベースのCDC を使用するようにジョブを設定します。
3. <a href="#sources">データソース</a>に応じて、適切なプロパティを入力します。
4. **ジョブを追加**をクリックします。
5. **ジョブ**ページに戻り、ジョブにアクセスします。

CDC エンジンを使用するジョブを作成した後は、他のCDC ジョブと同様に[タスクを追加](#adding-tasks-to-your-cdc-job)します。

タスクの作成について、詳しくは[タスク](./tasks/tasks)を参照してください。

### CDC ジョブの実行とエンジンの動作について

{siteNameShort} は、CDC エンジンの状態とステージングされたデータの可用性に基づいてCDC ジョブの実行を管理します。CDC ジョブを実行すると、{siteNameShort} はジョブとCDC エンジン間の実行を調整します。ジョブの動作は、CDC エンジンの状態とステージングされた変更データの可用性によって異なります。

#### ジョブ実行時のCDC エンジンの利用可能性

{siteNameShort} は、CDC エンジンの状態とステージングされたデータの可用性に基づいて、CDC ジョブの実行方法を決定します：

* **CDC エンジンが実行中の場合：** ジョブは正常に実行され、利用可能なすべての変更を処理します。変更がない場合、ジョブは影響を受けるレコードなしで正常に完了することができます。
* **CDC エンジンが実行中でないが、ステージファイルが存在する場合：** ジョブが実行され、既存のステージファイルを処理します。この動作により、エンジンが現在アクティブでない場合でも、以前にキャプチャされた変更を適用できます。
* **CDC エンジンが実行中でなく、ステージファイルも存在しない場合：** 処理するデータがないためジョブが失敗し、次のエラーが表示されます：`There are no stage files to consume.`

#### CDC エンジンの自動再起動

CDC ジョブの実行前に、{siteNameShort} はCDC エンジンが利用可能であることを確認しようとします。以下の状況によって{siteNameShort} の応答が決まります：

* CDC エンジンがエラーまたは予期しない状態のために停止した場合（明示的に停止していない場合）、{siteNameShort} はジョブの実行前にエンジンを自動的に再起動しようとします。
* {siteNameShort} がCDC エンジンを再起動できない場合、ジョブの実行はステージファイルの可用性に基づいて続行されます。ステージファイルが存在しない場合、ジョブは次のエラーで失敗します：`There are no stage files to consume.`

これらの状況によりCDC ジョブが正常に実行できない場合は、次のセクションで説明するように、CDC エンジンのリセットが必要になる場合があります。

### CDC エンジンのリセット

場合によっては、変更データキャプチャ（CDC）エンジンが最後に記録した位置から処理を再開できないことがあります。この状況は、必要なソースデータベースのログが利用できなくなった場合や、保存されたオフセットが無効になった場合に発生します。

復旧を簡単にするため、{siteNameShort} はユーザーインターフェースに**リセット**オプションを提供しており、サーバーに手動でアクセスしたりオフセットファイルを削除したりすることなく、CDC エンジンをリセットできます。この**リセット**オプションは、<a href="#sources">サポートされているCDC データソース</a>で利用できます。

CDC エンジンのリセットは、**CDC エンジン**設定（***ジョブ名* > 概要 > CDC エンジン**）から次の手順で行います：

1. {siteNameShort} でジョブを開きます。
2. **概要**タブで、**CDC エンジン**セクションを見つけます。
3. **リセット**ボタンをクリックします。

   <img src="https://mintcdn.com/cdata-sync/I6gJ4qR9mocXqHNN/images/Change-Data-Capture_resetting-the-CDC-engine_1.png?fit=max&auto=format&n=I6gJ4qR9mocXqHNN&q=85&s=73d1262d1d259228a6d947dd0fadea61" width="800" alt="概要タブのCDCエンジンセクションのリセットボタン" data-path="images/Change-Data-Capture_resetting-the-CDC-engine_1.png" />

   ボタンをクリックすると、**CDC エンジンをリセット**ダイアログボックスが表示され、操作の確認を求められます。

   <img src="https://mintcdn.com/cdata-sync/I6gJ4qR9mocXqHNN/images/Change-Data-Capture_resetting-the-CDC-engine_2.png?fit=max&auto=format&n=I6gJ4qR9mocXqHNN&q=85&s=fb308910d2aff7abd0ecb8f402f381d7" width="300" alt="CDCエンジンのリセット確認ダイアログ" data-path="images/Change-Data-Capture_resetting-the-CDC-engine_2.png" />

   ダイアログボックスの**リセット**をクリックして続行します。CDC エンジンをリセットすると、エンジンが停止し、すべてのステージングファイルがクリアされることに注意してください。

#### CDC エンジンのリセット後

CDC エンジンをリセットすると、{siteNameShort} は以下の操作を実行します：

* 実行中のCDC エンジンを停止する
* キャプチャされたイベントのステージフォルダをクリアする
* ジョブのステージテーブルをクリアする
* オフセットファイルを削除する
* 処理済み行数を0にリセットする
* ジョブのタスクのCDC エンジンステータスレコードを削除する

リセットが完了すると、{siteNameShort} は確認メッセージを表示します。

CDC エンジンをリセットした後、次のジョブ実行ではソースデータの完全なスナップショットが実行されます。この動作により、同期先がソースと完全に再同期されます。

#### CDC エンジンのリセットが必要な場合

以下の状況では、CDC エンジンのリセットが必要になる場合があります：

* 必要なログファイルが利用できなくなったことを示すエラーでCDC エンジンが失敗した場合。
* 保持ポリシーまたはシステムの変更により、ソースデータベースのログが削除された場合。
* 保存されたオフセットが無効になり、ジョブを再開できない場合。
* 自動復旧で問題が解決しない場合。

### 範囲外エラーの自動復旧

サポートされているコネクタでは、{siteNameShort} は特定のCDC 障害から自動的に復旧できます。CDC エンジンが範囲外の状態を検出した場合（例えば、必要なログが利用できなくなった場合）、{siteNameShort} は以下の操作を実行します：

* CDC エンジンのステータスを範囲外の状態を示すように設定する
* ステージをクリアする
* ユーザーインターフェースにエラーメッセージを表示し、復旧の準備中は一時的に**開始**オプションを無効にする

次のジョブ実行時に、{siteNameShort} はCDC エンジンを再起動し、同期先テーブルを削除して再作成するのではなく、更新します。このアプローチにより、同期先スキーマおよびテーブルに依存するダウンストリームの統合が保持されます。

<Note>範囲外の自動復旧は、現在、**Oracle およびInformix ソースコネクタのみ**でサポートされています。</Note>

自動復旧で問題が解決しない場合は、[前のセクションで説明したように](#resetting-the-cdc-engine)、CDC エンジンを手動でリセットできます。
