Pular para o conteúdo

DBMS_ALERT: Sinalizações e Notificações Assíncronas no Oracle

DBMS_ALERT: Sinalizações e Notificações Assíncronas no Oracle

O Oracle Database oferece uma variedade de recursos poderosos para manipular e gerenciar dados. Entre esses recursos, o PL/SQL se destaca como uma linguagem procedural robusta incorporada ao Oracle Database. Neste artigo, exploraremos o DBMS_ALERT, um pacote PL/SQL que proporciona sinalizações e notificações assíncronas, permitindo a comunicação eficiente entre diferentes sessões de banco de dados.

Introdução ao DBMS_ALERT

O DBMS_ALERT é um pacote PL/SQL que faz parte da biblioteca padrão do Oracle Database. Ele é projetado para permitir a comunicação assíncrona entre sessões de banco de dados, permitindo que um processo notifique outros processos sobre eventos específicos. Esses eventos podem variar desde atualizações de dados até situações mais complexas, como a conclusão de um processo assíncrono.

Principais Componentes do DBMS_ALERT

O DBMS_ALERT consiste em três componentes principais:

  • Alerts (Sinalizações): Representam os eventos que podem ocorrer no sistema e que podem ser sinalizados. Cada alerta possui um nome exclusivo, e os processos podem se inscrever para receber notificações sobre eventos específicos.
  • Sessions (Sessões): Refere-se aos processos do banco de dados que desejam ser notificados sobre eventos específicos. As sessões se inscrevem para receber alertas de interesse.
  • Listeners (Ouvintes): São os processos que emitem os alertas. Eles sinalizam eventos para que as sessões inscritas sejam notificadas.

Utilizando o DBMS_ALERT na Prática

Vamos explorar alguns exemplos práticos para ilustrar como usar o DBMS_ALERT. Suponha que temos um sistema onde diferentes processos precisam ser notificados quando um novo pedido é inserido na tabela de pedidos.

Exemplo 1: Criando um Alerta
-- Criando um alerta chamado "NOVO_PEDIDO"
EXEC DBMS_ALERT.REGISTER('NOVO_PEDIDO');
Exemplo 2: Emitindo um Alerta
-- Emitindo um alerta quando um novo pedido é inserido
INSERT INTO pedidos (pedido_id, descricao) VALUES (1, 'Novo Pedido');
EXEC DBMS_ALERT.SIGNAL('NOVO_PEDIDO', 'Novo pedido inserido!');

Resultado:

O alerta “NOVO_PEDIDO” é sinalizado com a mensagem “Novo pedido inserido!”.

Exemplo 3: Recebendo uma Notificação
-- Sessão 1: Se inscrevendo para receber notificações sobre o alerta "NOVO_PEDIDO"
DECLARE
   v_status NUMBER;
   v_msg    VARCHAR2(200);
BEGIN
   DBMS_ALERT.WAITONE('NOVO_PEDIDO', v_msg, v_status);
   IF v_status = 0 THEN
      DBMS_OUTPUT.PUT_LINE('Notificação recebida com sucesso: ' || v_msg);
   ELSE
      DBMS_OUTPUT.PUT_LINE('Erro ao aguardar notificação');
   END IF;
END;

Resultado:

A Sessão 1 aguarda até que o alerta “NOVO_PEDIDO” seja sinalizado por outra sessão. Assim que a notificação é recebida, a mensagem “Sessão 1: Notificação recebida com sucesso: Novo pedido inserido!” é exibida.

Exemplo 4: Recebendo uma Notificação na Sessão 2
-- Sessão 2: Se inscrevendo para receber notificações sobre o alerta "NOVO_PEDIDO"
DECLARE
   v_status NUMBER;
   v_msg    VARCHAR2(200);
BEGIN
   DBMS_ALERT.WAITONE('NOVO_PEDIDO', v_msg, v_status);
   IF v_status = 0 THEN
      DBMS_OUTPUT.PUT_LINE('Sessão 2: Notificação recebida com sucesso: ' || v_msg);
   ELSE
      DBMS_OUTPUT.PUT_LINE('Sessão 2: Erro ao aguardar notificação');
   END IF;
END;

Resultado:

A Sessão 2 aguarda até que o alerta “NOVO_PEDIDO” seja sinalizado por outra sessão. Assim que a notificação é recebida, a mensagem “Sessão 2: Notificação recebida com sucesso: Novo pedido inserido!” é exibida.

Estes exemplos detalhados mostram como criar um alerta, emitir um alerta quando ocorre um evento específico e como duas sessões podem se comunicar de maneira assíncrona usando o DBMS_ALERT.

Conclusão

O DBMS_ALERT oferece uma maneira eficaz de implementar comunicação assíncrona entre sessões de banco de dados no Oracle 19c. Sua simplicidade e eficácia o tornam uma escolha valiosa para cenários onde a notificação assíncrona é necessária.

Ao incorporar o DBMS_ALERT em seus aplicativos PL/SQL, você pode melhorar a eficiência e a sincronização entre diferentes partes do sistema, facilitando a implementação de lógicas complexas de maneira mais organizada e escalável.

Abs

Referências

  • Documentação oficial do Oracle Database 19c – Oracle Documentation
  • Oracle PL/SQL Programming, de Steven Feuerstein e Bill Pribyl, O’Reilly Media.
Giovano Silva

Giovano Silva

Giovano Silva é um profissional com mais de 10 anos de experiência em tecnologias Oracle, com ênfase em PL/SQL. Ele adora escrever sobre soluções para problemas comuns enfrentados por profissionais Oracle em seu dia a dia. Seu objetivo é compartilhar conhecimento, simplificar conceitos complexos e ajudar a comunidade Oracle a crescer coletivamente.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

plugins premium WordPress