Oracle19c GlodenGate(OGG)安装与部署

前言:

本篇内容旨在实现Oracle 19c Container DataBase下OGG的搭建,选取测试环境已经解锁PDB下HR用户并在源端已经新建完成测试表T1。

环境介绍:

源端:                                          目标端:
Hostname:server                                 Hostname:target
IP:192.168.88.20                                IP:192.168.88.21
db_global_name:orcl1                            db_global_name:orcl1
pdb:pdb_orcl1                                  pdb:pdb_orcl1

1.安装OGG软件

1.1用oracle用户创建安装目录

创建目录

/u01/ogg

(一般与ORACLE为同级母目录也就是在/u01下面创建ogg目录就好)

mkdir /u01/app/oracle/ogg

1.2上传OGG软件

使用oracle用户上传V983658-01-ogg19.1.zip安装包到

/home/oracle

目录下;
上传完成以后执行unzip V983658-01-ogg19.1.zip解压安装文件。

1.3安装OGG软件

图形用户界面下进入fbo_ggs_Linux_x64_shiphome/Disk1目录执行./runInstaller安装脚本。(注意安装路径与数据库版本)

2.配置Linux内核参数

编辑**/etc/sysctl.conf文件进行配置,在源和目标端**设置Linux内核参数vm.max_map_count=2097152
max_map_count表示单个进程可以分配的内存映射区域的最大数量

3.开启归档、强制日志、补充日志

在源端数据库上开启归档日志、强制日志,补充日志并设置初始化参数。

(关于补充日志可参考https://blog.csdn.net/Auspicious_air/article/details/112799539)

SQL> alter database archivelog;--(需要在mount状态下,关闭数据库以mount的方式起动)。
SQL> alter database force logging;--(可以在open状态下操作)
SQL> alter database add supplemental log data;-- (可以在open状态下操作)
SQL> alter database add supplemental log data(primary key,unique,foreign key) columns; --(可以在open状态下操作)
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

设置初始化参数**enable_goldengate_replication**true(默认不开启),此参数的作用就是启用ogg

SQL> alter system set enable_goldengate_replication = true;
/*
ENABLE_GOLDENGATE_REPLICATION controls services provided by the RDBMS for Oracle GoldenGate (both 
capture and apply services). Set this to true to enable RDBMS services used by Oracle GoldenGate.
*/

4.源端创建角色

在源端数据库创建表空间ts_global_ogg及全局账户c##oggadmin并授予dba角色
表空间用来存放GoldenGate用户c##oggadmin涉及到的一些配置表。

SQL> create tablespace ts_global_ogg
datafile '/u01/app/oracle/oradata/SERVER/ts_global_ogg01.dbf'
size 200M;
SQL> alter database default tablespace ts_global_ogg  
/*
使用默认表空间,为什么要修改数据库默认的表空间?为什么不直接使用?这是因为倘若直接使用会有这样的报错
ORA-65048: error encountered when processing the current DDL statement in
pluggable database pdb_orcl1
ORA-00959: tablespace 'TS_GLOBAL_OGG' does not exist
该报错是因为在容器数据库中对于全局用户要指定表空间,它会去检查每一个pdb下面是否有该表空间,倘若没有指定的表空间,那么就会出现这个错误。使用这个技巧可以跳过这个检查。
*/
SQL> create user c##oggadmin identified by "oggadmin"
SQL> grant dba to c##oggadmin container = all

5.目标端创建角色

在目标端数据库下为要进行数据同步的Pluggable Database里分别创建表空间ts_ogg和用户oggadmin

SQL> alter session set container = pdb_orcl1;
SQL> create tablespace ts_ogg
datafile '*******/pdb_orcl1/ts_ogg01.dbf'
size 200M
SQL> create user oggadmin identified by "oggadmin"
default tablespace ts_ogg
SQL> grant dba to oggadmin

6.源端进程

在源端数据库配置ogg相关进程(你设置的所有进程的参数都存在于ogg目录下dirprm文件夹中)
在OS下执行

/u01/ogg/ggsci

打开ogg控制台 (ggsci是OGG命令行管理工具)

6.1配置mgr进程:

   GGSCI (server) 1> edit params mgr

编辑mgr管理进程的参数,加入如下内容:

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

编辑好以后,保存退出。
可以启动mgr进程:start mgr

manager进程参数配置说明: port:指定服务监听端口;默认端口为7809(也可以自定义)
dynamicportlist:动态端口:可以制定最大256个可用端口的动态列表,当指定的端口不可用时,管理进程将会从列表中
选择一个可用的端口,源端和目标段的collector、replicat、ggsci进程通信也会使用这些端口;比如:dynamicportlist
7501-7601 comment:注释行,也可以用–来代替;
autostart:指定在管理进程启动时自动启动哪些进程;比如:autostart extract * 启动所有的抽取进程
autorestart:自动重启参数设置:本处设置表示每3分钟尝试重新启动所有extract进程,共尝试3次;
purgeoldextracts:定期清理trail文件设置:本处设置表示对于超过3天的trail文件进行删除。purgeoldextracts./dirdat/*,usecheckpoints,minkeepdays
3 lagreport、laginfo、lagcritical:
定义数据延迟的预警机制:设置表示mgr进程每隔1小时检查extract的延迟情况,如果超过了30分钟就把延迟作为信息
记录到错误日志中,如果延迟超过了45分钟,则把它作为警告写到错误日志中。 lagreporthours 1 laginfominutes 30 lagcriticalminutes 45

6.2用户ogg登录到数据库

   GGSCI (server) 2> dblogin userid c##oggadmin,password oggadmin
   Successfully logged into database CDB$ROOT.

6.2.1编辑GLOBALS

 GGSCI (server as c##oggadmin@orcl1/CDB$ROOT) 3> edit params ./GLOBALS

加入如下内容

GGSCHEMA C##OGGADMIN  --我们ogg的用户名字叫做这个:c##oggadmin

然后保存退出。

6.2.2对要抽取的表添加trandata

前往SQL交互窗口:

1.之所以执行如下两行SQL是为了避免在CDB下无法执行PDB的trandata add

 SQL> exec dbms_goldengate_auth.grant_admin_privilege('c##oggadmin');
 PL/SQL procedure successfully completed.
 SQL> exec dbms_goldengate_auth.grant_admin_privilege('c##oggadmin',container=>'all');
 PL/SQL procedure successfully completed.
GGSCI (server as c##oggadmin@orcl1/CDB$ROOT) 4> add trandata pdb_orcl1.hr.t1  

或者使用

  SQL> alter table schema.table_name add supplemental log data(all) columns

2.如果想从PDB下面对trandata进行添加操作可以执行如下命令:

 GGSCI (serevr as c##oggadmin@orcl1/CDB$ROOT) 5> dblogin userid sys@192.168.88.20/pdb_orcl1,password oggadmin
/*
抽取进程和传输进程其实都是extract进程,也可以配置在一个进程完成这两个功能,但是当网络传输有问题时,这样抽取
也就不能继续运行了,所以推荐分开配置为两个进程.
*/

6.2.3添加抽取进程ext1(自定义名称)。

GGSCI (server as c##oggadmin@orcl1/CDB$ROOT) 6> add extract ext1,integrated tranlog,begin now

6.2.4添加抽取进程ext1对应的trail文件。

 GGSCI (serevr as c##oggadmin@orcl1/CDB$ROOT) 7> add exttrail /u01/app/oracle/ogg/dirdat/et,extract ext1 megabytes 200  
 --其中et(exttrail的缩写)是不需要自己手动创建的并且要严格控制在两个字符或者两个字符以内,OGG会自动创建。

6.2.5注册抽取进程ext1到pdb_orcl1。

 GGSCI (server as c##oggadmin@orcl1/CDB$ROOT) 8> register extract ext1 database container(pdb_orcl1)

6.2.6添加投递进程pump1

 GGSCI (server as c##oggadmin@orcl1/CDB$ROOT) 9> add extract pump1,exttrailsource /u01/app/oracle/ogg/dirdat/et     

6.2.7给投递进程添加远程trail文件

 GGSCI (server as c##oggadmin@ora19c/CDB$ROOT) 10> add rmttrail /u01/app/oracle/ogg/dirdat/rt,extract pump1,megabytes 200  

6.2.8配置抽取进程ext1

 GGSCI (server as c##oggadmin@ora19c/CDB$ROOT) 11> edit params ext1

加入如下内容:

 extract ext1
 userid c##oggadmin,password oggadmin
 exttrail /u01/app/oracle/ogg/dirdat/et  --抽取进程的跟踪文件
 table pdb_orcl1.hr.t1;

6.2.9配置投递进程pump1

 GGSCI (server as c##oggadmin@orcl1/CDB$ROOT) 12> edit params pump1
 加入如下内容
 extract pump1
 userid c##oggadmin,password oggadmin
 rmthost 192.168.88.21,mgrport 6800  --其中rmthost用来指定目标数据库的IP,
 rmttrail /u01/app/oracle/ogg/dirdat/rt  --rmttrail用来指定投递到目标端的trail文件。
 table pdb_orcl1.hr.t1;  --table参数后面就是你要复制投递的表,注意结束了一定要用‘;’

7.配置源端与目标端的tnsnames.ora

在tnsname.ora中加入当前pdb_orcl1的连接信息。例如:

  TARGET_PDB_ORCL1 =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.8.21)(PORT = 1521))
      (CONNECT_DATA =
        (SERVER = DEDICATED)
        (SERVICE_NAME = pdb_orcl1)
      )
    )

之后要测试连通性

8.在目标端数据库配置ogg的相关进程。

8.1配置mgr进程

GGSCI (target) 5> edit params mgr

加入如下内容

  PORT 6800
  autostart replicat *
  autorestart replicat *,retries 3,waitminutes 3

编辑完成保存退出然后启动mgr。

 GGSCI (target) 6> start mgr

8.2用ogg用户oggadmin登录pdb_orcl1

 GGSCI (target) 7> dblogin userid oggadmin@192.168.88.21/pdb_orcl1,password oggadmin;
 Successfully logged into database PDB_ORCL1.

8.3编辑GLOBALS

GGSCI (target as oggadmin@orcl1/PDB_ORCL1) 8> edit params ./GLOBALS

加入如下内容:

GGSCHEMA oggadmin
CHECKPOINTTABLE oggadmin.checkpointtable

8.4添加检查点表(checkpointtable)

GGSCI (target as oggadmin@orcl1/PDB_ORCL1) 9> add checkpointtable oggadmin.checkpointtable

8.5添加数据复制进程rep1并配置

GGSCI (target as oggadmin@orcl1/PDB_ORCL1) 9> add replicat rep1 exttrail /u01/app/oracle/ogg/dirdat/rt,checkpointtable oggadmin.checkpointtable
GGSCI (target as oggadmin@orcl1/PDB_ORCL1) 10> edit params rep1

加入如下内容:

replicat rep1 
userid oggadmin@ora19c2_pdb1,password oggadmin
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语句出错默认
map pdb_orcl1.hr.t1,target hr.t1;

9.启动源端OGG抽取和投递进程

 GGSCI (server) 5> start pump1
 GGSCI (server) 6> start ext1

10.导入数据

如果源端数据巨大可以使用数据泵(Data Pump)的方式;
如果在测试环境上进行测试可以手工建表:PDB下HR用户T1表。

11.启动目标端OGG复制进程

GGSCI (target as oggadmin@orcl1/PDB_ORCL1) 10> start mgr
GGSCI (target as oggadmin@orcl1/PDB_ORCL1) 11> start rep1

12.OGG进程检查与日志查看

在源和目标端的OGG控制台(GGSCI)执行info all命令,查看进程是否是RUNNING状态。
相应日志会记录在/u01/app/oracle/ogg/ggserr.log文件中。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值