网站首页 > 技术文章 正文
介绍
本文介绍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';
猜你喜欢
- 2024-10-22 一键实现 Oracle 数据整库同步至 Apache Doris
- 2024-10-22 Spring Boot整合DataX同步数据 springboot自动装配原理
- 2024-10-22 多源异构数据离线同步方案实战 多源异构数据整合处理
- 2024-10-22 常见数据同步工具之实时同步 数据同步工具有哪些
- 2024-10-22 MySQL超时参数以及相关DataX数据同步案例分享
- 2024-10-22 《github精选系列》——数据库同步中间件(DBSyncer)
- 2024-10-22 如何将Oracle的blob同步到MySQL oracle blob转字符串
- 2024-10-22 ETL数据集成丨实现SQLServer数据库的高效实时数据同步
- 2024-10-22 SeaTunnel同步Oracle数据至ClickHouse
- 2024-10-22 搭建私有化DataWorks平台 - Part 2 数据同步
你 发表评论:
欢迎- 500℃几个Oracle空值处理函数 oracle处理null值的函数
- 494℃Oracle分析函数之Lag和Lead()使用
- 493℃Oracle数据库的单、多行函数 oracle执行多个sql语句
- 481℃0497-如何将Kerberos的CDH6.1从Oracle JDK 1.8迁移至OpenJDK 1.8
- 473℃Oracle 12c PDB迁移(一) oracle迁移到oceanbase
- 468℃【数据统计分析】详解Oracle分组函数之CUBE
- 453℃Oracle有哪些常见的函数? oracle中常用的函数
- 448℃最佳实践 | 提效 47 倍,制造业生产 Oracle 迁移替换
- 最近发表
-
- Spring Boot跨域难题终结者:3种方案,从此告别CORS噩梦!
- 京东大佬问我,SpringBoot为什么会出现跨域问题?如何解决?
- 在 Spring Boot3 中轻松解决接口跨域访问问题
- 最常见五种跨域解决方案(常见跨域及其解决方案)
- Java Web开发中优雅应对跨域问题(java跨域问题解决办法)
- Spring Boot解决跨域最全指南:从入门到放弃?不,到根治!
- Spring Boot跨域问题终极解决方案:3种方案彻底告别CORS错误
- Spring Cloud 轻松解决跨域,别再乱用了
- Github 太狠了,居然把 "master" 干掉了
- IntelliJ IDEA 调试 Java 8,实在太香了
- 标签列表
-
- 前端设计模式 (75)
- 前端性能优化 (51)
- 前端模板 (66)
- 前端跨域 (52)
- 前端缓存 (63)
- 前端react (48)
- 前端aes加密 (58)
- 前端脚手架 (56)
- 前端md5加密 (54)
- 前端富文本编辑器 (47)
- 前端路由 (55)
- 前端数组 (65)
- 前端定时器 (47)
- Oracle RAC (73)
- oracle恢复 (76)
- oracle 删除表 (48)
- oracle 用户名 (74)
- oracle 工具 (55)
- oracle 内存 (50)
- oracle 导出表 (57)
- oracle 中文 (51)
- oracle链接 (47)
- oracle的函数 (57)
- 前端调试 (52)
- 前端登录页面 (48)
本文暂时没有评论,来添加一个吧(●'◡'●)