Pular para o conteúdo

DBMS_APPLICATION_INFO: Instrumentando o Código no Oracle Database

DBMS_APPLICATION_INFO: Instrumentando o Código no Oracle Database

DBMS_APPLICATION_INFO

O DBMS_APPLICATION_INFO é uma package PL/SQL que permite aos desenvolvedores de aplicações registrar os nomes dos módulos ou transações em execução na base de dados para uso posterior na análise de desempenho e depuração. Com ele, você pode definir os atributos da sessão, como o nome do módulo, o nome da ação, a informação do cliente e o identificador do cliente, que são armazenados nas views dinâmicas de desempenho V$SESSION e V$SESSION_LONGOPS. Neste artigo, vamos ver como usar o DBMS_APPLICATION_INFO para instrumentar o código, consultar as informações registradas e aproveitar os benefícios da instrumentação para o monitoramento, o rastreamento e a otimização da base de dados.

Definindo os Atributos da Sessão

Para que o DBMS_APPLICATION_INFO possa registrar as informações da sessão, você deve usar as procedures da package para definir os atributos da sessão. Os atributos da sessão são:

  • MODULE: O nome do módulo que está sendo executado na sessão. Um módulo pode ser o nome de um formulário em uma aplicação Oracle Forms, o nome de um segmento de código em uma aplicação Oracle Precompilers, o nome da stored procedure ou qualquer outra unidade lógica de código. Você deve definir o nome do módulo uma vez por sessão, usando a procedure SET_MODULE, e atualizá-lo sempre que mudar de módulo. Por exemplo, o seguinte comando define o nome do módulo como “add_order”:
BEGIN
  DBMS_APPLICATION_INFO.set_module (module_name => 'add_order',
                                    action_name => NULL);
END;
/
  • ACTION: O nome da ação que está sendo executada dentro do módulo. Uma ação pode ser o nome ou a descrição da transação atual dentro de um módulo. Você deve definir o nome da ação sempre que iniciar ou terminar uma ação, usando a procedure SET_ACTION. Por exemplo, o seguinte comando define o nome da ação como “insert into orders”:
BEGIN
  DBMS_APPLICATION_INFO.set_action (action_name => 'insert into orders');
END;
/
  • CLIENT_INFO: Uma informação adicional sobre a sessão, que pode ser usada para fornecer mais contexto à ação. Você pode definir a informação do cliente usando a procedure SET_CLIENT_INFO. Por exemplo, o seguinte comando define a informação do cliente como “Issued by Web Client”:
BEGIN
  DBMS_APPLICATION_INFO.set_client_info (client_info => 'Issued by Web Client');
END;
/
  • CLIENT_IDENTIFIER: Um identificador único da sessão, que pode ser usado para associar a sessão a um usuário específico, a uma aplicação ou a um pool de conexões. Você pode definir o identificador do cliente usando a procedure SET_CLIENT_IDENTIFIER da package DBMS_SESSION. Por exemplo, o seguinte comando define o identificador do cliente como “john.doe”:
BEGIN
  DBMS_SESSION.set_client_identifier (client_id => 'john.doe');
END;
/

Consultando as Informações Registradas

As informações definidas pelas procedures do DBMS_APPLICATION_INFO são armazenadas nas views dinâmicas de desempenho V$SESSION e V$SESSION_LONGOPS, que podem ser consultadas para obter as informações da sessão. As colunas dessas views que armazenam as informações da sessão são:

  • V$SESSION: Esta view contém uma linha por sessão ativa na base de dados. As colunas que armazenam as informações da sessão são:
    • MODULE: O nome do módulo atual da sessão.
    • ACTION: O nome da ação atual da sessão.
    • CLIENT_INFO: A informação do cliente da sessão.
    • CLIENT_IDENTIFIER: O identificador do cliente da sessão.
  • V$SESSION_LONGOPS: Esta view contém uma linha por operação de longa duração na base de dados. As colunas que armazenam as informações da sessão são:
    • OPNAME: O nome da operação, que pode ser definido pela procedure SET_SESSION_LONGOPS do DBMS_APPLICATION_INFO.
    • TARGET_DESC: A descrição do objeto alvo da operação, que pode ser definida pela procedure SET_SESSION_LONGOPS do DBMS_APPLICATION_INFO.
    • MODULE: O nome do módulo atual da sessão.
    • ACTION: O nome da ação atual da sessão.
    • CLIENT_INFO: A informação do cliente da sessão.
    • CLIENT_ID: O identificador do cliente da sessão.

Por exemplo, o seguinte comando consulta as informações da sessão na view V$SESSION:

SELECT sid, serial#, username, osuser, module, action, client_info, client_identifier
FROM v$session;

Aproveitando os Benefícios da Instrumentação

A instrumentação do código com o DBMS_APPLICATION_INFO traz vários benefícios para o monitoramento, o rastreamento e a otimização da base de dados. Alguns desses benefícios são:

  • Monitoramento: As informações da sessão podem ser usadas para monitorar o desempenho e o consumo de recursos dos módulos e das ações na base de dados. Você pode usar ferramentas como o Oracle Enterprise Manager, o Oracle SQL Developer ou o Oracle Trace File Analyzer para visualizar as informações da sessão e identificar gargalos, problemas ou anomalias no comportamento da base de dados.
  • Rastreamento: As informações da sessão podem ser usadas para rastrear as atividades e os eventos da sessão na base de dados. Você pode usar ferramentas como o Oracle SQL Trace, o Oracle Database Replay ou o Oracle End-to-End Tracing para coletar e analisar as informações da sessão e obter uma visão detalhada do que está acontecendo na base de dados.
  • Otimização: As informações da sessão podem ser usadas para otimizar o desempenho e a eficiência da base de dados. Você pode usar ferramentas como o Oracle Automatic Workload Repository, o Oracle Automatic Database Diagnostic Monitor ou o Oracle SQL Tuning Advisor para obter recomendações e soluções baseadas nas informações da sessão e melhorar o desempenho da base de dados.

Conclusão

O DBMS_APPLICATION_INFO é uma package PL/SQL que permite aos desenvolvedores de aplicações registrar os nomes dos módulos ou transações em execução na base de dados para uso posterior na análise de desempenho e depuração. Com ele, você pode definir os atributos da sessão, como o nome do módulo, o nome da ação, a informação do cliente e o identificador do cliente, que são armazenados nas views dinâmicas de desempenho V$SESSION e V$SESSION_LONGOPS. A instrumentação do código com o DBMS_APPLICATION_INFO traz vários benefícios para o monitoramento, o rastreamento e a otimização da base de dados.

Abs

Referências

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