From version 2.8 onwards Replicate parameters APPLY_LOOP_PREVENTION and MINE_LOOP_PREVENTION will become public ones.
...
Replicate does filtering of transactions based on TRANSACTION_NAME which contains "DBREPL_database_name_XID".
Mine prevention throws them out on mine and it throws out all of them.
Apply loop prevention throws them out on apply - if td database name matches current database (=they just completed a loop).
APPLY_LOOP_PREVENTION ( YES on default)
Purpose:
- Changes that are mined on the source server and then applied on the target server are not mined again on the target server. This is prevented by the APPLY_LOOP_PREVENTION setting.
- Based on TRANSACTION_NAME the APPLY_LOOP_PREVENTION throws transaction out on
...
- APPLY - if the database name matches current database
...
- meaning it just completed a loop
...
- .
...
- It also checks if the DDL was done by an apply process on this db; modify the DDL by adding comment to the end so next mine/apply can check that it was done by apply.
Valid Settings: YES or NO
MINE_LOOP_PREVENTION ( NO on default)
Purpose:
- Changes that are mined on the source server and then applied on the target server. This is controlled by the MINE_LOOP_PREVENTION setting.
- MINE_LOOP_PREVENTION throws out transaction based on the TRANSACTION_NAME that contains "DBREPL_database_name_XID".
If set to YES it checks if we Replicate does skip this DDL due to to:
- it is created by an APPLY process and apply and APPLY adds a comment to end of the DDL - .
This is disabled -
...
Replicate need to pass at least CREATE TABLE to
...
APPLY;
...
it just lets APPLY_LOOP_PREVENTION do it's job for DDL
- an established isolation level triggered by a SET TRANSACTION statement
...
Comment: MINE_LOOP_PREVENTION is preferred to APPLY_LOOP_PREVENTION as the changes are filtered sooner and don't even get written to a PLOG file. But it's too aggressive in more complicated scenarios.
Valid Settings: YES or NO
If
Info |
---|
If both APPLY_LOOP_PREVENTION and MINE_LOOP_PREVENTION are disabled APPLY will not set/use transaction name 'DBREPL_%'. |
Info |
---|
The settings for APPLY_LOOP_PREVENTION and MINE_LOP_PREVENTION can be different on each DB, but usually it's not necessary. And if they are kept the same, then using MINE_LOOP_PREVENTION implies APPLY_LOOP_PREVENTION has no effect. (MINE already filtered the changes.) |
See also:
Filtering deletes at a transaction level
Filter the data to be replicated