Browse By

Como saber os parâmetros configurados a nivel de sessão ?

Por vezes já me perguntaram se existia alguma maneira de saber quais parâmetros foram “setados” a nivel de sessão (não default’s) por algum usuário da aplicação ou ferramentas externas. Talvez fosse um pouco tarde para colocar isso aqui no blog, mas como sei que ainda existem perguntas do gênero, creio que seja bem válido.

Voce pode facilmente habilitar um trace 10046,10053 ou utilizar as dbms’s dbms_monitor, dbms_system dependendo da versão do Oracle e com essas ferramentas voce conseguiria descobrir em tempo real os parametros que estão sendo utilizados MAS, e se a sessão na qual voce deseja obter essas informações já estiver conectada a algum tempo na qual ja emitiu os comandos de alteração de parametros ?.

Para essa questão existem algumas alternativas, confesso que dependendo da situação algumas já me ajudaram e para outras, essas mesmas alternativas não funcionaram muito  bem.

Tudo depende do seu caso.

Existem algumas formas que vou exemplificar abaixo na qual ja me ajudaram um bocado.

Opção 1: (Um pouco mais trabalhosa, mas funciona.)

Ambiente: Tenho 2 sessões conectadas no banco de dados. Logo após conectar a primeira sessão, ja configurei alguns parametros (via alter session) e realizei alguns select’s simples para a “tabela” dummy dual.

A segunda sessão eu utilizei para habilitar o monitoramento sobre a primeira, mas somente após as configurações realizadas, ou seja, não esta em tempo real.

SESSÃO1:

[oracle@prodoraclesp02 ~]$ sqlplus /nolog

SQL*Plus: Release 11.2.0.2.0 Production on Thu Aug 16 15:02:20 2012

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

[oracle@prodoraclesp02 ~]$ sqlplus /nolog

SQL*Plus: Release 11.2.0.2.0 Production on Thu Aug 16 15:10:34 2012

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

SQL> conn wmon
Enter password:
Connected.
SQL> alter session set nls_Date_format='dd/mm/yyyy hh24:mi';

Session altered.

SQL> select sysdate from dual;

SYSDATE
----------------
16/08/2012 15:11

SQL>  alter session set optimizer_mode=first_rows;

Session altered.

SQL> select sysdate from dual;

SYSDATE
----------------
16/08/2012 15:12

SQL> alter session set optimizer_index_caching=10;

Session altered.

SQL> alter session set optimizer_index_cost_adj=50;

Session altered.

SQL> select sysdate from dual;

SYSDATE
----------------
16/08/2012 15:12

Na sessão1 acima, executei algumas configurações sem ter NADA habilitado (traces e etc) e o ultimo comando foi emitido as 15:12Hs.

Na segunda sessão, realizo o seguinte processo:

[oracle@prodoraclesp02 ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.2.0 Production on Thu Aug 16 15:10:42 2012

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

Connected to:
Oracle Database 11g Release 11.2.0.2.0 - 64bit Production
SQL> set lines 100
SQL> set lines 1000
SQL> set sqlprompt SESSION2>
SESSION2>
SESSION2>
SESSION2>show user
USER is "SYS"
SESSION2>alter session set nls_date_format='dd/mm/yyyy hh24:mi';

Session altered.

SESSION2>select sysdate from dual;

SYSDATE
----------------
16/08/2012 15:15 << Horario que realizamos a conexão da sessão2 (Horário após todos os comandos realizados pela primeira sessão)

Vamos descobrir as informações da sessão1 para configurarmos as ferramentas:

SESSION2>SELECT a.SID, a.serial#, a.username, a.sql_hash_value, a.program, a.osuser,a.machine, b.spid
    FROM v$session a, v$process b
    WHERE a.paddr = b.addr
    and a.type = 'USER';

       SID    SERIAL# USERNAME        SQL_HASH_VALUE PROGRAM                                          OSUSER                         MACHINE                   SPID
---------- ---------- --------------- -------------- ------------------------------------------------ ------------------------------ ------------------------- ------------------------
        38       6967 WMON                2343063137 sqlplus@prodoraclesp02 (TNS V1-V3)               oracle                         prodoraclesp02            32602
        98         23 GGMONITOR                    0 JDBC Thin Client                                 oracle                         prodoraclesp02            6572
       193          9 GGMONITOR                    0 JDBC Thin Client                                 oracle                         prodoraclesp02            6574
       223          5 GGMONITOR                    0 JDBC Thin Client                                 oracle                         prodoraclesp02            6576
         7          9 GGMONITOR                    0 JDBC Thin Client                                 oracle                         prodoraclesp02            6578
        34         11 GGMONITOR                    0 JDBC Thin Client                                 oracle                         prodoraclesp02            6580

Os dados estão em vermelho, com essas informações (sid,serial# e o ospid ) vamos habilitar o trace sobre ela e utilizar o comando oradebug para o nosso propósito.

SESSION2>exec dbms_monitor.session_trace_enable(session_id=>38, serial_num=>6967, waits=>true, binds=>TRUE); 
PL/SQL procedure successfully completed.

SESSION2>oradebug setospid 32602   -- ospid da sessão1
Oracle pid: 25, Unix process pid: 32602, image: oracle@prodoraclesp02 (TNS V1-V3)
SESSION2>oradebug dump modified_parameters 1;
Statement processed.
SESSION2>oradebug tracefile_name;
/u01/app/oracle/diag/rdbms/gg/gg/trace/gg_ora_32602.trc

Acima utilizamos o oradebug que pode ser útil para dezenas de objetivos. Uma lista das suas configurações pode ser encontrada aqui.

Vamos voltar para a sessão1 e atualiza-la somente para gerar o trace no SO.

SQL> select sysdate from dual;

SYSDATE
----------------
16/08/2012 15:17

Voltamos para a sessão2 e abrimos o trace:

SESSION2>! vi /u01/app/oracle/diag/rdbms/gg/gg/trace/gg_ora_32602.trc

Trace file /u01/app/oracle/diag/rdbms/gg/gg/trace/gg_ora_32602.trc
Oracle Database 11g Release 11.2.0.2.0 - 64bit Production
ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_single
System name:    Linux
Node name:      prodoraclesp02
Release:        2.6.18-164.el5
Version:        #1 SMP Tue Aug 18 15:51:48 EDT 2009
Machine:        x86_64
Instance name: gg
Redo thread mounted by this instance: 1
Oracle process number: 25
Unix process pid: 32602, image: oracle@prodoraclesp02 (TNS V1-V3)

*** 2012-08-16 15:14:23.878
*** SESSION ID:(38.6967) 2012-08-16 15:14:23.878
*** CLIENT ID:() 2012-08-16 15:14:23.878
*** SERVICE NAME:(SYS$USERS) 2012-08-16 15:14:23.878
*** MODULE NAME:(SQL*Plus) 2012-08-16 15:14:23.878
*** ACTION NAME:() 2012-08-16 15:14:23.878

Received ORADEBUG command (#1) 'dump modified_parameters 1' from process 'Unix process pid: 32604, image: <none>'
DYNAMICALLY MODIFIED PARAMETERS:
  nls_date_format          = dd/mm/yyyy hh24:mi
  optimizer_mode           = FIRST_ROWS
  optimizer_index_cost_adj = 50
  optimizer_index_caching  = 10

*** 2012-08-16 15:14:23.878
Finished processing ORADEBUG command (#1) 'dump modified_parameters 1'
...

Acima em vermelho na sessão DYNAMICALLY MODIFIED PARAMETERS fomos capazes de encontrar todas as alterações realizadas a nivel de sessão antes de habilitar o trace, dessa forma, podemos utilizar essas informações para analise de performance ou troubleshooting.

 

Opção2: (Vc necessita apenas ter acesso de leitura a view V_$SES_OPTIMIZER_ENV).

Não se assuste com o grau de dificuldade. rs:

SESSION2>select sid,NAME,VALUE from V_$SES_OPTIMIZER_ENV
    where sid=38
    and NAME in ('optimizer_index_cost_adj','optimizer_index_caching','optimizer_mode');

       SID NAME                                     VALUE
---------- ---------------------------------------- -------------------------
        38 optimizer_mode                           first_rows
        38 optimizer_index_cost_adj                 50
        38 optimizer_index_caching                  10

Pronto. Mesmo resultado. (Somente e infelizmente os parâmetros NLS* não mostrados nessa view )

Essa view foi introduzida a partir da versão 10g(nenhuma novidade atual) e com ela chegaram outras que podem também auxiliar nas analises diárias, seriam:

V_$SYS_OPTIMIZER_ENV
V_$SES_OPTIMIZER_ENV
V_$SQL_OPTIMIZER_ENV

Uma coisa que sempre falo para os meus amigos: “É muito bom saber como se alcança o mesmo objetivo por caminhos diferentes.”

Esse post foi criado apenas para compartilhar diferentes alternativas para se alcançar o mesmo objetivo para quem gosta dessa metodologia, assim como eu.

Forte abraço

 

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>