适用范围
适用于ogg所有版本
方案概述
客户有时会有这样的需求,在已有的ogg进程上新增一个表同步,源端目标端都不增加新的进程,并且最小限度不影响其他表同步。
我们可以利用临时进程先同步新增表,等追平后再加到现有的replicat进程。
实施步骤
1、ogg进程状态检查
源端目标端的OGG已经部署好,并且有ogg进程在运行。
| 进程名 | 源端/目标端 | 进程类型 | 备注 |
|---|---|---|---|
| ext1 | 源端 | EXTRACT | 现有捕获进程,在运行 |
| pump1 | 源端 | EXTRACT | 现有投递进程,在运行 |
| rep1 | 目标端 | REPLICAT | 现有复制进程,在运行 |
| tmp1 | 目标端 | REPLICAT | 临时进程,未创建 |
检查ogg进程状态,查看是否有延迟,如果有延迟解决延迟后再进行新增表同步
GGSCI > info all
2、源端捕获进程添加要同步的表(源端)
编辑抽取进程参数文件添加同步表
GGSCI > edit param ext1
--20211215--
TABLE scott.emp;
--20211215--
3、添加同步表的trandata(源端)
登录ogg管理用户
GGSCI > dblogin userid ogg, password ogg
添加表级trandata
GGSCI > add trandata scott.emp
检查trandata
GGSCI > info trandata scott.emp
4、重启捕获进程(源端)
GGSCI > stop ext1
Sending STOP request to EXTRACT EXT1 ...
Request processed.
GGSCI > start ext1
Sending START request to MANAGER ...
EXTRACT EXT1 starting
源端已经可以捕获到scott.emp表了。
5、源端投递进程添加要同步的表(源端)
编辑投递进程参数文件添加同步表
GGSCI > edit param pump1
--20211215--
TABLE scott.emp;
--20211215--
重启投递进程
GGSCI > stop pump1
Sending STOP request to EXTRACT PUMP1 ...
Request processed.
GGSCI > start pump1
Sending START request to MANAGER ...
EXTRACT PUMP1 starting
投递进程已经投递表scott.emp了
6、初始化表数据
源端数据库查询导出SCN(源端)
SQL > set numw 20
SQL > select current_scn from gv$database;
CURRENT_SCN
--------------------
13891433310456
13891433310456
源端使用数据泵基于SCN导出表数据(源端)
$ expdp dumpfile=scott20211215.dmp logfile=scott20211215.log directory=OGG_DMP FLASHBACK_SCN=13891433310456 tables=scott.emp
将导出的dmp文件拷贝到目标端
scp scott20211215.dmp 10.xx.xx.xx:/home/oracle
检查源端表空间(源端)
SQL > select distinct t1.table_name,t1.tablespace_name tab_ts,t2.tablespace_name ind_ts from dba_tables t1,dba_indexes t2 where t1.table_name=t2.table_name and t1.table_name in ('EMP') and t1.owner='SCOTT';
检查目标端表空间(目标端)
SQL > select distinct OWNER,TABLESPACE_NAME from dba_segments where owner='SCOTT';
目标端导入初始化数据(目标端)
$ impdp dumpfile=scott20211215.dmp logfile=scott20211215imp.log directory=OGG_DMP REMAP_TABLESPACE=source_tbs:target_tbs
7、目标端创建临时的replicat进程(目标端)
编辑临时replicat进程参数文件
GGSCI > edit param tmp1
REPLICAT tmp1
setenv ( NLS_LANG = AMERICAN_AMERICA.ZHS16GBK )
userid ogg, password ogg
ddl include mapped
--ddlerror default ignore retryop
--DDLERROR 1435 IGNORE INCLUDE OPTYPE ALTER OBJTYPE SESSION
ddlerror default ignore
SQLEXEC "ALTER SESSION SET CONSTRAINTS=DEFERRED"
REPORT AT 01:59
REPORTROLLOVER AT 02:00
--REPERROR DEFAULT,DISCARD
--HANDLECOLLISIONS
DISCARDFILE ./dirrpt/tmp1.dsc,append,megabytes 100
DISCARDROLLOVER AT 02:00
GETTRUNCATES
ASSUMETARGETDEFS
DYNAMICRESOLUTION
ALLOWNOOPUPDATES
--20211215--
map scott.emp,target scott.emp;
--20211215--
添加临时进程
GGSCI > add REPLICAT tmp1 exttrail ./dirdat/lp,checkpointtable ogg.ggschkpt
修改临时进程trail文件序列号为早于expdp时间的序列号
GGSCI > ALTER REPLICAT tmp1, EXTSEQNO 4741
临时进程基于csn启动进程
GGSCI > start tmp1,aftercsn 13891433310456
查看临时进程是否追平
GGSCI > info tmp1
8、临时进程tmp1追平后,停止源端投递进程(源端)
GGSCI > stop pump1
Sending STOP request to EXTRACT PUMP1 ...
Request processed.
9、将新增表从临时复制进程添加到现有复制进程
检查目标端临时和正式复制进程是否延迟,rba号是否一致。
GGSCI > info tmp1
REPLICAT TMP1 Last Started 2021-12-15 12:03 Status RUNNING
Checkpoint Lag 00:00:00 (updated 00:00:03 ago)
Log Read Checkpoint File ./dirdat/lp004743
2021-12-15 12:05:12.076375 RBA 20187867
GGSCI > info rep1
REPLICAT REP1 Last Started 2019-12-06 14:58 Status RUNNING
Checkpoint Lag 00:00:00 (updated 00:00:01 ago)
Log Read Checkpoint File ./dirdat/lp004743
2021-12-15 12:05:12.076375 RBA 20187867
两个进程的seqno:4743,rba:20187867 一致,继续接下来的操作,不一致的话查找原因
停止tmp1、rep1
GGSCI > stop tmp1
GGSCI > stop rep1
在rep1中加入新增表
--20211215--
map scott.emp,target scott.emp;
--20211215--
启动 rep1复制进程
GGSCI > start rep1
10、删除临时复制进程tmp1(目标端)
GGSCI > dblogin userid ogg, password ogg
Successfully logged into database.
GGSCI > delete tmp1
Deleted REPLICAT TMP1.
11、源端启动投递进程(源端)
GGSCI > start pump1
12、检查所有进程状态,及表的同步信息
GGSCI > info all
GGSCI > stats xxx,total,table schema.table
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




