19c_ogg搭建

1.环境介绍

源端:192.168.56.101 目标端:192.168.56.100
背景:数据从主库cdb主机定位,同步到从库

2.配置ogg

2.1 开启归档、强制日志、补充日志

--ogg 主备都需要配置
SQL> alter database archivelog;
SQL> alter database force logging;
SQL> alter database add supplemental log data;
SQL> alter database add supplemental log data(primary key,unique,foreign key) columns; 
SQL> alter system archive log current; 

SQL> select log_mode,force_logging,supplemental_log_data_min from v$database;
LOG_MODE     FORCE_LOGGING                           SUPPLEME
------------ --------------------------------------- --------
ARCHIVELOG   YES                                     YES


--ogg 启用(所有节点)
SQL> alter system set enable_goldengate_replication = true;

2.2 创建角色

--192.168.56.101 (cdb)
grant dba to c##oggadmin container = all;
create tablespace ts_ogg datafile '/u01/app/oracle/oradata/ORCL/ts_global_ogg01.dbf' size 10g autoextend off;
create user c##oggadmin identified by "oggadmin" default tablespace ts_ogg;


--192.168.56.100 (pdb)
create tablespace ts_ogg datafile '/u01/app/oracle/oradata/ORCL/pdb/ts_ogg01.dbf' 10g autoextend off;
create user oggadmin identified by "oggadmin" default tablespace ts_ogg;
grant dba to oggadmin;

2.3 源端ogg进程配置

[oracle@pg1 ogg]$ ./ggsci
GGSCI (pg1) 2> edit params mgr
ps:mgr主从都配

PORT 7809
autostart extract *
autorestart extract *,retries 3,waitminutes 3

--保存后启动mgr
GGSCI (pg1) 4> start mgr
MGR is already running.

--manager进程参数配置说明: 
port:指定服务监听端口

dynamicportlist:动态端口,可以制定最大256个可用端口的动态列表,当指定的端口不可用时,管理进程将会从列表中
选择一个可用的端口,源端和目标段的collector、replicat、ggsci进程通信也会使用这些端口;比如:dynamicportlist
7501-7601 comment:注释行,也可以用–来代替;

autostart:指定在管理进程启动时自动启动哪些进程;比如:autostart extract * 启动所有的抽取进程
autorestart:自动重启参数设置:本处设置表示每3分钟尝试重新启动所有extract进程,共尝试3次;

purgeoldextracts:定期清理trail文件设置:本处设置表示对于超过3天的trail文件进行删除。purgeoldextracts./dirdat/*,usecheckpoints,minkeepdays

lagreport、laginfo、lagcritical:
定义数据延迟的预警机制:设置表示mgr进程每隔1小时检查extract的延迟情况,如果超过了30分钟就把延迟作为信息
记录到错误日志中,如果延迟超过了45分钟,则把它作为警告写到错误日志中。 lagreporthours 1 laginfominutes 30 lagcriticalminutes 45

2.4 用户ogg登录到数据库

[oracle@pg1 admin]$ cat tnsnames.ora 
19c = 
  (DESCRIPTION = 
    (ADDRESS_LIST = 
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.101)(PORT = 1521))
    )
    (CONNECT_DATA = 
      (SERVICE_NAME = orcl)
    )
  )

pdb =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.56.101)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = pdb)
    )
  )

--192.168.56.101 
GGSCI (pg1) 5> dblogin userid c##oggadmin,password oggadmin
Successfully logged into database CDB$ROOT.

GGSCI (pg1 as c##oggadmin@orcl/CDB$ROOT) 6>  edit params ./GLOBALS
GGSCHEMA C##OGGADMIN
保存退出

-- 对抽取的表添加trandata
SQL> exec dbms_goldengate_auth.grant_admin_privilege('c##oggadmin');
SQL> exec dbms_goldengate_auth.grant_admin_privilege('c##oggadmin',container=>'all');
GGSCI (pg1 as c##oggadmin@orcl/CDB$ROOT) 7>  add trandata pdb.scott.emp1
or
SQL> alter table schema.table_name add supplemental log data(all) columns;

--pdb 级别对trandata进行添加操作

2.5 配置ogg进程

ps:抽取进程和传输进程其实都是extract进程,也可以配置在一个进程完成这两个功能,但是当网络传输有问题时,这样抽取
也就不能继续运行了,所以推荐分开配置为两个进程.

-- 添加抽取进程ext1(自定义名称)
GGSCI (pg1 as c##oggadmin@orcl/CDB$ROOT) 8> add extract ext1,integrated tranlog,begin now
GGSCI (pg1 as c##oggadmin@orcl/CDB$ROOT) 9> add exttrail /u01/app/oracle/ogg/dirdat/et,extract ext1 megabytes 200
ps:其中et(exttrail的缩写)是不需要自己手动创建的并且要严格控制在两个字符或者两个字符以内,OGG会自动创建。

--注册抽取进程ext1到pdb
GGSCI (pg1 as c##oggadmin@orcl/CDB$ROOT) 10>  register extract ext1 database container(pdb)

--添加投递进程pump1
GGSCI (pg1 as c##oggadmin@orcl/CDB$ROOT) 11> add extract pump1,exttrailsource /u01/ogg/dirdat/et   

-- 给投递进程添加远程trail文件
GGSCI (pg1 as c##oggadmin@orcl/CDB$ROOT) 12> add rmttrail /u01/ogg/dirdat/rt,extract pump1,megabytes 200 

--配置抽取进程ext1
GGSCI (pg1 as c##oggadmin@orcl/CDB$ROOT) 13> edit params ext1
extract ext1
userid c##oggadmin,password oggadmin
exttrail /u01/ogg/dirdat/et         --抽取进程的跟踪文件
table pdb.scott.emp1;
table pdb.scott.dept1;
保存退出

--配置投递进程pump1
GGSCI (pg1 as c##oggadmin@orcl/CDB$ROOT) 13> edit params pump1
extract pump1
userid c##oggadmin,password oggadmin
rmthost 192.168.56.100,mgrport 7809
rmttrail /u01/ogg/dirdat/rt         --rmttrail用来指定投递到目标端的trail文件。
table pdb.scott.emp1;               --table参数后面就是你要复制投递的表,注意结束了一定要用 ';'结尾
table pdb.scott.dept1;
保存退出

3. 目标端ogg进程配置

3.1 配置mgr进程

-- mgr配置
GGSCI (test) 1> edit params mgr
PORT 7809
autostart extract *
autorestart extract *,retries 3,waitminutes 3
保存退出

--启动mgr
GGSCI (test) 2> start mgr

--用ogg用户oggadmin登录pdb
GGSCI (test) 3> dblogin userid oggadmin@pdb,password oggadmin;
Successfully logged into database PDB.

--编辑GLOBALS
GGSCI (test as oggadmin@orcl/PDB) 4>  edit params ./GLOBALS
GGSCHEMA oggadmin
CHECKPOINTTABLE oggadmin.checkpointtable
保存退出

--添加检查点表(checkpointtable)
GGSCI (test as oggadmin@orcl/PDB) 5>  add checkpointtable oggadmin.checkpointtable

-- 添加数据复制进程rep1并配置
GGSCI (test as oggadmin@orcl/PDB) 6> add replicat rep1 exttrail /u01/ogg/dirdat/rt,checkpointtable oggadmin.checkpointtable

GGSCI (test as oggadmin@orcl/PDB) 7> edit params rep1
replicat rep1
userid oggadmin@pdb,password oggadmin
ASSUMETARGETDEFS
DBOPTIONS ENABLE_INSTANTIATION_FILTERING
DISCARDFILE /u01/ogg/rep1_discard.txt,append,megabytes 10
DISCARDROLLOVER AT 02:00
DDLERROR DEFAULT IGNORE RETRYOP
map pdb.scott.emp1,target scott.emp1;
map pdb.scott.dept1,target scott.dept1;
保存退出
ASSUMETARGETDEFS
--使用ASSUMETARGETDEFS参数时,用MAP语句中指定的生产库源表和灾备端目标表具有相同的列结构。它指示的Oracle GoldenGate不在生产端查找源表的结构定义。
HANDLECOLLISIONS  --不要用!存在操作不一致性(详情https://blog.csdn.net/zhuxiaoliao/article/details/42234661)
DBOPTIONS ENABLE_INSTANTIATION_FILTERING  --当DDL复制报错时,则需要用到此处的ddlerror参数预处理一些常见的报错信息。Ddlerror对于抽取、复制进程均有效,默认为abend。
DISCARDFILE /u01/app/oracle/ogg/rep1_discard.txt,append,megabytes 10  
--将执行失败的记录保存在discard file中,文件中已经包含记录的话,再后面继续追加,不删除之前的记录。
--如当DDL复制报ORA-1430错误,传递了重复的alter语句导致,则可以用ddlerror (1430, discard)将错误信息扔到discard文件里。
DISCARDROLLOVER AT 02:00
--为了防止discard file被写满,每天2:00做一次文件过期设定
DDLERROR DEFAULT IGNORE RETRYOP  --DDL语句出错默认

--启动源端OGG抽取和投递进程
start pump1
start ext1

--导入数据
可以用数据泵把要同步的表导入从库,or 使用dblink也行

--OGG进程检查与日志查看
[root@test ogg]# tail -200f ggserr.log
--                                        


你可能感兴趣的:(oracle,数据库)