OGG19 Oracle之间的同步(经典架构)

文章内容仅供参考

环境

概况

源端

目标端

OS

Oracle Linux 7.4

kernal

4.1.12-94.3.9.el7uek.x86_64

数据库版本

Oracle19c

OGG版本

OGG 19.1.0 for Oracle

OGG安装目录

/u01/app/ogg/gg

OGG管理员名称(数据库)

C##GGADMIN

OGG目录及权限

oracle:oinstall

主机名

src.e.cc

dest.e.cc

ip地址

10.0.0.131

10.0.0.141

数据库名

CDB: SRC   PDB: P1

CDB: DEST   PDB: P1

要同步的表

P1.TOM.T1

P1.Jerry.T1

数据

源端

TOM用户T1表有五条数据, C1列是主键

目标端

Jerry用户T1表没有数据,只有表结构。

配置好OS和数据库

两端都要配:

环境变量:

vi .bash_profile
#添加
export OGG_HOME=/u01/app/ogg/gg
export PATH=$OGG_HOME:$PATH
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$OGG_HOME:$LD_LIBRARY_PATH

修改数据库:

alter database force logging;
alter database add supplemental log data;
alter system switch logfile;
alter system set enable_goldengate_replication=true;
alter system set undo_management=auto scope=spfile;
-- 重启数据库

创建ogg管理员用户(CDB)

create user C##GGADMIN identified by pwd account unlock container=all;

授予权限:

grant unlimited tablespace to C##GGADMIN container=all;

grant create session, resource, unlimited tablespace to C##GGADMIN container=all;

grant alter system, alter user, restricted session, create sequence to C##GGADMIN container=all;

grant select any dictionary, select any transaction to C##GGADMIN container=all;

grant select any table, lock any table, insert any table, update any table to C##GGADMIN container=all;

grant create any table,alter any table,drop any table,flashback any table to C##GGADMIN container=all;

grant execute on utl_file to C##GGADMIN container=all;

grant dba to C##GGADMIN container=all;
begin
dbms_goldengate_auth.grant_admin_privilege(
grantee => 'C##GGADMIN',
privilege_type => '*',
grant_select_privileges => true,
do_grants => true,
grant_optional_privileges => '*',
container => 'all'); 
end;
/

-- privilege_type有三个值:capture, apply, *

 源端可以指定为captrue

目标端可以指定为apply

嫌麻烦就直接*

源端

创建需要用到的目录:

mkdir -p $OGG_HOME/dirdat/E_TJ_T1
mkdir -p $OGG_HOME/dirrpt/E_TJ_T1
mkdir -p $OGG_HOME/dirdat/P_TJ_T1
mkdir -p $OGG_HOME/dirrpt/P_TJ_T1

一定要仔细检查目录名,不能用丝毫的错误

创建ogg专用专属表空间:

--(CDB) 
create tablespace ggtbs datafile '/u01/app/oracle/oradata/SRC/ggtbs.dbf' size 50M autoextend on;
alter session set container=P1;
--(PDB) 
create tablespace ggtbs datafile '/u01/app/oracle/oradata/SRC/P1/ggtbs.dbf' size 50M autoextend on;

更改C##GGADMIN用户默认表空间

alter session set container=CDB$ROOT;
alter user C##GGADMIN default tablespace ggtbs;

目标端

创建需要用到的目录:

mkdir -p $OGG_HOME/dirdat/R_TJ_T1
mkdir -p $OGG_HOME/dirrpt/R_TJ_T1

创建ogg专用专属表空间:

--(CDB) 
create tablespace ggtbs datafile '/u01/app/oracle/oradata/DEST/ggtbs.dbf' size 50M autoextend on;
alter session set container=P1;
--(PDB) 
create tablespace ggtbs datafile '/u01/app/oracle/oradata/DEST/P1/ggtbs.dbf' size 50M autoextend on;

更改C##GGADMIN用户默认表空间

alter session set container=CDB$ROOT;
alter user C##GGADMIN default tablespace ggtbs;

准备OGG

一定要进到$OGG_HOME目录下操作(以免出错)

源端

别名

#设置一个别名oggadmin, 避免使用明文密码
ggsci > add credentialstore
ggsci > alter credentialstore add user C##GGADMIN@SRC , password pwd , alias oggadmin

#credentialstore存放在$OGG_HOME/dircrd下
#登录
ggsci > dblogin useridalias oggadmin

mgr进程

ggsci > edit params mgr
#内容如下:(删除这个注释)
port 7809
autostart er *
autorestart er *,waitminutes 3,retries 10
purgeoldextracts ./dirdat/*,usecheckpoints,minkeepdays 7

checkpoint table

注意: 这个GLOBALS要建在$OGG_HOME下(OGG安装目录)

ggsci > edit params ./GLOBALS
checkpointtable P1.C##GGADMIN.ckptt
ggsci > add checkpointtable P1.C##GGADMIN.ckptt

目标端

与源端基本一致

到$OGG_HOME目录下操作(以免出错)

别名

#设置一个别名oggadmin, 尽量避免使用明文密码
ggsci > add credentialstore
ggsci > alter credentialstore add user C##GGADMIN@DEST , password pwd , alias oggadmin
ggsci > alter credentialstore add user C##GGADMIN@P1, password pwd , alias ogg_p1_apply

#credentialstore存放在$OGG_HOME/dircrd下

 登录

ggsci > dblogin useridalias oggadmin

mgr进程

ggsci > edit params mgr
#内容如下:(删除这个注释)
port 7809
autostart er *
autorestart er *,waitminutes 3,retries 10
purgeoldextracts ./dirdat/*,usecheckpoints,minkeepdays 7

checkpoint table

注意: 这个GLOBALS要建在$OGG_HOME下(OGG安装目录)

ggsci > edit params ./GLOBALS
checkpointtable P1.C##GGADMIN.ckptt
ggsci > add checkpointtable P1.C##GGADMIN.ckptt

初始化数据

源端

创建需要用到的目录

mkdir -p $OGG_HOME/dirdat/i_TJ_T1

extract进程

到$OGG_HOME目录下操作(以免出错)

ggsci > edit params ie_TJ_T1
#内容如下:(删除这个注释)
extract ie_TJ_T1
useridalias oggadmin
rmthost 10.0.0.141,mgrport 7809
rmtfile ./dirdat/i_TJ_T1/init.dat,purge
table P1.TOM.T1;

 初始化数据要用到sourceistable这个参数:

ggsci > add extract ie_TJ_T1,sourceistable
ggsci > register extract e_TJ_T1 database container(P1)

先不要启动

目标端

创建需要用到的目录

mkdir -p $OGG_HOME/dirdat/i_TJ_T1

replicat进程

初始化数据时, 目标端要用到specialrun参数, 并且一定要写在第一行

ggsci > edit params ir_TJ_T1
#内容如下:(删除这个注释)
specialrun
replicat ir_TJ_T1
useridalias ogg_p1_apply
handlecollisions
extfile ./dirdat/i_TJ_T1/init.dat
table P1.TOM.T1, target P1.Jerry.T1;
ggsci > add replicat ir_TJ_T1 exttrail ./dirdat/i_TJ_T1/re, specialrun

启动

先在源端启动:

ggsci > start ie_TJ_T1

然后在目标端启动:

ggsci > start ir_TJ_T1

配置同步(重点来了)

源端

创建需要用到的目录

mkdir -p $OGG_HOME/dirdat/e_TJ_T1
mkdir -p $OGG_HOME/dirrpt/e_TJ_T1
mkdir -p $OGG_HOME/dirdat/r_TJ_T1
mkdir -p $OGG_HOME/dirrpt/r_TJ_T1

一定要仔细检查, 不能有丝毫差错

到$OGG_HOME目录下操作(以免出错)

add trandata

格式:

ggsci > add schematrandata PDB.schema

ggsci > add trandata PDB.schema.table
ggsci > add trandata P1.TOM.T1

extract进程

ggsci > edit params e_TJ_T1
#内容如下:(删除这个注释)
extract e_TJ_T1
useridalias oggadmin
exttrail ./dirdat/e_TJ_T1/ex
warnlongtrans 12h,checkinterval 30m
discardfile ./dirrpt/e_TJ_T1.dsc,append,megabytes 200
TABLE P1.TOM.T1;
ggsci > add extract e_TJ_T1,integrated tranlog,begin now
ggsci > add exttrail ./dirdat/e_TJ_T1/ex,extract e_TJ_T1,megabytes 200
ggsci > dblogin useridalias oggadmin
ggsci > register extract e_TJ_T1 database container(P1)

pump进程

ggsci > edit params p_TJ_T1
extract p_TJ_T1
useridalias oggadmin
PASSTHRU
RMTHOST 10.0.0.141,MGRPORT 7809
rmttrail ./dirdat/r_TJ_T1/re
discardfile ./dirrpt/r_TJ_T1.dsc,append,megabytes 200
TABLE P1.TOM.T1;
ggsci > add extract p_TJ_T1,exttrailsource ./dirdat/e_TJ_T1/ex
ggsci > add rmttrail ./dirdat/r_TJ_T1/re,extract p_TJ_T1,megabytes 200

先不要启动

目标端

创建需要用到的目录

mkdir -p $OGG_HOME/dirdat/r_TJ_T1
mkdir -p $OGG_HOME/dirrpt/r_TJ_T1

replicat进程

ggsci > edit params r_TJ_T1
#内容如下:(删除这个注释)
replicat r_TJ_T1
useridalias ogg_p1_apply
handlecollisions
assumetargetdefs
discardfile ./dirrpt/r_TJ_T1.dsc,append,megabytes 200
map P1.TOM.T1,target P1.Jerry.T1;
ggsci > add replicat r_TJ_T1 exttrail ./dirdat/r_TJ_T1/re,checkpointtable P1.C##GGADMIN.ckptt

先在目标端启动replicat进程

ggsci > dblogin useridalias oggadmin

ggsci > start r_TJ_T1

源端启动pump和extract进程

ggsci > start p_TJ_T1
ggsci > start e_TJ_T1

DDL应用

marker_setup.sql

这个脚本在$OGG_HOME目录下

源端目标端都执行一下即可:

 源端extract进程:

ggsci > edit params e_TJ_T1
#添加以下两行
DDL include all
ddloptions addtrandata,report

目标端replicat进程:

ggsci > edit params r_TJ_T1
#添加以下两行
DDL include all
ddlerror default ignore retryop

启动及查看命令

查看(例)

info all

info e_TJ_T1

info e_TJ_T1 detail

view report e_TJ_T1

启动()

start manager

start e_TJ_T1

关闭()

stop manager

stop e_TJ_T1

添加/删除

add / delete

<think>好的,我现在需要帮助用户了解如何使用OGGOracle数据库实时同步数据,特别是配置教程和最佳实践。首先,我需要回忆一下OGG的基本概念和配置步骤。OGGOracle GoldenGate的缩写,主要用于实时数据复制和同步。用户可能想将数据从Oracle同步到另一个数据库,比如PostgreSQL,如引用[1]提到的。 接下来,我应该按照配置流程来组织回答。首先,确保源和目标数据库满足要求,比如版本兼容性、归档模式和补充日志,这些在引用[4]中提到了强制日志和表的logging属性。然后,安装OGG软件,分别在源和目标端进行。创建必要的用户和权限,可能需要引用[2]中的注册extract的命令。 配置管理进程是重要的一步,包括源端的Extract进程、传输进程和目标端的Replicat进程。需要给出示例参数文件,如EXTRACT、PUMP和REPLICAT的配置,使用正确的语法,如EXTRACT EXT_KAF1,这对应引用[2]中的注册命令。同时,路径和端口号需要用户根据实际情况修改。 启动进程和监控部分,需要指导用户如何启动各个进程,并使用info命令检查状态。验证数据同步时,可以建议用户插入测试数据并检查目标端,确保同步成功。最佳实践部分,需要强调日志管理、网络稳定性、定期监控和性能优化,这些都是引用[4]中提到的要点,比如检查表的logging属性和确认nologging操作。 最后,生成相关问题,可能涉及冲突处理、数据过滤、高可用方案以及与其他工具的对比,这些是用户可能进一步关心的问题。同时,确保引用正确,每个引用标识对应到用户提供的参考资料,比如引用[1]到[4]。 需要注意的是,用户提供的引用中有一些不相关的内容,比如快速排序的Python代码,但用户的问题是关于OGG同步的,所以应忽略无关部分。同时,确保所有技术术语和步骤描述准确,避免错误。例如,补充日志必须开启,否则OGG无法捕获数据变更。另外,参数文件中的主机名和端口需要替换为用户实际使用的值,避免直接复制示例中的内容导致配置失败。 可能还需要提醒用户关于字符集兼容性、时间戳格式等问题,这些在异构数据库同步中常见。但用户的问题可能更关注基础配置,所以先覆盖主要步骤,细节可以在相关问题中展开。总之,回答需要结构清晰,步骤明确,引用正确,并给出进一步的问题引导用户深入探索。</think>### 使用OGG实时同步Oracle数据的配置教程 #### 1. **环境准备** - **源端(Oracle)要求**: - 开启归档模式:`ALTER DATABASE ARCHIVELOG;` - 启用补充日志:`ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;` - 确保需要同步的表开启`LOGGING`属性(若仅同步部分表)[^4]。 - **目标端(如PostgreSQL)要求**: - 安装兼容的OGG版本,配置数据库连接参数。 - 创建与源表结构一致的目标表(OGG支持自动映射,但建议手动验证)。 #### 2. **OGG软件安装** - **源端安装**: ```bash # 解压安装包并运行安装程序 ./ggsci CREATE SUBDIRS ``` - **目标端安装**: 类似源端步骤,确保`ggsci`命令行工具可用。 #### 3. **配置用户权限** - 在Oracle中创建OGG管理用户并授权: ```sql CREATE USER ogg_admin IDENTIFIED BY password; GRANT CONNECT, RESOURCE, DBA TO ogg_admin; GRANT EXECUTE ON UTL_FILE TO ogg_admin; ``` #### 4. **配置管理进程** - **源端配置Extract进程**: ```bash GGSCI> ADD EXTRACT EXT_KAF1, TRANLOG, BEGIN NOW GGSCI> ADD EXTTRAIL /ogg/dirdat/ka, EXTRACT EXT_KAF1 ``` 编辑参数文件`dirprm/EXT_KAF1.prm`: ```properties EXTRACT EXT_KAF1 USERID ogg_admin, PASSWORD password EXTTRAIL /ogg/dirdat/ka TABLE schema_name.table_name; ``` - **配置传输进程(Pump)**: ```bash GGSCI> ADD EXTRACT PUMP_KAF1, EXTTRAILSOURCE /ogg/dirdat/ka GGSCI> ADD RMTTRAIL /ogg/rmttrail/ka, EXTRACT PUMP_KAF1 ``` 参数文件`PUMP_KAF1.prm`: ```properties EXTRACT PUMP_KAF1 RMTHOST target_host, PORT 7809 RMTTRAIL /ogg/rmttrail/ka TABLE schema_name.table_name; ``` - **目标端配置Replicat进程**: ```bash GGSCI> ADD REPLICAT REP_KAF1, EXTTRAIL /ogg/rmttrail/ka ``` 参数文件`REP_KAF1.prm`: ```properties REPLICAT REP_KAF1 TARGETDB pg_db, USERID pg_user, PASSWORD pg_pwd MAP schema_name.table_name, TARGET schema_name.table_name; ``` #### 5. **启动进程与验证** - **启动源端进程**: ```bash GGSCI> START EXTRACT EXT_KAF1 GGSCI> START EXTRACT PUMP_KAF1 ``` - **启动目标端进程**: ```bash GGSCI> START REPLICAT REP_KAF1 ``` - **验证同步**: - 在Oracle插入测试数据: ```sql INSERT INTO table_name VALUES (...); COMMIT; ``` - 在目标端查询是否同步成功。 #### 6. **最佳实践** - **日志管理**: - 定期清理过时的Trail文件,避免磁盘空间不足。 - 使用`ALTER EXTRACT EXT_KAF1, ROLLOVER`强制切换Trail文件。 - **网络优化**: - 使用压缩传输参数(如`COMPRESS`)减少带宽占用。 - **容灾设计**: - 配置Checkpoint表:`ADD CHECKPOINTTABLE ogg_admin.checkpoint_table;` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

牧童童童

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值