前言:

本篇内容旨在实现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 oggadminSuccessfully 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 ext1userid c##oggadmin,password oggadminexttrail /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 pump1userid c##oggadmin,password oggadminrmthost 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 6800autostart 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 pump1GGSCI (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文件中。

Oracle19c GlodenGate(OGG)安装与部署相关推荐

  1. Linux单机到Windows的OGG安装部署步骤

    OGG安装部署步骤 (linux单机到windows) 检查 Goldengate通过抓取源端数据库重做日志进行分析,将获取的数据应用到目标端,实现数据同步.因此,源数据库需要必须处于归档模式,并启用 ...

  2. 客快物流大数据项目(二十四):OGG安装部署

    目录 OGG安装部署 一.配置Oracle11gR2数据库 1.Oracle11gR2打开归档模式 2.Oracle开启辅助日志和补充日志

  3. mysql ogg_异构平台mysql-oracle(ogg)安装部署

    如图所示:源端采用Mysql库,目标端采用Oracle库 一.OGG安装配置(源端) 1.OGG下载 ※Mysql to Oracle注意事项※ 1. Supported data types for ...

  4. Qt最新版5.14在Windows环境静态编译安装和部署的完整过程 VS 2019-Qt static link build Windows 32 bit/64 bit

    文章目录 为什么要静态编译(static link) 1.源码下载/source code download 2. 编译工具下载/compiler download 编译环境选择:MinGW/MSVC ...

  5. Qt最新版5.13在Windows环境静态编译安装和部署的完整过程(VS 2017/VS 2019)

    文章目录 为什么要静态编译 1.源码下载 2. 编译工具下载 ActivePerl Python Ruby 编译环境选择 3.编译 1.修改源码里的qtbase\mkspecs\common\msvc ...

  6. Qt最新版5.12在Windows环境静态编译安装和部署的完整过程(VS2017)

    文章目录 为什么要静态编译 1.源码下载 2. 编译工具下载 ActivePerl Python Ruby 编译环境选择 3.编译 1.修改源码里的qtbase\mkspecs\common\msvc ...

  7. Ansible的安装及部署

    Ansible的安装及部署 1 实验环境 2 Ansible的安装 3 Ansible的基本信息 4 构建Ansible清单 4.1 全局清单 4.2 设定受控主机的组 4.2.1 清单查看 4.2. ...

  8. idea上传项目到码云_mall前端项目的安装与部署

    本文主要讲解mall前端项目mall-admin-web的在Windows和Linux环境下的安装及部署. Windows下的安装及部署 下载nodejs并安装 下载地址:https://nodejs ...

  9. Linux下Redis3.2的安装和部署

    redis简介: redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合).zset(so ...

  10. vSphere虚拟化之ESXi安装及部署

    vSphere虚拟化之ESXi的安装及部署(上) 一.什么是vSphere? vSphere是VNware公司在2001年基于云计算推出的一套企业级虚拟化解决方案.核心组件为ESXi.如今,经历了5个 ...

最新文章

  1. fisher's exact test
  2. 【11分钟训练完ImageNet】DNN训练再破纪录,1024 CPU Caffe开源
  3. 一眼毁三观:JS中令人发指的valueOf方法
  4. Visual Basic 永远29岁,Visual Basic 谢幕!
  5. html5杂记(1)
  6. mysql 执行报错及解决方法 Multi-statement transaction required more than ‘max_binlog_cache_size‘
  7. 面向对象概述(课堂笔记)
  8. Service Broker实现发布-订阅(Publish-Subscribe)框架
  9. c++ vscode 自动注释_VS2015自动添加注释
  10. 2017数学建模b题回顾_12月热门文章和2017年回顾
  11. python数据结构剑指offer-替换空格
  12. 【零基础学Java】—字符串的概述和特点(十五)
  13. 我没有机器学习的学位,却拿到了 DeepMind 研究工程师的 Offer
  14. 【Thinking In Java】笔记之一 一切都是对象
  15. php ddos攻击代码,PHP拦截网站DDOS攻击防御代码
  16. php7垃圾回收机制l_从几个简单的程序看PHP的垃圾回收机制
  17. (转)游戏运营18种方式
  18. 自定义异常BizException
  19. 云原生编程语言ballerina:hello-world
  20. 如何把视频或者音频转成文字

热门文章

  1. WordPress下载管理插件
  2. 大模型从入门到应用——LangChain:代理(Agents)-[计划与执行]
  3. camera杂项---镜头
  4. [译] Facebook Live如何支持80w用户同时在线
  5. 云办公管理平台 部署手册(无图)
  6. 项目经理的跨部门沟通之道
  7. (丝袜哥)swagger 3 + springBoot 配置方法
  8. 面试指南之如何介绍做过的项目
  9. eoLinker API-Shop电商行业数据及解决方案API
  10. calendar java day_of_month_Calendar的add方法中的DAY_OF_MONTH参数和DAY_OF_YEAR参数有什么区别?...