边学边记,记录一次原业务系统DG库(之前ogg的源端)数据库从12c升级到19c后ogg本地测试记录。

提醒:在虚拟机上测试的话,尽量多打快照,以防出现问题找不到解决方式导致无法继续下一步。

一、ogg(Oracle GoldenGate )基础

1、ogg基本原理


Oracle GoldenGate 数据复制过程如下:

  1. 利用抽取进程(Extract Process)在源端数据库中读取Online Redo Log或者Archive Log,然后进行解析,只提取其中数据的变化信息,比如DML操作——增、删、改操作
  2. 将抽取的信息转换为GoldenGate自定义的中间格式存放在队列文件(trail file)中
  3. 再利用传输进程将队列文件(trail file)通过TCP/IP传送到目标系统。
  4. 目标端有一个进程叫Server Collector,这个进程接受了从源端传输过来的数据变化信息
  5. 把信息缓存到GoldenGate 队列文件(trail file)当中,等待目标端的复制进程读取数据。
  6. GoldenGate 复制进程(replicat process)从队列文件(trail file)中读取数据变化信息,并创建对应的SQL语句,通过数据库的本地接口执行,提交到目标端数据库,提交成功后更新自己的检查点,记录已经完成复制的位置,数据的复制过程最终完成。

2.基本架构

组件 说明
Manager 不管是源端还是目标端必须并且只能有一个Manager进程,可以启动、关闭、监控其他进程的健康状态,报告错误事件、分配数据存储空间,发布阀值报告等,其作用:
1:监控与启动 GoldenGate 的其它进程
2:管理 trail 文件及 Reporting
Extract

Extract 进程运行在数据库源端上,它是Golden Gate的捕获机制,可以配置Extract 进程来做如下工作:
1:初始数据装载:对于初始数据装载,Extract 进程直接从源对象中提取数据
2:同步变化捕获:保持源数据与其它数据集的同步。初始数据同步完成后,Extract 进程捕获源数据的变化;如DML变化、 DDL变化等。

Replicat

Replicat 进程是运行在目标端系统的一个进程,负责读取 Extract 进程提取到的数据(变更的事务或 DDL 变化)并应用到目标数据库,就像 Extract 进程一样,也可以配置 Replicat 进程来完成如下工作:
1:初始化数据装载:对于初始化数据装载,Replicat 进程应用数据到目标对象或者路由它们到一个高速的 Bulk-load 工具上;
2:数据同步,将 Extract 进程捕获到的提交了的事务应用到目标数据库中;

Collector Collector 是运行在目标端的一个后台进程,接收从 TCP/IP 网络传输过来的数据库变化,并写到 Trail 文件里
Trails 为了持续地提取与复制数据库变化,GoldenGate 将捕获到的数据变化临时存放在磁盘上的一系列文件中,这些文件就叫做 Trail 文件
Data Pumps

二、ogg安装、配置

虚拟机和数据库说明
ip ogg说明 ogg版本 库说明 操作系统 sid 数据库名
80.128 —— —— 生产库 centOS7.9 p19c p19c
80.129 源端 21.3 DG库 centOS7.9 p19cstd p19cstd
80.130 目标端 12.3 中间库 centOS7.9 ogg ogg

1、数据库环境配置

1.1源端打开归档日志

切换oracle用户,在sqlplus登录sysdba

[root@p19cstd ~]# su - oracle
Last login: Thu Sep 12 16:20:14 CST 2024 on pts/0
[oracle@p19cstd ~]$ sqlplus / as sysdba

先验证数据库是否开启自动归档
执行归档查询命令

archive log list

Automatic archival是Disabled状态,因为Oracle默认是不开启自动归档的【我这边是显示的中文】

如果是禁用或disabled状态,按照下面的开启归档。

关闭数据库,执行命令:
SQL>shutdown immediate
#启动并装载数据库,但没有打开数据文件,该命令常用来修改数据库运行模式或恢复数据库。
#执行命令:
SQL>startup mount
#执行开启归档命令:
SQL>alter database archivelog;
#执行打开数据库命令:
SQL>alter database open;
#执行自动归档命令:
SQL>alter system archive log start;
#验证是否开启自动归档成功
#再执行归档查询命令:
SQL>archive log list

1.2 Oracle开启辅助日志和补充日志

  • 验证数据库是否开启辅助日志和补充日志
    执行SQL语句验证:
select force_logging,supplemental_log_data_min from v$database;

可以看出,我这边是已经开启了强制日志,还需要开启补充日志。

  • 开启数据库的辅助日志和补充日志
#开启强制日志后数据库会记录除临时表空间或临时回滚段外所有的操作,命令:
SQL>alter database force logging;
#开启辅助日志命令:
SQL>alter database add supplemental log data;
#开启主键附加日志命令:
SQL>alter database add supplemental log data (primary key) columns;
#开启全列附加日志命令:
SQL>alter database add supplemental log data (all) columns; 
#检查数据库是否成功开启辅助日志和补充日志
#执行SQL语句验证:
SQL>select force_logging,supplemental_log_data_min from v$database;

2、安装ogg

2.1源端

ogg12.3不兼容oracle19c,所以我安装了高版本ogg21.3.

创建OGG源端的目录,使用root用户创建

###创建ogg目录  源端+目标端
mkdir /u01/app/ogg

chown -R oracle:oinstall /u01/app/ogg


###实操:
[root@ogg ~]# mkdir /u01/app/ogg
[root@ogg ~]# chown -R oracle:oinstall /u01/app/ogg

切换oracle用户,配置环境变量。

添加OGG源端的目录到oracle用户的环境变量中(需要切换到oracle用户操作)

su - oracle

[oracle@p19c ~]$ vim ~/.bash_profile


#添加配置
export OGG_HOME=/u01/app/ogg
 
下面两个配置是,注释掉原来oracle的配置,改成合并oracle和ogg的
export PATH=$OGG_HOME:$ORACLE_HOME/bin:$PATH:$HOME/bin
#关键配置
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$OGG_HOME




#另一种配置方式,ogg不合并到原有的oracle中,会引用前面oracle的path
export OGG_HOME=/u01/app/ogg
export PATH=$PATH:$OGG_HOME
export LD_LIBRARY_PATH=$OGG_HOME:$LD_LIBRARY_PATH
alias ggsci='cd $OGG_HOME;ggsci'

#使配置生效

[oracle@p19c ~]$ source ~/.bash_profile

root用户下解压ogg安装包到指定目录/opt/ogg/,

不是解压到/u01/app/ogg,这个目录在安装的时候要是空目录

解压命令和配置安装文件:

#解压
源端:
[root@p19cstd opt]# unzip 213000_fbo_ggs_Linux_x64_Oracle_shiphome.zip -d /opt/ogg/

#进入安装文件目录
[oracle@p19cstd opt]$ cd /opt/ogg/fbo_ggs_Linux_x64_Oracle_shiphome/Disk1


目标端:
[root@p19cstd opt]# unzip fbo_ggs_Linux_x64_shiphome-12.3.0.1.4.zip -d /opt/ogg/
#进入安装文件目录
[oracle@p19cstd opt]$ cd /opt/ogg/fbo_ggs_Linux_x64_shiphome/Disk1


#配置安装配置文件,修改前三个配置--参考

[root@p19c Disk1]# cd response
[root@p19c response]# vim oggcore.rsp


#INSTALL_OPTION=ORA12c --安装选项,如果是oracle11g选择ORA11g--与安装的数据库版本要匹配
#SOFTWARE_LOCATION=/home/oracle/ogg/ggs12_2 --OGG的安装目录,一定要是一个空目录
#START_MANAGER=false --是否自动启动mgr管理进程
#DATABASE_LOCATION=/u01/app/oracle/product/19.3.0  --也可以加上数据库路径
[oracle@p19cstd Disk1]$ vim response/oggcore.rsp

#查看修改后内容(去掉注释,源端19c)
[oracle@p19cstd Disk1]$ cat response/oggcore.rsp | grep -Ev "^#|^$"
oracle.install.responseFileVersion=/oracle/install/rspfmt_ogginstall_response_schema_v12_1_2
INSTALL_OPTION=ORA19c
SOFTWARE_LOCATION=/u01/app/ogg
START_MANAGER=false
MANAGER_PORT=
DATABASE_LOCATION=/u01/app/oracle/product/19.3.0
INVENTORY_LOCATION=
UNIX_GROUP_NAME=
[oracle@p19cstd Disk1]$
        

##目标端
[root@ogg response]# vim oggcore.rsp
[root@ogg response]# cd ..
[root@ogg Disk1]# cat response/oggcore.rsp | grep -Ev "^#|^$"
oracle.install.responseFileVersion=/oracle/install/rspfmt_ogginstall_response_schema_v12_1_2
INSTALL_OPTION=ORA12c
SOFTWARE_LOCATION=/u01/app/ogg
START_MANAGER=false
MANAGER_PORT=
DATABASE_LOCATION=/u01/app/oracle/product/12.2.0
INVENTORY_LOCATION=
UNIX_GROUP_NAME=
[root@ogg Disk1]#

#静默安装,进入oracle用户

#su  oracle
#ogg12.3一直在源端装不上,在目标端装成功了,所以在源端换了高版本ogg,比如21.3,则成功安装了
./runInstaller -silent -responseFile /opt/ogg/fbo_ggs_Linux_x64_shiphome/Disk1/response/oggcore.rsp

#21.3解压方式和12.3类似,要注意区分文件名
#下面是21.3的安装命令
[oracle@p19cstd Disk1]$ ./runInstaller -silent -responseFile /opt/ogg/fbo_ggs_Linux_x64_Oracle_shiphome/Disk1/response/oggcore.rsp
截图

2.2目标端

同样的配置环境变量,创建ogg目录,解压ogg安装包到/opt/ogg,修改安装文件,然后安装到/u01/app/ogg

#oracle环境变量配置文件
[oracle@ogg Disk1]$ vim ~/.bash_profile
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/.local/bin:$HOME/bin

export PATH
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/12.2.0
export PATH=$PATH:$ORACLE_HOME/bin:/usr/local/bin
# 注意这里是你的主机,注意修改否则创建监听会出问题
export ORACLE_HOSTNAME=ogg
export ORACLE_SID=ogg
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/rdbms/lib:$ORACLE_HOME/network/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib:$ORACLE_HOME/network/jlib
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.AL32UTF8"

#ogg配置
export OGG_HOME=/u01/app/ogg
export PATH=$PATH:$OGG_HOME
export LD_LIBRARY_PATH=$OGG_HOME:$LD_LIBRARY_PATH
alias ggsci='cd $OGG_HOME;ggsci'

[oracle@ogg Disk1]$

###解压安装包,参照前一步


#查看修改安装响应文件
[oracle@ogg Disk1]$ vim response/oggcore.rsp
[oracle@ogg Disk1]$ cat response/oggcore.rsp | grep -Ev "^#|^$"
oracle.install.responseFileVersion=/oracle/install/rspfmt_ogginstall_response_schema_v12_1_2
INSTALL_OPTION=ORA12c
SOFTWARE_LOCATION=/u01/app/ogg
START_MANAGER=false
MANAGER_PORT=
DATABASE_LOCATION=/u01/app/oracle/product/12.2.0
INVENTORY_LOCATION=
UNIX_GROUP_NAME=

#安装
[oracle@ogg Disk1]$ ./runInstaller -silent -responseFile /opt/ogg/fbo_ggs_Linux_x64_shiphome/Disk1/response/oggcore.rsp

截图

3、创建OGG表空间、用户、权限

3.1创建ogg用户、表空间和分配权限(源端和目标端)

创建表空间:

可以选择新建目录创建表空间,也可以选择和原来的库共用一个目录。


#如果选择ogg表空间单独一个目录的话,需按下列语句先创建目录(需要到root用户操作)
mkdir -p /u01/app/oracle/oggdata/orcl/
chown -R oracle:oinstall /u01/app/oracle/oggdata/orcl

#然后在oracle用户下用sysdba登录sqlplus
su - oracle
sqlplus / as sysdba

#创建表空间(ogg单独目录的)
SQL>create tablespace oggtbs datafile '/u01/app/oracle/oggdata/orcl/oggtbs.dbf' size 100M autoextend on;


#创建表空间(ogg共用目录的)-源端--我采用的是这种
SQL> create tablespace oggtbs datafile '/u01/app/oracle/oradata/P19CSTD/oggtbs.dbf' size 100M autoextend on;

###当源端为主机时
SQL> create tablespace oggtbs datafile '/u01/app/oracle/oradata/P19C/oggtbs.dbf' size 100M autoextend on;

#创建表空间(ogg共用目录的)-目标端
SQL> create tablespace oggtbs datafile '/u01/app/oracle/oradata/ogg/oggtbs.dbf' size 100M autoextend on;

补充-出现的问题

我的源端是oracle19的standby备库(备份库),不能修改数据,异常了

问题解决方案:

百度出来两种方式,我这边试了B方案:

A.临时更改数据库模式(如果必要)
如果确实需要在standby库上创建表空间,并且了解相关风险,可以临时将standby库更改为读写模式。请注意,这通常仅用于临时任务(如测试或开发),并且应该在完成后立即将数据库改回只读模式。
ALTER DATABASE OPEN READ WRITE;
执行此操作后,你应该能够创建表空间。但是,请记住,在standby库上进行写操作可能会违反Data Guard的最佳实践。

B. 在主库上创建表空间
通常,建议在主库上创建OGG表空间,然后通过Data Guard的同步机制将其复制到standby库。这样可以确保主库和standby库之间的一致性,并符合Data Guard的设计原则。

#创建表空间(ogg共用目录的)-主库--
#我采用的是这种,备库不能同步创建这个表空间?而且会导致DG状态异常,数据也不能同步
SQL> create tablespace oggtbs datafile '/u01/app/oracle/oradata/P19C/oggtbs.dbf' size 100M autoextend on;

#原因:
由于主库创建了新的表空间,备用库上可能缺少相应的数据文件或表空间。如果备用库上的STANDBY_FILE_MANAGEMENT参数设置为MANUAL,则需要手动在备用库上创建相应的表空间和数据文件。如果设置为AUTO,但数据文件仍未被创建,可能是因为备用库上没有足够的磁盘空间或权限问题。
#解决方式
在备库sqlplus改一下参数配置,然后主库重新创建表空间
#查看
SQL>SHOW PARAMETER STANDBY_FILE_MANAGEMENT;
#修改
ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO SCOPE=BOTH;

创建用户、分配权限

#创建ogg用户(用户名和密码都是ogg)
SQL>create user ogg identified by ogg default tablespace oggtbs;

赋予ogg用户dba权限
SQL>grant dba to ogg;

额外权限(源端+目标端):

#给OGG添加角色和一些能力 (单项复制的话在源端做 双向复制的话源端/目标端一起做)

#在数据库上执行GoldenGate脚本(开启DDL)
###注意:一定要cd到ogg的目录下去执行,而且oracle用户的bash_profile里需要有export LD_LIBRARY_PATH=$ORACLE_HOME/lib

#正式命令
cd $OGG_HOME --这句话的意思是告诉你去ogg家目录下执行
或者 cd /u01/app/ogg
sqlplus / as sysdba


SQL>@sequence.sql --支持序列--有很多error

SQL>GRANT EXECUTE ON ogg.updateSequence TO ogg;

SQL>ALTER TABLE sys.seq$ ADD SUPPLEMENTAL LOG DATA (PRIMARY KEY) COLUMNS;
#安装ddl支持,需要输入创建的ogg用户名
SQL>@marker_setup.sql    --源端提示打不开文件


#需要输入创建的ogg用户名
SQL>@ddl_setup.sql   --源端提示打不开文件

#添加角色,需要输入创建的ogg用户名
SQL>@role_setup.sql

SQL>GRANT GGS_GGSUSER_ROLE TO ogg;

SQL>@ddl_enable.sql --源端提示打不开文件

SQL>@marker_status.sql  --源端有异常,

问题:

源端无法执行设置,修改配置,暂时不处理源端,只处理了目标端,

另外再换主机测试的时候,这里面好几个命令执行失败。

继续往下

注,这个配置有的博客没有说明

4、ogg配置

注意:一定要cd到ogg的目录下去执行

GoldenGate的日志位于其安装目录下的ggserr.log中,在配置过程中出现错误的时候可以通过日志排查问题。

4.1 设置全局变量(源端+目标端)

cd $OGG_HOME

[oracle@p19cstd ogg]$ cd /u01/app/ogg

[oracle@p19cstd ogg]$ ./ggsci   --如果正确配置环境变量,直接输 ggsci回车就行

GGSCI (p19cstd) 1>EDIT PARAMS ./GLOBALS

GGSCHEMA ogg

4.2 ogg初始化(源端+目标端):

#使用oracle用户登录源端OGG的命令行中

su – oracle
cd $OGG_HOME
./ggsci

#初始化源端OGG目录
#注意:如果不在OGG_HOME下,初始化OGG目录时会报错

GGSCI (p19cstd) 1> create subdirs

#退出OGG命令行客户端:
exit

检查源端OGG初始化后的目录
初始化完成后,可以查询在$OGG_HOME下是否存在dirchk、dirdat、dirdef、dirjar、dirout、dirpcs、dirprm、dirrpt、dirsql、dirtmp共11个目录。

#配置和启动两台数据库服务器的goldengate 的manager进程

###参考
GGSCI (localhost.localdomain) 1> edit params mgr
 
PORT 7809
 
--DYNAMICPORTLIST 7840-7939
-- AUTOSTART E *
--AUTORESTART EXTRACT *,RETRIES 5,WAITMINUTES 3
--PURGEOLDEXTRACTS /ogg/app/dirdat/*,usecheckpoints, minkeepdays 3
--LAGREPORTHOURS 1
--LAGINFOMINUTES 30
--LAGCRITICALMINUTES 45
 
参数说明:
PORT:指定服务监听端口,默认端口为7809
DYNAMICPORTLIST:动态端口:可以制定最大256个可用端口的动态列表,当指定的端口不可用时,管理进程将会从列表中选择一个可用的端口,源端和目标段的Collector、Replicat、GGSCI进程通信也会使用这些端口;
COMMENT:注释行,也可以用--来代替;
AUTOSTART:指定在管理进程启动时自动启动哪些进程;E代表extract进程,R代表replicat进程
AUTORESTART:自动重启参数设置:本处设置表示每3分钟尝试重新启动所有EXTRACT进程,共尝试5次;
PURGEOLDEXTRACTS:定期清理trail文件设置:本处设置表示对于超过3天的trail文件进行删除。
LAGREPORT、LAGINFO、LAGCRITICAL:定义数据延迟的预警机制:本处设置表示MGR进程每隔1小时检查EXTRACT的延迟情况,如果超过了30分钟就把延迟作为信息记录到错误日志中,如果延迟超过了45分钟,则把它作为警告写到错误日志中。


###我的配置--参考项目上原有配置来的---源端
GGSCI (p19cstd) 5> edit params mgr
#配置内容
PORT 7809
DYNAMICPORTLIST 7810-7832
AUTOSTART EXTRACT *
AUTORESTART EXTRACT *,RETRIES 5,WAITMINUTES 3
PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 7
LAGREPORTHOURS 1
LAGINFOMINUTES 30
LAGCRITICALMINUTES 45
ACCESSRULE,prog *,IPADDR *, ALLOW,pri 1



GGSCI (p19cstd) 6> start mgr
Manager started.

GGSCI (p19cstd) 7> info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING

GGSCI (p19cstd) 8>



####我的配置 目标端
PORT 7809
DYNAMICPORTLIST 7810-7832
AUTORESTART ER *,RETRIES 5,WAITMINUTES 3
PURGEOLDEXTRACTS ./dirdat/*,usecheckpoints, minkeepdays 15
LAGREPORTHOURS 1
LAGINFOMINUTES 30
LAGCRITICALMINUTES 45
ACCESSRULE,prog *,IPADDR *, ALLOW;

问题:目标库配置后启动不了mgr?

解决:

根据提示,是GLOBALS文件多了~符号引起,找到前面初始化编辑的该文件,然后去掉多余的就可以了。

4.3配置源端extract进程

这个需要再ggsci登录ogg用户,这里我还遇到过一个问题,就是源端登录不了ogg用户,经过多方查询后,根据这篇博文解决了(Oracle故障案例 | OGG 21C 登陆及启动进程报错 - 墨天轮

问题-源端无法登录ogg用户:

原因和解决:

原因是配置环境变量的时候有问题。ogg21版本开始,需要在环境变量指定oracle监听文件的位置,具体配置如下:(.bash_profile文件内容)

# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/.local/bin:$HOME/bin

export PATH
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=/u01/app/oracle/product/19.3.0
export PATH=$PATH:$ORACLE_HOME/bin:/usr/local/bin
# 注意这里是你的主机,注意修改否则创建监听会出问题
export ORACLE_HOSTNAME=192.168.80.129
export ORACLE_SID=p19cstd
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/rdbms/lib:$ORACLE_HOME/network/lib:/lib:/usr/lib
export CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib:$ORACLE_HOME/network/jlib
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.AL32UTF8"

#ogg
export OGG_HOME=/u01/app/ogg
##加入了TNS_ADMIN。下面这个参数就是解决我之前登录ogg报错问题
export TNS_ADMIN=$ORACLE_HOME/network/admin
export PATH=$PATH:$OGG_HOME
export LD_LIBRARY_PATH=$OGG_HOME:$LD_LIBRARY_PATH
alias ggsci='cd $OGG_HOME;ggsci'

另外tnsnames.ora文件也要配置好我们的监听,在登录的时候加上@实例名。

##备机
GGSCI (p19cstd) 1> dblogin userid ogg@p19cstd,password ogg
Successfully logged into database.

GGSCI (p19cstd as ogg@p19cstd) 2> 


##主机
 GGSCI (p19cstd) 1>dblogin userid ogg@p19c,password ogg


##ogg库
 GGSCI (p19cstd) 1>dblogin userid ogg,password ogg

解决此问题,接下来就正式开始配置了。

###参考
#创建一个extract进程
GGSCI (localhost.localdomain) 1> add extract myext,tranlog,begin now
 
EXTRACT added.
 
 
#添加extract进程的trail文件配置
#其中megabytes表示队列大小,本处为10M
GGSCI (localhost.localdomain) 2> add exttrail /u01/app/ogg/dirdat/mt,extract myext,megabytes 10
 
EXTTRAIL added.
 
#配置extract 进程

GGSCI (localhost.localdomain) 3> edit params myext
 
extract myext
 
userid ogg@orcl_ogg1,password ogg     
 
#这里配置的实际上是datapump(投递)进程,由于datapump进程和extract进程都是extract的执行文件,故可以配置在一起
rmthost 192.168.0.23,mgrport 7809
rmttrail /u01/app/ogg/dirdat/mt
 
#orcl实际上是数据库的用户名,根据实际填写
#这里表示orcl用户下的所有表
table orcl.*;


#### --注释掉参考内容,下面是我的配置,注意注释要用--

extract myext
userid ogg@p19cstd,password ogg
--#这里配置的实际上是datapump(投递)进程,由于datapump进程和extract进程都是extract的执行文件,故可以配置在一起
rmthost 192.168.80.130,mgrport 7809
rmttrail /u01/app/ogg/dirdat/mt

--#我这里是在system下建了个表
table system.visit_dept;

GGSCI (p19c as ogg@p19c) 9> start myext

启动myext遇到一些问题,查看报告

GGSCI (p19cstd as ogg@p19cstd) 42> view report myext

问题1:

解决,这个问题是之前我们修改了环境变量,没有重启mgr,需要停掉所有进程,然后启动,不过我后面有遇到了其他问题。

问题2:

看提示是数据库有个参数没有设置,退出ggsci,登录sqlplus,修改配置后重新启动进程


SQL> ALTER SYSTEM SET enable_goldengate_replication = TRUE SCOPE=BOTH;

系统已更改。

还是启动不了,查看报告,还有问题。

问题3:

原因:

错误 OGG-02249 指出 Extract 配置不支持将物理备用数据库(Physical Standby Database)作为源数据库。

解决方案???

流程暂时走不下去了,下面改成oracle19c主机作为ogg的源,来验证19c是否能正常同步到12c。

启动extract还是遇到了问题

原因:这个问题比较简单,是由于没有将 extract 注册到数据库,注册一下重新启动可以。

###注册命令
GGSCI (p19c as ogg@p19c) 12> register extract myext database

2024-09-30 16:38:25  INFO    OGG-02003  Extract group MYEXT successfully registered with database at SCN 8039104.

#启动myext
GGSCI (p19c as ogg@p19c) 13> start myext

可以看到进程已经启动成功

问题:启动的时候遇到异常

原因:

提示是端口问题

参考这篇文章。

ERROR OGG-01232 Receive TCP params error: TCP/IP error 104 (Connection reset by peer), endpoint:-CSDN博客

怀疑是因为目标端还没配置rep进程引起端口不一致,但是实际上配置的端口是7809,提示7810

按这篇文章的,第三种方案恢复running状态了

解决办法3
把源端投递进程前滚一个文件,产生一个新的文件点

alter extract myext, etrollover

问题:

原因:

原因是没有开启补充日志,应该是快照恢复节点没有配置,按照1.2步骤重新配置可以启动

 #添加表级补充日志

##之前已经登录了,这里不需要重复登录
GGSCI (localhost.localdomain) 4> dblogin userid ogg@p19c,password ogg
 
Successfully logged into database.
 
GGSCI (localhost.localdomain as ogg@aegisdb) 5> ADD TRANDATA system.*



####刚刚顺序错了,需要先添加日志再启动extract进程,所以下面我重新启动一下

GGSCI (p19c as ogg@p19c) 19> stop myext

Sending STOP request to Extract group MYEXT ...
Request processed.
GGSCI (p19c as ogg@p19c) 24> start myext

Sending START request to Manager ...
Extract group MYEXT starting.


GGSCI (p19c as ogg@p19c) 25> info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING
EXTRACT     ABENDED     MYEXT       00:00:00      00:00:54

添加表级补充日志也可以参考下面的内容

## 添加表级TRANDATA(源端)
登录
```ggsci
DBLOGIN USERID ogg, PASSWORD ogg
```

添加
```ggsci
add trandata his.*
info trandata his.*
```

或在sql手动执行
```
alter table PACS31.PACS_STUDYINFO add supplemental log data(primary key) columns;
alter table PACS31.STUDYINFO add supplemental log data(all) columns;

问题

原因和解决:

不要用system创建表测试,换别的用户。

#这时可以看到在目标数据库的/u01/app/ogg/dirdat/目录下产生了文件

不知道为啥我是2个文件,参考博客是1个000的。从时间来看0001才是当前生成的。

4.4配置目标端replicat进程

##配置myrep

[oracle@ogg ogg]$ ggsci

Oracle GoldenGate Command Interpreter for Oracle
Version 12.3.0.1.4 OGGCORE_12.3.0.1.0_PLATFORMS_180415.0359_FBO
Linux, x64, 64bit (optimized), Oracle 12c on Apr 16 2018 00:53:30
Operating system character set identified as UTF-8.

Copyright (C) 1995, 2018, Oracle and/or its affiliates. All rights reserved.



GGSCI (ogg) 1> dblogin userid ogg,password ogg
Successfully logged into database.

GGSCI (ogg as ogg@ogg) 2> edit params ./GLOBALS



GGSCI (ogg as ogg@ogg) 3> view params ./GLOBALS

GGSCHEMA ogg
CHECKPOINTTABLE ogg.checkpoint


GGSCI (ogg as ogg@ogg) 4> add checkpointtable ogg.checkpoint

Successfully created checkpoint table ogg.checkpoint.

GGSCI (ogg as ogg@ogg) 5> add replicat myrep, exttrail /u01/app/ogg/dirdat/mt, checkpointtable ogg.checkpoint
REPLICAT added.


GGSCI (ogg as ogg@ogg) 6> edit params myrep


GGSCI (ogg as ogg@ogg) 3> view params myrep

replicat myrep
ASSUMETARGETDEFS
userid ogg, password ogg
discardfile /u01/app/ogg/dirdat/rep_discard.txt, append, megabytes 10
DDL include all

map hisa.dept, target hisa.dept;

##启动myrep

GGSCI (ogg as ogg@ogg) 3> start myrep

Sending START request to MANAGER ...
REPLICAT MYREP starting


GGSCI (ogg as ogg@ogg) 4> info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING
REPLICAT    STOPPED     MYREP       00:00:00      00:07:59

问题1:

原因:

数据库goledengate参数没有设置true;

解决:修改参数,并重启数据库(不重启的话配置不生效)。


GGSCI (ogg as ogg@ogg) 14> exit
[oracle@ogg ogg]$ sqlplus / as sysdba

SQL*Plus: Release 12.2.0.1.0 Production on 星期一 10月 7 11:28:14 2024

Copyright (c) 1982, 2016, Oracle.  All rights reserved.


连接到:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

SQL> ALTER SYSTEM SET enable_goldengate_replication=true SCOPE=SPFILE;

系统已更改。
SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup;
ORACLE 例程已经启动。

Total System Global Area 2449473536 bytes
Fixed Size                  8623640 bytes
Variable Size             654313960 bytes
Database Buffers         1778384896 bytes
Redo Buffers                8151040 bytes
数据库装载完毕。
数据库已经打开。
SQL> exit

问题2:

原因和解决:

这个错误信息 OGG-02598 指出 Oracle GoldenGate 在尝试读取或处理一个 trail 文件时遇到了问题,因为该文件的格式版本(LEVEL 7)与当前 GoldenGate 软件版本的 trail 文件格式版本(RELEASE 12.3)不兼容。

Oracle GoldenGate 的 trail 文件用于存储从源数据库捕获的更改数据,这些数据随后会被应用到目标数据库。如果 trail 文件的格式与 GoldenGate 软件的期望格式不匹配,就会出现这样的错误。

要解决这个问题,您可以采取以下步骤:

1、确认 GoldenGate 版本:
确认您当前安装的 GoldenGate 软件版本是否支持 LEVEL 7 格式的 trail 文件。通常,较新版本的 GoldenGate 能够读取旧版本的 trail 文件格式,但反之则不然。
2、修改参数文件:
如果可能,修改生成该 trail 文件的 GoldenGate 进程(如 Extract 或 Replicat)的参数文件。在参数文件中,找到与 trail 文件格式相关的参数(如 FORMAT RELEASE),并将其更改为与当前 GoldenGate 软件版本相匹配的格式(在本例中为 RELEASE 12.3)。
例如,在 Extract 或 Replicat 的参数文件中添加或修改以下行:
FORMAT RELEASE 12.3
然后重启相关的 GoldenGate 进程以应用更改。

3、转换 trail 文件格式:
如果无法修改生成 trail 文件的进程参数(例如,因为该进程属于另一个系统或环境),您可能需要找到一种方法来转换 trail 文件的格式。这通常涉及到使用旧版本的 GoldenGate 软件读取原始 trail 文件,并将其内容重新写入一个新格式的 trail 文件中。然而,这种方法可能比较复杂,且需要确保旧版本和新版本的 GoldenGate 软件能够共存。

具体配置如下,去修改源端myrep参数,修改后要回滚myext,不然启动会报错,重新生成trail文件

GGSCI (p19c as ogg@p19c) 25> edit params myext

GGSCI (p19c as ogg@p19c) 30> alter extract myext, etrollover

GGSCI (p19c as ogg@p19c) 36> view params myext

extract myext
userid ogg@p19c,password ogg
--#这里配置的实际上是datapump(投递)进程,由于datapump进程和extract进程都是extract的执行文件,故可以配置
在一起
rmthost 192.168.80.130,mgrport 7809
rmttrail /u01/app/ogg/dirdat/mt,format release 12.3

--#我这里是在system下建了个表
table HISA.DEPT;


GGSCI (p19c as ogg@p19c) 37>

配置后,目标端的myrep是running状态

4.5验证数据同步情况:

在源端修改数据后,目标端数据没有变化。

我主要参考的是那篇oracle12c的同步博客说明,是将extarct和datax pump两个进程合并的,看来配置不太合适,还是要找那种跨版本配置的博客学习学习。

下面配置新的同步进程再测试

4.6新增extract-data pump-replicat验证

4.6.1源端extract+data pump进程配置
[oracle@p19c ogg]$ ggsci

Oracle GoldenGate Command Interpreter for Oracle
Version 21.3.0.0.0 OGGCORE_21.3.0.0.0_PLATFORMS_210728.1047_FBO
Oracle Linux 7, x64, 64bit (optimized), Oracle Database 21c and lower supported versions on Jul 29 2021 03:59:23
Operating system character set identified as UTF-8.

Copyright (C) 1995, 2021, Oracle and/or its affiliates. All rights reserved.



GGSCI (p19c) 1> dblogin userid ogg@p19c,password ogg
Successfully logged into database.

##添加标级补充日志
GGSCI (p19c as ogg@p19c) 3> add trandata hisa.dept_new

2024-10-07 15:31:28  INFO    OGG-15131  Logging of supplemental redo log data is already enabled for table HISA.DEPT_NEW.

2024-10-07 15:31:28  INFO    OGG-15135  TRANDATA for instantiation CSN has been added on table HISA.DEPT_NEW.

2024-10-07 15:31:28  INFO    OGG-10471  ***** Oracle Goldengate support information on table HISA.DEPT_NEW *****
Oracle Goldengate support native capture on table HISA.DEPT_NEW.
Oracle Goldengate marked following column as key columns on table HISA.DEPT_NEW: DEPT_ID.
##注册服务
GGSCI (p19c as ogg@p19c) 4> register extract exths database

2024-10-07 15:47:35  INFO    OGG-02003  Extract group EXTHS successfully registered with database at SCN 7152375.

##新增extract进程
GGSCI (p19c as ogg@p19c) 5> add extract exths, integrated tranlog, begin now
Integrated Extract added.

##添加extract进程的trail文件配置
##其中megabytes表示队列大小,本处为10M
GGSCI (p19c as ogg@p19c) 6> add exttrail /u01/app/ogg/dirdat/hs,extract exths,megabytes 10
EXTTRAIL added.

##编辑exths内容
GGSCI (p19c as ogg@p19c) 7> edit param exths


##查看刚刚编辑的内容
GGSCI (p19c as ogg@p19c) 8> view params exths

EXTRACT exths
dynamicresolution
userid ogg@p19c,password ogg
setenv(ORACLE_SID=P19C)
exttrail /u01/app/ogg/dirdat/hs,format release 12.3
--SOURCECATALOG ORCLPDB
table HISA.DEPT_NEW;

##新增应该pump进程
GGSCI (p19c as ogg@p19c) 9> add extract dphs, exttrailsource /u01/app/ogg/dirdat/hs, begin now
Extract added.


GGSCI (p19c as ogg@p19c) 10> ADD RMTTRAIL /u01/app/ogg/dirdat/hs, EXTRACT dphs
RMTTRAIL added.
##编辑pump
GGSCI (p19c as ogg@p19c) 11> edit param dphs
##查看pump
GGSCI (p19c as ogg@p19c) 20> view params dphs

EXTRACT dphs
PASSTHRU
RMTHOST 192.168.80.130, MGRPORT 7809
RMTTRAIL /u01/app/ogg/dirdat/hs
TABLE HISA.DEPT_NEW;


GGSCI (p19c as ogg@p19c) 21>


GGSCI (p19c as ogg@p19c) 12> info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING
EXTRACT     STOPPED     DPHS        00:00:00      00:01:22
EXTRACT     STOPPED     EXTHS       00:00:00      00:04:56
EXTRACT     RUNNING     MYEXT       00:00:00      00:00:02

##启动ext
GGSCI (p19c as ogg@p19c) 13> start exths

Sending START request to Manager ...
Extract group EXTHS starting.


GGSCI (p19c as ogg@p19c) 14> info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING
EXTRACT     STOPPED     DPHS        00:00:00      00:01:44
EXTRACT     RUNNING     EXTHS       00:05:16      00:00:02
EXTRACT     RUNNING     MYEXT       00:00:03      00:00:03

##启动pump
GGSCI (p19c as ogg@p19c) 15> start dphs

Sending START request to Manager ...
Extract group DPHS starting.


GGSCI (p19c as ogg@p19c) 16> info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING
EXTRACT     RUNNING     DPHS        00:00:00      00:02:00
EXTRACT     RUNNING     EXTHS       00:00:00      00:00:08
EXTRACT     RUNNING     MYEXT       00:00:00      00:00:08


GGSCI (p19c as ogg@p19c) 18>
4.6.2目标端replicat进程配置
[oracle@ogg ogg]$ ggsci

Oracle GoldenGate Command Interpreter for Oracle
Version 12.3.0.1.4 OGGCORE_12.3.0.1.0_PLATFORMS_180415.0359_FBO
Linux, x64, 64bit (optimized), Oracle 12c on Apr 16 2018 00:53:30
Operating system character set identified as UTF-8.

Copyright (C) 1995, 2018, Oracle and/or its affiliates. All rights reserved.



GGSCI (ogg) 1> info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING
REPLICAT    RUNNING     MYREP       00:00:00      00:00:05


GGSCI (ogg) 2> view params ./GLOBALS

GGSCHEMA ogg
CHECKPOINTTABLE ogg.checkpoint


GGSCI (ogg) 3> dblogin userid ogg,password ogg
Successfully logged into database.

###下面这个之前4.4测试的时候已配置,可以不用执行
GGSCI (ogg as ogg@ogg) 4> add checkpointtable ogg.checkpoint  
ERROR: Failed creating checkpoint table ogg.checkpoint.

OCI Error ORA (status = 955-ORA-00955: 名称已由现有对象使用
).

GGSCI (ogg as ogg@ogg) 5> add replicat rephs, exttrail /u01/app/ogg/dirdat/hs,begin now, checkpointtable ogg.checkpoint
REPLICAT added.


GGSCI (ogg as ogg@ogg) 6> edit params rephs


GGSCI (ogg as ogg@ogg) 11> view params rephs

REPLICAT rephs
SETENV(ORACLE_SID=OGG)
USERID ogg,password ogg
ALLOWNOOPUPDATES
--ASSUMETARGETDEFS
MAP HISA.DEPT_NEW, TARGET HISA.DEPT_NEW;


GGSCI (ogg as ogg@ogg) 12>


GGSCI (ogg as ogg@ogg) 7> start rephs

Sending START request to MANAGER ...
REPLICAT REPHS starting


GGSCI (ogg as ogg@ogg) 8> info all

Program     Status      Group       Lag at Chkpt  Time Since Chkpt

MANAGER     RUNNING
REPLICAT    RUNNING     MYREP       00:00:00      00:00:05
REPLICAT    STOPPED     REPHS       00:00:00      00:01:14


GGSCI (ogg as ogg@ogg) 9>

问题:

原因:

注释掉了rephs中关于实例的参数,重新启动状态是running。

4.6.3验证测试

1、表数据的增删改操作

源端:

在源端分别做增、删、改操作;

新增106,病理科,删除103检验科,修改影像科为1楼

目标端结果:

在源端修改的数据,能同步到目标端

2、源端表结构变更

新增一个字段memo-备注,并修改一条数据

目标端的rephs进程,在没有新数据变化的时候,状态是running,

增加一个字段memo,并修改数据的时候,rephs进程没有异常,数据没有同步变化,通常状态是会异常的。

下面修改目标端表结构试试

修改目标端表结构后,之前的数据变化不会自动同步,源端做了新的数据变化才能同步到目标端

3、新加同步表,但目标端未建表情况测试

源端新加表,并且三个进程都配置上后,rephs进程这个参数启动还是不能同步表结构

ASSUMETARGETDEF

异常如下:

在目标端加上表结构后,重新启动rep进程,数据能同步过去。

以上就是本次ogg学习过程了,完成从oracle19同步数据到oracle12c,但是还存在些问题。

参考博客:

Oracle GoldenGate(OGG)- 超级详细_oracle ogg-CSDN博客

ORACLE12C OGG安装、配置、使用_oracle12c适应的ogg版本-CSDN博客

OGG实现跨版本的同步_ogg高版本向低版本同步-CSDN博客

更多推荐