百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Oracle OGG 单向DML同步

moboyou 2025-03-10 13:54 20 浏览

介绍

本文介绍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';

相关推荐

Excel技巧:SHEETSNA函数一键提取所有工作表名称批量生产目录

首先介绍一下此函数:SHEETSNAME函数用于获取工作表的名称,有三个可选参数。语法:=SHEETSNAME([参照区域],[结果方向],[工作表范围])(参照区域,可选。给出参照,只返回参照单元格...

Excel HOUR函数:“小时”提取器_excel+hour函数提取器怎么用

一、函数概述HOUR函数是Excel中用于提取时间值小时部分的日期时间函数,返回0(12:00AM)到23(11:00PM)之间的整数。该函数在时间数据分析、考勤统计、日程安排等场景中应用广泛。语...

Filter+Search信息管理不再难|多条件|模糊查找|Excel函数应用

原创版权所有介绍一个信息管理系统,要求可以实现:多条件、模糊查找,手动输入的内容能去空格。先看效果,如下图动画演示这样的一个效果要怎样实现呢?本文所用函数有Filter和Search。先用filter...

FILTER函数介绍及经典用法12:FILTER+切片器的应用

EXCEL函数技巧:FILTER经典用法12。FILTER+切片器制作筛选按钮。FILTER的函数的经典用法12是用FILTER的函数和切片器制作一个筛选按钮。像左边的原始数据,右边想要制作一...

office办公应用网站推荐_office办公软件大全

以下是针对Office办公应用(Word/Excel/PPT等)的免费学习网站推荐,涵盖官方教程、综合平台及垂直领域资源,适合不同学习需求:一、官方权威资源1.微软Office官方培训...

WPS/Excel职场办公最常用的60个函数大全(含卡片),效率翻倍!

办公最常用的60个函数大全:从入门到精通,效率翻倍!在职场中,WPS/Excel几乎是每个人都离不开的工具,而函数则是其灵魂。掌握常用的函数,不仅能大幅提升工作效率,还能让你在数据处理、报表分析、自动...

收藏|查找神器Xlookup全集|一篇就够|Excel函数|图解教程

原创版权所有全程图解,方便阅读,内容比较多,请先收藏!Xlookup是Vlookup的升级函数,解决了Vlookup的所有缺点,可以完全取代Vlookup,学完本文后你将可以应对所有的查找难题,内容...

批量查询快递总耗时?用Excel这个公式,自动计算揽收到签收天数

批量查询快递总耗时?用Excel这个公式,自动计算揽收到签收天数在电商运营、物流对账等工作中,经常需要统计快递“揽收到签收”的耗时——比如判断某快递公司是否符合“3天内送达”的服务承...

Excel函数公式教程(490个实例详解)

Excel函数公式教程(490个实例详解)管理层的财务人员为什么那么厉害?就是因为他们精通excel技能!财务人员在日常工作中,经常会用到Excel财务函数公式,比如财务报表分析、工资核算、库存管理等...

Excel(WPS表格)Tocol函数应用技巧案例解读,建议收藏备用!

工作中,经常需要从多个单元格区域中提取唯一值,如体育赛事报名信息中提取唯一的参赛者信息等,此时如果复制粘贴然后去重,效率就会很低。如果能合理利用Tocol函数,将会极大地提高工作效率。一、功能及语法结...

Excel中的SCAN函数公式,把计算过程理清,你就会了

Excel新版本里面,除了出现非常好用的xlookup,Filter公式之外,还更新一批自定义函数,可以像写代码一样写公式其中SCAN函数公式,也非常强大,它是一个循环函数,今天来了解这个函数公式的计...

Excel(WPS表格)中多列去重就用Tocol+Unique组合函数,简单高效

在数据的分析和处理中,“去重”一直是绕不开的话题,如果单列去重,可以使用Unique函数完成,如果多列去重,如下图:从数据信息中可以看到,每位参赛者参加了多项运动,如果想知道去重后的参赛者有多少人,该...

Excel(WPS表格)函数Groupby,聚合统计,快速提高效率!

在前期的内容中,我们讲了很多的统计函数,如Sum系列、Average系列、Count系列、Rank系列等等……但如果用一个函数实现类似数据透视表的功能,就必须用Groupby函数,按指定字段进行聚合汇...

Excel新版本,IFS函数公式,太强大了!

我们举一个工作实例,现在需要计算业务员的奖励数据,右边是公司的奖励标准:在新版本的函数公式出来之前,我们需要使用IF函数公式来解决1、IF函数公式IF函数公式由三个参数组成,IF(判断条件,对的时候返...

Excel不用函数公式数据透视表,1秒完成多列项目汇总统计

如何将这里的多组数据进行汇总统计?每组数据当中一列是不同菜品,另一列就是该菜品的销售数量。如何进行汇总统计得到所有的菜品销售数量的求和、技术、平均、最大、最小值等数据?不用函数公式和数据透视表,一秒就...