株式会社コーソル

コーソルDatabaseエンジニアのブログ

技術ブログ

差分レプリケーションの分類(CDCベース、クエリベース)

Oracle ACE Proの渡部です。 差分レプリケーションの分類について説明します。

差分レプリケーションの必要性

ある企業/団体ではたいてい複数のシステムを使用しており、それぞれのシステムにはたいてい何らかのデータベースが存在します。このような状況でシステムを効率的に運用する、データを有効に活用するには、それぞれのシステムのデータベース同士のデータを連携/同期させる必要がでてきます。

大量データの連携/同期においては、データ全件をまるまる連携/同期するのではなく、変更されたデータのみを連携/同期できることが求められます。これを実現する1つの方法が、差分レプリケーションです。

差分レプリケーションの分類

差分レプリケーションは、変更されたデータを識別する方法に応じて分類できます。 ここでは以下の2つの差分レプリケーションについて説明します。

  • A) Change Data Capture(CDC)ベースの差分レプリケーション
  • B) クエリベースの差分レプリケーション

CDCベースの差分レプリケーション

ここでは、Change Data Capture(CDC)を、「なんらかのDBMSの機構を用いて、データベースで実行された変更処理を得ること」と定義します。

OracleロジカルレプリケーションCDC実装方式の分類

にまとめたとおり、CDCの実装方式は様々ですが、DBMSで実行される全ての変更処理はトランザクションログ(Oracleの場合はREDOログ)に記録されますので、基本的な考え方としては「トランザクションログを読出し、解析して変更処理を得る」ということになります。

方式の特性から、以下の利点が得られます。

  • トランザクションログに記録された変更処理には、タイムスタンプやトランザクションのコミットなどの情報が記録されているため、非常に精緻なレベルで変更処理を把握することが可能
  • トランザクションログには全ての種類の変更処理が記録されるため、原理的にはそのデータベースで実行された全ての変更処理を得ることが可能

クエリベースの差分レプリケーション

クエリベースの差分レプリケーションでは、クエリ(SELECT文)を実行することでデータベース内の変更されたデータを得ます。

逆に言うと、クエリベースの差分レプリケーションを使用するためには、SELECT文を実行することで変更されたデータが得られるように、テーブルを設計しておく必要があります。典型的には、対象テーブルに「更新日時」列や「バージョン番号」列を設けておき、

SELECT * FROM テーブル1 WHERE 更新日時 > '2023-09-07 00:00:00'

や、

SELECT * FROM テーブル1 WHERE バージョン番号 > 1234

などのSELECT文で、前回のレプリケーション以後で変更されたデータを得られるようにするなどです。

方式の特性から、以下の利点が得られます。

  • CDCに対応していない/使用できないデータベースでも差分レプリケーションを実現できます。
  • CDCに対応するためのデータベースの設定変更は不要です。

方式の特性から、以下の制限が課せられます。

  • 差分レプリケーション用のクエリを効率的に実行できる必要があります。端的に言うと、「更新日時」列や「バージョン番号」列にインデックスを設定しておく必要があります。(インデックスの設定は必須ではありませんが、データ量によっては実用上許容できない処理速度になるでしょう)
  • 変更されたデータを識別するために使える適当な列がない場合、列を追加し、アプリケーションが適切に値を設定する必要があります。上記の例でいうと、「更新日時」列や「バージョン番号」列を追加し、アプリケーションがデータを変更するたびに「更新日時」や「バージョン番号」を設定するようにする必要があります。
  • 多くの場合、データの削除には対応できません(原理的には、いわゆる「削除フラグ」「論理削除」の仕組みを導入すれば対応できますが、テーブル設計およびアプリケーションで配慮が必要です)。
  • テーブル構成の変更に追従できません。例えば、レプリケーション対象のテーブルに列が追加された場合、レプリケーション先のテーブルに自動的に列が追加されません。

CDCベース差分レプリケーションの優位性

上記のとおり、クエリベースの差分レプリケーションには、CDC非対応のデータベースで差分レプリケーションを実現できるという利点の反面、いくつかの制限が課せられます。

これを、「CDCベース差分レプリケーションの優位性」という観点でまとめると以下のように言い換えられます。

  • 差分レプリケーションのためにテーブル設計を修正する必要はありません。
    データベースで実行された変更処理を、DBMSの機構を用いて得られるためです。
  • データの削除をレプリケーション可能です。すなわち、レプリケーション対象のテーブルのデータが削除された場合、レプリケーション先のテーブルからも自動的にデータを削除できます。
  • テーブル構成の変更をレプリケーション可能です。例えば、レプリケーション対象のテーブルに列が追加された場合、レプリケーション先のテーブルに自動的に列を追加できます。

CDCベース差分レプリケーションに対応するロジカルレプリケーション製品

弊社取扱い製品では、以下のロジカルレプリケーション製品がCDCベース差分レプリケーションに対応しています。

クエリベース差分レプリケーションに対応するロジカルレプリケーション製品

弊社取扱い製品では、以下のロジカルレプリケーション製品がクエリベース差分レプリケーションに対応しています。

  • CData Sync

[補足] "CDC"の定義

"CDC"という用語の意味は厳格に統一されていません。

この記事では、Change Data Capture(CDC)を「なんらかのDBMSの機構を用いて、データベースで実行された変更処理を得ること」と定義していますが、「クエリベースを含めた様々な方法で、データベースで実行された変更処理を得ること」と定義される場合もあります。

[宣伝] データベースのロジカルレプリケーションでお困りの際はコーソルへ!

ロジカルレプリケーションは非常に複雑な技術です。お客様に最適なロジカルレプリケーション製品をご案内できるよう、コーソルでは複数のロジカルレプリケーション製品を取り扱っています。

これらすべての製品について、製品を熟知したエンジニアが設計・導入作業を担います。 Oracleのロジカルレプリケーションをご検討の際はぜひコーソルにお声がけください。

[参考] ロジカルレプリケーション関係ブログ記事

ロジカルレプリケーションの動作の仕組みから見るOracleレプリケーション3製品のイチオシポイント

Oracle GoldenGateのライセンス費用試算とSE2環境におけるコスト削減策

Oracle 19cへの移行/アップグレードにSharePlexをお勧めする理由

Oracle Databaseレプリケーションとサポート状況/対応製品

ロジカルレプリケーションを用いてDB移行に伴うダウンタイムを最小化する

プロフィール

On7tWW6m1Ul4

渡部 亮太

・Oracle ACE
・AWS Certified Solutions Architect - Associate
・ORACLE MASTER Platinum Oracle Database 11g, 12c 他多数

カテゴリー

アーカイブ