技術ブログ
目次
本記事では、CData Sync を用いて、Oracle DatabaseからPostgreSQLへのニアリアルタイム データ連携(論理レプリケーション)を構成する手順についてご説明します。
なお、弊社コーソルはCData パートナーであり、CData Syncの販売および導入、運用やトライアルの支援が可能です。
CData Syncは、非常に多くのデータベース製品、SaaS、アプリケーション、APIに対応したデータ連携ツールです。
以下の特徴を持ちます。
以下の記事でご紹介しているため、こちらをご覧ください。
Oracle Databaseをソース(同期元)として使用するためには、Oracle Connectorを導入する必要があります。
以下の手順でOracle Connectorを導入します。
先ほどの手順でOracle Connectorのイントールは完了していますが、 この状態では、Oracle ConnectorはCData Syncにロードされていません。
導入したOracle Connectorを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.
[設定例]
Environment=LD_LIBRARY_PATH=/opt/sync/libs/oracleoci/9175/x64
ファイルパスはOracle Connectorのバージョンにより異なる場合があります。
[実行例]
$ 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の導入については、以下の資料も参考にしてください。
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
$
ここでは、ユーザーsystemで接続し、データベースに対する変更をキャプチャすることにしています。
ソースデータベース側で、連携対象のデータを準備します。 ここでは、ユーザー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>
ターゲットデータベース側で、データの連携先となるデータベースとユーザーを準備します。 ここでは、データベース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に対してテーブルが作成され、ソース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列は、ソースデータベースにおけるデータの削除状況を示すフラグのような役割をする列です。
ソース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)
スケジュールを設定して、ジョブ実行を自動化することも可能です。
ジョブ一覧からスケジュール設定を確認することもできます。
弊社コーソルはCData パートナーであり、CData Syncの製品販売を行います。加えて、コーソルが得意とするデータベース技術領域を含めたCData Syncの導入、技術支援、サポートを行います。
CData Syncを用いたデータ連携をご検討されている場合は、ぜひコーソルへご相談いただければとと思います。
データベースのレプリケーションにおいては、データベース製品およびレプリケーション製品の両方の知識が必要です。このような知識を持つエンジニアの確保は一般に困難です。弊社のサービスがこの問題のお役に立てると考えております。
また、弊社からCData Syncを見積/購入いただくと、以下のサービスを無償でご提供いたします。
コーソルからデータベース関連製品をご購入いただくと、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実務を行うリモートDBAサービス、コンサルティングやベンダコントロールを含めたOracle Databaseプロフェッショナルサービスを時間制で提供する時間制コンサルサービスも提供しています。
データベース運用保守なら常駐しないリモートDBA
基幹系DB運用支援および製品サポートについては、3拠点体制による24時間365日対応が可能です。
コーソルは、Oracle Databaseをはじめとするデータベース製品に関する深い知識を活かし、多数のデータベース関連製品を取り扱っております。
これらの製品について、販売・導入・運用を様々な形でご支援します。お困りの際はぜひ弊社にお声がけくださいませ。