Files
notes/Golden_Gate/example_01/add_2_tables.md
2026-03-12 22:01:38 +01:00

7.9 KiB

Context

  • setup extract/replicat for 3 tables: ORDERS, PRODUCTS and USERS
  • add 2 new tables TRANSACTIONS and TASKS to this extract/replica peer

The aim is to minimize the downtime for the peer extract/replicat, so we will proceed in 2 steps:

  • create a second parallel extract/replicat for the 2 new tables
  • merge the second extract/replicat to initial extract/replicat

Extract setup

Add trandata to tables:

dblogin useridalias YODA
add trandata GREEN.ORDERS
add trandata GREEN.PRODUCTS
add trandata GREEN.USERS
list tables GREEN.*

Define params file for extract:

edit params EXTRAA


extract EXTRAA
useridalias JEDIPRD
sourcecatalog YODA
exttrail ./dirdat/aa
purgeoldextracts
checkpointsecs 1
ddl include mapped
warnlongtrans 1h, checkinterval 30m
------------------------------------
table GREEN.ORDERS;
table GREEN.PRODUCTS;
table GREEN.USERS;

Add, register and start extract:

dblogin useridalias JEDIPRD
add extract EXTRAA, integrated tranlog, begin now
add exttrail ./dirdat/aa, extract EXTRAA
register extract EXTRAA, database container (YODA)
start extract EXTRAA
info extract EXTRAA detail

Initial load

Note down the current SCN on source database.

SQL> select current_scn from v$database;

CURRENT_SCN
-----------
   10138382

On target DB create tables structure for ORDERS, PRODUCTS, USERS and do the inlitial load:

SCN=10138382
impdp userid=admin/"Secret00!"@togoria/MAUL network_link=GREEN_AT_YODA logfile=MY:import_01.log remap_schema=GREEN:RED tables=GREEN.ORDERS,GREEN.PRODUCTS,GREEN.USERS TABLE_EXISTS_ACTION=TRUNCATE flashback_scn=$SCN

Replicat setup

Define params file for replicat.
Take care to filter filter(@GETENV ('TRANSACTION','CSN'), it must be positionned to the SCN of initial load.

edit params REPLAA

replicat REPLAA
useridalias MAUL
dboptions enable_instantiation_filtering
discardfile REPLAA.dsc, purge, megabytes 10

map YODA.GREEN.ORDERS, target MAUL.RED.ORDERS,       filter(@GETENV ('TRANSACTION','CSN') > 10138382);
map YODA.GREEN.PRODUCTS, target MAUL.RED.PRODUCTS,   filter(@GETENV ('TRANSACTION','CSN') > 10138382);
map YODA.GREEN.USERS, target MAUL.RED.USERS,         filter(@GETENV ('TRANSACTION','CSN') > 10138382);

Add and start replicat:

add replicat REPLAA, integrated, exttrail ./dirdat/aa

dblogin useridalias SITHPRD
register replicat REPLAA database
start replicat REPLAA
info all

Wait to catch the lag:

lag replicat 

When done you can remove filter filter(@GETENV ('TRANSACTION','CSN')

edit params REPLAA

replicat REPLAA
useridalias MAUL
dboptions enable_instantiation_filtering
discardfile REPLAA.dsc, purge, megabytes 10

map YODA.GREEN.ORDERS         , target MAUL.RED.ORDERS            ;
map YODA.GREEN.PRODUCTS       , target MAUL.RED.PRODUCTS          ;
map YODA.GREEN.USERS          , target MAUL.RED.USERS             ;


restart replicat REPLAA

Add 2 new tables to extract/replicat

Add trandata to tables:

dblogin useridalias YODA
add trandata GREEN.TRANSACTIONS
add trandata GREEN.TASKS
list tables GREEN.*

Create a second extract EXTRAB to manage the new tables.
Define extract parameters:

edit params EXTRAB

extract EXTRAB
useridalias JEDIPRD
sourcecatalog YODA
exttrail ./dirdat/ab
purgeoldextracts
checkpointsecs 1
ddl include mapped
warnlongtrans 1h, checkinterval 30m

table GREEN.TRANSACTIONS;
table GREEN.TASKS;

Add, register and start extract:

dblogin useridalias JEDIPRD
add extract EXTRAB, integrated tranlog, begin now
add exttrail ./dirdat/ab, extract EXTRAB
register extract EXTRAB, database container (YODA)
start extract EXTRAB
info extract EXTRAB detail

Initial load for new tables

Note down the current SCN on source database.

SQL> select current_scn from v$database;

CURRENT_SCN
-----------
   10284191

On target DB create tables structure for TRANSACTIONS, TASKS and do the inlitial load:

SCN=10284191
impdp userid=admin/"Secret00!"@togoria/MAUL network_link=GREEN_AT_YODA logfile=MY:import_02.log remap_schema=GREEN:RED tables=GREEN.TRANSACTIONS,GREEN.TASKS TABLE_EXISTS_ACTION=TRUNCATE flashback_scn=$SCN

New replicat setup

Define extract parameters. Pay attention to filter(@GETENV ('TRANSACTION','CSN') clause to be setup to SCN of intial datapump load.

edit params REPLAB

replicat REPLAB
useridalias MAUL
dboptions enable_instantiation_filtering
discardfile REPLAB.dsc, purge, megabytes 10

map YODA.GREEN.TRANSACTIONS,       target MAUL.RED.TRANSACTIONS,     filter(@GETENV ('TRANSACTION','CSN') > 10284191);
map YODA.GREEN.TASKS,              target MAUL.RED.TASKS,            filter(@GETENV ('TRANSACTION','CSN') > 10284191);

Add and start new replicat:

add replicat REPLAB, integrated, exttrail ./dirdat/ab
dblogin useridalias SITHPRD
register replicat REPLAB database
start replicat REPLAB
info all

Check if new replicat is running and wait to lag 0.

Integrate the 2 new tables to initial extract/replicat: EXTRAA/REPLAA

Add new tables to initial extract for a double run:

edit params EXTRAA

extract EXTRAA
useridalias JEDIPRD
sourcecatalog YODA
exttrail ./dirdat/aa
purgeoldextracts
checkpointsecs 1
ddl include mapped
warnlongtrans 1h, checkinterval 30m

table GREEN.ORDERS;
table GREEN.PRODUCTS;
table GREEN.USERS;
table GREEN.TRANSACTIONS;
table GREEN.TASKS;

Restart extract EXTRAA:

restart extract EXTRAA

Stop extracts in this strictly order:

  • first extract: EXTRAA
  • second extract: EXTRAB

It is mandatory to stop extracts in this order.
The applied SCN on first replicat tables must be less than the SCN on second replicat in order to allow the first replicat to start at the last applied psition in the trail file. Like this, the first replicat must not be repositionned in the past.

stop EXTRACT EXTRAA
stop EXTRACT EXTRAB

Now stop both replicat also:

stop replicat REPLAA
stop replicat REPLAB

Note down the SCN for each extract and premare new params file for initial replicat.

info extract EXTRAA detail
info extract EXTRAB detail 

In my case:

  • EXTRAA: SCN=10358472
  • EXTRAB: SCN=10358544

The SCN of EXTRAB should be greater than the SCN of EXTRAA

Update REPLAA replicat parameter file in accordance with the latest SCN applied on new tables (the SCN of EXTRAB):

edit params REPLAA

replicat REPLAA
useridalias MAUL
dboptions enable_instantiation_filtering
discardfile REPLAA.dsc, purge, megabytes 10

map YODA.GREEN.ORDERS           ,           target MAUL.RED.ORDERS              ;
map YODA.GREEN.PRODUCTS         ,           target MAUL.RED.PRODUCTS            ;
map YODA.GREEN.USERS            ,           target MAUL.RED.USERS               ;

map YODA.GREEN.TRANSACTIONS     ,           target MAUL.RED.TRANSACTIONS,     filter(@GETENV ('TRANSACTION','CSN') > 10358544);
map YODA.GREEN.TASKS            ,           target MAUL.RED.TASKS,            filter(@GETENV ('TRANSACTION','CSN') > 10358544);

Start first extract/replicat

start extract EXTRAA 
start replicat REPLAA

When the lag is zero you can remove filter filter(@GETENV ('TRANSACTION','CSN')

edit params REPLAA

replicat REPLAA
useridalias MAUL
dboptions enable_instantiation_filtering
discardfile REPLAA.dsc, purge, megabytes 10

map YODA.GREEN.ORDERS         , target MAUL.RED.ORDERS            ;
map YODA.GREEN.PRODUCTS       , target MAUL.RED.PRODUCTS          ;
map YODA.GREEN.USERS          , target MAUL.RED.USERS             ;


map YODA.GREEN.TRANSACTIONS   , target MAUL.RED.TRANSACTIONS      ;
map YODA.GREEN.TASKS          , target MAUL.RED.TASKS             ;

Restart first replicat:

start replicat REPLAA

Now all tables are integrated in first extract/replicat.

Remove second extract/replicat

dblogin useridalias JEDIPRD
unregister extract EXTRAB database
delete extract EXTRAB

dblogin useridalias MAUL
unregister replicat REPLAB database
delete replicat REPLAB