CData Software Blog

クラウド連携のCData Software の技術ブログです。

OracleのFlashback機能による差分更新をサポートしました:CData Sync

ついにOracle OCI データソースで差分更新が可能になりました!

CData Sync の差分更新とは、データの同期時にデータソースで変更があったレコードのみをコピーする機能です。 同期するデータ量が膨大だと一度の同期に長い時間がかかりますが、差分更新機能を使うことで定期的な同期処理を高速化できます。 これまでのCData Sync ではOracle OCI データソースでの差分更新は対応していませんでしたが、今回リリースされるCData Sync V21 ではOracle Flashback Technology を利用することで差分更新を実現しました。 この記事ではCData Sync のOracle OCI コネクタで差分更新を実行するための設定方法を紹介します。

Oracle Flashback Technology

Oracle Flashback Technologyは、データベースを過去の状態を参照したり、状態を戻したりすることができる機能です。

Oracle Flashback Technologyの使用

例えば下記は現在のPRODUCTS テーブルのデータを参照するSQL です。

 SELECT * FROM PRODUCTS;

Flashbackを利用することで、過去の時点のデータを参照することができます。 下記のSQL は2021年5月1日10時時点でのPRODUCTS テーブルのデータを参照します。

SELECT * FROM PRODUCTS AS OF TIMESTAMP TO_TIMESTAMP('2021-05-01 10:00:00','YYYY-MM-DD HH:MI:SS');

下記のSQLはWHERE句で指定されたレコードの、現時点から1時間前のデータを参照します。

SELECT * FROM PRODUCTS AS OF TIMESTAMP(SYSTIMESTAMP - INTERVAL '1' HOUR) WHERE CODE='P001';

このようにFlashback を使うことで、AS OF 句で過去時点のデータを柔軟に参照することができます。 Sync ではこの技術を利用して差分更新を実現します。

※Flashback 機能が使える Oracle10 から CDataSync では当機能が使用できるようになっています。

Oracle Flashbackの有効化

差分更新機能の設定に先立ち、同期元のテーブルのフラッシュバック・アーカイブを有効化します。 ここではsqlplus での操作例を示します。

フラッシュバック・アーカイブを作成するために必要な権限をユーザに付与します。 ここでは例としてユーザadmin にADMINISTER ロールを付与します。

SQL> GRANT FLASHBACK ARCHIVE ADMINISTER TO admin;

続いてフラッシュバック・アーカイブオブジェクトを作成します。 作成時にはオブジェクト名、テーブルスペース、最大容量、データの保存期間を指定します。 下記の例では「FLASHBACK_ARCHIVE_TEST」というフラッシュバック・アーカイブオブジェクトをテーブルスペース「TS」に作成しています。 同時に、最大容量として100M、データ保存期間を1年に設定しています。

SQL> CREATE FLASHBACK ARCHIVE FLASHBACK_ARCHIVE_TEST TABLESPACE TS QUOTA 100M RETENTION 1 YEAR;

作成したフラッシュバック・アーカイブをユーザーが利用できるようにオブジェクト権限を付与します。 下記の例ではユーザ「testuser」に対して作成したFLASHBACK_ARCHIVE_TEST の利用許可を与えています。

SQL> GRANT FLASHBACK ARCHIVE ON FLASHBACK_ARCHIVE_TEST TO testuser;

以下からは作成したフラッシュバック・アーカイブをテーブル「PRODUCTS」に適用する方法を示します。

フラッシュバック・アーカイブを適用したテーブルを新規作成する場合、CREATE TABLE 文にFLASHBACK ARCHIVE 句を付与します。

SQL> CREATE TABLE PRODUCTS(CODE VARCHAR(50),NAME VARCHAR(100)) FLASHBACK ARCHIVE FLASHBACK_ARCHIVE_TEST;

既存のテーブルにフラッシュバック・アーカイブを適用する場合はALTER TABLE 文を使います。

SQL> ALTER TABLE PRODUCTS FLASHBACK ARCHIVE FLASHBACK_ARCHIVE_TEST;

これでPRODUCTS テーブルでフラッシュバック・アーカイブが利用可能になりました。

Syncの設定

Sync の設定は一点だけです。 Oracle OCI コネクタをデータソースとしたジョブを作成する際、[Oracle Flashbackを使用]をチェックしてください。

f:id:urabe_shintaro:20210528164057p:plain

動作確認

差分更新機能を試してみます。 ジョブを作成したあと、最初の同期では全レコード(10件)がレプリケートされます。

f:id:urabe_shintaro:20210528164108p:plain

続いてOracle のPRODUCTS テーブルに1件だけレコードを新規追加し、Sync で同じジョブを実行してみます。 すると、以下のように追加した1件だけがレプリケートされたことが確認できました。

f:id:urabe_shintaro:20210528164118p:plain

おわりに

今回はCData Sync V21 の新機能としてOracleの差分更新機能について紹介しました。 是非この機会に 新しい CData Sync をお試しください。

www.cdata.com