网站首页 > 技术文章 正文
介绍
本文介绍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';
猜你喜欢
- 2025-07-17 每天从外包系统同步百万数据,用什么方案?Java实战讲解
- 2025-07-17 搞懂java同步块(synchronized),避免踩坑
- 2025-07-17 OceanBase 推出单机版 高度兼容MySQL和Oracle
- 2025-07-17 用DataX实现两个MySQL实例间的数据同步
- 2025-07-17 【mykit-data】 数据库同步工具(数据库间数据同步)
- 2025-07-17 从 PostgreSQL 到 DolphinDB:数据实时同步一站式解决方案
- 2025-07-17 什么是实时数据同步?纯干货解读!(什么是实时数据传输)
- 2025-07-17 通过ETL工具完成达梦数据库数据同步至数仓Oracle的具体实现
- 2024-10-22 一键实现 Oracle 数据整库同步至 Apache Doris
- 2024-10-22 Spring Boot整合DataX同步数据 springboot自动装配原理
你 发表评论:
欢迎- 633℃几个Oracle空值处理函数 oracle处理null值的函数
- 626℃Oracle分析函数之Lag和Lead()使用
- 614℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 608℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 606℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 599℃【数据统计分析】详解Oracle分组函数之CUBE
- 588℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 574℃Oracle有哪些常见的函数? oracle中常用的函数
- 最近发表
-
- CVE-2025-30762|Oracle(java oracle)
- 低代码可能铲不掉“屎山”,但能让这个它更有「型」
- 科技大事件:新苹果手表可通过击掌或握手来传递信息
- 你的百万级上下文窗口大模型,可能并没有你想象中那么强
- DApp 开发中的安全测试(软件测试过程中安全测试的具体应用场景和测试思路)
- 盘点Java中最没用的知识⑧:这3个过时套路,你还在代码里硬撑?
- 机房硬件设备及Oracle数据库软件维护服务项目竞争性磋商公告
- 微软与甲骨文扩大合作关系,推出Oracle Database@Azure
- JPA实体类注解,看这篇就全会了(java实体类注解)
- Java反射机制最全详解(图文全面总结)
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端路由 (61)
- 前端数组 (73)
- 前端js面试题 (50)
- 前端定时器 (59)
- 前端获取当前时间 (50)
- Oracle RAC (76)
- oracle恢复 (77)
- oracle 删除表 (52)
- oracle 用户名 (80)
- oracle 工具 (55)
- oracle 内存 (55)
- oracle 导出表 (62)
- oracle约束 (54)
- oracle 中文 (51)
- oracle链接 (54)
- oracle的函数 (58)
- 前端调试 (52)
本文暂时没有评论,来添加一个吧(●'◡'●)