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