Oracle GoldenGate 12.3.0.1.0 構築検証その2(12.1.0.2EE 非CDB OracleLinux6.5)
準備
Oracle GoldenGateのインストールまではその1に記載しています。
今回記載する箇所
・Oracle GoldenGate前提条件設定(DB)
・Oracle GoldenGate設定(capture,datapump,replicat)
・Oracle GoldenGate簡易動作確認
Oracle GoldenGate前提条件設定(DB)
便宜上、各ノードを以下のように呼びます。source側の変更をtarget側へ伝番させます。
node1:source側
node2:target側
・ロギングプロパティの変更[source側のみ]
強制ロギングモードおよび、サプリメンタルロギングを有効化する。
★双方向同期かける場合はtarget側にも行います。
SQL> SELECT supplemental_log_data_min, force_logging FROM v$database;
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
SQL> ALTER DATABASE FORCE LOGGING;
https://docs.oracle.com/cd/E74358_01/gg-winux/GIORA/GUID-55E7046C-0550-40C2-A855-904A2049F31B.htm
・GoldenGateの有効化[source側/target側]
SQL> show parameter enable_goldengate_replication
SQL> alter system set enable_goldengate_replication=true;
・サーバーリソースの調整[source側/target側]
インスタンスの再起動が必要。検証環境のスペックが足りないため、控えめサイズで設定しました。本番環境で設定する際は、以下のリンクを参照
SQL> alter system set streams_pool_size=1250M scope=spfile;
SQL> shutdown immediate
SQL> startup
SQL> show parameter streams_pool_size
https://docs.oracle.com/cd/E74358_01/gg-winux/GIORA/GUID-F16C203E-CB16-44EC-A73B-6C9052A6A100.htm
・oggユーザの作成(oggの管理ユーザ)[source側/target側]
サンプル通り作成しました。権限を絞る場合は、以下のリンクを参照のこと。
SQL> create user ggs identified by Welcome1;
SQL> grant DBA to ggs;
SQL> exec dbms_goldengate_auth.grant_admin_privilege('ggs');
https://docs.oracle.com/cd/E74358_01/gg-winux/GIORA/GUID-81F8202D-2AA7-4985-BDDB-28FE13391B60.htm
・テスト用ユーザ作成(oggによりデータが伝番されるユーザ)[source側/target側]
こちらは、業務要件に合わせた権限を付与のこと
SQL> create user ggtest identified by ggtest;
SQL> grant DBA to ggtest;
Oracle GoldenGate設定(capture,datapump,replicat)
※作業のイメージ(Oracle GoldenGateキャプチャおよび適用プロセスの概要 図5-1引用)
初期状態確認[source側/target側]
★マニュアルにはさらっと記載されていますが、oggのインストールディレクトリ上で各種oggのコマンドを実行する必要があります。
Oracle GoldenGateプロセス・インタフェースのスタート・ガイド
$ cd ${OGG_HOME} # OGG_HOMEはoggインストールディレクトリを指します
$ ggsci
GGSCI (node1.oracle12c.jp) 1> info all
①Manager起動[source側/target側]
GGSCI (node1.oracle12c.jp) 2> start manager
②captureプロセスの設定ファイル作成[source側]
GGSCI (node1.oracle12c.jp) 3> edit params EXT1
EXTRACT EXT1
SETENV (ORACLE_HOME=/u01/app/oracle/product/12.1.0/dbhome_1)
USERID ggs@ORCL-N1, PASSWORD Welcome1
DDL INCLUDE MAPPED
EXTTRAIL ./dirdat/lt
TABLE ggtest.*;
③GGSCIからDBへログインする[source側]
GGSCI (node1.oracle12c.jp) 4> dblogin userid ggs@ORCL-N1 password Welcome1
Successfully logged into database.
※ORCL-N1:node1のインスタンスへ接続するための接続文字列でtnsnames.oraに定義したもの
④スキーマレベルのサプリメンタル・ロギングを有効化する[source側]
GGSCI (node1.oracle12c.jp as ggs@ORCL) 5> ADD SCHEMATRANDATA ggtest
⑤ExtractプロセスをDBへ登録(CaptureグループをDBに登録)する[source側]
GGSCI (node1.oracle12c.jp as ggs@ORCL) 6> REGISTER EXTRACT EXT1 DATABASE
⑤Extractプロセスを追加(Captureグループを追加する)[source側]
GGSCI (node1.oracle12c.jp as ggs@ORCL) 7> ADD EXTRACT EXT1, INTEGRATED TRANLOG,BEGIN NOW
⑦ローカルトレイルを追加する[source側]
GGSCI (node1.oracle12c.jp as ggs@ORCL) 8> ADD EXTTRAIL ./dirdat/lt, EXTRACT EXT1
⑧DataPumpプロセスの設定ファイル作成[source側]
GGSCI (node1.oracle12c.jp as ggs@ORCL) 9> edit params DP1
EXTRACT DP1
PASSTHRU
RMTHOST node2.oracle12c.jp, MGRPORT 7809
RMTTRAIL /u01/app/ogg/dirdat/rt
TABLE ggtest.*;
⑨DataPumpプロセスを追加する[source側]
GGSCI (node1.oracle12c.jp as ggs@ORCL) 10> ADD EXTRACT DP1, EXTTRAILSOURCE ./dirdat/lt
⑩リモートトレイルを追加する[source側]
GGSCI (node1.oracle12c.jp as ggs@ORCL) 11> ADD RMTTRAIL /u01/app/ogg/dirdat/rt, EXTRACT DP1
⑪Replicatプロセスの設定ファイル作成[target側]
★初回構築時に1行目のREPLICATをEXTRACTと記載していてstart replicatで起動しませんでした。
GGSCI (node2.oracle12c.jp) 2> edit params REP1
REPLICAT REP1
SETENV (ORACLE_HOME=/u01/app/oracle/product/12.1.0/dbhome_1)
USERID ggs@ORCL-N2, PASSWORD Welcome1
MAP ggtest.*, TARGET ggtest.*;
※ORCL-N2:node2のインスタンスへ接続するための接続文字列でtnsnames.oraに定義したもの
⑫Replicatプロセスを追加[target側]
GGSCI (node2.oracle12c.jp) 3> ADD REPLICAT REP1, INTEGRATED, EXTTRAIL ./dirdat/rt
⑬Extractプロセスを起動[source側]
GGSCI (node1.oracle12c.jp as ggs@ORCL) 12> start extract EXT1
⑭DataPumpプロセスを起動[source側]
GGSCI (node1.oracle12c.jp as ggs@ORCL) 13> start extract DP1
プロセス状態を確認[source側]
GGSCI (node1.oracle12c.jp as ggs@ORCL) 14> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
EXTRACT RUNNING DP1 00:00:00 00:03:12
EXTRACT RUNNING EXT1 00:00:00 00:06:40
★全てRUNNINGならOK
⑮Replicatプロセスを起動[target側]
GGSCI (node2.oracle12c.jp) 4> start replicat REP1
プロセス状態を確認[target側]
GGSCI (node2.oracle12c.jp) 5> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER RUNNING
REPLICAT RUNNING REP1 00:00:00 00:01:38
★全てRUNNINGならOK
Oracle GoldenGate簡易動作確認
テーブル作成[source側]
★印のタイミングでtarget側で伝番確認を行う。
$ sqlplus ggtest/ggtest
SQL > create table ggtest.test_tab1
( id number primary KEY,
name char(10) not null,
upd_date date default sysdate);
★
SQL > insert into ggtest.test_tab1 values(1,'山田', sysdate);
SQL > commit;
★
SQL > update ggtest.test_tab1 set name = 'テスト' where id = 1;
SQL > commit;
★
SQL > delete ggtest.test_tab1 where id = 1;
SQL > commit;
★
その他
ログ確認方法
・ファイルによる確認
$OGG_HOME/ggser.log
・GGSCI上での確認
GGSCI (node1.oracle12c.jp) 1> view ggsevt
伝番状況の確認方法
[source側]
GGSCI (node1.oracle12c.jp) 1> lag extract EXT1
GGSCI (node1.oracle12c.jp) 1> lag extract DP1
[target側]
GGSCI (node2.oracle12c.jp) 1> lag replicat REP1
DataPumpプロセスとReplicatプロセスについては、同期が完了していると「At EOF, no more records to process」が最後に表示されるようです。