Mantenere la propagazione sempre abilitata in Oracle Streams
In questo post descriverò come mantenere abilitata la propagazione di Oracle Streams servizio per il database di destinazione creando un processo di pianificazione e una procedura. La propagazione è un servizio che trasferisce le nuove modifiche dal database di origine al database di destinazione, se questo servizio viene interrotto, le modifiche ai dati non verranno applicate al database di destinazione. Ho già spiegato nel mio post precedente come creare Oracle Streams Replication.1. Primo accesso al database con le credenziali di amministratore di Streams.CONNECT [SOURCE_STREAM_ADMIN]2. Quindi creare la tabella per mantenere il registro di propagazione, in modo da poter visualizzare quando il servizio di propagazione è stato interrotto e quando è stato riavviato.Create Table Propagation_Audit (Propagation_name Varchar2(30),Source_queue_name Varchar2(30),Destination_queue_name Varchar2(30), Destination_dblink Varchar2(128),Status Varchar2(8),Error_message Varchar2(4000),Error_date Date)/3. Quindi creare una procedura per registrare lo stato di disabilitazione e riattivarlo. Crea o sostituisci PROCEDURA Ckprop_EnableAs Errnum Number; Errmsg Varchar2 (4000); CURSOR Prop_status è selezionato Propagation_name, Destination_dblink, Status, Source_queue_name, Destination_queue_name, Error_message, Error_date From DBA_PROPAGATION Where Status !='ENABLED';BEGIN For Rec In Prop_status LOOP Insert In Propagation_Audit Values (Rec.Propagation_name, Rec.Source_queue_name, Rec.Destination_queue_name, Rec.Destination_queue_name, Rec.Destination_dblink, Rec.Status, Rec.Error_message, Rec.Error_date); COMMETTERE; BEGIN Dbms_Aqadm.enable_Propagation_Schedule (Rec.Source_queue_name, Rec.Destination_dblink); ECCEZIONE Quando Altri Allora Errnum :=SQLCODE; Errmsg :=SQLERRM; Inserisci nei valori di Propagation_Audit ('CKPROP_ENABLE', Rec.Source_queue_name, 'riattiva la propagazione per', Rec.Destination_dblink, 'ERROR', Errnum || ':' || Errmsg, Sysdate); COMMETTERE; FINE; END LOOP;ECCEPTION Quando Altri Allora Errnum :=SQLCODE; Errmsg :=SQLERRM; Inserisci nei valori di Propagation_Audit ('CKPROP_ENABLE', 'Gestione eccezioni', Null, Null, 'ERROR', Errnum || ':' || Errmsg, Sysdate); COMMIT;END Ckprop_Enable;/4. Quindi crea un processo pianificato da controllare a intervalli specificati. Esegui DBMS_SCHEDULER.CREATE_JOB ( job_name => 'propagation_check', job_type => 'STORED_PROCEDURE', job_action => 'ckprop_enable', number_of_arguments => 0, start_date =>Sysdate, repeat_interval => 'FREQ=MINUTELY;INTERVAL=5', end_date => Null, abilitato => VERO, auto_drop=>FALSO, commenti => 'OGNI 15 MIN'); Fatto.