Filtering Deletes at a Transaction Level so Data is not deleted in APPLY
Problem Description
A filter was not configured during instantiation. Now data from the source database is to be deleted but you do not wish to have it deleted from the target database.
Another use case is the desire to periodically purge the production database while keeping the data in the target (ie OLTP vs Historical).
Assumptions
Replicate is configured and the schema/tables are being successfully replicated to target.
There is a need/desire to not propagate deletes to target.
Solution
a)
Any Transaction starting with DBREPL_
is ignored by default when MINE prevention is enabled within Dbvisit Replicate. This is done by editing the
-MINE.ddc
file and adding the following two lines:
set _MINE_LOOP_PREVENTION = YES
set MINE._MINE_LOOP_PREVENTION = YES
in Replicate >= release 2.9.00 the value is
set MINE_LOOP_PREVENTION = YES
MINE must be shut-down and restarted.
You can verify this is now enabled by grep'ing the log file for "Mine loop prevention" and checking it is now enabled:
$ grep "Mine loop prevention" *.log
2014/08/30 01:40:52 INFO> Mine loop prevention disabled. <- default
2014/08/30 01:42:42 INFO> Mine loop prevention enabled. <- after edit & restarting MINE
Anytime you want transactions that contain a delete
on the source database not to be propagated to target use the Oracle command:
SET TRANSACTION NAME 'DBREPL_%'
For example:
b)
Another option instead is to configure a FILTER when you run the setup wizard to start the
configure replication, this however may/will have a negative impact on speed / delays in replication. The target may have increased / significant lag time from the source.
The above transactional method (a) is preferred, if possible.
Setup wizard. Step 3 - Example...
Specify rename name or filter condition for any of the specified schemas? (Yes/No) [No] YES
(PREPARE_SCHEMA_EXCEPTIONS) - Specify tables to exclude from PREPARE SCHEMA, if any:
Rename name for schema NICKY (empty means no rename):
Filter the data to be replicated? If yes, use single condition for ALL DML operations or use CUSTOM conditions for each operation? (No/ALL/CUSTOM) [No] CUSTOM
Filter condition for INSERT for schema NICKY (empty means no condition): Filter condition for UPDATE (old values) for schema NICKY (empty means no condition):
Filter condition for UPDATE (new values) for schema NICKY (empty means no condition):
Filter condition for DELETE for schema NICKY (empty means no condition): [] 1=0
Donna Zehl September 04, 2014 01:50