oracle Golden Gate 实现数据同步

1.应用场景

生产数据库正常运行下进行ogg操作,实现到测试库的实时同步功能。

2.原理分析

ogg主要是四个服务:Manager,Extract,Pump,Replicat

  • Manager:控制ogg 启动 状态 停止 等
  • Extract:捕获 源 端数据 利用其内在的checkpoint机制,周期性地检查 并记录其读写的位置,通常是写入到本地的trail文件
  • Pump:把Trail文件以数据块的形式通过 TCP/IP协议发送到目标端
  • Replicat:读取目标端Trail文件中的内容,并将解析其解析为DML或DDL语句,然后应用到目标数据库中。

针对当前场景,
在官网:https://docs.oracle.com/goldengate/1212/gg-winux/GIORA/instantiate.htm#GIORA403
中介绍了如下方式。

实际部署时需要注意正确的执行顺序:
(1) 源端和目标端创建配置各个同步进程。
(2) 开启源端同步抓取进程(图上的Change Extract),开始捕获变化。
(3) 开启初始化进程(图上的Initial-Load Extract),开始数据初始化加载。
(4) 等初始化加载结束,开启目标端复制应用进程(图上的ChangeReplicat),开始实时同步应用。

3.实现方式

3.1下载

官网的下载地址:选择适合自己oracle版本的ogg版本。https://www.oracle.com/middleware/technologies/goldengate-downloads.html

3.2当前版本信息

|服务器ip |系统 |oracle|goldengate|实例|用户密码|表空间|端|
|--|--|--|--|--|--|--|--|--|
| 192.168.66.2 | centos7.5 |11.2.0.4|19.1.0.0.4|orcl|Lczy_2022|ogg|源端|
| 192.168.66.3 | centos7.5 |11.2.0.4|19.1.0.0.4|orcl|Lczy_2022|ogg|目标端|

3.3安装ogg

源端操作:

  1. 目录创建
mkdir /home/goldengate
mkdir -p /home/oracle/product/ogg_src
chown -R oracle:oinstall /home/goldengate/
chown -R oracle:oinstall /home/oracle/product/ogg_src
  1. 文件解压
unzip fbo_ggs_Linux_x64_Oracle_shiphome.zip -d /home/goldengate/
chown -R oracle:oinstall /home/goldengate/
  1. 环境变量
vim /home/oracle/.bash_profile
------------------------------
export OGG_HOME=/home/oracle/product/ogg_src
export PATH=$OGG_HOME:$PATH
export LD_LIBRARY_PATH=$OGG_HOME:$LD_LIBRARY_PATH
------------------------------
source /home/oracle/.bash_profile
  1. 安装ogg-manager
cd /home/goldengate/fbo_ggs_Linux_x64_Oracle_shiphome/Disk1
./runInstaller ## 也可以选择静默安装
alias ggsci="rlwrap /home/oracle/product/ogg_src/ggsci"
##关闭终端再连接一次,出现此页面说明安装完成 --oracle执行 如下报错:bash: rlwrap: command not found... 解决:重连ssh
[oracle@oracle-m ~]$ ggsci
·················
GGSCI (oracle-m) 1> view param mgr
PORT 7809
GGSCI (oracle-m) 2> info mgr
Manager is running (IP port TCP:oracle-m.7809, Process ID 4669).
  1. 创建用户和分配权限
    还有其他的权限配置方式,详见文末。
cd
mkdir -p oradata/orcl
sqlplus / as sysdba
create tablespace OGG logging datafile '/home/oracle/oradata/orcl/OGG.DBF' size 20m autoextend on uniform size 2m;
create user ogg identified by ogg default tablespace OGG temporary tablespace TEMP quota unlimited on OGG;

grant unlimited tablespace to ogg;
grant dba to ogg;
  1. 开启数据库附加日志
## oracle 11.2.0.4和oracle 12.1.0.2及之后的版本需要设置如下参数
SQL> alter system set enable_goldengate_replication=true scope=both;
##打开最小附加日志
SQL> ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
SQL> ALTER DATABASE FORCE LOGGING;
SQL> SELECT supplemental_log_data_min, force_logging FROM v$database;
SQL> ALTER SYSTEM SWITCH LOGFILE;
## 有操作如下:涉及重启数据库 !!! 慎重 !!! 操作
SQL> select log_mode, supplemental_log_data_min, force_logging from v$database;
LOG_MODE SUPPLEME FOR
------------ -------- ---
NOARCHIVELOG NO NO
###查看后发现没有开启归档模式,需要开启
shutdown immediate ##--关闭数据库
startup mount; ##--启动mount模式
alter database archivelog; ## --启用归档日志
alter database open; ##--打开数据库
alter database force logging; ##--启用強制日志
alter database add supplemental log data; ##--启用附加日志
alter system switch logfile; ##--切换日志文件
# 源端需要添加 用户级别的 或者 表级别 的附加
# 选择其一
##用户级别的附加
ggsci
dblogin userid ogg, password ogg
add schematrandata ogg
##表级别的附加
ggsci
dblogin userid ogg, password pwd
add trandata ogg.togg;

目标端:

  1. 目录创建
mkdir /home/goldengate
mkdir -p /home/oracle/product/ogg_trg
chown -R oracle:oinstall /home/goldengate/
chown -R oracle:oinstall /home/oracle/product/ogg_trg
  1. 文件解压
unzip fbo_ggs_Linux_x64_Oracle_shiphome.zip -d /home/goldengate/
chown -R oracle:oinstall /home/goldengate/
  1. 环境变量
vim /home/oracle/.bash_profile
------------------------------
export OGG_HOME=/home/oracle/product/ogg_trg
export PATH=$OGG_HOME:$PATH
export LD_LIBRARY_PATH=$OGG_HOME:$LD_LIBRARY_PATH
------------------------------
source /home/oracle/.bash_profile
  1. 安装ogg-mamager
cd /home/goldengate/fbo_ggs_Linux_x64_Oracle_shiphome/Disk1
./runInstaller ## 也可以选择静默安装
alias ggsci="rlwrap /home/oracle/product/ogg_trg/ggsci"
[oracle@oracle-s ogg_trg]$ ggsci

Oracle GoldenGate Command Interpreter for Oracle
Version 19.1.0.0.4 OGGCORE_19.1.0.0.0_PLATFORMS_191017.1054_FBO
Linux, x64, 64bit (optimized), Oracle 11g on Oct 17 2019 23:13:12
Operating system character set identified as US-ASCII.

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

GGSCI (oracle-s) 1> info mgr

Manager is running (IP port TCP:oracle-s.7809, Process ID 25579).
  1. 创建用户和分配权限
cd
mkdir -p oradata/orcl
sqlplus / as sysdba
create tablespace OGG logging datafile '/home/oracle/oradata/orcl/OGG.DBF' size 20m autoextend on uniform size 2m;
create user ogg identified by ogg default tablespace OGG temporary tablespace TEMP quota unlimited on OGG;
grant unlimited tablespace to ogg;
grant dba to ogg;

3.4配置ogg

  1. 执行配置脚本(源端+目标端)
sqlplus / as sysdba ##--使用sysdba用户登录
@marker_setup ## -- 输入GoldenGate账户名ogg
@ddl_setup ## -- 输入GoldenGate账户名ogg
@role_setup ## -- 输入GoldenGate账户名ogg
grant ggs_ggsuser_role to ogg;
@ddl_enable
  1. Manager
    源端操作
ggsci
info mgr
edit param mgr

编辑内容如下

PORT 7839 ## 通信端口7839, 源端和目标端需要保持一致。
DYNAMICPORTLIST 7840-7939 ##动态端口列表的范围从7840到7939。当制定端口被占用或者出现通信故障,管理进程将会从列表中选择下一个端口尝试连接,避免通信端口的单点故障。
AUTOSTART EXTRACT * ##当MGR进程启动后启动EXTRACT进程
AUTORESTART EXTRACT *, RETRIES 5, WAITMINUTES 2 ##当EXTRACT进程中断后尝试自动重启,每隔2分钟尝试启动一次,尝试5次。
PURGEOLDEXTRACTS /home/oracle/product/ogg_src/dirdat/*, USECHECKPOINTS, MINKEEPDAYS 5 ##定期清理dirdat路径下的本地队列(local trail)。保留期限10天,过期后自动删除。从而控制队列文件的目录不会增长过大。
LAGREPORTHOURS 1 ##每隔一小时检查各进程延时情况,并记录到goldengate report文件。
LAGINFOMINUTES 30 ##进程复制延时超过30分钟,向日志文件记录一条错误日志
LAGCRITICALMINUTES 45 ## 传输延时超过45分钟将写入警告日志

目标端操作

ggsci
info mgr
edit param mgr
##编辑如下内容
PORT 7839 ## 通信端口7839, 源端和目标端需要保持一致。
USERID ogg, PASSWORD ogg ## GoldenGate用户登录数据库的用户名和密码,密码未做加密处理。如果密码需要加密使用:GGSCI (dbtrg) 1> encrypt password pwd ,ENCRYPTKEY default 可以得到加密后的密码字符串,之后配置进程若使用加密过的密码,需要带参数(ENCRYPTKEY default)。例如:USERID ogg, PASSWORD xxx(加密过的密码) ,ENCRYPTKEY default
DYNAMICPORTLIST 7840-7939 ## ##动态端口列表的范围从7840到7939。当制定端口被占用或者出现通信故障,管理进程将会从列表中选择下一个端口尝试连接,避免通信端口的单点故障。
AUTOSTART REPLICAT * ##当MGR进程启动后启动REPLICAT进程
AUTORESTART REPLICAT *, RETRIES 5, WAITMINUTES 2 ## 当REPLICAT进程中断后尝试自动重启,每隔2分钟尝试启动一次,尝试5次。
PURGEOLDEXTRACTS /home/oracle/product/ogg_trg/dirdat/*, USECHECKPOINTS, MINKEEPDAYS 10 ##定期清理dirdat路径下的本地队列(local trail)。保留期限10天,过期后自动删除。从而控制队列文件的目录不会增长过大。
PURGEDDLHISTORY MINKEEPDAYS 7, MAXKEEPDAYS 10 ##删除DDL历史表,最小保存7天,最大保存10天。
PURGEMARKERHISTORY MINKEEPDAYS 7, MAXKEEPDAYS 10 ## 删除MARKER历史表,最小保存7天,最大保存10天。
LAGREPORTHOURS 1 ##每隔一小时检查各进程延时情况,并记录到goldengate report文件。
LAGINFOMINUTES 30 ##进程复制延时超过30分钟,向日志文件记录一条错误日志
LAGCRITICALMINUTES 45 ##传输延时超过45分钟将写入警告日志

重启两端的mgr服务

ggsci
stop mgr
start mgr
info mgr
view param mgr
  1. 源端配置Extract

Extract 运行在源端或者根据系统和业务的需求可以同时运行在两端,抽取捕获系统变更统数据;它可以配置为
初始化数据加载(直接从数据源中加载静态的数据)

在某个时间点后源端与服务端变更数据同步(从在线日志或归档日志抽取捕获变更的数据),
它也可以在支持DDL变更的系统中抽取捕获DDL;
当配置为数据同步时,extract进程抽取捕获extract配置文件里配置的对象的任何DML和DDL(需要额外配置)的操作,extract进程记录这些操作,直到用户提交或回滚事务;
当收到回滚(rollback)时,extract撤销这些记录;
收到(commit)操作后,extract进程记录保存这些操作到一个或多个trail文件里并以队列的形式发送到目标端,以确保数据传输速度和数据的一致性。

ggsci
dblogin userid ogg, password ogg ##使用ogg用户登录GoldenGate
add extract ext1,tranlog,begin now ##创建主抽取进程
add exttrail /home/oracle/product/ogg_src/dirdat/sr, extract ext1 ##创建源端trail文件并指定路径
edit param ext1
##-----------------
extract ext1
SETENV(ORACLE_SID="orcl") ##设置Oracle数据库实例sid
SETENV(NLS_LANG=SIMPLIFIED CHINESE_CHINA.AL32UTF8) ##设置goldengate的字符集变量信息,此处值会覆盖操作系统级别的变量。该值需要和数据库字符集匹配一致。
userid ogg, password ogg
REPORTCOUNT EVERY 30 MINUTES, RATE ##每隔30分钟报告一次从程序开始到现在的抽取进程或者复制进程的事物记录数,并汇报进程的统计信息
DISCARDFILE /home/oracle/product/ogg_src/dirrpt/extsr.dsc, APPEND, MEGABYTES 1024 ##将执行失败的记录保存在discard file中,discard file文件记录了GoldenGate进程错误、数据库错误、GoldenGate操作等信息。该文件位于/home/oracle/product/ogg_src/dirrpt/extsr.dsc,大小为1024MB。 文件中已经包含记录的话,再后面继续追加,不删除之前的记录。
DISCARDROLLOVER AT 3:00 ## 为了防止discard file被写满,每天3:00做一次文件过期设定
EXTTRAIL /home/oracle/product/ogg_src/dirdat/sr ##队列文件路径, trail文件存放路径。
DYNAMICRESOLUTION ## 有时候开启OGG进程的时候较慢,可能是因为需要同步的表太多,OGG在开启进程之前会将需要同步的表建立一个记录并且存入到磁盘中,这样就需要耗费大量的时间。使用该参数来解决此问题。
ddl include all ##配置DDL语句也会同步
DBOPTIONS ALLOWUNUSEDCOLUMN ## 用于阻止抽取进程抽取数据时由于表含有unused列而导致进程异常终止(abend)。使用该参数,抽取进程抽取到unused列时也会向日志文件记录一条警告信息。
FETCHOPTIONS NOUSESNAPSHOT ## 默认值为 usesnapshot,表示利用数据库闪回读取数据。Nousesnapshot表示直接从原表读取相关数据。
FETCHOPTIONS FETCHPKUPDATECOLS ##当使用了HANDLECOLLISIONS时,请使用该参数。复制进程出现丢失update记录(missing update)并且更新的是主键,update将转换成insert。由于插入的记录可能不是完整的行,若要保证完整需要加入此参数
table ogg.*; ##需要复制的对象列表
##-----------------

配置投递进程(Data Pump)

配置了Data Pump,extract进程抽取捕获数据写入到trail,Data pump读取trail并且通过网络发送trail到目标端trail,data pump 加强了源端和目标端抽取捕获数据的可用性,
主要优点:
1.保护网络传输失败和目标端失败;
2.可以实现复杂的数据过滤和转换;
3.可以结合多个数据源到目标端;
4.可以同步一个源数据到多个目标端。

源端可以配置多个主抽取进程,也可以配置多个Data Pump进程,但必须为每个要同步的目标端配置一个Data Pump进程

add extract dpump1, exttrailsource /home/oracle/product/ogg_src/dirdat/sr
edit param dpump1

extract dpump1
userid ogg, password ogg
SETENV(ORACLE_SID="orcl")
SETENV(NLS_LANG=SIMPLIFIED CHINESE_CHINA.AL32UTF8)
RMTHOST 192.168.66.3, mgrport 7839, COMPRESS ## 目标端主机IP,管理进程端口号,投递前压缩队列文件
PASSTHRU ##表示传输进程直接跟抽取进程交互,而不再和数据库进行交互,减少数据库资源的利用。
ddl include all
RMTTRAIL /home/oracle/product/ogg_trg/dirdat/tr ##目标端保存队列文件的目录
DYNAMICRESOLUTION ##动态解析表名
table ogg.*;
##指定Data Pump进程发送trail文件到目标端的位置(目标端trail文件添加到队列中)
add rmttrail /home/oracle/product/ogg_trg/dirdat/tr, extract dpump1
  1. 目标端配置Replicat

Checkpoint 存储从文件读取和写入的检测点位置,用于还原和恢复数据,Checkpoint确保发生变化并提交 (commit) 的数据被extract抽取捕获和被replicat进程应用到目标端;
保证在系统、网络或者GoldenGate需要重启进程时发生的错误不会导致数据丢失;在复杂的同步配置中checkpoints启用多个extract和replicat进程从同一个trail集中读取数据。

ggsci
dblogin userid ogg, password ogg
add checkpointtable ogg.checkpoints
edit param ./GLOBALS
#------------------
GGSCHEMA ogg
CHECKPOINTTABLE ogg.checkpoints
#------------------

##创建replicat进程
add replicat rep1, exttrail /home/oracle/product/ogg_trg/dirdat/tr, checkpointtable ogg.checkpoints
edit param rep1
#------------------
REPLICAT rep1
SETENV(ORACLE_SID="orcl")
SETENV(NLS_LANG=SIMPLIFIED CHINESE_CHINA.AL32UTF8)
USERID ogg, PASSWORD ogg
REPORT AT 06:00 ##每天06:00定期生成一个report文件
REPORTCOUNT EVERY 30 MINUTES, RATE ##每隔30分钟报告一次从程序开始到现在的抽取进程或者复制进程的事物记录数,并汇报进程的统计信息
REPORTROLLOVER AT 02:00 ##为了防止report file被写满,每天2:00做一次文件过期设定
REPERROR DEFAULT, ABEND ## 除了特殊指定的REPERROR语句,报告所有复制期间出现的错误,回滚非正常中断的事物和进程。遇到不能处理的错误就自动abend,启动需要人工干预处理
ALLOWNOOPUPDATES ##当源表有排除列情况或者有目标表不存在的列时,当更新这列goldengate默认报错。应用该参数后,即可让goldengate生成一条警告信息而不是报错。
ASSUMETARGETDEFS ##使用ASSUMETARGETDEFS参数时,用MAP语句中指定的生产库源表和灾备端目标表具有相同的列结构。它指示的Oracle GoldenGate不在生产端查找源表的结构定义。
HANDLECOLLISIONS ##用于goldengate自动过滤不能出来的冲突记录,为了严格保证数据一致性
DISCARDFILE /home/oracle/product/ogg_trg/dirrpt/repsa.dsc, APPEND, MEGABYTES 1024 ##将执行失败的记录保存在discard file中,discard file文件记录了GoldenGate进程错误、数据库错误、GoldenGate操作等信息。该文件位于./dirrpt/repsa.dsc,大小为1024MB。 文件中已经包含记录的话,再后面继续追加,不删除之前的记录。
DISCARDROLLOVER AT 02:00 ##为了防止discard file被写满,每天2:00做一次文件过期设定
ddl include all ##设置DDL语句也会同步
ddlerror default ignore retryop ##开启DDL复制后,目标端Replicat进程参数文件中必须配置忽略或者过滤DDLERROR的参数
MAP ogg.*, target ogg.*; ##对应需要复制的对象,默认一一对应传输进程
#------------------
  1. 初始化

同步历史数据,OGG只能同步增量

当前场景,先启动源端服务,再初始化数据,最后启动目标端服务

ggsci
start mgr
start ext1
start dpump1
info all
## 报错查看日志/home/oracle/product/ogg_src/ggserr.log
##使用数据泵之前,需要创建一个存放文件的目录。 这个目录要写入Oracle的数据字典中才能识别。
mkdir /home/oracle/backup
SQL> select * from dba_directories; ##查看
SQL> drop directory backup; ## 删除
SQL> create directory backup as '/home/oracle/backup'; ##创建
##我这里是使用sys用户来进行操作的。 如果是其他用户,那么就需要对这个用户进行赋权。
grant create any directory to system;
select * from dba_sys_privs where grantee='SYSTEM';
##如果是其他用户使用sys创建的目录,也需要进行赋权,如:
SQL> grant read,write on directory backup to SYSTEM;
[oracle@oracle-m dpdump]$ sqlplus / as sysdba
SQL> Select current_scn from v$database; ##scn
CURRENT_SCN
-----------
2079927
##开始导出数据--参考
expdp \" / as sysdba \" directory=backup full=y dumpfile=fullexp.dmp logfile=fullexp.log parallel=2;## 不指定job的导出全库
expdp \" / as sysdba \" directory=backup full=y dumpfile=fullexp3.dmp logfile=fullexp3.log parallel=2 job_name=daveJob;## 指定job的导出全库
expdp \" / as sysdba \" directory=backup dumpfile=tbs.dmp logfile=tbs.log tablespaces=ogg; ##导出表空间
expdp \" / as sysdba \" directory=backup dumpfile=user.dmp logfile=user.log schemas=ogg; ##导出用户
expdp \" / as sysdba \" directory=backup dumpfile=table.dmp logfile=table.log tables=ogg.togg,ogg.GGS_SETUP; ## 导出表,这里必须是同一个schema下的表.或者这样 expdp ogg/ogg directory=backup dumpfile=table.dmp logfile=table.log tables=togg, GGS_SETUP;
expdp system/Lczy_2022 directory=backup dumpfile=tablespace.dmp tablespaces=ywtest FLASHBACK_SCN=2079927; ## 按照scn导出
##开始导入数据--参考
impdp \" / as sysdba \" directory=backup full=y dumpfile=fullexp3.dmp logfile=fullexp3.log parallel=2 job_name=daveJob table_exists_action=replace;## 导入 全库

impdp ogg/ogg directory=backup dumpfile=table.dmp logfile=table.log tables=ogg.togg,ogg.GGS_SETUP;## 导入 表

impdp \" / as sysdba \" directory=backup dumpfile=user.dmp logfile=user.log schemas=ogg,ywtest table_exists_action=replace; ## 导入 用户

impdp \" / as sysdba \" directory=backup dumpfile=tbs.dmp logfile=tbs.log tablespaces=ogg,ywtest table_exists_action=replace; ## 导入表空间
##跨用户导入
expdp \" / as sysdba \" directory=backup dumpfile=user.dmp logfile=user.log schemas=ogg;## ogg用户导出
impdp /'/ as sysdba/' directory=backup dumpfile=user.dmp logfile=user.log remap_schema=ogg:ywtest;## 导入到ywtest用户

效果如下
```bash
[oracle@oracle-m backup]$ expdp \" / as sysdba \" directory=backup dumpfile=tbs.dmp logfile=tbs.log tablespaces=ogg;

Export: Release 11.2.0.4.0 - Production on 星期五 3月 11 12:08:17 2022

Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
自动启用 FLASHBACK 以保持数据库完整性。
启动 "SYS"."SYS_EXPORT_TABLESPACE_01": "/******** AS SYSDBA" directory=backup dumpfile=tbs.dmp logfile=tbs.log tablespaces=ogg
正在使用 BLOCKS 方法进行估计...
处理对象类型 TABLE_EXPORT/TABLE/TABLE_DATA
使用 BLOCKS 方法的总估计: 10 MB
处理对象类型 TABLE_EXPORT/TABLE/TABLE
处理对象类型 TABLE_EXPORT/TABLE/GRANT/OWNER_GRANT/OBJECT_GRANT
处理对象类型 TABLE_EXPORT/TABLE/INDEX/INDEX
处理对象类型 TABLE_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
处理对象类型 TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
处理对象类型 TABLE_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
. . 导出了 "OGG"."GGS_DDL_HIST" 884.7 KB 446 行
. . 导出了 "OGG"."GGS_DDL_HIST_ALT" 7.007 KB 37 行
. . 导出了 "OGG"."GGS_MARKER" 313.7 KB 276 行
. . 导出了 "OGG"."GGS_SETUP" 5.625 KB 8 行
. . 导出了 "OGG"."TOGG" 10.39 KB 107 行
. . 导出了 "OGG"."GGS_DDL_COLUMNS" 0 KB 0 行
. . 导出了 "OGG"."GGS_DDL_LOG_GROUPS" 0 KB 0 行
. . 导出了 "OGG"."GGS_DDL_OBJECTS" 0 KB 0 行
. . 导出了 "OGG"."GGS_DDL_PARTITIONS" 0 KB 0 行
. . 导出了 "OGG"."GGS_DDL_PRIMARY_KEYS" 0 KB 0 行
. . 导出了 "OGG"."GGS_DDL_RULES" 0 KB 0 行
. . 导出了 "OGG"."GGS_DDL_RULES_LOG" 0 KB 0 行
已成功加载/卸载了主表 "SYS"."SYS_EXPORT_TABLESPACE_01"
******************************************************************************
SYS.SYS_EXPORT_TABLESPACE_01 的转储文件集为:
/home/oracle/backup/tbs.dmp
作业 "SYS"."SYS_EXPORT_TABLESPACE_01" 已于 星期五 3月 11 12:08:44 2022 elapsed 0 00:00:23 成功完成

实际操作--

SQL> Select current_scn from v$database;

CURRENT_SCN
-----------
2105420
##exit 退出sql
[oracle@oracle-m backup]$ expdp system/Lczy_2022 directory=backup dumpfile=tablespace.dmp tablespaces=ywtest FLASHBACK_SCN=2105420;

Export: Release 11.2.0.4.0 - Production on 星期五 3月 11 14:57:29 2022

Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
启动 "SYSTEM"."SYS_EXPORT_TABLESPACE_01": system/******** directory=backup dumpfile=tablespace.dmp tablespaces=ywtest FLASHBACK_SCN=2105420
正在使用 BLOCKS 方法进行估计...
处理对象类型 TABLE_EXPORT/TABLE/TABLE_DATA
使用 BLOCKS 方法的总估计: 64 KB
处理对象类型 TABLE_EXPORT/TABLE/TABLE
. . 导出了 "YWTEST"."STUDENT" 13.75 KB 6 行
已成功加载/卸载了主表 "SYSTEM"."SYS_EXPORT_TABLESPACE_01"
******************************************************************************
SYSTEM.SYS_EXPORT_TABLESPACE_01 的转储文件集为:
/home/oracle/backup/tablespace.dmp
作业 "SYSTEM"."SYS_EXPORT_TABLESPACE_01" 已于 星期五 3月 11 14:57:33 2022 elapsed 0 00:00:03 成功完成

##拷贝文件到目标库,导入数据,查看数据,启动rep1,再次查看数据
[oracle@oracle-m backup]$ scp -rp tablespace.dmp oracle@192.168.66.3:/home/oracle/backup/
oracle@192.168.66.3's password: ## oracle
tablespace.dmp 100% 116KB 5.1MB/s 00:00
[oracle@oracle-s ~]$ ll backup/ ##目标库 注意权限用户组问题
total 116
-rw-r-----. 1 oracle dba 118784 Mar 11 14:57 tablespace.dmp

####目标端配置

SQL> drop user ywtest cascade;
SQL> DROP TABLESPACE ywtest INCLUDING CONTENTS AND DATAFILES;
SQL> create tablespace ywtest datafile '/app/oracle/ywtest.dbf' size 50m autoextend on next 5m ;
SQL> create user ywtest identified by ywtest default tablespace ywtest;
SQL> grant dba to ywtest;
SQL> grant read,write on directory backup to ywtest;
[oracle@oracle-s ~]$ impdp \" / as sysdba \" directory=backup dumpfile=tablespace.dmp logfile=tablespace.log tablespaces=ywtest table_exists_action=replace;
##查看数据一致

这里新增一下:添加额外的表进行同步的配置

ggsci
dblogin userid ogg, password ogg
add schematrandata ywtest
##配置ext1、dpump1、rep1中新增所需要的用户,以次类推,需要多个用户同步就增加多句话
edit param ext1 ##--源端
table ywtest.*;

edit param dpump1 ##--源端
table ywtest.*;

edit param rep1 ##--目标端
MAP ywtest.*, target ywtest.*;
  1. 启动
##源端重启ext dpump
ggsci
info all
stop ext1
stop dpump1
start dpump1
start ext1
##目标端
start rep1, aftercsn 2105420

4.测试同步

再sqlplus中,提交事务 commit
或者直接可视化工具中做修改,查看同步情况。

5.配置

  1. 数据库创建ogg用户权限
#创建数据库ogg用户
SQL>CREATE USER ogg IDENTIFIED BY ogg DEFAULT TABLESPACE USERS ;
#授权ogg用户,如果对用户权限要求不严格可以直接授予dba权限,否则授予如下权限
#源端:
GRANT CONNECT TO goldengate;
GRANT CREATE SESSION TO goldengate;
GRANT ALTER SESSION TO goldengate;
GRANT RESOURCE TO goldengate;
GRANT SELECT ANY DICTIONARY TO goldengate;
GRANT SELECT ANY TABLE TO goldengate;
GRANT FLASHBACK ANY TABLE TO goldengate;
GRANT ALTER ANY TABLE TO goldengate;

#目标端:
GRANT ALTER SESSION TO goldengate;
GRANT CREATE SESSION TO goldengate;
GRANT CONNECT TO goldengate;
GRANT RESOURCE TO goldengate;
GRANT SELECT ANY DICTIONARY TO goldengate;
GRANT SELECT ANY TABLE TO goldengate;
GRANT FLASHBACK ANY TABLE TO goldengate;
GRANT INSERT ANY TABLE TO goldengate;
GRANT UPDATE ANY TABLE TO goldengate;
GRANT DELETE ANY TABLE TO goldengate;

6.其它场景

最后还有一些场景会遇到。

没有数据需要初始化

  • 这种情况的启动顺序:
  • 保持mgr正常运行
  • 启动目标端replicat进程
  • 启动源端启动ext dpump

新增表、表空间、用户需要同步

关于附加日志

7.开机启动

目标端

cd /home/oracle/product/ogg_trg ##进入到goldengate目标端根目录中 oracle用户执行
touch info.txt ##创建文件 oracle用户执行
vim info.txt ##编辑此文件 oracle用户执行
#-----------
sh date
start mgr
#-----------

chmod +x info.txt ##增加可执行权限 oracle用户执行
touch startmgr.sh ##创建文件 oracle用户执行
vim startmgr.sh ##编辑此文件 oracle用户执行
#-----------
/home/oracle/product/ogg_trg/ggsci paramfile /home/oracle/product/ogg_trg/info.txt >> /home/oracle/product/ogg_trg/ggstartoutput.log
#-----------
chmod +x startmgr.sh ##增加可执行权限 oracle用户执行
####切换到root命令行
vim /etc/rc.local
su - oracle -c "/home/oracle/product/ogg_trg/startmgr.sh"
chmod +x /etc/rc.local

效果展示

[oracle@oracle-s ogg_trg]$ touch startmgr.sh
[oracle@oracle-s ogg_trg]$ vim startmgr.sh
[oracle@oracle-s ogg_trg]$ chmod +x startmgr.sh
[oracle@oracle-s ogg_trg]$ /home/oracle/product/ogg_trg/startmgr.sh
[oracle@oracle-s ogg_trg]$ cat ggstartoutput.log
Oracle GoldenGate Command Interpreter for Oracle
Version 19.1.0.0.4 OGGCORE_19.1.0.0.0_PLATFORMS_191017.1054_FBO
Linux, x64, 64bit (optimized), Oracle 11g on Oct 17 2019 23:13:12
Operating system character set identified as US-ASCII.
Copyright (C) 1995, 2019, Oracle and/or its affiliates. All rights reserved.
GGSCI (oracle-s) 1> sh date
Mon Mar 7 18:16:47 CST 2022
GGSCI (oracle-s) 2> start mgr
MGR is already running.
GGSCI (oracle-s) 3>

源端

cd /home/oracle/product/ogg_src/
vim info.txt
#-----------
sh date
start mgr
#-----------
chmod +x info.txt
touch startmgr.sh
vim startmgr.sh
#-----------
/home/oracle/product/ogg_src/ggsci paramfile /home/oracle/product/ogg_src/info.txt >> /home/oracle/product/ogg_src/ggstartoutput.log
#-----------
chmod +x startmgr.sh
###切换到root命令行
vim /etc/rc.local
su - oracle -c "/home/oracle/product/ogg_src/startmgr.sh"
chmod +x /etc/rc.local

——————————————END————————————————————