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

Oracle OGG 单向DML同步(oracle ogg双向同步)

mhr18 2024-10-01 12:14 16 浏览 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';

相关推荐

一文带您了解数据库的行列之争:行式与列式存储的异同

数据库存储格式是数据库管理系统中一个至关重要的方面,它直接影响到数据的组织和检索效率。在数据库中,有两种主要的存储格式,即行式存储和列式存储。这两者采用截然不同的方法来组织和存储数据,各自具有一系列优...

NL2SQL(三)开源项目怎么选:talk is cheap, show me the code!

老规矩,先看效果下面的demo来自试用的SuperSonic,将会在下面详细介绍:大模型时代Text-to-SQL特点随着基于LLM技术的发展,RAG/AIAgent/Fine...

JDK25长期支持版九月降临:18项王炸功能全解析

Java要放大招啦!9月份推出的JDK25长期支持版已经锁定18个超能力,从稳定值到结构化并发,还有Linux系统下的"预知未来"性能分析!下面我用打游戏的术语给你们掰扯明白:1、飞...

OceanBase 推出单机版 高度兼容MySQL和Oracle

【环球网科技综合报道】3月27日,独立数据库厂商OceanBase正式发布单机版产品。据悉,这一产品基于自主研发的单机分布式一体化架构设计,具备极简数据库架构和高度兼容性,为中小规模业务提供兼具性能与...

黄远邦:应对7月1日闰秒对Oracle数据库影响

由于今年7月1日全世界会多出一秒,这可能对时间敏感的IT系统造成较大影响。中亦科技数据库团队对此问题做了深入的研究,并对用户系统提出了相应的解决方法及建议。中亦科技数据库产品总监黄远邦认为,闰秒调整会...

MySQL数据库密码忘记了,怎么办?(mysql 数据库密码)

#头条创作挑战赛#MySQL数据库密码忘记了且没有其他可以修改账号密码的账户时怎么办呢?登录MySQL,密码输入错误/*密码错误,报如下错误*/[root@TESTDB~]#mysql-u...

Chinese AI Talent in Spotlight as Nvidia and Meta Escalate Talent War

OntherightisBanghuaZhu,ChiefResearchScientistatNVIDIATMTPOST--SiliconValley’stoptech...

用Cursor开启JAVA+AI生涯(javascirpt怎么开启)

Cursor是基于VSCode开发的一款编辑器,支持多种语言的开发编辑。与传统的开发工具相比,它有多种优势:与AI无缝集成,响应速度快,占用内存小。但很多同学在"起步"过程中遇到了...

毕业十年了,自从做了开发用了很多软件,但距离写开发工具还很远

办公系统类:办公软件Word、Excel、PowerPoint三大必备技能+腾讯/金山在线文档解压缩操作:7-zip/winrar文件文本处理:Notepad++(文本编辑器正则表达式超级好...

盘点Java中最没用的知识⑤:这3个老古董你还在代码里“考古”?

一、Stack类:“继承Vector”的历史bug,为何成了性能拖油瓶?你是不是在学Java集合时,老师说过“栈结构用Stack类”?是不是在老代码里见过"newStack<>(...

Gemini 2.5 Pro 0506发布,编程最强大模型, 碾压 Claude3.7 sonnent

一、Gemini2.5Pro(I/Oedition)发布1、为何叫I/Oedition?谷歌史上最强编程模型Gemini2.5Pro(I/Oedition)发布,具体型号是Gemin...

如何让无聊变得有趣(附本人大量美图)

文/图:金冬成在这条长300公里的公路上,我已经来回往返了无数次。3小时车程,一个人,想想都是多么无聊的一件事。其实,人生道路上,类似这种无聊的事情有很多很多。无聊的事情、枯燥的工作,往往让我们容易失...

Oracle 推出 Java 24,增强 AI 支持和后量子加密

导读:Oracle宣布正式发布Java24,该语言增加了几个新功能,例如StreamGatherersAPI和Class-FileAPI的可用性,以及专门为AI推理和量子安全设计...

公司ERP突然变慢?“索引重建”这颗“药”可不能随便吃!

各位老板、IT小哥、财务小姐姐,有没有遇到过公司ERP系统突然卡顿得像“老爷车”,点个按钮半天没反应,急得直跺脚?这时候,可能有人会跳出来说:“我知道,重建一下数据库索引就好了!”听起来像个“神操作”...

基于Java实现,支持在线发布API接口读取数据库,有哪些工具?

基于java实现,不需要编辑就能发布api接口的,有哪些工具、平台?还能一键发布、快速授权和开放提供给第三方请求调用接口的解决方案。架构方案设计:以下是一些基于Java实现的无需编辑或只需少量编辑...

取消回复欢迎 发表评论: