The Propagator's job is to dequeue Logical Change Records (LCR) from the Capture Queue on the source database and place them in the Apply Queue on the destination database. A Propagator has a one to one relationship with the queues. Each of the Advanced Queues can support mulitple Propagators. Each Propagator registers itself with its Capture Queue, simular to the way a materialized view registers with a materialized view log. The queue manages the LCR until all registered Propagators have removed that LCR.
All Propagator operations are transactional, a change is not lost, even if the instance crashes during propagation.
The Propagator also implements Rules to determine if an LCR is sent or not. If the positive rule does not tell the Propagator to sent the LCR, it is discarded. If no rules are present, all LCRs are propagated. Rules are discussed in another section.
A server can have one or more Propagators but each Propagator can only connect one Capture queue to one Apply queue.
Most of the current status information about all Propagators on a source database is contained in the view DBA_PROPAGATION.
SQL> desc dba_propagation
The Propagator is controled by the oracle supplied package DBMS_PROPAGATION_ADM.
SQL> desc dbms_propagation_adm
****************************************************************************
sqlplus strmadmin/password
SQL> select propagation_name, status from dba_propagation;
PROPAGATION_NAME STATUS
------------------------------ --------
PROP_XYZ ENABLED
To get some more useful information you need to add some columns. As with the Capture Process, when the Propagator has encountered an error, the error message and error date columns will contain that information, otherwise they are null.
select
propagation_name,
status,
error_date,
error_message
from dba_propagation;
SQL> exec dbms_propagation_adm.stop_propagation('PROP_XYZ');
SQL> exec dbms_propagation_adm.stop_propagation('PROP_XYZ',TRUE);
SQL> exec dbms_propagation_adm.start_propagation('PROP_XYZ');
You can also start and stop the propagation schedule.
begin
dbms_aqadm.enable_propagation_schedule('STRMADMIN.CAPT_QUEUE', '"STRMADMIN"."APPL_QUEUE"@ORACLE.MYDOMAIN.COM');
end;
SQL> exec dbms_propagation_adm.drop_propagation ('PROP_XYZ');
To recreate a propagator you must know the local queue, the db_link and the destination queue.
begin
dbms_propagation_adm.create_propagation(
propagation_name => 'PROP_XYZ',
source_queue => 'CAPTURE_QUEUE',
destination_queue => 'APPLY_QUEUE',
destination_dblink => 'ORACLE.MYDOMAIN.COM');
End;
/