おらくるのいる生活

OracleのDBAとしての、障害対応やらパフォーマンス・チューニングやらの日々を綴っています

Oracle Golden Gateを使ってみた 基本編(1)

今回はOracle GoldenGateの構築手順をざっとまとめてみました。

基本編では一方向のレプリケーション、応用編では双方向レプリケーションを扱う予定です。

環境は以下の通りです。

Oracle GoldenGate Version 19.1.0.0.4 MicroService Architecture

Oracle Database EE 19.3.0

Oracle Linux 7.5

まずDBを準備します。

今回は検証という事で、1サーバ上にレプリケート元と先を構築します。

なのでORACLE_HOMEを分けてあります。

上がレプリケート元、下がレプリケート先です。

ggs:/u01/app/oracle/product/19.3.0/dbhome_1:N
ggd:/u01/app/oracle/product/19.3.0/dbhome_2:N

DB側の設定はレプリケート元と先で同じです。

ここではGGADMINを管理ユーザとして作成します。

create user GGADMIN identified by welcome1;
exec dbms_goldengate_auth.grant_admin_privilege('GGADMIN');
grant CREATE SESSION to GGADMIN ;
grant UNLIMITED TABLESPACE to GGADMIN ;
grant ALTER SYSTEM to GGADMIN ;
grant ALTER USER to GGADMIN ;
grant INSERT ANY TABLE to GGADMIN ; 
grant UPDATE ANY TABLE to GGADMIN ; 
grant DELETE ANY TABLE to GGADMIN ; 
grant DROP ANY TABLE to GGADMIN ; 
grant SELECT ANY TRANSACTION to GGADMIN ;
grant SELECT ANY DICTIONARY to GGADMIN ;
grant CREATE TABLE to GGADMIN ;
grant MANAGE SCHEDULER to GGADMIN ;
grant CREATE PROCEDURE to GGADMIN ;
grant CREATE VIEW to GGADMIN ;

アーカイブログ有効化
SHUTDOWN IMMEDIATE
STARTUP MOUNT
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;

最小サプリメンタルロギング設定
ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
select supplemental_log_data_min from v$database;

GG用初期化パラメータ設定
alter system set ENABLE_GOLDENGATE_REPLICATION=true scope=both;
show parameter enable_goldengate_replication

その他のパラメータですが、Extractプロセス一つにつき、1.25Gのstreams_pool_sizeを設定する事が推奨されています。

ここでは検証環境である事、自動共有メモリ管理を使用している事から、特に設定変更は行いませんでした。

 

次にテストユーザとテーブルを作成します。テーブルには主キーが必要です*1

ここもレプリケート元と先で同じことを実行します。

初期データの移行が必要な場合は、このタイミングでexpdpなどを使用して移行しておきます。

尚、DDLのレプリケートも可能ですが、設定が面倒なのと実運用でも必要性が低そうなので、ここではDMLのレプリケートのみを扱います。

create user ggtest identified by password;
grant connect,resource to ggtest;
alter user GGTEST quota unlimited on users;
create table GGTEST.tab1(col1 number primary key, col2 varchar2(100),col3 timestamp);

DB側の準備が整ったので、GGをインストールします。

順番はどちらでも良いのですが、レプリケート元から実施します。

まずはインストールバイナリを作業ディレクトリにunzip。oggcore.rspがインストールバイナリに含まれているので、以下の項目を設定します。

#OGGのバージョンを指定
INSTALL_OPTION=ORA19c
#OGGのインストール先ディレクトリを指定
SOFTWARE_LOCATION=/u01/app/oracle/ogg_1
#インストール後にマネージャを起動するかどうか指定
START_MANAGER=true
#マネージャの通信ポートを指定(デフォルトは7809)
MANAGER_PORT=31002
#DBのインストールディレクトリを指定
DATABASE_LOCATION=/u01/app/oracle/product/19.0.0/dbhome_1

インストールの実行。

$ /tmp/ogg/fbo_ggs_Linux_x64_shiphome/Disk1/runInstaller -silent -nowait -responseFile /work/oggcore.rsp
Starting Oracle Universal Installer...

(略)

Successfully Setup Software.

数秒程度で終わります。DBのインストールに比べるとあっさりしてますね。

この後GGホームに移動して、CLIであるggsciを起動しますが、その前に環境変数を設定します。

$ export LD_LIBRARY_PATH=/u01/app/oracle/product/19.3.0/dbhome_1/lib

$ export ORACLE_HOME=$ORACLE_BASE/product/19.3.0/dbhome_1

$ export ORACLE_SID=ggs

LD_LIBRARY_PATHを設定しておかないと以下のエラーが出ます。

また、DB接続にはORACLE_HOMEとORACLE_SIDの設定が必要です。

/u01/app/oracle/ogg/ggsci: error while loading shared libraries: libnnz19.so: cannot open shared object file: No such file or directory

ggsciを起動し、サブディレクトリを作成します。

ちなみにサブディレクトリですが、初期インストールでは作成済、アンインストール後の再インストールでは作成されませんでした。

インストール時にSTART_MANAGER=trueを指定したので、マネージャが起動していますね。

$ cd /u01/app/oracle/ogg_1
$ ./ggsci

GGSCI (myhost) 1> info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING                                           


GGSCI (myhost) 2> create subdirs

Creating subdirectories under current directory /u01/app/oracle/ogg_1

Parameter file                 /u01/app/oracle/ogg_1/dirprm: created.
Report file                    /u01/app/oracle/ogg_1/dirrpt: created.
Checkpoint file                /u01/app/oracle/ogg_1/dirchk: created.
Process status files           /u01/app/oracle/ogg_1/dirpcs: created.
SQL script files               /u01/app/oracle/ogg_1/dirsql: created.
Database definitions files     /u01/app/oracle/ogg_1/dirdef: created.
Extract data files             /u01/app/oracle/ogg_1/dirdat: created.
Temporary files                /u01/app/oracle/ogg_1/dirtmp: created.
Credential store files         /u01/app/oracle/ogg_1/dircrd: created.
Masterkey wallet files         /u01/app/oracle/ogg_1/dirwlt: created.
Dump files                     /u01/app/oracle/ogg_1/dirdmp: created.

 同様にレプリケート先もインストールします。

パラメータ設定は以下の通りです。

ここでは同一サーバ上に構築するのでGGホーム、ORACLEホーム、マネージャの通信ポートを変えましたが、別サーバならば同じで構いません。

#OGGのバージョンを指定
INSTALL_OPTION=ORA19c
#OGGのインストール先ディレクトリを指定
SOFTWARE_LOCATION=/u01/app/oracle/ogg_2
#インストール後にマネージャを起動するかどうか指定
START_MANAGER=true
#マネージャの通信ポートを指定(デフォルトは7809)
MANAGER_PORT=31003
#DBのインストールディレクトリを指定
DATABASE_LOCATION=/u01/app/oracle/product/19.3.0/dbhome_2

こちらも数秒で終了です。

ちなみに、ORACLEホームを分けずにGGホームだけ分けて構築した時には、後からインストールしたGG側は大丈夫だったのですが、何か(おそらくGGホームとORACLEホームの関連)が上書きされてしまったらしく、先にインストールしたGG側で以下のエラーが発生してしまいました。

ORACLE_HOMEを分けてインストールすれば、以下のエラーは発生しません。

ERROR   OGG-02550  ORACLE_HOME is not set to Oracle software directory

ERROR   OGG-00303  Unable to connect to database using user ggadmin. Ensure that the necessary privileges are granted to the user.
Login to the database as user ggadmin failed because of error.

 

ここまででインストールはできたので、次回は設定を行っていきます。

 

 

*1:競合を正確に検出するためには、すべてのレコードは一意の非NULL識別子である必要があります。可能であれば、主キーを作成してください。不可能な場合は、一意キーを使用するか、MAPパラメータおよびTABLEパラメータのKEYCOLSオプションを使用して代替キーを作成します。一意の識別子がないと、Oracle GoldenGateでは、WHERE句で有効なすべての列が使用されますが、表に大量の列が含まれる場合、これによってパフォーマンスが低下します。