如何增加新表到Goldengate已存在的同步链路?
在日常Goldengate日常运维中最常见的是在现有的同步进程中增加新的同步表, 这里记录简单的使用class mode典型模式时,增加新表的过程。
源库
1, 增加附加日志
GGSCI> dblogin UserIdAlias OGGADMIN GGSCI> ADD TRANDATA SOURCE.DASANI 如果抽取是从standby,连接主库使用SQL SQL> ALTER TABLE SOURCE.XX ADD SUPPLEMENTAL LOG DATA (ALL) COLUMNS;
2, 停挂抽取进程
GGSCI > stop ext extxxxx GGSCI > stop ext dpxxx
3, 修改抽取配置文件
GGSCI > edit params extxx -- add blew Table SOUCE.XXX; GGSCI > edit params dp xx -- add new table if have filter Table SOUCE.XXX;
4, 启动并抽取检查状态
GGSCI> start extxxx GGSCI> start dpxxx GGSCI> info all
5, 获取SCN
SQL> select current_scn from v$database;
6, 导出数据
expdp \'/ as sysdba\' directory=data_pump_dir dumpfile=source_xxxi.dmp logfile=source_xxx.log tables=source.xxx flashback_scn=xxxxxxxxxxxxxx
7, 传到导出表文件目标库
scp -- or ftp
目标库
8, 导入数据
impdp \'/ as sysdba\' directory=data_pump_dir dumpfile=source_xxxi.dmp logfile=source_xxx_imp.log remap_schema=source:target transform=segment_attributes:n transform=oid:n
9, 修改replicat进程
GGSCI> edit params repxxx -- add below Map SOURCE.xxx, target TARGET.xxx, FILTER ( @GETENV('TRANSACTION', 'CSN') > xxxxxxxxxxxxxxx); --如果有新表数据已同步过来,可能会导致rep进程已ABENDING。
10, 启动应用进程
GGSCI> start repxxxx
11, 检查同步完成后,去掉rep CSN filter
GGSCI> dblogin UserIdAlias OGGADMIN GGSCI> lag rraj At EOF, no more records to process ------- no more records to process(i.e lag is zero)
GGSCI> edit params repxxx -- From Map SOURCE.xxx, target TARGET.xxx, FILTER ( @GETENV('TRANSACTION', 'CSN') > xxxxxxxxxxxxxxxxx); -- To Map SOURCE.xxx, target TARGET.xxx;
12, 重启应用
GGSCI> stop repxxx GGSCI> start repxxx
13, 验证状态
GGSCI> info all GGSCI> stats repxxx
注意#6 在导出时使用了flashback, 有些大表或数据库不允许使用falshback,因为浪费过多的undo, 可以在导出时不指定expdp,而是在replicat时对表做容错处理,如
GGSCI>edit params repxxx MAP source.xxx,TARGET xxx.xxxx, HANDLECOLLISIONS;
等同步完成后取消表级同步的HANDLECOLLISIONS 参数。
对不起,这篇文章暂时关闭评论。