The Propagator

1. Status of Propagators

2. Start a Propagator

3. Stop a Propagator

4. Drop a Propagator

5. Recreate a Propagator

 

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

 

****************************************************************************

Determine the name and state of all Propagators on a server.

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;

 

Stop a Propagator

SQL> exec dbms_propagation_adm.stop_propagation('PROP_XYZ');

SQL> exec dbms_propagation_adm.stop_propagation('PROP_XYZ',TRUE);

Start a Propagator

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;


Drop a Propagator

SQL> exec dbms_propagation_adm.drop_propagation ('PROP_XYZ');

Recreate a Propagator

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;
/

Contents