I've set up bidirectional oracle streams replication (11gR1) using identical scripts on both machines (DB1 and DB2). Although changes from DB1 are being applied to DB2, changes from DB2 to DB1 aren't.
I have only one rule for capture processes that checks for apply tag to prevent cyclic propagation, and have no rules for apply processes. LCRs from DB2 are dequeued at DB1 by apply reader process (update LCRs are among dequeued messages for sure, because when I issue 50 inserts at DB2, at DB1 dequeued messages counter increases by 50), but aren't processed by apply coordinator and servers :
Apply Apply Apply Apply
Name Queue Tag Status
--------------- --------------- ----- ------------------------------
FROM_DB2_APP FROM_DB2_APP_Q 02 ENABLED
Apply Messages Last
Name State Dequeued SCN
--------------- ------------------ ---------- ----------
FROM_DB2_APP DEQUEUE MESSAGES 102 1118751
Apply Trans Trans Trans Trans Trans Trans
Name State Appld Assign Rcvd Ignrd Rollbk Error
--------------- --------------- ------- ------- ------- ------- ------- -------
FROM_DB2_APP IDLE 0 0 0 0 0 0
Apply Server Messages
Name ID Applied State
--------------- ------ --------- ------------------------------
FROM_DB2_APP 1 0 IDLE
As far as I understand, in that case LCRs can be silently ignored (without throwing apply error) only if SCN of LCR is lesser that instantiation SCN for a table, but instantiation SCN is 1114348 (< 1118751):
Source Object Object Instantiation
Database Owner Name SCN
------------ ------------ ------------ -------------
DB2 DUMMYUSR DUMMYTBL 1114348
Oracle provides means to deal with errors, but how to check why message was not applied if there was no error?