> ## 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.

# 変更データキャプチャ

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

* [MariaDB](https://docs.sync.cdata.com/26.4/ja/connections/sources/mariadb-source.md#enable-binary-logging-for-change-data-capture)
* [Microsoft Dynamics 365](https://docs.sync.cdata.com/26.4/ja/connections/sources/microsoft-dynamics-365-source.md#変更追跡の構成)
* [SAP ERP](https://docs.sync.cdata.com/26.4/ja/connections/sources/sap-erp-source.md#enabling-cdc-in-cdata-sync)
* [SAP Gateway](https://docs.sync.cdata.com/26.4/ja/connections/sources/sap-gateway-source.md#sap-gateway-のcdc-を有効化)
* [SQL Server](https://docs.sync.cdata.com/26.4/ja/connections/sources/sql-source.md#sql-server-の変更データキャプチャのセットアップ)

## CData Sync でCDC ジョブを作成

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

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

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

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

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

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

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

タスクの作成について、詳しくは[タスク](https://docs.sync.cdata.com/26.4/ja/jobs/tasks/tasks.md)を参照してください。

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

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

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

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

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

## Post-Job 変換の追加

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

SQL 変換についての詳細は、[SQL Transformation](https://docs.sync.cdata.com/26.4/ja/transformations/post-job-elt/sql-transformations.md) を参照してください。DBT 変換についての詳細は、[DBT Transformation](https://docs.sync.cdata.com/26.4/ja/transformations/post-job-elt/dbt-transformations.md) を参照してください。

## Sync CDC エンジンの使用方法

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

### CDC エンジン

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

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

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

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

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

![高度な設定タブでのステージファイル設定](https://mintcdn.com/cdata-sync/4njnJgdQs2eFHAEE/26.4/images/Change-Data-Capture_stage-file-config_1.png?fit=max\&auto=format\&n=4njnJgdQs2eFHAEE\&q=85\&s=c0ce725d53a12b0738aa2eebd966f17a)

#### ディスク領域の管理

Sync は、CDC ステージングフォルダを保持するディスクと、アプリケーションデータディレクトリを保持するディスクの両方で、空きディスク領域を監視します。使用可能なディスク領域が設定されたしきい値に達すると、Sync は、ディスクがいっぱいになってステージングファイルが破損するのを防ぐために、ジョブスケジュールを一時停止し、実行中のすべてのCDC エンジンを停止します。

ディスクのしきい値に達した場合：

* スケジュールされたすべてのジョブが停止します。
* CDC エンジンが停止し、**Stopped By Insufficient Disk Space** のステータスが表示されます。ジョブページに次のメッセージが表示されます：`ステージングディスクまたはアプリデータディスクの空き容量が不足しているか、利用できません。空き容量を確保するかアクセスを復旧してください。ディスクが正常になると、拡張型CDC は自動的に再開されます。`
* CDC ジョブの開始、再起動、リセット、または更新を試みると失敗し、次のメッセージが表示されます：`CDC を開始できません：ステージングディスクまたはアプリデータディスクの空き容量が不足しています。` すでに実行中のCDC エンジンは影響を受けません。

Sync は、ジョブスケジュールが一時停止されている間は30秒ごとにディスク領域を確認し、両方のディスクの空き容量がしきい値を少なくとも10%上回るまで回復すると、自動的に再開します。例えば、空き容量のしきい値が10 GiB の場合、空き容量が11 GiB を超えるとSync は再開します。処理が再開した後は、Sync は5秒ごとにディスク領域を確認します。

どちらかのフォルダに到達できない場合、または空き容量を読み取れない場合は、Sync は念のため一時停止します。ファイルシステムがディスクの合計サイズを報告しない場合、Sync は実行を継続し、影響を受けるフォルダを示す警告をログに記録します。

ディスク領域のしきい値を設定するには、**システム設定 > アラート**に移動し、**システムヘルスアラート**の設定を編集します。**ディスクの使用状況の一時停止のしきい値**を**0**または**100**に設定すると、ディスク領域の保護が完全に無効になります。デフォルト値は**95**です。

最小空き容量を設定するには、**システム設定** > **高度な設定** > **追加設定** > **その他の設定**で`suspenddiskfreespacegb` 設定を構成します。値は正の整数である必要があります。0 と負の値は拒否され、設定ファイル内の無効な値はデフォルト値の**10**に戻ります。この設定は、**ディスクの使用状況の一時停止のしきい値**が**0**または**100**に設定されている場合は無視されます。

> [!NOTE]
>
> `stagemaxsize` オプションは非推奨です。CDC エンジンはステージサイズの制限を適用しなくなりました。ディスク領域の保護は、上記のとおり、アプリケーションレベルで管理されるようになりました。

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

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

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

* [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](https://docs.sync.cdata.com/26.4/ja/connections/sources/mysql-source.md#バイナリログの有効化変更データキャプチャ用)
* [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 エンジンを使用するジョブを作成するには、事前設定されたデータソースと同期先の接続が必要です。データソースおよび同期先接続の追加については、[接続](https://docs.sync.cdata.com/26.4/ja/getting-started/administration/connections-page.md)を参照してください。

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

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

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

タスクの作成について、詳しくは[タスク](https://docs.sync.cdata.com/26.4/ja/jobs/tasks/tasks.md)を参照してください。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

   ![概要タブのCDCエンジンセクションのリセットボタン](https://mintcdn.com/cdata-sync/4njnJgdQs2eFHAEE/26.4/images/Change-Data-Capture_resetting-the-CDC-engine_1.png?fit=max\&auto=format\&n=4njnJgdQs2eFHAEE\&q=85\&s=95f900041458bcf9d1ceb32de576e706)

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

   ![CDCエンジンのリセット確認ダイアログ](https://mintcdn.com/cdata-sync/4njnJgdQs2eFHAEE/26.4/images/Change-Data-Capture_resetting-the-CDC-engine_2.png?fit=max\&auto=format\&n=4njnJgdQs2eFHAEE\&q=85\&s=9b7343135f9f1e36cf14161f421ef225)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.