Hålla propagation alltid aktiverad i Oracle Streams
I det här inlägget kommer jag att beskriva hur man behåller Oracle Streams Propagation aktiverad tjänst för måldatabasen genom att skapa ett schemajobb och en procedur. Förökningen är tjänst som överför de nya ändringarna från källdatabasen till måldatabasen, om denna tjänst stoppas kommer inga dataändringar att gälla för måldatabasen. Jag har redan förklarat i mitt tidigare inlägg hur man skapar Oracle Streams Replication.1. Första inloggningen i databasen med Streams administratörsuppgifter. ANSLUTA [SOURCE_STREAM_ADMIN]2. Skapa sedan tabellen för att underhålla spridningsloggen, så att du kan se när spridningstjänsten stoppades och när den kommer igång igen.Skapa 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. Skapa sedan en procedur för att logga inaktiveringsstatusen och aktivera den igen. Skapa eller ersätt PROCEDUR Ckprop_EnableAs Errnum Number; Errmsg Varchar2 (4000); CURSOR Prop_status är Välj 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 Into Propagation_Requeue_Name,Requep_Name,RequepName. Rec.Destination_dblink, Rec.Status, Rec.Error_message, Rec.Error_date); BEGÅ; BÖRJA Dbms_Aqadm.enable_Propagation_Schedule (Rec.Source_queue_name, Rec.Destination_dblink); UNDANTAG When Others Then Errnum :=SQLCODE; Errmsg :=SQLERRM; Insert Into Propagation_Audit Values ('CKPROP_ENABLE', Rec.Source_queue_name, 're-enable propagation for', Rec.Destination_dblink, 'ERROR', Errnum || ':' || Errmsg, Sysdate); BEGÅ; SLUTET; END LOOP;EXCEPTION When Others Then Errnum :=SQLCODE; Errmsg :=SQLERRM; Insert Into Propagation_Audit Values ('CKPROP_ENABLE', 'Exception handler', Null, Null, 'ERROR', Errnum || ':' || Errmsg, Sysdate); COMMIT;END Ckprop_Enable;/4. Skapa sedan ett schemalagt jobb att kontrollera vid angivet intervall.Exec DBMS_SCHEDULER.CREATE_JOB ( job_name => 'propagation_check', job_type => 'LAGRAD_PROCEDURE', job_action => 'ckprop_enable', number_of_arguments => 0, start_date =>Sysdate, repeat_interval => 'FREQ=MINUTEL;INTERVAL=5', end_date => Null, aktiverad => TRUE, auto_drop=>FALSE, comments => 'VAR 15:E MIN'); Det är klart.