百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 优雅编程 > 正文

Oracle OGG 单向DML同步(ogg同步oracle数据到kafka)

sinye56 2024-10-10 10:55 2 浏览 0 评论

介绍

本文介绍OGG单向dml复制,先从数据初始化开始,然后配置实时同步!数据库和OGG的安装过程略!

初始化数据有很多方法,这里介绍用ogg来初始化,所以创建了T1表!

实时同步使用源端EXTRACT进程捕捉增量数据,存到源端trail文件中,然后使用源端pump进程读取EXTRACT的trail文件并投递到目标端的replicat进程的trail文件中。


服务器

操作系统版本

数据库版本

OGG版本

源端

192.168.141.100

CentOS6.8

11.2.0.4

12.2.0.1

目标端

192.168.141.105

CentOS6.8

11.2.0.4

12.2.0.1

数据库配置

1.源端和目标端数据库需要运行在归档模式,开启最小数据库附加日志,开启force_logging(可选)

alter database archivelog; (需要数据库在mount状态执行)

alter database force logging;

alter database add supplemental log data;

注意:

需要配置参数ENABLE_GOLDENGATE_REPLICATION否则后面会遇到报错:

ERROR OGG-02091 Operation not supported because enable_goldengate_replication is not set to true.

ALTER SYSTEM SET ENABLE_GOLDENGATE_REPLICATION = TRUE SCOPE=BOTH;

2.创建OGG用户和单独表空间(源端和目标端都需要)

create tablespace ts_ogg datafile '/u01/app/oracle/oradata/tdb01/ts_ogg01.dbf' size 200M AUTOEXTEND on extent management local segment space management auto;

create user ggusr identified by ggusr default tablespace ts_ogg;

为了方便直接给予DBA权限:

grant resource,connect,dba to ggusr;

3.测试用户和表准备(源端目标端都需要)

这里直接使用scott用户来做测试:

alter user scott identified by scott account unlock;

grant select_catalog_role to scott;

源端:使用 sys用户在scott下面创建表,因为DBA_OBJECTS表scott无法访问

create table scott.t1 as select * FROM DBA_OBJECTS;

ALTER TABLE scott.t1 ADD constraint pk_t1 primary key(object_id);

目标端:只需要创建表结构

create table scott.t1 as select * FROM DBA_OBJECTS where 1=2;

ALTER TABLE scott.t1 ADD constraint pk_t1 primary key(object_id);

4.配置TNS

源端:

目标端:

OGG MGR进程配置

源端和目标端都要配置MGR管理进程

GGSCI (oracle01) 1>EDIT PARAMS mgr

PORT 7809 ---手动编辑输入

GGSCI (oracle01) 3> view params mgr -查看

PORT 7809

其他命令:

-- info all 查看进程信息

-- start mgr 启动mgr进程

-- info mgr 查看mgr进程信息

-- view report mgr 查看mgr的报告

配置完成后,将源端和目标端的mgr进程都启动

start mgr

OGG数据初始化

在做实时同步之前,需要将源端和目标端的表(t1)中的数据进行同步,同步的方式有很多(数据泵,dblink,ogg等),这里介绍通过ogg来同步表数据,直接从源库同步数据到目标库(direct load),不生成trail文件。

1.在源端添加 extract 进程

GGSCI (oracle01) 1> ADD EXTRACT initab,SOURCEISTABLE

查看相关信息:

info initab,task

info initab,showch

编辑参数:

GGSCI (oracle01) 4> EDIT PARAMS initab


extract initab

setenv (ORACLE_SID=tdb01)

setenv (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)

userid ggusr,password ggusr

rmthost 192.168.141.105,mgrport 7809

rmttask replicat,group scott1 --- scott1 为目标端replicat进程名称(红色字体使用时需要去掉)

table scott.t1;

GGSCI (oracle01) 6> view params initab -----查看参数

2.在目标端添加replicat进程

GGSCI (oracle02) 2> add replicat scott1,specialrun ---specialrun 只运行一次

编辑参数rinig1 --名字可以随便取,但是必须和上面同意

GGSCI (oracle02) 3> EDIT PARAMS scott1

replicat scott1

setenv (ORACLE_SID=tdb02)

setenv (ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1)

setenv (NLS_LANG=AMERICAN_AMERICA.ZHS16GBK)

assumetargetdefs

userid ggusr,password ggusr

discardfile ./dirrpt/rinig1.dsc,purge

map scott.*,target scott.*;

GGSCI (oracle02) 4> view params scott1 ---查看参数

3.开始初始化数据

源端:

启动extract进程 并查看日志输出

GGSCI (oracle01) 9>start extract initab

GGSCI (oracle01) 10>info *,task --查看运行状态

GGSCI (oracle01) 11>view report initab ---查看输出信息,检查是否有报错

没有报错最后会出现:

注意:

OGG-01201 Error reported by MGR : Access denied.

如果出现这个报错,说明目标端mgr拒绝了连接,需要在目标端添加mgr的参数文件中添加

ACCESSRULE, PROG *, IPADDR *, ALLOW

查询两边表scott.t1表的数据量是否相同:

select count(*) from scott.t1; ---86953条(我这里是)

至此,数据初始化完成!

DML实时同步

源端EXTRACT进程捕捉增量数据,存到trail文件中,然后使用pump进程读取EXTRACT的trail并投递到目标端的replicat进程!!!

1.配置OGG实时同步功能(源端操作)

####使用ogg用户ggusr登录

GGSCI (oracle01) 1> dblogin userid ggusr, password ggusr

Successfully logged into database.

####在源端配置将需要传输的用户的表的附加日志:

GGSCI (oracle01 as ggusr@tdb01) 2>info trandata scott.* ---查看表附加日志信息

Logging of supplemental redo log data is disabled for table SCOTT.BONUS.

Logging of supplemental redo log data is disabled for table SCOTT.DEPT.

Logging of supplemental redo log data is disabled for table SCOTT.EMP.

Logging of supplemental redo log data is disabled for table SCOTT.SALGRADE.

Logging of supplemental redo log data is disabled for table SCOTT.T1.

####添加表附加日志信息

GGSCI (oracle01 as ggusr@tdb01) 3> add trandata scott.*

2.源端配置EXTRACT进程并添加trail文件,进程名字不能超过8个字符

GGSCI (oracle01) 2>ADD EXTRACT scott_st,tranlog,begin now

编辑参数:

GGSCI (oracle01) 3>EDIT PARAMS scott_st

extract scott_st

setenv (ORACLE_SID=tdb01)

setenv (ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1)

userid ggusr,password ggusr

exttrail ./dirdat/st

table scott.*;

GGSCI (oracle01) 4>view PARAMS scott_st

添加 exttrail文件,文件前缀不能超过2个字:

GGSCI (oracle01) 5>add exttrail ./dirdat/st,extract scott_st,megabytes 100

启动extract进程scott_st:

GGSCI (oracle01) 6>start extract scott_st

3.源端添加并启动pump进程(pump进程也是一种extract进程)

GGSCI (oracle01) 7>EDIT PARAMS pora_st

extract pora_st

setenv (ORACLE_SID=tdb01)

setenv (ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1)

passthru

rmthost 192.168.141.105,mgrport 7809

rmttrail ./dirdat/pa

table scott.*;

添加pump进程,并使用前面extract捕获的日志

GGSCI (oracle01) 8>add extract pora_st,exttrailsource ./dirdat/st

添加输出到目标端的trail文件名称,和参数中一致

GGSCI (oracle01) 9>add rmttrail ./dirdat/pa,extract pora_st,megabytes 100

启动extract进程pora_st:

start extract pora_st

4.目标端配置replicat进程

####在目标端添加检查表,

GGSCI (oracle02) 1> EDIT PARAMS ./GLOBALS

checkpointtable ggusr.rep_demo_ckpt

ggsci 登录到ggusr用户

GGSCI (oracle02) 2>dblogin userid ggusr, password ggusr

GGSCI (oracle02 as ggusr@tdb02) 3>add checkpointtable ggusr.rep_demo_ckpt

此时,在oracle中登录ggusr后,可以看到该用户下多出2张表

REP_DEMO_CKPT TABLE 和 REP_DEMO_CKPT_LOX

添加并启动replicat进程

GGSCI (oracle02) 1>EDIT PARAMS rora_st

replicat rora_st

setenv (ORACLE_SID=tdb02)

setenv (ORACLE_HOME=/u01/app/oracle/product/11.2.0/dbhome_1)

userid ggusr,password ggusr

handlecollisions

assumetargetdefs

discardfile ./dirrpt/rora_st.dsc,purge

map scott.*,target scott.*;

添加replicat进程,配置trail

GGSCI (oracle02) 2>add replicat rora_st,exttrail ./dirdat/pa

启动extract进程!!(前面已经启动mgr)

GGSCI (oracle02) 3>start replicat rora_st

其他命令:

stats rora_st -----查看进程的捕获信息!!!!

info *.task

测试

同步测试:

select max(object_id) from t1; --在源端和目标端都查询T1表中最大的object_id号

源端做insert操作并提交:

insert into t1(object_id,object_name) values('88606','ogg_test');

commit;

目标端查询:

select object_id,object_name from t1 where object_id='88606';

相关推荐

Linux基础知识之修改root用户密码

现象:Linux修改密码出现:Authenticationtokenmanipulationerror。故障解决办法:进入单用户,执行pwconv,再执行passwdroot。...

Linux如何修改远程访问端口

对于Linux服务器而言,其默认的远程访问端口为22。但是,出于安全方面的考虑,一般都会修改该端口。下面我来简答介绍一下如何修改Linux服务器默认的远程访问端口。对于默认端口而言,其相关的配置位于/...

如何批量更改文件的权限

如果你发觉一个目录结构下的大量文件权限(读、写、可执行)很乱时,可以执行以下两个命令批量修正:批量修改文件夹的权限chmod755-Rdir_name批量修改文件的权限finddir_nam...

CentOS「linux」学习笔记10:修改文件和目录权限

?linux基础操作:主要介绍了修改文件和目录的权限及chown和chgrp高级用法6.chmod修改权限1:字母方式[修改文件或目录的权限]u代表所属者,g代表所属组,o代表其他组的用户,a代表所有...

Linux下更改串口的权限

问题描述我在Ubuntu中使用ArduinoIDE,并且遇到串口问题。它过去一直有效,但由于可能不必要的原因,我觉得有必要将一些文件的所有权从root所有权更改为我的用户所有权。...

Linux chown命令:修改文件和目录的所有者和所属组

chown命令,可以认为是"changeowner"的缩写,主要用于修改文件(或目录)的所有者,除此之外,这个命令也可以修改文件(或目录)的所属组。当只需要修改所有者时,可使用...

chmod修改文件夹及子目录权限的方法

chmod修改文件夹及子目录权限的方法打开终端进入你需要修改的目录然后执行下面这条命令chmod777*-R全部子目录及文件权限改为777查看linux文件的权限:ls-l文件名称查看li...

Android 修改隐藏设置项权限

在Android系统中,修改某些隐藏设置项或权限通常涉及到系统级别的操作,尤其是针对非标准的、未在常规用户界面显示的高级选项。这些隐藏设置往往与隐私保护、安全相关的特殊功能有关,或者涉及开发者选项、权...

完蛋了!我不小心把Linux所有的文件权限修改了!在线等修复!

最近一个客户在群里说他一不小心把某台业务服务器的根目录权限给改了,本来想修改当前目录,结果执行成了根目录。...

linux改变安全性设置-改变所属关系

CentOS7.3学习笔记总结(五十八)-改变安全性设置-改变所属关系在以前的文章里,我介绍过linux文件权限,感兴趣的朋友可以关注我,阅读一下这篇文章。这里我们不在做过的介绍,注重介绍改变文件或者...

Python基础到实战一飞冲天(一)--linux基础(七)修改权限chmod

#07_Python基础到实战一飞冲天(一)--linux基础(七)--修改权限chmod-root-groupadd-groupdel-chgrp-username-passwd...

linux更改用户权限为root权限方法大全

背景在使用linux系统时,经常会遇到需要修改用户权限为root权限。通过修改用户所属群组groupid为root,此操作只能使普通用户实现享有部分root权限,普通用户仍不能像root用户一样享有超...

怎么用ip命令在linux中添加路由表项?

在Linux中添加路由表项,可以使用ip命令的route子命令。添加路由表项的基本语法如下:sudoiprouteadd<network>via<gateway>这...

Linux配置网络

1、网卡名配置相关文件回到顶部网卡名命名规则文件:/etc/udev/rules.d/70-persistent-net.rules#PCIdevice0x8086:0x100f(e1000)...

Linux系列---网络配置文件

1.网卡配置文件在/etc/sysconfig/network-scripts/下:[root@oldboynetwork-scripts]#ls/etc/sysconfig/network-s...

取消回复欢迎 发表评论: