infra検証 blog

oracle成分多めです。

Oracle GoldenGate 12.3.0.1.0 構築検証その2(12.1.0.2EE 非CDB OracleLinux6.5)

準備

Oracle GoldenGateのインストールまではその1に記載しています。

macchi09.hateblo.jp

今回記載する箇所

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引用)

f:id:macchi09:20180110005329p:plain

初期状態確認[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」が最後に表示されるようです。