今回はOracle GoldenGateの構築手順をざっとまとめてみました。
基本編では一方向のレプリケーション、応用編では双方向レプリケーションを扱う予定です。
環境は以下の通りです。
まずDBを準備します。
今回は検証という事で、1サーバ上にレプリケート元と先を構築します。
なのでORACLE_HOMEを分けてあります。
上がレプリケート元、下がレプリケート先です。
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.
ここまででインストールはできたので、次回は設定を行っていきます。