2. 目标
实现向已经上线运行的 Oracle GoldenGate 的环境中增加新的需要复制数据的表。
3. 方法
数据复制工具 Oracle GoldenGate 提供了两种增加方法,我们这里逐个介绍。
3.1 第一种:使用 handlecollision 参数
参数 handlecollision 应用于复制进程,就是目标库上的 replicat 进程的配置。
如果在 replicat 上配置了参数,那么复制进程工作时,将会对重复数据和丢失的数据做错误处理。
如果我们要求两点的话,使用该参数是个绝佳选择。
第一、 我们在加新表的 OGG 同步环境中时,能保证源库上对此表不做任何 DML 操作,当然 DDL 操作也不能有。
第二、 我们加了新表后,目标库上的数据不管,手工校验一次,发现不一致再手工处理也可以。
当然,在新加表的过程中,最好是源表不做任何操作。
以下步骤是ORACLE 官网提供的,这里不做翻译了。
i)using handlecollisions
----------------------------
1)stop the extract,pump and replicat
once the extract is stopped, wait for the pump to catch up before stopping it.
once the pump is stopped, wait for the replicat to catch up before stopping it.
2)include the tables that you need to add into the extract parameter file and save it
3)start the extract
4)include the tables that you need to add into the extract pump parameter file and save it
5)start the pump
6)do the initial load for the the new tables( ie you can take the export and import of the new tables that need to to added for replication from source the target database)
7)Wait for the initial load(export and import) to be completed and then include the tables that you need to add into the replicat parameter file with HANDLECOLLISIONS parameter
eg: MAP hr.dep, TARGET hr.dep, HANDLECOLLISIONS;
MAP hr.country, TARGET hr.country, HANDLECOLLISIONS;
6) start the replicat
7) once the lag becomes zero remove the HANDLECOLLISIONS from the replicat parameter file and restart the replicat
eg :-
MAP hr.dep, TARGET hr.dep;
MAP hr.country, TARGET hr.country;
note:- 4 and 5th step can be skipped if the pump is not configured.
3.2 第二种:不使用 handlecollision 参数
这种方法是通用的。因为在实际项目中,我们既不能保证源表的数据在操作 OGG 时无变化,由不能要求项目上接受数据差异或者丢失。
这种方法使用基于表的 SCN 方式同步差异数据。
在同步完成后,可以除掉关于 SCN 的同步配置。方法简明扼要,很容易理解。
以下步骤是ORACLE 官网提供的,这里也不做翻译了。
ii)without using handlecollision
--------------------------------------
1) stop the extract,pump and replicat
once the extract is stopped, wait for the pump to catch up before stopping it.
once the pump is stopped, wait for the replicat to catch up before stopping it.
2)add the new table in extract parameter file and save it
3)start the extract
4)add the new table in extract pump parameter file and save it
5)start the extract pump
6)get the current SCN from the source database
eg:-
SQL> select current_scn from v$database;
CURRENT_SCN
------------------------
5343407
7) Check that there are no open DML transactions against the table. If there are open transactions, make sure that their starting SCN is higher than the one obtained in step 4) , i.e. 5343407
8)re-sync the the newly added table from source to target(using normal export/import).
Make sure to use FLASHBACK_SCN parameter for the export.
9) Add the table in the replicat parameter file including the below option( FILTER ( @GETENV ("TRANSACTION", "CSN") >
eg:-
MAP source.test1, TARGET target.test1 ,FILTER ( @GETENV ("TRANSACTION", "CSN") > 5343407);
MAP source.test2, TARGET target.test2 ,FILTER ( @GETENV ("TRANSACTION", "CSN") > 5343407);
10)start the replicat
11)verify the tables on source and table and once the lag is zero remove the filter parameter from the replicat parameter file and restart.
4. 参数说明
HANDLECOLLISIONS | NOHANDLECOLLISIONS
Valid for Replicat
Use the HANDLECOLLISIONS and NOHANDLECOLLISIONS parameters to control whether or not Replicat tries to resolve duplicate-record and missing-record errors when applying SQL on the t