os: centos7.4
db: oracle 12.2.0.1 + dbf
ogg:12.3.0.1.4
Oracle GoldenGate简称 ogg,主要包含Manager进程、Extract进程、Pump进程、Replicat进程。下面简单描述下,详细的可以看官方文档。
Manager进程:
GoldenGate的控制进程,它主要作用有以下几个方面:启动、监控、重启GoldenGate的其他进程,报告错误及时间,分配数据存储空间,发布阀值报告等。
Extract进程:
运行在数据库源端,负责从源端数据表或日志中捕获数据。Extract进程利用其内在的checkpoint机制,周期性地检查并记录其读写的位置,通常是写入到本地的trail文件。这种机制是为了保证如果Extract进程终止或者操作系统宕机,我们重启Extract进程后,GoldenGate能够恢复到以前的状态,从上一个断点处继续往下运行,而不会有任何数据损失。
Pump进程:
运行在数据库源端,其作用非常简单。如果源端使用了本地trail文件,那么Pump进程就会把Trail文件以数据块的形式通过TCP/IP协议发送到目标端,我们下面的配置都是这种方式。Pump进程本质是Extract进程的一种特殊形式,如果不使用Trail文件,那么Extract进程在抽取完数据后,直接投递到目标端。
Collector进程:
与Pump进程相对应的进程,它运行在目标端。这个进程不需要引起我们关注,因为在实际操作过程中无需对其进行任何配置,任务就是把Extract/Pump进程投递过来的数据块重新组装成Trail文件。
Replicat进程:
运行在目标端,是数据投递的最后一站,负责读取目标端Trail文件中的内容,并将解析其解析为DML或DDL语句,然后应用到目标数据库中。
Classic Capture is the default mode of the Oracle GoldenGate. whereas Integrated is introduced from Oracle GoldenGate 11g.
There are two types of Capture Modes in Oracle GoldenGate.
Classic Capture Mode - The Extract process captures data changes from the Oracle redo or archive log files on the source system and writes it to the Trail files (Local Trail).
Integrated Capture Mode - The extract process does not directly read the redo log files. The job is done by the logmining server residing in the Oracle database. Since Integrated Capture is fully Integrated with the Database, more data types as well as compressed data are supported by this Mode.
source target
os centos 7.4 centos 7.5
ip 192.168.56.101 192.168.56.102
hostname node1 node2
db 12.2.0.1 12.2.0.1
db_name orcl orcl
db_unique_name orcl orcl
instance_name rac01 rac0x
ogg_home /u01/app/oracle/ogg/12.3 /u01/app/oracle/ogg/12.3
ogg admin c##ggsadmin ggsadmin
obj user peiyb peiyb
ogg 的下载要与运行的平台一致,本次下载的是 Oracle GoldenGate 12.3.0.1.4 for Oracle on Linux x86-64 (324 MB)
下载地址为:http://www.oracle.com/technetwork/middleware/goldengate/downloads/index.html
使用传统的命令配置方式配置,也可以使用 Oracle GoldenGate Studio 来配置。
node1、node2 节点都需要操作
# su - oracle
$ mkdir -p /u01/app/oracle/ogg/12.3
$ vi ~/.bash_profile
#for ogg
export OGG_HOME=$ORACLE_BASE/ogg/12.3
export PATH=$PATH:$OGG_HOME
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$OGG_HOME
$ source ~/.bash_profile
$ cd /tmp
$ rz
$ unzip 123014_fbo_ggs_Linux_x64_shiphome.zip
$ cd /tmp/fbo_ggs_Linux_x64_shiphome/Disk1
$ ./runInstaller
可以粗略看下 OGG-12.3.0.1.4-README.txt、OGG_WinUnix_Rel_Notes_12.3.0.1.4.pdf 这两个文件
node1、node2 节点都执行
GGSCI (node1) 3> create subdirs
Creating subdirectories under current directory /u01/app/oracle/ogg/12.3
Parameter file /u01/app/oracle/ogg/12.3/dirprm: already exists.
Report file /u01/app/oracle/ogg/12.3/dirrpt: already exists.
Checkpoint file /u01/app/oracle/ogg/12.3/dirchk: already exists.
Process status files /u01/app/oracle/ogg/12.3/dirpcs: already exists.
SQL script files /u01/app/oracle/ogg/12.3/dirsql: already exists.
Database definitions files /u01/app/oracle/ogg/12.3/dirdef: already exists.
Extract data files /u01/app/oracle/ogg/12.3/dirdat: already exists.
Temporary files /u01/app/oracle/ogg/12.3/dirtmp: already exists.
Credential store files /u01/app/oracle/ogg/12.3/dircrd: already exists.
Masterkey wallet files /u01/app/oracle/ogg/12.3/dirwlt: already exists.
Dump files /u01/app/oracle/ogg/12.3/dirdmp: already exists.
source node1 节点都在cdb层级创建 c##ggsadmin 用户(方便以后操作,两个节点都创建)
源端要启动 force logging ,supplemental log, archive log.如果是生产环境配置ADG的话,这三个基本都是启用的.
supplemental log 可以参考<
# su - oracle
$ sqlplus / as sysdba
SQL> show pdbs;
SQL> alter system set enable_goldengate_replication=true;
SQL> alter database force logging;
SQL> alter database add supplemental log data;
alter database add supplemental log data (all,primary key,unique index,foreign key) columns ;
alter database add supplemental log data for procedural replication;
SQL> select * from DBA_SUPPLEMENTAL_LOGGING ;
MIN PRI UNI FOR ALL PRO SUB
--- --- --- --- --- --- ---
YES YES YES YES YES YES NO
SQL> alter system archive log current;
SQL> select name,open_mode,force_logging,supplemental_log_data_min from v$database;
SQL> alter session set container=RAC01PDB;
SQL> create tablespace tbs_ggs datafile '/u01/app/oracle/oradata/orcl/rac01pdb/ggs001.dbf' size 500m autoextend on maxsize 30g;
创建 common user for ogg
SQL> alter session set container=CDB$ROOT;
SQL> create tablespace tbs_ggs datafile '/u01/app/oracle/oradata/orcl/ggs001.dbf' size 500m autoextend on maxsize 30g;
SQL> create user c##ggsadmin identified by ggsadminggsadmin
default tablespace tbs_ggs;
grant dba to c##ggsadmin container=all;
grant ggsys_role to c##ggsadmin container=all;
SQL> begin
dbms_goldengate_auth.grant_admin_privilege('c##ggsadmin',container=>'ALL');
commit;
end;
/
关闭 recyclebin
SQL> alter system set recyclebin=off scope=spfile;
SQL> show parameter recyclebin
source 库需要在root容器中创建ogg管理用户,由于12c使用intergated extract,所以需要在cdb创建管理用户。
12c在cdb创建用户设置 default tablespace 时,必须确保cdb,各个pdb都要有指定的表空间,否则会报错。
target node2 节点的pdb层级创建 ggsadmin 用户(方便以后操作,两个节点都创建)
注意一个是rac01pdb,一个是rac0xpdb
SQL> alter session set container=RAC01PDB;
SQL> create user ggsadmin identified by ggsadminggsadmin
default tablespace tbs_ggs;
grant dba to ggsadmin;
grant ggsys_role to ggsadmin;
注意:
12c架构的原因,c##ggsadmin 为cdb层面的用户(common user),ggsadmin为pdb层面的用户(local user)。
node1、node2两个节点都配置 tnsname.ora
tns_node1_orcl =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = node1)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
tns_node1_rac01pdb =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = node1)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = rac01pdb)
)
)
tns_node2_orcl =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = node2)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
tns_node2_rac0xpdb =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = node2)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = rac0xpdb)
)
)
$ ggsci
GGSCI (node1) 1> edit params ./GLOBALS
ENABLEMONITORING
CHECKPOINTTABLE CDB$ROOT.c##ggsadmin.checkpoint
GGSCHEMA c##ggsadmin
$ ggsci
GGSCI (node1) 1> add credentialstore
GGSCI (node1) 2> alter credentialstore add user c##ggsadmin@tns_node1_orcl,password ggsadminggsadmin alias ogg1
GGSCI (node1) 3> info credentialstore
GGSCI (node1) 4> dblogin useridalias ogg1
$ cd $OGG_HOME
$ ./ggsci
GGSCI (node1) 1> edit params mgr
PORT 7809
DYNAMICPORTLIST 7810-7890
AUTOSTART EXTRACT *
AUTORESTART EXTRACT *,RETRIES 5, WAITMINUTES 3,RESETMINUTES 5
#PURGEOLDEXTRACTS /u01/app/oracle/ogg/12.3/dirdat/*,usecheckpoints, minkeepdays 7
#LAGREPORTHOURS 1
#LAGINFOMINUTES 30
#LAGCRITICALMINUTES 45
GGSCI (node1) 2> stop mgr
GGSCI (node1) 3> start mgr
GGSCI (node1) 3> info all
创建 integrated 类型
GGSCI (node1) 4> dblogin useridalias ogg1
GGSCI (node1 as c##ggsadmin@rac01/CDB$ROOT) 4> add schematrandata RAC01PDB.peiyb
GGSCI (node1 as c##ggsadmin@rac01/CDB$ROOT) 5> add trandata RAC01PDB.peiyb.*
GGSCI (node1 as c##ggsadmin@rac01/CDB$ROOT) 4> info schematrandata RAC01PDB.peiyb
GGSCI (node1 as c##ggsadmin@rac01/CDB$ROOT) 6> info trandata RAC01PDB.peiyb.*
GGSCI (node1 as c##ggsadmin@rac01/CDB$ROOT) 7> add checkpointtable CDB$ROOT.c##ggsadmin.checkpoint
GGSCI (node1) 1> add extract ext,integrated tranlog,begin now
GGSCI (node1) 2> add exttrail ./dirdat/ea,extract ext
或者
GGSCI (node1) 2> add exttrail ./dirdat/ea,extract ext,THREADS 2 (RAC环境使用)
GGSCI (node1) 3> dblogin useridalias ogg1
GGSCI (node1) 4> register extract ext database container (RAC01PDB) -- 提示 This EXTRACT EXT is already registered
GGSCI (node1) 5> edit params ext
EXTRACT ext
setenv (NLS_LANG=AMERICAN_AMERICA.AL32UTF8)
USERIDALIAS ogg1
TRANLOGOPTIONS DBLOGREADER --rac时使用
FETCHOPTIONS NOUSESNAPSHOT
GETTRUNCATES
EXTTRAIL ./dirdat/ea
DISCARDFILE ./dirrpt/ea.dsc, APPEND, MEGABYTES 40
WARNLONGTRANS 1H, CHECKINTERVAL 5M
CACHEMGR CACHESIZE 1024MB, CACHEDIRECTORY ./dirtmp
LOGALLSUPCOLS
NOCOMPRESSUPDATES
UPDATERECORDFORMAT FULL
--ddl include all
--ddloptions report
REPORTCOUNT EVERY 5 SECONDS, RATE
table RAC01PDB.peiyb.*;
GGSCI (node1) 4> start extract ext
管理extract抓取进程命令
GGSCI > start extract ext –启动ext进程
GGSCI > stop extract ext –关闭ext进程
GGSCI > kill extract ext --强制停止ext进程
GGSCI > info extract ext --查看进程参数信息
GGSCI > stats extract ext --查看进程运行信息
GGSCI > view report ext —查看运行报告
GGSCI (node1) 2> add extract pump,exttrailsource ./dirdat/ea
GGSCI (node1) 3> add rmttrail ./dirdat/pa,extract pump
GGSCI (node1) 4> edit params pump
extract pump
USERIDALIAS ogg1
rmthost 192.168.56.102,mgrport 7809,compress
rmttrail ./dirdat/pa
passthru
table RAC01PDB.peiyb.*;
管理pump投递进程
GGSCI > start extract pump –启动pump进程
GGSCI > stop extract pump –关闭pump进程
GGSCI > kill extract pump --强制停止pump进程
GGSCI > info pump --查看进程参数信息
GGSCI > stats pump --查看进程运行信息
GGSCI > view report pump ---查看运行报告
必须针对每个pdb配置一个 replicat
$ cd $OGG_HOME
$ ./ggsci
GGSCI (node2) 1> edit params ./GLOBALS
ENABLEMONITORING
CHECKPOINTTABLE ggsadmin.chkpt
GGSCHEMA ggsadmin
$ ./ggsci
GGSCI (node2) 1> add credentialstore
GGSCI (node2) 2> alter credentialstore add user ggsadmin@tns_node2_rac0xpdb,password ggsadminggsadmin alias ogg2
GGSCI (node2) 3> info credentialstore
GGSCI (node2) 4> dblogin useridalias ogg2
$ ./ggsci
GGSCI (node2) 1> edit params mgr
PORT 7809
DYNAMICPORTLIST 7810-7890
AUTOSTART REPLICAT *
AUTORESTART REPLICAT *,RETRIES 5, WAITMINUTES 3,RESETMINUTES 5
#PURGEOLDEXTRACTS /u01/app/oracle/ogg/12.3/dirdat/*,usecheckpoints, minkeepdays 7
#LAGREPORTHOURS 1
#LAGINFOMINUTES 30
#LAGCRITICALMINUTES 45
GGSCI (node1) 2> stop mgr
GGSCI (node1) 3> start mgr
GGSCI (node1) 3> info all
GGSCI (node2) 21> dblogin useridalias ogg2
GGSCI (node2 as ggsadmin@rac0x/RAC0XPDB) 22> add checkpointtable ggsadmin.chkpt
GGSCI (node2 as ggsadmin@rac0x/RAC0XPDB) 22> add replicat rep,exttrail ./dirdat/pa checkpointtable ggsadmin.chkpt
GGSCI (node2 as ggsadmin@rac0x/RAC0XPDB) 23> edit params rep
REPLICAT rep
USERIDALIAS ogg2
setenv (NLS_LANG="AMERICAN_AMERICA.AL32UTF8")
HANDLECOLLISIONS
ASSUMETARGETDEFS
ddloptions report
discardfile ./dirout/RAMER.DSC, purge
MAP RAC01PDB.peiyb.*, TARGET RAC0XPDB.peiyb.*;
一些相关命令
GGSCI > start replicat rep –启动rep进程
GGSCI > stop replicat rep –关闭rep进程
GGSCI > kill replicat rep --强制停止e1进程
GGSCI > info replicat rep --查看进程参数信息
GGSCI > stats replicat rep --查看进程运行信息
GGSCI > view report rep ---查看运行报告
GGSCI (node1) 1> start mgr
GGSCI (node1) 2> start extract ext
GGSCI (node1) 3> start extract pump
GGSCI (node1) 4> info all
GGSCI (node2) 1> start mgr
GGSCI (node2) 2> start replicat rep
GGSCI (node2) 3> info all
使用 expdp、impdp初始化后,通过添加 afterscn 参数启动 rep
GGSCI (node2) 3> start replicat rep,aftercsn 7863029544
测试后发现,数据是可以正常同步,但是ddl语句无法传输。原来ddl传输还需要额外设置,在另外一篇blog介绍。
参考:
http://www.oracle.com/technetwork/middleware/goldengate/downloads/index.html
https://docs.oracle.com/goldengate/c1230/gg-winux/OGGRN/toc.htm
https://docs.oracle.com/goldengate/c1230/gg-winux/index.html
https://community.oracle.com/thread/4052820
https://docs.oracle.com/goldengate/1212/gg-winux/GIORA/process_mode.htm#GIORA212
http://blog.itpub.net/8520577/viewspace-2119349/