Scripts para melhorar sua administração
por Darci Leandro
Olá pessoal,
Quando somos acionados para identificar o que possa estar ocorrendo com algum banco de dados, devemos fazer isso de uma forma muito cuidadosa, apesar de toda pressão que possamos estar recebendo a situação poderá piorar se executarmos comandos errados.
Pois bem, é visando isso que a seguir estarei mostrando um pequeno roteiro com scripts onde você poderá executar em todo banco de dados antes mesmo de você começar efetivamente o seu trabalho.
- Identificando a Instância
Antes de iniciar qualquer trabalho é importante obtermos algumas informações sobre a instância.
SQL> set pagesize 1000
SQL> set linesize 300
SQL>
SQL> column instance_name format a15
SQL> column host_name format a15
SQL> column startup format a21
SQL> column hoje format a21
SQL>
SQL> select host_name, instance_name, version,
2 to_char(startup_time, 'DD-MON-RRRR HH24:MI:SS') STARTUP,
3 to_char(sysdate, 'DD-MON-RRRR HH24:MI:SS') HOJE
4 from v$instance;
HOST_NAME INSTANCE_NAME VERSION STARTUP HOJE
--------------- --------------- ----------------- --------------------- ---------------------
DLTECNOLOGIA DLTST 10.1.0.3.0 03-JAN-2007 16:10:27 19-JAN-2007 23:18:02
- Alterando o Prompt
Em alguns casos, por exemplo, em servidores de produção seria interessante você mudar o prompt para o nome da instância, assim você terá a certeza se está conectado no lugar certo.
SQL> define Prompt = ''
SQL> column instance_name new_value Prompt
SQL> select instance_name from v$instance;
INSTANCE_NAME
---------------
DLTST
SQL> set sqlprompt '&&Prompt>'
- Todas conexões existentes
Com o script abaixo você poderá identificar quantas conexões existem nesse exato momento em seu banco de dados.
Estou totalizando por “status” e utilizando a cláusula UNION para facilitar a visualização do resultado.
DLTST> select count(username) as QTDE, 'TOTAL' as CONEXOES
2 from v$session where username is not null
3 UNION
4 select count(username), 'ATIVOS'
5 from v$session where username is not null and status = 'ACTIVE'
6 UNION
7 select count(username), 'INATIVOS'
8 from v$session where username is not null and status = 'INACTIVE'
9 UNION
10 select count(username), 'PERDIDOS'
11 from v$session where username is not null and status = 'SNIPED'
12 order by 1, 2;
QTDE CONEXOES
---------- --------
1 ATIVOS
4 PERDIDOS
20 INATIVOS
25 TOTAL
- Detalhando as conexões existentes
DLTST> select username, status, count(username) TOTAL
2 from v$session
3 where username is not null
4 group by username, status
5 order by 1, 2;
USERNAME STATUS TOTAL
------------------------------ -------- ----------
DBA_DLTECNOLOGIA ACTIVE 1
SYSMAN INACTIVE 10
USUARIO_01 SNIPED 1
USUARIO_02 INACTIVE 2
USUARIO_03 INACTIVE 1
USUARIO_04 INACTIVE 1
USUARIO_05 SNIPED 1
USUARIO_06 SNIPED 2
USUARIO_07 INACTIVE 1
USUARIO_08 INACTIVE 5
10 linhas selecionadas.
- Conexões perdidas
Caso existam conexões com o Status ‘SNIPED’ significa que são conexões que ficaram perdidas por algum motivo.
- Selecionando as conexões perdidas
DLTST> select sid, serial#, username, osuser, machine, status
2 from v$session
3 where username IS NOT NULL
4 and status = 'SNIPED'
5 order by 3, 4;
SID SERIAL# USERNAME OSUSER MACHINE
------ ------- -------------------- -------------------- -----------------
151 14 USUARIO_01 USU_01 DL56
130 2617 USUARIO_05 USU_05 DL34
113 22126 USUARIO_06 USU_06 DL28
120 57981 USUARIO_06 USU_18 DL12
- Eliminando essas conexões
DLTST> alter system kill session '151,14';
DLTST> alter system kill session '130,2617';
DLTST> alter system kill session '113,22126';
DLTST> alter system kill session '120,57981';
Conclusão
Com esse artigo fica mais claro você ter certeza onde está conectado e identificar quais são os outros usuários que estão conectados também, além de identificar quantas conexões existem para cada um e seus ‘status’, enfim, você poderá administrar melhor a situação.
Boa sorte a todos e até a próxima...