前回までの記事の作業により、Oracle RAC One node環境の構成が完了しました。今回は補足パートとして、弊社取り扱い製品であるSyniti Replicateを使用して、構成したOracle RAC One nodeから異種データベースであるSQL Serverへのデータ連携を実施してみたいと思います。
ーーーーーーーーーーーーーーーーーーーーーーーーーー
▽Oracle RAC One node構成関連ブログ
ステップ1:Oracle Linux環境の導入
ステップ2:Oracle Grid Infrastructureインストールの準備
ステップ3:別Oracleノードの構成と共有ディスクの設定
ステップ4:Oracle Grid Infrastructureの導入
ステップ5:Oracle RAC One nodeデータベースの作成
補足:Syniti Replicateを使用して異種DBへ連携 ← 今回の記事
ーーーーーーーーーーーーーーーーーーーーーーーーーー

Oracle RAC One node環境にSynitiレプリケーション実施のためのユーザとテストテーブルを作成
まずは、前回作成したOracle RAC One nodeデータベースに接続するため、Oracleが稼働しているノードにoracleユーザでSSHログインし、sqlplusコマンドより接続します。その後show pdbsコマンドより作成されているプラガブルデータベースを確認します。
sqlplus / as sysdba
show pdbs

今回はデフォルトで作成されている「PDB」という名前のプラガブルデータベースを使用するため、下記AlterコマンドよりPDBを起動します。これによりOPEN MODEがREAD WRITEに変更されていることが確認できます。
alter pluggable database PDB open;

起動したPDBに接続するため、下記alter sessionコマンドを実行します。show con_nameコマンドよりPDBに接続されていることを確認します。
alter session set container = PDB;
show con_name

PDB接続後は、Synitiデータ連携で使用するOracleユーザを作成します。今回はユーザ名/パスワード共に「syniti」というユーザをcreate userコマンドより作成し、Synitiレプリケーション実施のために必要な権限を付与するために、下記grantコマンドを実行しました。
create user syniti identified by syniti;
grant create session to syniti;
grant select any table to syniti;
grant insert any table, update any table, delete any table to syniti;
grant unlimited tablespace to syniti;
grant create any table to syniti;
grant create any index to syniti;
grant alter any table to syniti;
grant drop any table to syniti;
grant create any trigger to syniti;
grant drop any trigger to syniti;
grant create any sequence to syniti;
grant drop any sequence to syniti;
grant select any sequence to syniti;

Synitiデータ連携をテストするためのテーブルも作成します。今回は下記create tableコマンドよりsynitiスキーマ内に「TESTTABLE」という名前のテーブルを作成し、insertクエリより「1, aaa」と「2, bbb」というデータを入力しました。
create table syniti.TESTTABLE
(
C1 varchar(20) NOT NULL ,
C2 varchar(20) NULL ,
primary key(C1)
)
;
insert into syniti.TESTTABLE values ('1', 'aaa');
insert into syniti.TESTTABLE values ('2', 'bbb');

最後に下記show parameter service_nameコマンドを実行し、Synitiからの接続設定時に必要となるOracleサービス名を確認しておきます。今回のケースでは「orcl.oracle.com」がサービス名だったので、SIDであるorcl部分をpdb名に変更した「pdb.oracle.com」がSyniti接続先のサービス名となります。
show parameter service_name

これでOracle側の準備は完了しました。ここからはSynitiをインストールしたWindowsマシン上で開いた、Syniti管理画面からレプリケーション設定を行っていきます。
SynitiによるOracle RAC One nodeからSQL Serverへのデータレプリケーション
SynitiがOracle RAC One nodeデータベースに接続するためには、Oracle Client導入時に展開されるtnsnames.oraファイルに、下記のような接続情報を追記する必要があります。
接続文字列(任意) =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = ノード1のIPアドレス)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = ノード2のIPアドレス)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = Oracleサービス名)
)
)
このようにノード1とノード2の双方のIPアドレスを記載することで、障害やライブフェイルオーバなどで稼働しているOracleノードが切り替わったとしても、継続してレプリケーションを実行することができるようになります。
今回は接続文字列を「ORAPDB」に、HOSTはOracle RAC One node構築時に各ノードに指定したIPアドレス、Oracleサービス名は先ほど確認した「pdb.oracle.com」となるので、下記画像のように設定しました。

設定後、Syniti管理画面からOracle RAC One node環境への接続設定を行います。今回はData Souce項目にtnsnames.oraファイルに記載した接続文字列である「ORAPDB」を、User IDとPassword項目にOracle RAC One node環境で作成した「syniti」ユーザの認証情報を入力し「テスト」ボタンを押下します。「テスト成功!」と出力したので、これによりSynitiサーバからOracle RAC One node環境への接続が実施できていることが確認できました。

次のステップでは、Synitiスキーマ内に作成したテストテーブルである「TESTTABLE」が表示されるので、こちらをレプリケーション対象テーブルとして設定していきます。

Syniti画面からも作成した「TESTTABLE」のレコードが確認できます。

また、Oracle RAC One node環境からの差分連携実施のためには、差分連携方式として「Trigger」(トリガー)を指定する必要があるので、トリガーの設定とsynitiスキーマ内にトリガーテーブルを作成するように設計しました。

後は通常の差分レプリケーション設定と同様に実施できます。SQL Serverとのレプリケーション設定を行い実行することで、「TESTTABLE」内のサンプルレコードをSQL Server側のテーブルへ連携することができることや、

1つのレコードを更新し、差分レプリケーションが実行できることも確認できました。

関連したトピックス
- Syniti(旧DBMoto)レプリケーションに必要なOracleユーザ権限 Trigger使用時
- DBMotoレプリケーションに必要なOracleユーザ権限
- Oracleトランザクションセットアップ例(Log ReaderまたはLog Server Agent)[Syniti Data Replication]
- DBMotoレプリケーションに必要なOracle 12c(PDB/CDB)権限
- DBMotoレプリケーションに必要なMySQLユーザ権限
- OracleのNet Configuration Assistantでリモート接続時にORA-12541
- DBMotoレプリケーションに必要なSQL Serverユーザ権限
- レプリケーション対象テーブル構成変更後のSyniti Data Replication (旧DBMoto) マッピング対応について
- DBMotoレプリケーションに必要なPostgreSQLユーザ権限
- スキーマ(ユーザ)作成時に「ORA-65096」~Oracle 12cのアーキテクチャはここが違う~:DBMoto