Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Manter a propagação sempre habilitada no Oracle Streams

Neste post, descreverei como manter a propagação do Oracle Streams habilitada serviço para o banco de dados de destino criando um trabalho de agendamento e procedimento. A propagação é o serviço que transfere as novas alterações do banco de dados de origem para o banco de dados de destino, se este serviço for interrompido, nenhuma alteração de dados será aplicada ao banco de dados de destino. Já expliquei em meu post anterior como criar Oracle Streams Replication.1. Primeiro faça login no banco de dados com credenciais de administrador do Streams.CONNECT [SOURCE_STREAM_ADMIN]2. Em seguida, crie a tabela para manter o log de propagação, para que você possa visualizar quando o serviço de propagação foi interrompido e quando foi iniciado novamente.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. Em seguida, crie um procedimento para registrar o status de desativação e reative-o.Create Or Replace PROCEDURE Ckprop_EnableAs Errnum Number; Errmsg Varchar2 (4000); CURSOR Prop_status É Selecionar Propagation_name, Destination_dblink, Status, Source_queue_name, Destination_queue_name, Error_message, Error_date From DBA_PROPAGATION Onde Status !='ENABLED';BEGIN For Rec In Prop_status LOOP Inserir nos valores de Propagation_Audit (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); COMPROMETER-SE; BEGIN Dbms_Aqadm.enable_Propagation_Schedule (Rec.Source_queue_name, Rec.Destination_dblink); EXCEÇÃO Quando Outros Então Errnum :=SQLCODE; Errmsg :=SQLERRM; Inserir em Valores Propagation_Audit ('CKPROP_ENABLE', Rec.Source_queue_name, 're-habilitar propagação para', Rec.Destination_dblink, 'ERROR', Errnum || ':' || Errmsg, Sysdate); COMPROMETER-SE; FIM; END LOOP;EXCEPTION Quando Outros Então Errnum :=SQLCODE; Errmsg :=SQLERRM; Inserir em valores de Propagation_Audit ('CKPROP_ENABLE', 'manipulador de exceção', Null, Null, 'ERROR', Errnum || ':' || Errmsg, Sysdate); COMMIT;END Ckprop_Enable;/4. Em seguida, crie um trabalho agendado para verificar no intervalo especificado.Exec 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 => Nulo, habilitado => TRUE, auto_drop=>FALSE, comentários => 'A CADA 15 MIN'); Pronto.