株式会社コーソル

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

技術ブログ

CData SyncによるOracle → PostgreSQL 異種DB 準リアルタイム データ連携

Oracle ACE Proの渡部です。

本記事では、CData Sync を用いて、Oracle DatabaseからPostgreSQLへのニアリアルタイム データ連携(論理レプリケーション)を構成する手順についてご説明します。

なお、弊社コーソルはCData パートナーであり、CData Syncの販売および導入、運用やトライアルの支援が可能です。

CData Syncとは

CData Syncは、非常に多くのデータベース製品、SaaS、アプリケーション、APIに対応したデータ連携ツールです。

以下の特徴を持ちます。

  • 同期元として400種以上の製品およびサービスに、同期先として30種程度のデータベース製品に対応
  • データベースからのChange Data Captureと、異種データベース間のロジカルレプリケーションに対応した製品としては、とても低価格
  • オンプレミス環境およびクラウド環境に対応
  • セルフホスト版に加えて、マネージドサービス版もあり
  • WebベースのGUI管理コンソールを用いて、お客様自身でデータレプリケーションを簡単に構成可能
  • 差分レプリケーション機能を持ち、サイズが非常に大きいデータでもデータレプリケーション可能。
  • Oracle Database、Microsoft SQL Server、PostgreSQL、MySQL、MariaDBからのChange Data Captureに対応
  • エージェントレス構成であるため、既存システムへ最小限の影響で導入可能
  • 方式がロジカルレプリケーションであるため、レプリケーション中にデータを変換したり特定のSQLを伝搬対象から除外したりすることが可能
  • 組込みスケジュール機能によるレプリケーションの自動化が可能

本記事が対象とするソフトウェアおよび環境

  • CData Sync
    • v24.3 (24.3.9121.0)
    • クロスプラットフォーム版(Java版、オンプレミス / セルフホスティング)
    • systemdサービスとしてCData Syncを起動・運用
  • ソース データベース(同期元データベース)
    • Oracle Database 19c Standard Edition 2 (19.22)
    • データベース: 非CDB構成 / サービス名: n1922a
    • 稼働ホスト: Oracle Linux 8
    • CData Syncコネクタ: Oracle Connector 24.0.9175.0
  • ターゲット データベース(同期先データベース)
    • PostgreSQL 16 (16.3)
    • 稼働ホスト: Oracle Linux 8
    • CData Syncコネクタ: 24.0.9060.0
  • 差分レプリケーション方式: CDC (Oracle LogMiner)

CData Sync v24.3のインストール

以下の記事でご紹介しているため、こちらをご覧ください。

CData SyncのOracle Connectorを導入

Oracle Databaseをソース(同期元)として使用するためには、Oracle Connectorを導入する必要があります。

以下の手順でOracle Connectorを導入します。

  1. 管理コンソールで「接続」をクリック

  1. 「接続を追加」をクリック

  1. 「データソース」が選択されていること、「インストール済み」がOFFになっていることを確認して、検索ボックスに"oracle"と入力しENTER →「Oracle」が表示される
  2. 「Oracle」の「コネクタをインストール」をクリック

  1. 「インストールの種類」→「コネクタを自動インストール」にチェックして「インストール」

導入したOracle Connectorをcdatasyncサービスがロードするように設定

先ほどの手順でOracle Connectorのイントールは完了していますが、 この状態では、Oracle ConnectorはCData Syncにロードされていません。

導入したOracle Connectorをcdatasyncサービスがロードするように設定します。

  1. cdatasyncサービスを停止します。

[実行例]

$ sudo systemctl stop cdatasync
$ sudo systemctl status cdatasync
● cdatasync.service - CData Sync
   Loaded: loaded (/etc/systemd/system/cdatasync.service; enabled; vendor preset: disabled)
   Active: inactive (dead) since Thu 2025-03-06 15:21:09 JST; 6s ago
  Process: 2269 ExecStop=/bin/sleep 3 (code=exited, status=0/SUCCESS)
  Process: 2235 ExecStop=/opt/sync/jre/jdk-17.0.5+8/bin/java -jar /opt/sync/sync.jar -stop (code=exited, status=0/SUCCESS)
  Process: 773 ExecStart=/opt/sync/jre/jdk-17.0.5+8/bin/java -jar /opt/sync/sync.jar (code=exited, status=0/SUCCESS)
 Main PID: 773 (code=exited, status=0/SUCCESS)

Mar 06 15:21:05 l8rep3sv1.domain java[773]: Mar 06, 2025 3:21:05 PM XcoreXcdata.syncX243X9121.leb a
Mar 06 15:21:05 l8rep3sv1.domain java[773]: INFO: Stop the derby database of application success.
Mar 06 15:21:05 l8rep3sv1.domain java[773]: Mar 06, 2025 3:21:05 PM XcoreXcdata.syncX243X9121.leb a
Mar 06 15:21:05 l8rep3sv1.domain java[773]: INFO: Stopped CData Sync 24.3.9121.0 in the application flow.
Mar 06 15:21:05 l8rep3sv1.domain java[773]: Mar 06, 2025 3:21:05 PM org.eclipse.jetty.server.handler.ContextHandler doStop
Mar 06 15:21:05 l8rep3sv1.domain java[773]: INFO: Stopped o.e.j.w.WebAppContext@26e356f0{CData Sync,/,null,STOPPED}{/opt/sync/webap>
Mar 06 15:21:06 l8rep3sv1.domain java[2235]: Mar 06, 2025 3:21:06 PM b.d p
Mar 06 15:21:06 l8rep3sv1.domain java[2235]: INFO: The server has been stopped.
Mar 06 15:21:09 l8rep3sv1.domain systemd[1]: cdatasync.service: Succeeded.
Mar 06 15:21:09 l8rep3sv1.domain systemd[1]: Stopped CData Sync.
  1. cdatasyncサービスの構成ファイル/etc/systemd/system/cdatasync.serviceを編集し、[Service] セクションに以下の行を追加します。

[設定例]

Environment=LD_LIBRARY_PATH=/opt/sync/libs/oracleoci/9175/x64
  • ファイルパスはOracle Connectorのバージョンにより異なる場合があります。

    1. systemdの設定をリロードし、cdatasyncサービスを起動します。

[実行例]

$ sudo systemctl daemon-reload
$ sudo systemctl start cdatasync
$ sudo systemctl status cdatasync
● cdatasync.service - CData Sync
   Loaded: loaded (/etc/systemd/system/cdatasync.service; enabled; vendor preset: disabled)
   Active: active (running) since Thu 2025-03-06 15:21:55 JST; 5s ago
 Main PID: 2317 (java)
    Tasks: 41 (limit: 46142)
   Memory: 490.6M
   CGroup: /system.slice/cdatasync.service
           mq2317 /opt/sync/jre/jdk-17.0.5+8/bin/java -jar /opt/sync/sync.jar

Mar 06 15:21:59 l8rep3sv1.domain java[2317]: Mar 06, 2025 3:21:59 PM XcoreXcdata.syncX243X9121.leb a
Mar 06 15:21:59 l8rep3sv1.domain java[2317]: INFO: Can not find the deprecated driver jar file of 'CData ADLSSync'
Mar 06 15:21:59 l8rep3sv1.domain java[2317]: Mar 06, 2025 3:21:59 PM XcoreXcdata.syncX243X9121.leb a
Mar 06 15:21:59 l8rep3sv1.domain java[2317]: INFO: Can not find the deprecated driver jar file of 'CData AmazonS3Sync'
Mar 06 15:22:00 l8rep3sv1.domain java[2317]: Mar 06, 2025 3:22:00 PM XcoreXcdata.syncX243X9121.leb a
Mar 06 15:22:00 l8rep3sv1.domain java[2317]: INFO: The schedule task [ExecuteJob] starts successful.
Mar 06 15:22:00 l8rep3sv1.domain java[2317]: Mar 06, 2025 3:22:00 PM XcoreXcdata.syncX243X9121.leb a
Mar 06 15:22:00 l8rep3sv1.domain java[2317]: INFO: The schedule task [CheckCDCEngineStatus] starts successful.
Mar 06 15:22:00 l8rep3sv1.domain java[2317]: Mar 06, 2025 3:22:00 PM XcoreXcdata.syncX243X9121.leb a
Mar 06 15:22:00 l8rep3sv1.domain java[2317]: INFO: The disk usage threshold monitor is started.  If the disk where AppDirectory is >
$

CData SyncへのOracle Connectorの導入については、以下の資料も参考にしてください。

ソースOracleの設定

CDCにLogMinerを使用するため、このための設定を行います。

$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Thu Mar 6 15:26:41 2025
Version 19.22.0.0.0

Copyright (c) 1982, 2023, Oracle.  All rights reserved.

Connected to:
Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production
Version 19.22.0.0.0

SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL>
SQL>
SQL> startup mount
ORACLE instance started.

Total System Global Area 1979711112 bytes
Fixed Size                  8941192 bytes
Variable Size             452984832 bytes
Database Buffers         1509949440 bytes
Redo Buffers                7835648 bytes
Database mounted.
SQL> ALTER DATABASE ARCHIVELOG;

Database altered.

SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;

Database altered.

SQL> ALTER DATABASE OPEN;

Database altered.

SQL> exit
Disconnected from Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production
Version 19.22.0.0.0
$

CData SyncでソースOracleへの接続を構成

ここでは、ユーザーsystemで接続し、データベースに対する変更をキャプチャすることにしています。

  1. 「接続を設定」をクリック

  1. ソースOracleに関する項目を入力し、「作成およびテスト」をクリック

ソースOracleのユーザー/データの準備

ソースデータベース側で、連携対象のデータを準備します。 ここでは、ユーザーu1を作成し、ユーザーu1が所有するテーブルとしてt1を作成し、テーブルt1にデータをINSERTしています。

$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Thu Mar 6 15:36:09 2025
Version 19.22.0.0.0

Copyright (c) 1982, 2023, Oracle.  All rights reserved.

Connected to:
Oracle Database 19c Standard Edition 2 Release 19.0.0.0.0 - Production
Version 19.22.0.0.0

SQL> create user u1 identified by u1;

User created.

SQL> grant connect, resource, unlimited tablespace to u1;

Grant succeeded.

SQL> create table u1.t1 (n number primary key, s varchar(16));

Table created.

SQL> insert into u1.t1 VALUES(1,'AAA');

1 row created.

SQL> commit;

Commit complete.

SQL> SELECT * FROM u1.t1;

         N S
---------- ----------------
         1 AAA

SQL>

ターゲットPostgreSQLのデータベース/ユーザーの準備

ターゲットデータベース側で、データの連携先となるデータベースとユーザーを準備します。 ここでは、データベースdb1およびユーザーu1を作成しています。

$ psql
psql (16.3)
Type "help" for help.

postgres=# CREATE DATABASE db1;
CREATE DATABASE
postgres=# CREATE USER u1 PASSWORD 'Pass123-';
CREATE ROLE
postgres=# GRANT ALL PRIVILEGES ON DATABASE db1 TO u1;
GRANT
postgres=# exit
$ psql -U u1 -d db1 -h localhost
Password for user u1:
psql (16.3)
Type "help" for help.

db1=> CREATE SCHEMA u1;
CREATE SCHEMA
db1=> \dn
      List of schemas
  Name  |       Owner
--------+-------------------
 public | pg_database_owner
 u1     | u1
(2 rows)

db1=> exit
$

CData SyncでターゲットPostgreSQLへの接続を構成

CData Syncの管理コンソールで、ターゲットPostgreSQLへの接続を構成します。

  1. 「接続」をクリック

  1. 「接続を追加」をクリック

  1. 「同期先」をクリック

  1. 検索ボックスに"postgresql"と入力しENTER →「PostgreSQL」が表示されるので、「PostgreSQL」の「接続を設定」をクリック

  1. ターゲットPostgreSQLに関する項目を入力し、「作成およびテスト」をクリック

  1. 「接続」をクリックすると、構成済みの接続一覧を確認できます。

CData Syncでジョブ(レプリケーションジョブ)とタスクを作成

CData Syncの管理コンソールで、でジョブ(レプリケーションジョブ)とタスクを作成します。

  1. 「ジョブ」をクリック

  1. 「ジョブを追加」をクリック

  1. 「新しいジョブを追加」をクリック

  1. 「名前」にジョブ名を入力

  1. データソースにソースOracleに対応する接続「src_ora」を選択

  1. 「変更データキャプチャ」を選択

  1. 同期先にターゲットPostgreSQLに対応する接続「tgt_pg」を選択

  1. 「ジョブを追加」をクリック。ジョブが作成されました。

  1. 「タスク」をクリック

  1. 「タスクを追加」をクリック

  1. スキーマに「u1」を選択します。

  1. ターゲット表として、「[U1].[T1]」を選択し、「タスクを追加」をクリックします。

  1. 「[U1].[T1]」を選択します。

  1. 「同期先情報」の「Edit Settings」をクリックします。

  1. 「スキーマ名」に「u1」を選択し、「保存」をクリックします。

  1. 「ora2pg」をクリックし、ジョブ「ora2pg」の画面に遷移します。

ジョブの初回実行

作成したジョブを実行します。

  1. ジョブ「ora2pg」の画面で「実行」をクリックします。

初回実行であるため、ターゲットPostgreSQLに対してテーブルが作成され、ソースOracleのデータが連携されます(レプリケーションされます)。

[postgres@l8rep3db2 ~]$ psql -U u1 -d db1 -h localhost
Password for user u1:
psql (16.3)
Type "help" for help.

db1=> SELECT * FROM "T1";
 N |  S  | _cdatasync_deleted
---+-----+--------------------
 1 | AAA | f
(1 row)

db1=> \d
       List of relations
 Schema | Name | Type  | Owner
--------+------+-------+-------
 u1     | T1   | table | u1
(1 row)

db1=> \d "T1"
                                Table "u1.T1"
       Column       |          Type          | Collation | Nullable | Default
--------------------+------------------------+-----------+----------+---------
 N                  | character varying(129) |           | not null |
 S                  | character varying(16)  |           |          |
 _cdatasync_deleted | boolean                |           |          |
Indexes:
    "T1_pkey" PRIMARY KEY, btree ("N")

db1=>

なお、_cdatasync_deleted列は、ソースデータベースにおけるデータの削除状況を示すフラグのような役割をする列です。

ジョブの2回目実行

ソースOracleにデータを追加してから、ジョブを実行します。 ジョブの実行手順は初回実行と同じです。 2回目の実行であるため、前回のジョブ実行からの差分だけがデータ連携(レプリケーション)されます。

ソースOracleにデータを追加

SQL> insert into u1.t1 VALUES(2,'BBB');

1 row created.

SQL> commit;

Commit complete.

SQL> insert into u1.t1 VALUES(3,'CCC');

1 row created.

SQL> commit;

Commit complete.

SQL> SELECT * FROM u1.t1;

         N S
---------- ----------------
         1 AAA
         2 BBB
         3 CCC

ジョブ実行後、ターゲットPostgreSQLでデータを確認

db1=> SELECT * FROM "T1";
 N |  S  | _cdatasync_deleted
---+-----+--------------------
 1 | AAA | f
 2 | BBB | f
 3 | CCC | f
(3 rows)

ジョブ実行の自動化

スケジュールを設定して、ジョブ実行を自動化することも可能です。

  1. ジョブ「ora2pg」を選択します。

  1. スケジュールの「設定」をクリックします。

  1. 「間隔」などを選択し、任意のスケジュールを指定し、「保存」をクリックします。

ジョブ一覧からスケジュール設定を確認することもできます。

なぜコーソルからCData Syncを購入すべきなのか

弊社コーソルはCData パートナーであり、CData Syncの製品販売を行います。加えて、コーソルが得意とするデータベース技術領域を含めたCData Syncの導入、技術支援、サポートを行います。

CData Syncを用いたデータ連携をご検討されている場合は、ぜひコーソルへご相談いただければとと思います。

  • 製品販売 : CData Syncの販売
  • 製品導入 : CData Syncの設計および導入
  • 製品サポート: CData Syncの製品サポート
  • 技術支援 : トライアル支援、運用支援

コーソルからCData Syncを購入いただくと

データベースのレプリケーションにおいては、データベース製品およびレプリケーション製品の両方の知識が必要です。このような知識を持つエンジニアの確保は一般に困難です。弊社のサービスがこの問題のお役に立てると考えております。

また、弊社からCData Syncを見積/購入いただくと、以下のサービスを無償でご提供いたします。

  • お客様構成にあわせた簡易導入手順書の提供
  • CData Sync 30日間トライアルライセンスを使用したトライアルの支援
  • トライアル実施時に参考となるチェックリストの提供
  • CData Sync導入後の運用支援(各種Q&A、Web会議、設定変更作業など)

多数のOracle関連書籍を執筆

コーソルはORACLE MASTER Platinum 累計取得者数No.1

コーソルからデータベース関連製品をご購入いただくと、ORACLE MASTER Platinum 単年取得者数7年連続No.1、2016年6月以降 累計保持者数No.1という指標に裏付けされた高い技術力により、安心して製品を導入/利用いただけます。

ORACLE MASTER Platinumとは、2日間にわたる実技試験により認定されるOracle Database最高難度の資格です。 グローバルで有効な資格であり、海外では"Oracle Certified Master"と呼ばれます。

ORACLE MASTER Platinumとは何か / コーソルはPlatinum取得者数No.1!

Oracle DatabaseのDBAサービスを提供可能

Oracle Databaseについても製品販売、製品サポート、製品の導入を行います。また、リモート回線経由でスポット的なDBA実務を行うリモートDBAサービス、コンサルティングやベンダコントロールを含めたOracle Databaseプロフェッショナルサービスを時間制で提供する時間制コンサルサービスも提供しています。

データベース運用保守なら常駐しないリモートDBA

基幹系DB運用支援および製品サポートについては、3拠点体制による24時間365日対応が可能です。

コーソルは多数のデータベース関連製品を取り扱っています

コーソルは、Oracle Databaseをはじめとするデータベース製品に関する深い知識を活かし、多数のデータベース関連製品を取り扱っております。

  • オラクル製品全般 (Oracle Database, Oracle Cloud, Oracle GoldenGate, Oracle WebLogic Serverなど)
  • Dbvisit Standby
  • SharePlex for Oracle
  • CData Sync
  • Qlik Replicate
  • Solarwinds Database Performance Analyzer (DPA)
  • Toad for Oracle / Toad for SQL Server
  • MaxGuage
  • Spotlight for Oracle / Spotlight for SQL Server
  • SIOS LifeKeeper
  • Delphix
  • PISO
  • D'amo
  • Nutanix Database Service (NDB)

これらの製品について、販売・導入・運用を様々な形でご支援します。お困りの際はぜひ弊社にお声がけくださいませ。

プロフィール

On7tWW6m1Ul4

渡部 亮太

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

カテゴリー

アーカイブ