Agora que já conhecemos o arquivo de trace do Oracle, vamos aprender como ativá-lo.
Este trabalho pode ser facilmente realizado executando o programa SESSION_TRACE_ENABLE, existente no pacote DBMS_MONITOR. Ele recebe os seguintes parâmetros:
- session_id: identificador da sessão. Se não for informado, o trace será ativado para a sua sessão atual;
- serial_num: número serial da sessão, que garante a unicidade na identificação da sua sessão. Se não for informado, serão ativados os traces para todas as sessões que tiverem o mesmo sesion_id.
- waits: se informar o valor verdadeiro, serão registradas no trace informações sobre eventos de espera da sessão. TRUE é o valor padrão, caso não seja informado.
- binds: se informar o valor verdadeiro, serão registradas no trace informações sobre as variáveis de substituição das consultas (bind variables). FALSE é o valor padrão, caso não seja informado.
Para desativar o trace execute o programa SESSION_TRACE_DISABLE deste mesmo pacote, informando os mesmos dois primeiros parâmetros utilizados na ativação. Se não informar nenhum parâmetro será desativado para a sessão corrente.
O usuário que irá ativar o rastreamento deve possuir permissão SYSDBA ou ter privilégio de execução no pacote DBMS_MONITOR.
Dependendo do ambiente a tarefa mais árdua neste trabalho é conseguir identificar a sessão que será rastreada. A visão V$SESSION do dicionário do Oracle provê, além dos campos session_id (sid) e serial_num (serial#), outras colunas que permitem identificar a sessão, como estas:
- username: nome do usuário do banco Oracle. Não ajuda muito quando todas as sessões são conectadas utilizando o mesmo esquema (Ex. produtos Datasul e Logix);
- osuser: nome do usuário do sistema operacional da máquina cliente. Não ajuda muito quando a conexão é realizada através de um servidor de aplicação num modelo de 3 camadas, pois todas as conexões virão das mesmas máquinas;
- machine/terminal: nome da máquina e do terminal, também do sistema operacional que estabeleceu a conexão cliente;
- program: nome do executável que faz a conexão com o banco. No ambiente Datasul será o executável cliente do Progress e no Logix com Totvstec será o executável do totvsappserver.
Como pudemos observar, nos ambientes Datasul e Logix precisaremos recorrer a alguns artifícios para identificar as conexões. No ambiente Datasul, onde a conexão é geralmente client/server sem terceira camada, é mais fácil rastrear pelos campos machine e osuser.
Já no Logix a maneira mais prática é identificar a sessão primeiramente na tabela do produto chamada LOG_DADOS_SESSAO_LOGIX. Estes são os seus campos:
- sid: identificador da conexão com o Oracle, podendo ser utilizado para fazer um join com a visão V$SESSION, através do seu campo audsid;
- dat_execucao: como o nome já aponta é a data de execução do programa (pode ser assimilado como a data de login ou abertura da sessão no banco);
- usuario: login no sistema Logix;
- programa: nome do programa em execução. No Logix cada programa abre uma sessão no banco Oracle;
Com a linha da tabela LOG_DADOS_SESSAO_LOGIX selecionada, faz-se uma consulta na tabela V$SESSION para obter os valores das colunas SID e SERIAL#.
Existem outras maneiras de ativar o trace das sessões, incluindo rastrear todas a sessões do banco de dados e também comandos que podem ser utilizados em versões mais antigas do Oracle. Para esta diversidade de opções busque informação na documentação oficial da Oracle.