目的
以下のような Oracle Golden Gate 環境をローカルに作っていきます。
STEP1.Oracle Database CUI インストール
STEP2.Oracle Golden Gate インストール
STEP3.Oracle Golden Gate セットアップ (この記事)
STEP4.Oracle Golden Gate を使ってみる
バージョンなど
対象 | バージョン |
---|---|
Host OS | Windows10 |
Client OS1 (name: myora1) | Centos-7.8 on virtual box |
Client OS2 (name: myora2) | Centos-7.8 on virtual box |
Virtual Box | Version 6.1.26 |
Vagrant | Version 2.2.5 |
Ansible (ansible_local) | Version 2.9 |
Oracle DB | 19c |
Oracle Golden Gate | 19.1.0.0 |
Oracle Golden Gate セットアップ手順
1.Oracle Golden Gate Config 設計
2.Oracle Golden Gate Config セットアップ
1.Oracle Golden Gate コンフィグ 設計
厳密には多くのパラメータがあると思われますが、自分が環境構築した時に最低限必要だったものを元に設計していきます。
データの同期元(ソース)と同期先(ターゲット)で設定はほとんど同じですが、若干違いがあるところがあります。違いが分かるように併記していきます。
注意点として、CDBにGolden Gate 用の共通ユーザを作成するので、ユーザ名の頭に「c##」を入れる必要があります。
パラメータ | ソースDB | ターゲットDB |
---|---|---|
Golden Gate Version | 19.1.0.0 | 19.1.0.0 |
Golden Gate ホームディレクトリ | /gg | /gg |
Golden Gate 用 Oracle DB ユーザ | c##gguser | c##gguser |
Trail ファイルディレクトリ | /gg/dirdat/capture1/lt /gg/dirdat/pump1/rt |
- |
Manager port 番号 | 7809 | 7809 |
Capture プロセス名 | capture1 | - |
Capture プロセスモード | Integrated Capture | - |
Data Pump プロセス名 | pump1 | - |
Replicat プロセス名 | - | repli2 |
Replicat プロセスモード | - | Integrated Replicat |
2.Oracle Golden Gate コンフィグ セットアップ
データの同期元(ソース)と同期先(ターゲット)でセットアップはほとんど同じですが、若干違いがあるところがあります。違いが分かるように併記していきます。
基本的に以下の操作は全て oracle ユーザーで実行しますので、oracle ユーザーにスイッチしておきます。
$ sudo su - oracle
Golden Gate 初期設定
Golden Gate の設定は主に ggsci を通して行います。
まずは、設定ファイル保管用のサブディレクトリの作成と、Manager の設定を行っていきます。
No | 操作 | ソースDB | ターゲットDB |
---|---|---|---|
1 | ggsci 起動 | /gg/ggsci | ソースと同じ |
2 | サブディレクトリ作成 | GGSCI (xxx) 1> create subdirs | ソースと同じ |
3 | Manager port 設定 | GGSCI (xxx) 1> EDIT PARAMS MGR ※以下の値を記入 PORT 7809 |
ソースと同じ |
4 | ggsci 終了 | GGSCI (xxx) 1> exit | ソースと同じ |
5 | captureディレクトリ作成 | mkdir -p /gg/dirdat/capture1 | 不要 |
6 | data pumpディレクトリ作成 | mkdir -p /gg/dirdat/pump1 | 不要 |
[oracle@myora1 ~]$ /gg/ggsci
Oracle GoldenGate Command Interpreter for Oracle
Version 19.1.0.0.4 OGGCORE_19.1.0.0.0_PLATFORMS_191017.1054_FBO
Linux, x64, 64bit (optimized), Oracle 19c on xxx
Operating system character set identified as UTF-8.
Copyright (C) 1995, 2019, Oracle and/or its affiliates. All rights reserved.
GGSCI (myora1) 1> create subdirs
Creating subdirectories under current directory /gg
Parameter file /gg/dirprm: created.
Report file /gg/dirrpt: created.
Checkpoint file /gg/dirchk: created.
Process status files /gg/dirpcs: created.
SQL script files /gg/dirsql: created.
Database definitions files /gg/dirdef: created.
Extract data files /gg/dirdat: created.
Temporary files /gg/dirtmp: created.
Credential store files /gg/dircrd: created.
Masterkey wallet files /gg/dirwlt: created.
Dump files /gg/dirdmp: created.
GGSCI (myora1) 2> EDIT PARAMS MGR
GGSCI (myora1) 3> exit
Oracle DB インスタンス起動など
No | 操作 | ソースDB | ターゲットDB |
---|---|---|---|
1 | tnsname.ora にPDB情報追加 | vi /opt/oracle/product/19c/dbhome_1/network/admin/tnsnames.ora ※この表の下に記載しているtnsnames.ora追記の内容を追記する |
ソースと同じ |
2 | Listener起動 | lsnrctl start LISTENER | ソースと同じ |
3 | SQLcl 起動 | sql / as sysdba | ソースと同じ |
4 | Oracleインスタンス 起動 | SQL> startup | ソースと同じ |
5 | PDB open | SQL> alter pluggable database all open; | ソースと同じ |
6 | SQLcl 終了 | exit | ソースと同じ |
ORCLPDB1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = myora1)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORCLPDB1)
)
)
ORCLPDB1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = myora2)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = ORCLPDB1)
)
)
[oracle@myora1 ~]$ lsnrctl start LISTENER
LSNRCTL for Linux: Version 19.0.0.0.0 - Production on xx-xxx-2021 15:33:26
Copyright (c) 1991, 2019, Oracle. All rights reserved.
Starting /opt/oracle/product/19c/dbhome_1/bin/tnslsnr: please wait...
TNSLSNR for Linux: Version 19.0.0.0.0 - Production
System parameter file is /opt/oracle/product/19c/dbhome_1/network/admin/listener.ora
Log messages written to /opt/oracle/diag/tnslsnr/myora1/listener/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=myora1)(PORT=1521)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=myora1)(PORT=1521)))
STATUS of the LISTENER
------------------------
Alias LISTENER
Version TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Start Date xx-xxx-2021 15:33:26
Uptime 0 days 0 hr. 0 min. 0 sec
Trace Level off
Security ON: Local OS Authentication
SNMP OFF
Listener Parameter File /opt/oracle/product/19c/dbhome_1/network/admin/listener.ora
Listener Log File /opt/oracle/diag/tnslsnr/myora1/listener/alert/log.xml
Listening Endpoints Summary...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=myora1)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
The listener supports no services
The command completed successfully
[oracle@myora1 ~]$ sql / as sysdba
SQLcl: Release 19.1 Production on xxx xxx xx 15:34:56 2021
Copyright (c) 1982, 2021, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup
ORACLE instance started.
Total System Global Area 771749224 bytes
Fixed Size 9139560 bytes
Variable Size 515899392 bytes
Database Buffers 239075328 bytes
Redo Buffers 7634944 bytes
Database mounted.
Database opened.
SQL> alter pluggable database all open;
Pluggable database altered.
SQL> exit
Golden Gate 用 Oracle DB ユーザ作成
|No| 操作 | ソース | ターゲット |
| ----| ---- | ---- | ---- | ---- |
|1| SQLcl 起動 | sql / as sysdba | ソースと同じ |
|2| CDBに接続 | SQL> alter session set container=cdb$root; | ソースと同じ |
|3| ユーザー作成 | SQL> create user c##gguser identified by oracle; | ソースと同じ |
|4| 権限設定 | SQL> grant dba to c##gguser container=all; | ソースと同じ |
|5| 権限設定 | SQL> exec dbms_goldengate_auth.grant_admin_privilege('c##gguser'); | ソースと同じ |
|6| SQLcl 終了 | exit | ソースと同じ |
[oracle@myora1 ~]$ sql / as sysdba
SQLcl: Release 19.1 Production on xxx xxx xx 15:39:37 2021
Copyright (c) 1982, 2021, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
SQL> alter session set container=cdb$root;
Session altered.
SQL> create user c##gguser identified by oracle;
User created.
SQL> grant dba to c##gguser;
Grant succeeded.
SQL> exec dbms_goldengate_auth.grant_admin_privilege('c##gguser');
PL/SQL procedure successfully completed.
Golden Gate 有効化
No | 操作 | ソースDB | ターゲットDB |
---|---|---|---|
1 | SQLcl 起動 | sql / as sysdba | ソースと同じ |
2 | Golden Gate有効化 | SQL> alter system set enable_goldengate_replication=true scope=both; | ソースと同じ |
3 | stream_pool_size設定 | SQL> alter system set streams_pool_size=128M scope=both SID='*'; | ソースと同じ |
4 | supplemental logging 設定 | SQL> alter database add supplemental log data; | ソースと同じ |
5 | supplemental logging 設定 | SQL> alter system switch logfile; | ソースと同じ |
6 | Golden Gate有効化確認 | SQL> show parameter enable_goldengate_replication; | ソースと同じ |
7 | supplemental logging 設定確認 | SQL> select name,supplemental_log_data_min from v$database; | ソースと同じ |
※stream_pool_size設定は本番環境の非機能要件に合わせて見積するべき(個人PCなので仕方なく128Mという少ない値で設定) |
[oracle@myora1 ~]$ sql / as sysdba
SQLcl: Release 19.1 Production on xxx xxx xx 16:00:10 2021
Copyright (c) 1982, 2021, Oracle. All rights reserved.
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0
SQL> alter system set enable_goldengate_replication=true scope=both;
System altered.
SQL> alter system set streams_pool_size=128M scope=both SID='*';
System altered.
SQL> alter database add supplemental log data;
Database altered.
SQL> show parameter enable_goldengate_replication;
NAME TYPE VALUE
----------------------------- ------- -----
enable_goldengate_replication boolean TRUE
SQL> select name,supplemental_log_data_min from v$database;
NAME SUPPLEME
--------- --------
ORCLCDB YES
Oracle ログモード変更
No | 操作 | ソースDB | ターゲットDB |
---|---|---|---|
1 | ログモード変更(DBシャットダウン) | SQL> shutdown immediate; | ソースと同じ |
2 | ログモード変更(インスタンス開始) | SQL> startup mount; | ソースと同じ |
3 | ログモード変更(archivelog有効) | SQL> alter database archivelog; | ソースと同じ |
4 | ログモード変更(DB open) | SQL> alter database open; | ソースと同じ |
5 | ログモード確認 | SQL> select log_mode from v$database; | ソースと同じ |
6 | SQLcl終了 | SQL > exit | ソースと同じ |
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount;
ORACLE instance started.
Total System Global Area 771749224 bytes
Fixed Size 9139560 bytes
Variable Size 629145600 bytes
Database Buffers 125829120 bytes
Redo Buffers 7634944 bytes
Database mounted.
SQL> alter database archivelog;
alter database archivelog
SQL> alter database open;
Database altered.
SQL> select log_mode from v$database;
LOG_MODE
------------
ARCHIVELOG
Capture パラメータ設定
No | 操作 | ユーザー | ソースDB | ターゲットDB |
---|---|---|---|---|
1 | ggsci 起動 | oracle | /gg/ggsci | 不要 |
2 | Capture パラメータ設定 | oracle | GGSCI (xxx) 1> edit params capture1 ※以下の値を記入 EXTRACT capture1 USERID c##gguser@ORCLCDB, PASSWORD oracle EXTTRAIL /gg/dirdat/capture1/lt TABLE ORCLPDB1.c##gguser.*; |
設定なし |
Capture プロセス追加
No | 操作 | ユーザー | ソースDB | ターゲットDB |
---|---|---|---|---|
1 | CDBへログイン | oracle | dblogin userid c##gguser@ORCLCDB password oracle | 不要 |
2 | Capture登録 | oracle | REGISTER EXTRACT capture1 DATABASE CONTAINER(ORCLPDB1) | 不要 |
3 | Capture追加 | oracle | ADD EXTRACT capture1, integrated tranlog, begin now | 不要 |
4 | Exttrail追加 | oracle | ADD EXTTRAIL /gg/dirdat/capture1/lt, extract CAPTURE1, megabytes 500 | 不要 |
5 | Capture登録確認 | oracle | info all | 不要 |
GGSCI (myora1) 2> dblogin userid c##gguser@ORCLCDB password oracle
Successfully logged into database CDB$ROOT.
GGSCI (myora1 as c##gguser@ORCLCDB/CDB$ROOT) 3> REGISTER EXTRACT capture1 DATABASE CONTAINER(ORCLPDB1)
2021-xx-xx xx:xx:xx INFO OGG-02003 Extract CAPTURE1 successfully registered with database at SCN 2330023.
GGSCI (myora1 as c##gguser@ORCLCDB/CDB$ROOT) 5> ADD EXTRACT capture1, integrated tranlog, begin now
EXTRACT (Integrated) added.
GGSCI (myora1 as c##gguser@ORCLCDB/CDB$ROOT) 7> ADD EXTTRAIL /gg/dirdat/capture1/lt, extract CAPTURE1, megabytes 500
EXTTRAIL added.
GGSCI (myora1 as c##gguser@ORCLCDB/CDB$ROOT) 10> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER STOPPED
EXTRACT STOPPED CAPTURE1 00:00:00 00:05:16
Data Pump パラメータ設定
No | 操作 | ユーザー | ソースDB | ターゲットDB |
---|---|---|---|---|
1 | Data Pump パラメータ設定 | oracle | edit params pump1 ※以下の値を記入 EXTRACT pump1 RMTHOST 192.168.56.60,MGRPORT 7809,PARAMS "-f" RMTTRAIL /gg/dirdat/pump1/rt TABLE ORCLPDB1.c##gguser.*; |
不要 |
Data Pump プロセス追加
No | 操作 | ユーザー | ソースDB | ターゲットDB |
---|---|---|---|---|
1 | CDBへログイン | oracle | dblogin userid c##gguser@ORCLCDB password oracle | 不要 |
2 | Data Pump追加 | oracle | ADD EXTRACT PUMP1, exttrailsource /gg/dirdat/capture1/lt | 不要 |
3 | Rmttrail追加 | oracle | ADD RMTTRAIL /gg/dirdat/pump1/rt, extract PUMP1 | 不要 |
4 | Data Pump登録確認 | oracle | info all | 不要 |
GGSCI (myora1 as c##gguser@ORCLCDB/CDB$ROOT) 11> edit params pump1
GGSCI (myora1 as c##gguser@ORCLCDB/CDB$ROOT) 12> dblogin userid c##gguser@ORCLCDB password oracle
Successfully logged into database CDB$ROOT.
GGSCI (myora1 as c##gguser@ORCLCDB/CDB$ROOT) 14> ADD EXTRACT PUMP1, exttrailsource /gg/dirdat/capture1/lt
EXTRACT added.
GGSCI (myora1 as c##gguser@ORCLCDB/CDB$ROOT) 15> ADD RMTTRAIL /gg/dirdat/pump1/rt, extract PUMP1
RMTTRAIL added.
GGSCI (myora1 as c##gguser@ORCLCDB/CDB$ROOT) 16> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER STOPPED
EXTRACT STOPPED CAPTURE1 00:00:00 00:42:23
EXTRACT STOPPED PUMP1 00:00:00 00:00:14
Replicat パラメータ設定
No | 操作 | ユーザー | ソースDB | ターゲットDB |
---|---|---|---|---|
1 | ggsci 起動 | oracle | 不要 | /gg/ggsci |
2 | CDBへログイン | oracle | 不要 | dblogin userid c##gguser@ORCLCDB password oracle |
3 | Replicat パラメータ設定 | oracle | 不要 | edit params repli2 ※以下の値を記入 REPLICAT repli2 USERID c##gguser@ORCLPDB1, PASSWORD oracle MAP ORCLPDB1.c##gguser.*, TARGET ORCLPDB1.c##gguser.*; |
Replicat プロセス追加
No | 操作 | ユーザー | ソースDB | ターゲットDB |
---|---|---|---|---|
1 | CDBへログイン | oracle | 不要 | dblogin userid c##gguser@ORCLCDB password oracle |
2 | Replicat 追加 | oracle | 不要 | ADD REPLICAT repli2, INTEGRATED, EXTTRAIL /gg/dirdat/pump1/rt |
3 | Replicat 登録確認 | oracle | 不要 | info all |
[oracle@myora2 ~]$ /gg/ggsci
GGSCI (myora2) 1> dblogin userid c##gguser@ORCLCDB password oracle
Successfully logged into database CDB$ROOT.
GGSCI (myora2 as c##gguser@ORCLCDB/CDB$ROOT) 2> edit params repli2
GGSCI (myora2) 4> dblogin userid c##gguser@ORCLCDB password oracle
Successfully logged into database CDB$ROOT.
GGSCI (myora2 as c##gguser@ORCLCDB/CDB$ROOT) 5> ADD REPLICAT repli2, INTEGRATED, EXTTRAIL /gg/dirdat/pump1/rt
REPLICAT (Integrated) added.
GGSCI (myora2 as c##gguser@ORCLCDB/CDB$ROOT) 6> info all
Program Status Group Lag at Chkpt Time Since Chkpt
MANAGER STOPPED
REPLICAT STOPPED REPLI2 00:00:00 00:00:07
サプリメンタルロギング設定
No | 操作 | ユーザー | ソースDB | ターゲットDB |
---|---|---|---|---|
1 | ggsci 起動 | oracle | /gg/ggsci | 不要 |
2 | CDBへログイン | oracle | dblogin userid c##gguser@ORCLPDB1 password oracle | 不要 |
3 | SCHEMATRANDATA追加 | oracle | ADD SCHEMATRANDATA c##gguser | 不要 |
GGSCI (myora1) 1> dblogin userid c##gguser@ORCLPDB1 password oracle
Successfully logged into database ORCLPDB1.
GGSCI (myora1 as c##gguser@ORCLCDB/ORCLPDB1) 2> ADD SCHEMATRANDATA c##gguser
2021-xx-xx 05:31:02 INFO OGG-01788 SCHEMATRANDATA has been added on schema "c##gguser".
2021-xx-xx 05:31:02 INFO OGG-01976 SCHEMATRANDATA for scheduling columns has been added on schema "c##gguser".
2021-xx-xx 05:31:02 INFO OGG-10154 Schema level PREPARECSN set to mode NOWAIT on schema "c##gguser".
以上