DBMS_APPLICATION_INFO: Instrumentando o Código no Oracle Database
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
- DBMS_APPLICATION_INFO: Documentação oficial da package DBMS_APPLICATION_INFO no Oracle Database 19c.
- Oracle dbms_application_info tips: Um artigo que fornece algumas dicas e exemplos de uso da package DBMS_APPLICATION_INFO no Oracle Database.