Compartilhando conhecimento com o mundo

Com tecnologia do Blogger.

Pesquisa

Download

Blogger Tricks

Blogger Themes

Visitas

Assuntos

Mostrar mensagens com a etiqueta Oracle. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta Oracle. Mostrar todas as mensagens

1/30/2014

Comandos Oracle


Agora irei detalhar um pouco alguns dos principais comandos para administrar uma instância do Oracle. Lembrando que os comandos a seguir foram executados em ambiente Linux, mais nada impede de executar em ambiente Windows também.

Parar o Servidor Oracle

Parar o Banco
sqlplus / as sysdba
SQL> shutdown immediate
SQL> exit
Iniciar o Servidor Oracle

Iniciar o Banco
sqlplus / as sysdba
SQL> startup
SQL> exit
Shutdown Limpo (conectado no SQLPlus)

Opção Normal
shutdown
startup
Opção Transactional
shutdown transactional
startup
Opção Immediate
shutdown immediate
startup
Shutdown Sujo (conectado no SQLPlus)

Opção Abort
shutdown abort
startup
Reinicialização forçada
startup force
Acessar Enterprise Manager no Servidor
firefox http://localhost:1158/em
Acessar SQLPlus

Acessar SQLPlus com Autenticação Normal
sqlplus system/oracle
Acessar SQLPlus com Autenticação pelo Arquivo de Senhas
sqlplus sys/oracle as sysdba
sqlplus sys/oracle as sysoper
Acessar SQLPlus com Autenticação pelo Sistema Operacional
sqlplus / as sysdba
sqlplus / as sysoper
Acessar iSQLPlus

Iniciar iSQLPlus
isqlplusctl start
Parar iSQLPlus
isqlplusctl stop
Acessar iSQLPlus no Servidor
firefox http://localhost:5560/isqlplus
Manipular Arquivos de Inicialização (conectado no SQLPlus)

Visualizar todos os parâmetros da Instância
show parameters
Visualizar parâmetro da Instância
show parameters sga_target
show parameter pga_aggregate_target
Alterar parâmetros no SPFile
alter system set sga_target=256M scope=memory;
show parameter sga_target;
alter system set pga_aggregate_target=70M scope=spfile;
show parameter pga_aggregate_target;
shutdown immediate
startup
show parameter sga_target;
show parameter pga_aggregate_target;
alter system set sga_target=50M scope=both;
alter system set sga_target=50M scope=spfile;
shutdown immediate
startup
Criar PFile com base no SPFile para edição manual
create pfile='$ORACLE_HOME/dbs/initorcl.ora' from spfile='$ORACLE_HOME/dbs/spfileorcl.ora';
Editar arquivo de parâmetros no Sistema Operacional (Terminal do Linux)
vim $ORACLE_HOME/dbs/initorcl.ora
Criar SPFile com base no PFile editado manualmente
create spfile='$ORACLE_HOME/dbs/spfileorcl.ora' from pfile='$ORACLE_HOME/dbs/initorcl.ora';
startup
show parameter sga_target;
show parameter pga_aggregate_target;
Processos de Inicialização do Servidor Oracle (conectado no SQLPlus)

Iniciar em modo NOMOUNT
shutdown immediate
startup nomount
Alterar para modo MOUNT
alter database mount;
Iniciar em modo MOUNT
shutdown immediate
startup mount
Alterar para modo OPEN para somente leitura
alter database open read only;
Alterar para modo OPEN
shutdown immediate
startup mount
alter database open;
Habilitar modo OPEN restrito
alter system enable restricted session;
Desabilitar modo OPEN restrito
alter system disable restricted session;
Iniciar em modo OPEN restrito e desabilitar modo restrito;
shutdown immediate
startup restrict
alter system disable restricted session;
commit;
Iniciar em modo OPEN utilizando um pfile específico
shutdown immediate
startup pfile='$ORACLE_HOME/dbs/initorcl.ora'
shutdown immediate
startup
Acessar Log de Alerta

Localizar diretório do log de alerta (conectado no SQLPLus)
show parameter background_dump_dest;
Visualizar log de alerta (no terminal do linux)
vim /alert_orcl.log
Acessar views dinâmicas de desempenho

Ajustar SQLPlus
set linesize 200;
set pagesize 100;
Consultar views dinâmicas
select * from v$fixed_table;
Consultar sessões correntes
col machine format a10;
col program format a30;
col username format a10;
col osuser format a10;
select machine, program, username, osuser from v$session where username is not null;
Consultar instruções SQL que demoram mais de um segundo
col sql_text format a50;
col executions format 99999;
select sql_text, executions from v$sql where cpu_time > 1000000;
Consultar informações da sga
select * from v$sgainfo;
Consultar informações dos processos servidores
col username format a10;
col program format a30;
select pid, username, program, pga_used_mem, pga_alloc_mem, pga_freeable_mem, pga_max_mem from v$process;
Comandos de Stop/Start Listener

12.1. Parar Listener
lsnrctl stop
12.2 Iniciar Listener
lsnrctl start
12.3 Status Listener
lsnrctl status
Enterprise Manager

Inicar
emctl start dbconsole
Parar
emctl stop dbconsole
Status
emctl status dbconsole
Manutenção de Tablespaces

Criando uma tablespace de DADOS com tamanho de 1GB
SQL>create tablespace TS_DADOS datafile '/oracle/oradata/dbteste/TS_DADOS01.dbf' size 1024m;
Adicionando um segundo datafile de 512MB ao tablespace TS_DADOS
SQL>alter tablespace TS_DADOS add datafile '/oracle/oradata/dbteste/TS_DADOS02.dbf' size 512m;
Adicionando arquivo de dados ao tablespace de dados
SQL>alter database datafile '/oracle/oradata/dbteste/TS_DADOS01.dbf' resize 1024m;
Aumentando o tablespace TS_DADOS para 512m
SQL>alter tablespace TS_DADOS resize 512m;
Criando uma segunda tablespace de UNDO, UNDOTBS2
SQL>create undo tablespace UNDOTBS2 datafile '/oracle/oradata/dbteste/UNDOTBS201.dbf' size 512m;
Definindo a tablespace de UNDO da instância como UNDOTBS2
SQL>alter system set undo_tablespace=UNDOTBS2;
Criando uma tablespace temporaria adicional de 512MB.
SQL>create temporary tablespace TS_TEMP2 tempfile '/oracle/oradata/dbteste/TS_TEMP201.dbf' size 512m;
Definindo a tablespace temporária dafault da instância
SQL>alter database default temporary tablespace TS_TEMP2;
Renomeando uma tablespace
SQL>alter tablespace TEMP rename to TS_TEMP2;
Definindo a tablespace de dados dafault da instância
SQL>alter database default tablespace TS_DADOS;
Manutenção de Tabelas

Adicionando um campo a tabela
SQL>alter table TB_CLIENTE add ( FL_SITUACAO VARCAHR2(1));
Eliminando a coluna FL_SITUACAO da tabela de clientes
SQL>alter table TB_CLIENTE drop column FL_SITUACAO;
Eliminando a tabela de clientes
SQL>drop table TB_CLIENTE;
Os índices da tabela ficarão inválidos após a execução desta operação, devendo ser reconstruídos em seguida
SQL>alter table TB_CLIENTE move tablespace TB_MANUTENCAO_D;
Reorganizando a tabela na mesma tablespace - Opção disponível apenas a partir do 10g
SQL> alter table hr.employees enable row movement;
SQL> alter table hr.employees shrink space;
SQL> alter table hr.employees disable row movement;
Criando um índice simples, com apenas uma coluna – DT_NASCIMENTO, na tabela de clientes.
SQL>create index IX_CLIENTE1 on TB_CLIENTE (DT_NASCIMENTO) tablespace TB_ERPX_I;
Reconstruindo o índice IX_CLIENTE1 em uma nova tablespace
SQL>alter index IX_CLIENTE1 rebuild tablespace TS_MANUTENCAO_I;
Utilização dos Utilitários Export e Impor

EXP - Fazendo um export completo, full do banco oracle
exp userid=system/manager file=exp_FULL.dmp log=exp_FULL.log full=y
EXP - Fazendo o export somente do esquema, OWNER, chamado ERP
exp userid= file=exp_ERP.dmp log=exp_ERP.log owner=ERP
IMP - Fazendo o import do esquema ERP, como usuário SYSTEM, com buffer de 10MB e com salvamentos, commits, intermediários
imp userid=system/manager file=exp_ERP.dmp
Atribuindo e Revogando Privilégios

Atribuindo privilégios sobre a tabela TB_CLIENTE para o usuário CLI_ERP1
SQL>grant select, insert, update on TB_CLIENTE to CLI_ERP1;
Atribuindo o privilégio de sistema SELECT ANY TABLE para o usuário ERP
SQL>grant SELECT ANY TABLE to ERP;
Removendo o privilégio de sistema EXECUTE ANY PROCEDURE do usuário ERP
SQL>revoke EXECUTE ANY PROCEDURE from ERP;
Removendo o privilégio de DELETE na tabela de usuário CLI_ERP1
SQL>revoke DELETE on TB_CLIENTE from CLI_ERP1;
Criando Roles - Atribuições

Criando uma ROLE chamada RO_SISTEMA_ERP
SQL>create role RO_SISTEMA_ERP;
Criando um Database Link

Criando um database link do banco de desenvolvimento para o bano de produção identificado pelo usuário ERP_PRD, usando a string de conexão DB_PROD.
SQL>create public database link DB_PROD
connect to ERP_PRD identified by ERP1234
using 'DB_PROD';
Sinônimos Privados – Visíveis para um usuário específico

Criando um sinônimo chamado CLIENTES para o usuário CLI_ERP1 apontando para a tabela TB_CLIENTE do usuário, dono, ERP.
SQL>create synonym CLI_ERP1.CLIENTES for ERP.TB_CLIENTE;
Sinônimos Públicos – Visíveis para todos os usuários

Criando um sinônimo público, chamado, CLIENTES, para a tabela TB_CLIENTE
SQL>create public synonym CLIENTES for ERP.TB_CLIENTE;

1/28/2014

Matar Sessão de Usuário no Oracle


Trabalhando com desenvolvedores, muitas vezes me perguntam para matar sessões órfãos presos no Oracle. Estas sessões em algum momento usam um monte de recursos ou bloqueiam os objetos e linhas das tabelas. Os desenvolvedores geralmente trabalham com aplicações instáveis ​​que fazem transações, ou depuradores permitindo que o desenvolvedor possa parar e interromper o processo de aplicação abruptamente assim para pular a parte commit/rollback e até mesmo a parte de desconexão do código. O programa cliente para de rodar mais e não informa ao banco de dados Oracle para cancelar a declaração e desligar de forma adequada. Isso pode produzir um processo órfão no banco de dados. Na verdade o Oracle (o processo PMON em segundo plano) vai matar esses processos órfãos, por si só, mas pode demorar um pouco antes que ele seja identificados e morto, neste meio tempo os desenvolvedores podem estar enfrentando bloqueios ou lentidão no Oracle. Quando o ambiente de desenvolvimento é relativamente pequeno, é fácil de identificar as sessões que precisam de ser matadas. Mas em um ambiente grande, com vários desenvolvedores conectados ao mesmo servidor de banco de dados com o mesmo nome, às vezes, é um pouco complicado. Para enfrentar esta tarefa demorada e repetitiva, criei algumas maneiras para facilitar e agilizar este processo de matar processos.

Matar Manualmente

Primeiro temos que descobrir algumas identificadores da sessão para matar manualmente que é o PID e o serial number (que identifica unicamente objetos de uma sessão): Acessando o sqlplus
[s401:oracle]$/home/oracle> sqlplus / as sysdba

SQL*Plus: Release 10.2.0.5.0 - Production on Tue Jan 28 13:26:30 2014

Copyright (c) 1982, 2010, Oracle.  All Rights Reserved.


Connected to:
Oracle Database 10g Release 10.2.0.5.0 - 64bit Production

SQL> 
Para matar uma sessão no Oracle precisamos de dois dados importantes ( SID e SERIAL# ), ambos podem ser obtidos da VIEW V$SESSION. Quero matar alguns processos do usuário ADRH que estão rodando no PROGRAM GFP804910G - este é o select para descobrir o SID e o SERIAL desse usuário. Para pegarmos estes dados podemos executar o seguinte comando.
SQL> select sid, serial#, STATUS, PROGRAM from v$session where username = 'ADRH';

       SID    SERIAL# STATUS   PROGRAM
---------- ---------- -------- ------------------------------------------------
      1574      28283 ACTIVE   GFP804910G@s401.lm (TNS V1-V3)
      1594      53302 ACTIVE   GFP804910G@s401.lm (TNS V1-V3)
      1604      58352 ACTIVE   GFP804910G@s401.lm (TNS V1-V3)
      1618      45607 INACTIVE SQL Developer
      1630          7 ACTIVE   GPRDAEMO@s401.lm (TNS V1-V3)
      1642      45102 INACTIVE w3wp.exe

6 rows selected.

SQL> 
Peguei o SID e o SERIAL# do que quero matar e executei este comando, importante o usuário pediu para matar os processos processos que estão rodando com o program GFP804910G - O IMMEDIATE especifica para o banco Oracle efetuar o final da transação com rollback, liberando e retornando o controle para você imediatamente.
SQL> ALTER SYSTEM KILL SESSION '1574,28283' IMMEDIATE;
SQL> ALTER SYSTEM KILL SESSION '1594,53302' IMMEDIATE;
SQL> ALTER SYSTEM KILL SESSION '1604,58352' IMMEDIATE;
Pronto, processos mortos;
SQL> select sid, serial#, STATUS, PROGRAM from v$session where username = 'ADRH';

       SID    SERIAL# STATUS   PROGRAM
---------- ---------- -------- ------------------------------------------------
      1618      45607 INACTIVE SQL Developer
      1630          7 ACTIVE   GPRDAEMO@s401.lm (TNS V1-V3)
      1642      45102 INACTIVE w3wp.exe

3 rows selected.

SQL> 

Script em Shell

Uma alternativa é criar uma rotina em shell para facilitar a vida do dba, dá para checar os usuários online e tem uma opção para matar;
-------------------------------------------------------------------------------------------------
27/01/2014                        ***** ORACLE BASIC SERVICES *****                      15:22:07
-------------------------------------------------------------------------------------------------
                                  s401.lm - oracle - ORACLE_SID=URHDES

USERNAME        OSUSER                 SID    SERIAL# SPID         STATUS   PROGRAM                        LOGON_TIME
--------------- --------------- ---------- ---------- ------------ -------- ------------------------------ --------------------
                oracle                1592      16336 19810        ACTIVE   oracle@s401.lm (J000)          27-JAN-2014 15:17:27
                oracle                1556         20 19893        ACTIVE   oracle@s401.lm (J001)          27-JAN-2014 15:17:22
SYS             oracle                1562         29 19959        ACTIVE   sqlplus@s401.lm (TNS V1-V3)    27-JAN-2014 15:17:51
ADRH            oracle                1620      12770 15011        ACTIVE   GFP804910G@s401.lm (TNS V1-V3) 27-JAN-2014 11:20:20
ADRH            oracle                1572      10408 13151        ACTIVE   GFP804910G@s401.lm (TNS V1-V3) 27-JAN-2014 09:53:57
ADRH            oracle                1603      44946 14731        ACTIVE   GFP804910G@s401.lm (TNS V1-V3) 27-JAN-2014 11:09:44

        Codigo   Funcao                                      
        -------  -------------------------------------------
           1     Checar Determinado Processo              
           2     Matar Processo                              
           0     Sair da Aplicacao                        
        -------  -------------------------------------------


     Digite um Codigo – 2
A opção 2 escolhida dá para matar o processo
-------------------------------------------------------------------------------------------------
27/01/2014                        ***** ORACLE BASIC SERVICES *****                      15:28:38
-------------------------------------------------------------------------------------------------
                                  s401.lm - oracle - ORACLE_SID=URHDES


Digite o SID do usuario    :  1620

Digite o SERIAL do usuario :  12770
Processo SID 1620 com a SERIAL 12770 não esta mais ativo;
-------------------------------------------------------------------------------------------------
27/01/2014                        ***** ORACLE BASIC SERVICES *****                      15:22:07
-------------------------------------------------------------------------------------------------
                                  s401.lm - oracle - ORACLE_SID=URHDES

USERNAME        OSUSER                 SID    SERIAL# SPID         STATUS   PROGRAM                        LOGON_TIME
--------------- --------------- ---------- ---------- ------------ -------- ------------------------------ --------------------
                oracle                1592      16336 19810        ACTIVE   oracle@s401.lm (J000)          27-JAN-2014 15:17:27
                oracle                1556         20 19893        ACTIVE   oracle@s401.lm (J001)          27-JAN-2014 15:17:22
SYS             oracle                1562         29 19959        ACTIVE   sqlplus@s401.lm (TNS V1-V3)    27-JAN-2014 15:17:51
ADRH            oracle                1572      10408 13151        ACTIVE   GFP804910G@s401.lm (TNS V1-V3) 27-JAN-2014 09:53:57
ADRH            oracle                1603      44946 14731        ACTIVE   GFP804910G@s401.lm (TNS V1-V3) 27-JAN-2014 11:09:44

        Codigo   Funcao                                      
        -------  -------------------------------------------
           1     Checar Determinado Processo              
           2     Matar Processo                              
           0     Sair da Aplicacao                        
        -------  -------------------------------------------


     Digite um Codigo – 2

Script completo em shell script
# ------------------------------------------------------------------------------------------------------------------------- 
# Funcao: Mata uma sessao imediatamente e faz  rollback na transacao; 
# Criada: 28/01/2013 
#  Autor: Claudemar Martins
# -------------------------------------------------------------------------------------------------------------------------

Principal () {

clear
echo "-------------------------------------------------------------------------------------------------"
echo -n
echo -n "$(date "+%d/%m/%Y")"
echo -n "      "
echo -n "                  ***** ORACLE BASIC SERVICES *****   "
echo -n "                   "
echo "$(date "+%T")"
echo "-------------------------------------------------------------------------------------------------"
echo "                                  $(hostname) - $(whoami) - $(env | grep ORACLE_SID)"

sqlplus -s '/as sysdba' << endofcommand

set linesize 220
set pagesize 100

col USERNAME for a15
col OSUSER   for a15
col PROGRAM  for a30

SELECT s.username, s.osuser, s.sid, s.serial#, p.spid, s.status, s.program, TO_CHAR(s.logon_Time,'DD-MON-YYYY HH24:MI:SS') AS logon_time FROM v\$session s  inner join v\$process p     on s.paddr = p.addr   WHERE s.STATUS <> 'INACTIVE'  and s.type <> 'BACKGROUND'

/ 
EXIT
endofcommand
echo 
echo ""
echo "        Codigo   Funcao                                      "
echo "        -------  ------------------------------------------- "
echo "           1     Checar Determinado Processo                 "
echo "           2     Matar Processo                              "
echo "           0     Sair da Aplicacao                           "
echo "        -------  ------------------------------------------- "
echo ""

echo
echo -n "     Digite um Codigo - "   
   read OPCAO2
   case $OPCAO2 in
      1) CHECAR_DETERMINADO_PROCESSO_RODANDO ;;
      2) MATAR_PROCESSO ;;
      0) exit ;;
      *) Principal ;;
   esac
}

# ======================================================================================================
# Matando o processo desejado
# ======================================================================================================

MATAR_PROCESSO ()
{
clear
echo "-------------------------------------------------------------------------------------------------"
echo -n
echo -n "$(date "+%d/%m/%Y")"
echo -n "      "
echo -n "                  ***** ORACLE BASIC SERVICES *****   "
echo -n "                   "
echo "$(date "+%T")"
echo "-------------------------------------------------------------------------------------------------"
echo "                                  $(hostname) - $(whoami) - $(env | grep ORACLE_SID)"
echo
echo
echo -n "Digite o SID do usuario    :  "
read SID_DESEJADO
echo
echo -n "Digite o SERIAL do usuario :  "
read SERIAL_DESEJADO

sqlplus -s '/as sysdba' << endofcommand

ALTER SYSTEM KILL SESSION '$SID_DESEJADO, $SERIAL_DESEJADO' IMMEDIATE

/ 
EXIT
endofcommand

clear
echo "-------------------------------------------------------------------------------------------------"
echo -n
echo -n "$(date "+%d/%m/%Y")"
echo -n "      "
echo -n "                  ***** ORACLE BASIC SERVICES *****   "
echo -n "                   "
echo "$(date "+%T")"
echo "-------------------------------------------------------------------------------------------------"
echo "                                  $(hostname) - $(whoami) - $(env | grep ORACLE_SID)"
echo
echo
echo "                    +---------------------------------------------------------+"
echo "                    |                                                         |"
echo "                    |                aguarde alguns segundos ...              |"
echo "                    |                                                         |"
echo "                    +---------------------------------------------------------+"
echo
sleep 2

clear
echo "-------------------------------------------------------------------------------------------------"
echo -n
echo -n "$(date "+%d/%m/%Y")"
echo -n "      "
echo -n "                  ***** ORACLE BASIC SERVICES *****   "
echo -n "                   "
echo "$(date "+%T")"
echo "-------------------------------------------------------------------------------------------------"
echo "                                  $(hostname) - $(whoami) - $(env | grep ORACLE_SID)"
echo

sqlplus -s '/as sysdba' << endofcommand

set linesize 220
set pagesize 100
col USERNAME for a15
col OSUSER   for a15
col PROGRAM  for a30

SELECT s.username, s.osuser, s.sid, s.serial#, p.spid, s.status, s.program, TO_CHAR(s.logon_Time,'DD-MON-YYYY HH24:MI:SS') AS logon_time FROM v\$session s  inner join v\$process p on s.paddr = p.addr WHERE s.sid = '$SID_DESEJADO'

/ EXIT
endofcommand

echo -n "Check se o processo continua rodando;"
echo
echo -n "Pressione qualquer tecla para continuar..."
read MSG
clear
Principal
}

# ======================================================================================================
# ======================================================================================================

CHECAR_DETERMINADO_PROCESSO_RODANDO ()
{
# ALTER SYSTEM KILL SESSION '$SID_DESEJADO, $SERIAL_DESEJADO' IMMEDIATE;
clear
echo "-------------------------------------------------------------------------------------------------"
echo -n
echo -n "$(date "+%d/%m/%Y")"
echo -n "      "
echo -n "                  ***** ORACLE BASIC SERVICES *****   "
echo -n "                   "
echo "$(date "+%T")"
echo "-------------------------------------------------------------------------------------------------"
echo "                                  $(hostname) - $(whoami) - $(env | grep ORACLE_SID)"
echo
echo
echo -n "Digite o SID do usuario    :  "
read SID_DESEJADO
echo
echo -n "Digite o SERIAL do usuario :  "
read SERIAL_DESEJADO

echo 

clear
echo "-------------------------------------------------------------------------------------------------"
echo -n
echo -n "$(date "+%d/%m/%Y")"
echo -n "      "
echo -n "                  ***** ORACLE BASIC SERVICES *****   "
echo -n "                   "
echo "$(date "+%T")"
echo "-------------------------------------------------------------------------------------------------"
echo "                                  $(hostname) - $(whoami) - $(env | grep ORACLE_SID)"
echo

sqlplus -s '/as sysdba' << endofcommand

set linesize 220
set pagesize 100

col USERNAME for a15
col OSUSER   for a15
col PROGRAM  for a30

SELECT s.username, s.osuser, s.sid, s.serial#, p.spid, s.status, s.program, TO_CHAR(s.logon_Time,'DD-MON-YYYY HH24:MI:SS') AS logon_time FROM v\$session s  inner join v\$process p on s.paddr = p.addr WHERE s.sid = '$SID_DESEJADO'

/ 
EXIT
endofcommand

echo
echo -n "Pressione qualquer tecla para continuar..."
read MSG
clear
Principal
}

# ======================================================================================================
# Nao remover a linha abaixo
# ======================================================================================================

Principal
Matar Todas as Sessões usando um script PL/SQL

Dá para matar todas as sessões de um usuário fazendo um PL/SQL loop. Primeiro vamos acessar o sqlplus e rodar um script PL/SQL
[s401:oracle]$/home/oracle> sqlplus / as sysdba

SQL*Plus: Release 10.2.0.5.0 - Production on Tue Jan 28 13:26:30 2014

Copyright (c) 1982, 2010, Oracle.  All Rights Reserved.


Connected to:
Oracle Database 10g Release 10.2.0.5.0 - 64bit Production

SQL> @MataUsuarioADRH.sql

PL/SQL procedure successfully completed.
Script PL/SQL loop 1 -- em username tenho que colocar o usuário que vou matar - este não tem o IMMEDIATE !!!
begin
    for x in ( select *
                 from v$session
                where (username = 'ADRH' OR username = 'PUBLICACAO') AND module LIKE 'GFP804910G%')
    loop
        execute immediate 'alter system kill session ''' || x.sid || ',' || x.serial# || '''';
        dbms_output.put_line( 'Alter session done' );
    end loop;
end;
/
Script PL/SQL loop 2 -- em username tenho que colocar o usuário que vou matar
begin
    for x in ( select * from v$session where (username = 'ADRH' OR username = 'PUBLICACAO') AND module LIKE 'GFP804910%')
    loop
        execute immediate 'alter system kill session ''' || x.sid || ',' || x.serial# || ''' IMMEDIATE';
        dbms_output.put_line( 'Alter session done' );
    end loop;
end;
/
Script PL/SQL loop 3 - Este pede para digitar o username para matar no sqlplus;
PROMPT Digite o Username para Matar;
DEFINE username = &1
BEGIN
  FOR c IN (SELECT s.sid, s.serial# FROM v$session s WHERE  s.username = '&&username' and module LIKE 'GFP804910%')
  LOOP
    EXECUTE IMMEDIATE 'alter system kill session ''' || c.sid || ',' || c.serial# || ''' IMMEDIATE';
  END LOOP;
END;
/
Matar Usuário via Procedure

Uma outra alternativa é criar uma procedure para fazer este procedimento de matar usuário - Clique Aqui
1. Os desenvolvedores não tem a permissão de alter system / alter user privileges.
2. Ao criar usuários para desenvolvedores o DBA pode adicionar um prefixo ao nome (DEV_USER1, DEV_JOHN, DEV_RACHEL …).
3. Desenvolvedores não compartilham o mesmo nome de usuário (username).
4. Vários desenvolvedores podem executar a partir do mesmo cliente usando diferentes nomes de usernames para acessar Oracle.
5. Um desenvolvedor pode executar a partir de várias máquinas cliente - neste caso, ele vai querer matar sessões abertas apenas
   a partir de uma máquina cliente específico.
Testado em:
1. Oracle 10g
2. Oracle 10g RAC
3. Oracle 11g
4. Oracle 11g RAC
Agora, vou mostrar o código de configuração, seguida por uma explicação: Create owner for the procedure (schema);
1 - create user killer identified by killer;
2 - grant alter system to killer;
3 - grant select on v_$session, gv_$session to killer;
4 - alter user killer account lock;
Criando a procedure;
create or replace PROCEDURE killer.KILL_MY_CLIENTS AUTHID DEFINER AS
   job_no number;
   user_prefix varchar(20);
   domain_name varchar(20);
   num_of_kills number := 0;
   BACKSLASH constant char(1) := chr(92);
begin
   user_prefix := 'DEV';       -- All my developer username prefixed with DEV
                               -- (DEV_USER1, DEV_USER2, DEV_MIKE, DEV_JOHN ...)
   domain_name := 'WORKGROUP'; -- We work in a workgroup.
                               -- Once we work in a windows domain this variable should
                               -- hold the domain name

   for REC in
       (SELECT SID, SERIAL#, INST_ID, MODULE,
               SYS_CONTEXT('USERENV', 'INSTANCE') MY_INST_ID
        from gv$session s
        where s.username like user_prefix || '%'                  -- precaution
          and s.username = sys_context('USERENV', 'SESSION_USER') -- only my username
          and not (S.SID = SYS_CONTEXT('USERENV', 'SID')          -- excluding my session
          and INST_ID = SYS_CONTEXT('USERENV', 'INSTANCE'))
          and replace(upper(machine), domain_name || BACKSLASH, '')     -- my machine
                 = replace(upper(sys_context('USERENV', 'HOST')), domain_name || BACKSLASH, '')
          and s.module not in ('SQL*Plus', 'SQL Developer')       -- not sqlplus
                                                                  -- nor sql developer
          and s.module not like 'sqlplus@%'
          and S.LOGON_TIME < sysdate-(1/24/60/60)                 -- logged-on more
                                                                  -- than a second
        ORDER BY inst_id asc
       ) LOOP
      if rec.inst_id = rec.my_inst_id then
         ---------------------------------------------------------------------------
         -- kill local sessions immediately
         ---------------------------------------------------------------------------
         dbms_output.put('LOCAL SID ' || rec.sid || '(' || rec.module || ')');
         execute immediate 'alter system kill session ''' || rec.sid || ', ' ||
                            rec.serial# || '''' ;
         dbms_output.put_line('. killed locally ' || job_no);
      ELSE
         ---------------------------------------------------------------------------
         -- kill remote sessions (for RAC) as a job
         ---------------------------------------------------------------------------
         DBMS_OUTPUT.PUT('REMOTE SID ' || REC.SID || ' on instance ' || REC.INST_ID  ||
                         '(' || rec.module || ')');
         DBMS_JOB.SUBMIT (
                 job => job_no,
                 what => 'execute immediate ''alter system kill session ''''' || rec.sid ||', ' ||
                          rec.serial# || ''''''';',
                 INSTANCE => rec.inst_id);
         dbms_output.put_line('. killed with job ' || job_no);
         COMMIT;
      end if;
      num_of_kills := num_of_kills + 1;
   end loop;
   dbms_output.put_line ('number of killed sessions: ' || num_of_kills);
end kill_my_clients;
Fazer com que a procedure fique disponível para todos
1 - create public synonym kill_my_clients for killer.kill_my_clients;
2 - grant execute on killer.kill_my_clients to public;
3 - alter user killer account lock;
Use: O login como o desenvolvedor na máquina do cliente para qualquer aplicativo que possa executar instruções como o SQL * Plus
1 - exec kill_my_clients
Explicação: Os comandos da primeira seção criam um usuário chamado "killer". Esse usuário é o owner (proprietário) da procedure descrita na próxima seção. Observe que este usuário é muito poderoso, pois pode matar qualquer usuário com a permissão "alter system". É por isso que temos de limitar o acesso a ele para que ele esteja bloqueado. Os grants as tabelas v_$session e gv_$session devem ser feito pelo SYS ou outro usuário com opções de administração sobre essas views. A segunda seção é a procedure em si. Deve ser compilado em "kill" (como o código demonstra). Aqui está uma explicação deste procedure:

1. Identifica todas as sessões em execução da máquina do desenvolvedor a partir dele/dela username, exceto para a sessão de executar esta consulta no nó atual e nós RAC remotos.

1. Se a sessão é na mesma instância da conexão atual - mata imediatamente.
2. Se a sessão estiver em um nó RAC diferente - mata através da apresentação de um job nesse nó.

Existem 2 variáveis ​​que eu costumo mudar quando eu implanto esse procedimento em um ambiente:

* USER_PREFIX – Eu tento nomear todos os usuários para desenvolvedores com um prefixo como DEV_USER1, DEV_USER2, DEV_MIKE, DEV_JOHN ... Eu uso esse prefixo, como medida de precaução - Eu não quero que a minha procedure mate todos os usuários não comecem com este prefixo. Dessa forma, se o meu desenvolvedor está executando esse procedimento a partir do usuário sys ou system por engano ele não vai fazer mal nenhum.

* DOMAIN_NAME – quando se trabalha com clientes Windows, por vezes, a aplicação é prefixado com o nome de domínio (como o SQL Developer) e às vezes não (como o SQL*Plus). Esta variável se tornará crucial para identificar sessões abertas da máquina do desenvolvedor.

Outro fator que ter em conta é que eu não quero matar conexões do SQL * Plus ou de SQL Developer. Se você estiver trabalhando com outros programas, tais como PL / SQL Developer ou Toad você pode querer incluí-los na cláusula onde também.

A terceira seção mostra como usar esse mecanismo: Você só precisa se logar como o desenvolvedor da máquina do cliente para qualquer aplicativo que possa executar instruções como o SQL * Plus e executar o procedimento (você não tem que usar o nome do proprietário na chamada porque você declarou um sinônimo público para ele).
Importante; Para efetuar este procedimento o usuário que der o privilégio de ALTER SYSTEM.

11/21/2013

Onde esta o Arquivo de alert do Oracle?


No banco de dados Oracle o arquivo alert.log registra cronologicamente as mensagens de erros resultantes do funcionamento diário do banco de dados. Além disso, registra os arquivos de “traces” gerados para auxiliarem os DBAs a rastrearem as atividades dos usuários ou mesmo detalhamento dos erros ocorridos durante o processamento das aplicações.

Primeiro abre o sqlplus;
[oracle@s236 ~]$ sqlplus / as sysdba
Dentro do sqlplus de o comando
SQL*Plus: Release 10.2.0.5.0 - Production on Thu Nov 21 15:05:57 2013

Copyright (c) 1982, 2010, Oracle.  All Rights Reserved.

Connected to:
Oracle Database 10g Release 10.2.0.5.0 - 64bit Production

SQL> select value from v$parameter where name='background_dump_dest';

VALUE
--------------------------------------------------------------------------------
/oracle/admin/RHHML/bdump
Anote este endereço. Se o parâmetro “background_dump_dest” não for especificado o Oracle irá gravar o arquivo “alert.log dentro do caminho $ORACLE_HOME/RDBMS/diretório de trace.

Saindo do sqlplus
SQL> exit
Disconnected from Oracle Database 10g Release 10.2.0.5.0.- 64bits Production
Acesse o diretório que o comando select nos passou;
[oracle@s236 ~]$ cd /oracle/admin/RHHML/bdump
Primeiro vou dar um display para ver se o arquivo existe;
[oracle@s236 bdump]$ ls -la alert_*
-rw-r----- 1 oracle oinstall 7595738 Nov 21 09:00 alert_RHHML.log
[oracle@s236 bdump]$ 
Vou ver o conteudo do arquivo de alert;
[oracle@s236 bdump]$ cat alert_RHHML.log
Resultado
Wed Nov 20 22:02:54 AMST 2013
Thread 1 advanced to log sequence 37145 (LGWR switch)
  Current log# 5 seq# 37145 mem# 0: /db/RHHML/redo05.log
Wed Nov 20 22:29:52 AMST 2013
Thread 1 advanced to log sequence 37146 (LGWR switch)
  Current log# 6 seq# 37146 mem# 0: /db/RHHML/redo06.log
Thu Nov 21 03:00:22 AMST 2013
Thread 1 advanced to log sequence 37147 (LGWR switch)
  Current log# 7 seq# 37147 mem# 0: /db/RHHML/redo07.log
Thu Nov 21 05:23:26 AMST 2013
Thread 1 advanced to log sequence 37148 (LGWR switch)
  Current log# 8 seq# 37148 mem# 0: /db/RHHML/redo08.log
Thu Nov 21 05:40:20 AMST 2013
Thread 1 advanced to log sequence 37149 (LGWR switch)
  Current log# 9 seq# 37149 mem# 0: /db/RHHML/redo09.log
Thu Nov 21 08:39:57 AMST 2013
Thread 1 advanced to log sequence 37150 (LGWR switch)
  Current log# 10 seq# 37150 mem# 0: /db/RHHML/redo10.log
Thu Nov 21 09:00:32 AMST 2013
Thread 1 advanced to log sequence 37151 (LGWR switch)
  Current log# 1 seq# 37151 mem# 0: /db/RHHML/redo01.log

10/29/2013

Script para Automatizar as Tarefas no Oracle


Este post pode ser um pouco passado para muitos DBAs, mas para quem está começando e planeja automatizar algumas tarefas, as dicas aqui pode ser de extrema utilidade! Estou começando.

Opção 1;
-------------------------------------------------------------------------------------------------
29/10/2013                        ***** ORACLE BASIC SERVICES *****                      16:14:17
-------------------------------------------------------------------------------------------------
                                    s120.ms - 10.2.19.4 - oracle

         Code  Basic Services                 Code  Basic Services                
         ----  ---------------------------    ----  ---------------------------   
           1   Performance/Desempenho          12   XXXXXXXXXXXXXXXXXXXXXXXXXX   
           2   XXXXXXXXXXXXXXXXXXXXXXXXXX      13   XXXXXXXXXXXXXXXXXXXXXXXXXX    
           3   XXXXXXXXXXXXXXXXXXXXXXXXXX      14   XXXXXXXXXXXXXXXXXXXXXXXXXX    
           4   XXXXXXXXXXXXXXXXXXXXXXXXXX      15   XXXXXXXXXXXXXXXXXXXXXXXXXX    
           5   XXXXXXXXXXXXXXXXXXXXXXXXXX      16   XXXXXXXXXXXXXXXXXXXXXXXXXX    
           6   XXXXXXXXXXXXXXXXXXXXXXXXXX      17   XXXXXXXXXXXXXXXXXXXXXXXXXX    
           7   XXXXXXXXXXXXXXXXXXXXXXXXXX      18   XXXXXXXXXXXXXXXXXXXXXXXXXX    
           8   XXXXXXXXXXXXXXXXXXXXXXXXXX      19   XXXXXXXXXXXXXXXXXXXXXXXXXX    
           9   XXXXXXXXXXXXXXXXXXXXXXXXXX      20   XXXXXXXXXXXXXXXXXXXXXXXXXX  
          10   XXXXXXXXXXXXXXXXXXXXXXXXXX      21   XXXXXXXXXXXXXXXXXXXXXXXXXX    
          11   XXXXXXXXXXXXXXXXXXXXXXXXXX       0   Sair da Aplicacao             
         ----  ---------------------------    ----  ---------------------------   

                Digita um Codigo - 
Opção 1;
-------------------------------------------------------------------------------------------------
29/10/2013                        ***** ORACLE BASIC SERVICES *****                      16:14:39
-------------------------------------------------------------------------------------------------       
                              Instancias Online 3 - 10.2.19.4 - oracle

     Code  Function                            
         ----  ---------------------------    ----  ---------------------------   
           1   SAR - Performance da CPU        12   XXXXXXXXXXXXXXXXXXXXXXXXXX   
           2   Consumo de Memoria              13   XXXXXXXXXXXXXXXXXXXXXXXXXX    
           3   Consumo de Espaco em Disco      14   XXXXXXXXXXXXXXXXXXXXXXXXXX    
           4   Instancias Online               15   XXXXXXXXXXXXXXXXXXXXXXXXXX    
           5   Gerenciando pelo TOP            16   XXXXXXXXXXXXXXXXXXXXXXXXXX    
           6   Monitorando o Uso do Disco      17   XXXXXXXXXXXXXXXXXXXXXXXXXX    
           7   XXXXXXXXXXXXXXXXXXXXXXXXXX      18   XXXXXXXXXXXXXXXXXXXXXXXXXX    
           8   XXXXXXXXXXXXXXXXXXXXXXXXXX      19   XXXXXXXXXXXXXXXXXXXXXXXXXX    
           9   XXXXXXXXXXXXXXXXXXXXXXXXXX      20   XXXXXXXXXXXXXXXXXXXXXXXXXX  
          10   XXXXXXXXXXXXXXXXXXXXXXXXXX      21   XXXXXXXXXXXXXXXXXXXXXXXXXX    
          11   XXXXXXXXXXXXXXXXXXXXXXXXXX       0   Sair da Aplicacao             
         ----  ---------------------------    ----  ---------------------------   

     Digite um Codigo - 
Opção 2;
-------------------------------------------------------------------------------------------------
29/10/2013                        ***** ORACLE BASIC SERVICES *****                      16:14:48
-------------------------------------------------------------------------------------------------
                                    s120.ms - 10.2.19.4 - oracle

clocks            CPU     %user     %nice   %system   %iowait    %steal     %idle
--------------    ----   ------    ------    ------    ------    ------    ------
04:14:49 PM       all     17.15      0.00      0.13      0.25      0.00     82.48
04:14:50 PM       all     20.32      0.00      0.25      0.00      0.00     79.43
04:14:51 PM       all      0.88      0.00      0.00      0.00      0.00     99.12
04:14:52 PM       all      8.00      0.00      0.00      0.00      0.00     92.00
04:14:53 PM       all      2.49      0.00      0.00      0.12      0.00     97.38
Average:          all      9.77      0.00      0.07      0.07      0.00     90.08

Pressione (ENTER) para continuar...
Opção 3;
-------------------------------------------------------------------------------------------------
29/10/2013                        ***** ORACLE BASIC SERVICES *****                      16:15:07
-------------------------------------------------------------------------------------------------
                                    s120.ms - 10.2.19.4 - oracle

--------------- -----     ------ ---------- ---------- ---------- ----------
Size            total       used       free     shared    buffers     cached
--------------- -----     ------ ---------- ---------- ---------- ----------
GB Mem:            47         45          1          0          0         37
MB Mem:         48298      46917       1381          0        246      38548
KB Mem:      49457628   48043296    1414332          0     252688   39473500

Pressione (ENTER) para continuar...
Opção 4;
-------------------------------------------------------------------------------------------------
29/10/2013                        ***** ORACLE BASIC SERVICES *****                      16:15:19
-------------------------------------------------------------------------------------------------
                                    s120.ms - 10.2.19.4 - oracle

+--------+--------+-------------+------------+----------------------------------------------------+
| Total  | Usado  | Disponivel  | % de Uso   | FileSystem                                         |
+--------+--------+-------------+------------+----------------------------------------------------+
| 55G    | 25G    | 28G         | 48%        | /                                                  | 
| 26G    | 0      | 26G         | 0%         | /dev/shm                                           | 
| 2.1T   | 548G   | 1.5T        | 28%        | /u01                                               | 
+--------+--------+-------------+------------+----------------------------------------------------+

Pressione (ENTER) para continuar... 
Opção 5;
-------------------------------------------------------------------------------------------------
29/10/2013                      ***** ORACLE BASIC SERVICES *****                      16:15:31
-------------------------------------------------------------------------------------------------
                                    s120.ms - 10.2.19.4 - oracle

oracle    8915     1  0 Oct20 ?        00:01:18 ora_smon_prd
oracle   29292     1  0 Oct21 ?        00:00:22 ora_smon_trn
oracle   29610     1  0 Oct21 ?        00:00:29 ora_smon_sml

Pressione (ENTER) para continuar...
Opção 6;
-------------------------------------------------------------------------------------------------
29/10/2013                      ***** INFORMIX BASIC SERVICES *****                      16:19:39
-------------------------------------------------------------------------------------------------

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND     
    1 root      15   0 10372  696  584 S  0.0  0.0   0:32.07 init        
    2 root      RT  -5     0    0    0 S  0.0  0.0   0:00.36 migration/0 
    3 root      34  19     0    0    0 S  0.0  0.0   0:00.01 ksoftirqd/0 
    4 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/0  
    5 root      RT  -5     0    0    0 S  0.0  0.0   0:00.16 migration/1 
    6 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/1 
    7 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/1  
    8 root      RT  -5     0    0    0 S  0.0  0.0   0:00.07 migration/2 
    9 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/2 
   10 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/2  
   11 root      RT  -5     0    0    0 S  0.0  0.0   0:00.12 migration/3 
   12 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/3 
   13 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/3  
   14 root      RT  -5     0    0    0 S  0.0  0.0   0:00.06 migration/4 
   15 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/4 
   16 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/4  
   17 root      RT  -5     0    0    0 S  0.0  0.0   0:00.12 migration/5 
   18 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/5 
   19 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/5  
   20 root      RT  -5     0    0    0 S  0.0  0.0   0:00.05 migration/6 
   21 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/6 
   22 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/6  
   23 root      RT  -5     0    0    0 S  0.0  0.0   0:00.09 migration/7 
   24 root      34  19     0    0    0 S  0.0  0.0   0:00.00 ksoftirqd/7 
   25 root      RT  -5     0    0    0 S  0.0  0.0   0:00.00 watchdog/7  
   26 root      10  -5     0    0    0 S  0.0  0.0   0:00.00 events/0    
   27 root      10  -5     0    0    0 S  0.0  0.0   0:00.00 events/1    
   28 root      10  -5     0    0    0 S  0.0  0.0   0:00.00 events/2    
   29 root      10  -5     0    0    0 S  0.0  0.0   0:00.00 events/3    

Pressione qualquer tecla para continuar...
Opção 7;
-------------------------------------------------------------------------------------------------
29/10/2013                      ***** INFORMIX BASIC SERVICES *****                      16:17:09
-------------------------------------------------------------------------------------------------

Linux 2.6.18-238.el5 (s120.ms)  10/29/2013

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           5.84    0.00    0.40    0.35    0.00   93.41

Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               5.75     9.55  1.91  1.62    63.37    89.36    43.28     0.06   17.57   3.25   1.15
sda1              0.02     2.19  0.15  1.10     3.42    26.31    23.78     0.02   17.81   5.06   0.63
sda2              5.73     7.36  1.76  0.52    59.95    63.05    53.97     0.04   17.43   2.30   0.53
sdd               0.00     0.00  0.00  0.00     0.00     0.00    10.79     0.00  520.67 520.67   0.01
sde               3.07    26.63 18.45 10.07  4983.20   293.58   185.01     0.04    1.57   0.96   2.74
sde1              3.07    26.63 18.45 10.07  4983.20   293.58   185.01     0.04    1.57   0.96   2.74

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           6.30    0.00    0.50    0.06    0.00   93.13

Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     0.00  1.00  0.00     8.00     0.00     8.00     0.00    3.50   2.00   0.20
sda1              0.00     0.00  1.00  0.00     8.00     0.00     8.00     0.00    3.50   2.00   0.20
sda2              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdd               0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sde               0.00    25.50  0.00  7.00     0.00   260.00    37.14     0.01    0.71   0.57   0.40
sde1              0.00    25.50  0.00  7.00     0.00   260.00    37.14     0.01    0.71   0.57   0.40

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.62    0.00    0.06    0.00    0.00   99.31

Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda1              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda2              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdd               0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sde               0.00    12.50  0.00  5.00     0.00   140.00    28.00     0.00    0.50   0.50   0.25
sde1              0.00    12.50  0.00  5.00     0.00   140.00    28.00     0.00    0.50   0.50   0.25

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           0.00    0.00    0.00    0.12    0.00   99.88

Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     9.00  0.00  1.00     0.00    80.00    80.00     0.01    5.50   5.50   0.55
sda1              0.00     9.00  0.00  1.00     0.00    80.00    80.00     0.01    5.50   5.50   0.55
sda2              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdd               0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sde               0.00     5.00  0.50  2.00     4.00    56.00    24.00     0.00    0.80   0.80   0.20
sde1              0.00     5.00  0.50  2.00     4.00    56.00    24.00     0.00    0.80   0.80   0.20

avg-cpu:  %user   %nice %system %iowait  %steal   %idle
           5.43    0.00    0.12    0.06    0.00   94.38

Device:         rrqm/s   wrqm/s   r/s   w/s   rsec/s   wsec/s avgrq-sz avgqu-sz   await  svctm  %util
sda               0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda1              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sda2              0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sdd               0.00     0.00  0.00  0.00     0.00     0.00     0.00     0.00    0.00   0.00   0.00
sde               0.00    17.50  0.00  6.00     0.00   188.00    31.33     0.01    1.58   0.83   0.50
sde1              0.00    17.50  0.00  6.00     0.00   188.00    31.33     0.01    1.58   0.83   0.50

  +---------------------------------------------------------------------------------------------------------------------+ 
  | O uso alto de um disco pode haver uma maior chance de que um requerimento solicitando os dados do disco ira bloquear| 
  | (parar) ate que o disco estaja pronto para esse processo. A solucao geralmente envolve a divisao de sistemas de     | 
  | arquivos em discos ou arrays, no entanto, o primeiro passo saber se voce tem este problema.                         | 
  +---------------------------------------------------------------------------------------------------------------------+ 

Pressione qualquer tecla para continuar...

Script Completo;
# -----------------------------------------------------------------------------------------------#
# Funcao : Menu para funcoes importantes do Oracle.                                              #  
# Detalhe: Varios scripts para rodar em um menu no Oracle                                        #
# Autor  : Claudemar Martins de Sa                                                               #
# Data   : 24/10/2013                                                                            #
# Fonte  : http://www.vivaolinux.com.br/script/Menu-tarefas-com-SSH                              #
# -----------------------------------------------------------------------------------------------#
 
Principal () {

clear
echo "-------------------------------------------------------------------------------------------------"
echo -n
echo -n "$(date "+%d/%m/%Y")"
echo -n "      "
echo -n "                  ***** ORACLE BASIC SERVICES *****   "
echo -n "                   "
echo "$(date "+%T")"
echo "-------------------------------------------------------------------------------------------------"
echo "                                    $(hostname) - $(hostname -i) - $(whoami)"
echo
echo "         Code  Basic Services                 Code  Basic Services                "
echo "         ----  ---------------------------    ----  ---------------------------   "
echo "           1   Performance/Desempenho          12   XXXXXXXXXXXXXXXXXXXXXXXXXX   "
echo "           2   XXXXXXXXXXXXXXXXXXXXXXXXXX      13   XXXXXXXXXXXXXXXXXXXXXXXXXX    "
echo "           3   XXXXXXXXXXXXXXXXXXXXXXXXXX      14   XXXXXXXXXXXXXXXXXXXXXXXXXX    "
echo "           4   XXXXXXXXXXXXXXXXXXXXXXXXXX      15   XXXXXXXXXXXXXXXXXXXXXXXXXX    "
echo "           5   XXXXXXXXXXXXXXXXXXXXXXXXXX      16   XXXXXXXXXXXXXXXXXXXXXXXXXX    "
echo "           6   XXXXXXXXXXXXXXXXXXXXXXXXXX      17   XXXXXXXXXXXXXXXXXXXXXXXXXX    "
echo "           7   XXXXXXXXXXXXXXXXXXXXXXXXXX      18   XXXXXXXXXXXXXXXXXXXXXXXXXX    "
echo "           8   XXXXXXXXXXXXXXXXXXXXXXXXXX      19   XXXXXXXXXXXXXXXXXXXXXXXXXX    "
echo "           9   XXXXXXXXXXXXXXXXXXXXXXXXXX      20   XXXXXXXXXXXXXXXXXXXXXXXXXX    "
echo "          10   XXXXXXXXXXXXXXXXXXXXXXXXXX      21   XXXXXXXXXXXXXXXXXXXXXXXXXX    "
echo "          11   XXXXXXXXXXXXXXXXXXXXXXXXXX       0   Sair da Aplicacao             "
echo "         ----  ---------------------------    ----  ---------------------------   "

echo
echo -n "                Digita um Codigo - "
read OPCAO
case $OPCAO in  
      1) sub_menu_0001 ;;
      0) exit ;;
      *) clear ; Principal ;;
   esac
}

# ======================================================================================================
# Escolhido a opcao 1 - Monitorando a Performance
# ======================================================================================================

sub_menu_0001 () {

clear
echo "-------------------------------------------------------------------------------------------------"
echo -n
echo -n "$(date "+%d/%m/%Y")"
echo -n "      "
echo -n "                  ***** ORACLE BASIC SERVICES *****   "
echo -n "                   "
echo "$(date "+%T")"
echo "------------------------------------------------------------------------------------------------- "
echo "                              Instancias Online $(ps -ef | grep smon|grep -v grep|awk '{print $8}' | wc -l) - $(hostname -i) - $(whoami)"
echo
echo "     Code  Function                            "
echo "         ----  ---------------------------    ----  ---------------------------   "
echo "           1   SAR - Performance da CPU        12   XXXXXXXXXXXXXXXXXXXXXXXXXX   "
echo "           2   Consumo de Memoria              13   XXXXXXXXXXXXXXXXXXXXXXXXXX    "
echo "           3   Consumo de Espaco em Disco      14   XXXXXXXXXXXXXXXXXXXXXXXXXX    "
echo "           4   Instancias Online               15   XXXXXXXXXXXXXXXXXXXXXXXXXX    "
echo "           5   Gerenciando pelo TOP            16   XXXXXXXXXXXXXXXXXXXXXXXXXX    "
echo "           6   Monitorando o Uso do Disco      17   XXXXXXXXXXXXXXXXXXXXXXXXXX    "
echo "           7   XXXXXXXXXXXXXXXXXXXXXXXXXX      18   XXXXXXXXXXXXXXXXXXXXXXXXXX    "
echo "           8   XXXXXXXXXXXXXXXXXXXXXXXXXX      19   XXXXXXXXXXXXXXXXXXXXXXXXXX    "
echo "           9   XXXXXXXXXXXXXXXXXXXXXXXXXX      20   XXXXXXXXXXXXXXXXXXXXXXXXXX    "
echo "          10   XXXXXXXXXXXXXXXXXXXXXXXXXX      21   XXXXXXXXXXXXXXXXXXXXXXXXXX    "
echo "          11   XXXXXXXXXXXXXXXXXXXXXXXXXX       0   Sair da Aplicacao             "
echo "         ----  ---------------------------    ----  ---------------------------   "
echo
echo -n "     Digite um Codigo - "   
   read OPCAO2
   case $OPCAO2 in
      1) OPCAO_00000 ;;
      2) CONSUMO_DE_MEMORIA ;;
      3) ESPACO_DISPONIVEL_NO_SERVIDOR ;;
      4) INSTANCIAS_ONLINE ;;
      5) COMANDO_TOP ;;
      6) IOSTAT_DISCO ;;
      0) clear ; Principal ;;
      *) Opcao Invalida ; echo ; sub_menu_0001 ;;
   esac
}  

# ======================================================================================================
# Abaixo vamos checar a performance do servidor
# ======================================================================================================

OPCAO_00000 () 
{
clear
echo "-------------------------------------------------------------------------------------------------"
echo -n
echo -n "$(date "+%d/%m/%Y")"
echo -n "      "
echo -n "                  ***** ORACLE BASIC SERVICES *****   "
echo -n "                   "
echo "$(date "+%T")"
echo "-------------------------------------------------------------------------------------------------"
echo "                                    $(hostname) - $(hostname -i) - $(whoami)"
echo
echo "clocks            CPU     %user     %nice   %system   %iowait    %steal     %idle"
echo "--------------    ----   ------    ------    ------    ------    ------    ------"
sar 1 5 | grep "all"
echo
echo -n "Pressione (ENTER) para continuar..."

read MSG
clear
sub_menu_0001

}

# ======================================================================================================
# Abaixo vamos checar o consumo de memoria
# ======================================================================================================

CONSUMO_DE_MEMORIA () 
{

clear
echo "-------------------------------------------------------------------------------------------------"
echo -n
echo -n "$(date "+%d/%m/%Y")"
echo -n "      "
echo -n "                  ***** ORACLE BASIC SERVICES *****   "
echo -n "                   "
echo "$(date "+%T")"
echo "-------------------------------------------------------------------------------------------------"
echo "                                    $(hostname) - $(hostname -i) - $(whoami)"
echo
echo "--------------- -----     ------ ---------- ---------- ---------- ----------"
echo "Size            total       used       free     shared    buffers     cached"
echo "--------------- -----     ------ ---------- ---------- ---------- ----------"
echo -n "GB "
free -g | grep Mem:
echo -n "MB "
free -m | grep Mem:
echo -n "KB "
free  | grep Mem:
echo
echo -n "Pressione (ENTER) para continuar..."

read MSG
clear
sub_menu_0001

}

# ======================================================================================================
# Abaixo vamos checar o espaco disponivel as particoes desse servidor 
# ======================================================================================================

ESPACO_DISPONIVEL_NO_SERVIDOR ()
{
clear
echo "-------------------------------------------------------------------------------------------------"
echo -n
echo -n "$(date "+%d/%m/%Y")"
echo -n "      "
echo -n "                ***** ORACLE BASIC SERVICES *****   "
echo -n "                   "
echo "$(date "+%T")"
echo "-------------------------------------------------------------------------------------------------"
echo "                                    $(hostname) - $(hostname -i) - $(whoami)"
echo

LOG1="/tmp/espaco_no_servidor_1234_$(whoami)_pode_deletar_1234_1.log"
LOG2="/tmp/espaco_no_servidor_1234_$(whoami)_pode_deletar_1234_2.log"

df -H | grep -vE 'abc:/xyz/pqr | tmpfs |cdrom | Use' | awk '{ print $2 "|" $3 "|" $4 "|" $5 "|" $6 }' > $LOG1

cat $LOG1 | awk -F "|" '{

    t_iso=$1
if ($1 == "|")
{ t_iso=" " }

printf("| %-6s | %-6s | %-11s | %-10s | %-50s | \n",$1,$2,$3,$4,$5)}' > $LOG2


clear
echo "-------------------------------------------------------------------------------------------------"
echo -n
echo -n "$(date "+%d/%m/%Y")"
echo -n "      "
echo -n "                  ***** ORACLE BASIC SERVICES *****   "
echo -n "                   "
echo "$(date "+%T")"
echo "-------------------------------------------------------------------------------------------------"
echo "                                    $(hostname) - $(hostname -i) - $(whoami)"
echo 
echo "+--------+--------+-------------+------------+----------------------------------------------------+"
echo "| Total  | Usado  | Disponivel  | % de Uso   | FileSystem                                         |"
echo "+--------+--------+-------------+------------+----------------------------------------------------+"
cat $LOG2
echo "+--------+--------+-------------+------------+----------------------------------------------------+"
rm $LOG1
rm $LOG2

if [ $(df -hP | grep -vE 'Filesystem' | awk '{x=$5;sub ("%","",x)}x>70' | wc -l) -eq 1 ]
then

LOG3="/tmp/espaco_no_servidor_1234_$(whoami)_pode_deletar_1234_3.log"
LOG4="/tmp/espaco_no_servidor_1234_$(whoami)_pode_deletar_1234_4.log"

df -hP | grep -vE 'Filesystem' | awk '{x=$5;sub ("%","",x)}x>70 { print $2 "|" $3 "|" $4 "|" $5 "|" $6 }' > $LOG3

cat $LOG3 | awk -F "|" '{
   t_iso=$1
if ($1 == "|")
{ t_iso=" " }

printf("| %-6s | %-6s | %-11s | %-10s | %-50s | \n",$1,$2,$3,$4,$5)}' > $LOG4

echo
echo "                    +---------------------------------------------------------+"
echo "                    |           Particao Com Mais de 70% Utilizacao           |"
echo "                    +---------------------------------------------------------+"
echo
echo "+--------+--------+-------------+------------+----------------------------------------------------+"
echo "| Total  | Usado  | Disponivel  | % de Uso   | FileSystem                                         |"
echo "+--------+--------+-------------+------------+----------------------------------------------------+"
cat $LOG4
echo "+--------+--------+-------------+------------+----------------------------------------------------+"
rm $LOG3
rm $LOG4
fi
echo
echo -n "Pressione (ENTER) para continuar..."
read MSG
clear
sub_menu_0001
}

# ======================================================================================================
# Abaixo vamos ver as instancias que estao online neste servidor; 
# ======================================================================================================

INSTANCIAS_ONLINE ()
{
clear
echo "-------------------------------------------------------------------------------------------------"
echo -n
echo -n "$(date "+%d/%m/%Y")"
echo -n "      "
echo -n "                ***** ORACLE BASIC SERVICES *****   "
echo -n "                   "
echo "$(date "+%T")"
echo "-------------------------------------------------------------------------------------------------"
echo "                                    $(hostname) - $(hostname -i) - $(whoami)"
echo

# ======================================================================================================
# parte comentada - nem todos os servidores terao so as instancias prd, trn e sml 
# se tiver outra nao vai aparecer no display - deixei o comando que mostra tudo;
# ======================================================================================================
#
# LOG1="/tmp/espaco_no_servidor_1234_$(whoami)_pode_deletar_1234_1.log"
# LOG2="/tmp/espaco_no_servidor_1234_$(whoami)_pode_deletar_1234_2.log"
# 
# ps -ef | grep smon | grep -v grep | awk '{print $8}'| awk -F "_" '{print$3}' > $LOG1
#
# cat $LOG1 | awk -F "|" '{
# t_iso=$1
#
# if ($1 == "prd")
#    { t_iso="| prd - Producao     |" }
#
# if ($1 == "trn")
#    { t_iso="| trn - Treinamento  |" }
#
# if ($1 == "sml")
#   { t_iso="| sml - Simulacao    |" }
#
# printf("%-10s\n",t_iso)}' > $LOG2
# echo "+--------------------+"
# cat $LOG2
# echo "+--------------------+"
# echo
# rm $LOG1
# rm $LOG2

ps -ef | grep smon | grep -v grep

echo
echo -n "Pressione (ENTER) para continuar..."
read MSG
clear
sub_menu_0001
}

# ======================================================================================================
# Abaixo vamos gerenciar os processos no Linux com o comando top 
# ======================================================================================================

COMANDO_TOP ()
{
LOG1="/tmp/1234_$(whoami)_pode_deletar_1234_1.log"
clear
echo "-------------------------------------------------------------------------------------------------"
echo -n
echo -n "$(date "+%d/%m/%Y")"
echo -n "      "
echo -n "                ***** INFORMIX BASIC SERVICES *****   "
echo -n "                   "
echo "$(date "+%T")"
echo "-------------------------------------------------------------------------------------------------"

top -b -n 2 | head -n 55 > $LOG1 ; head -n 37 $LOG1|grep -v top | grep -v Cpu | grep -v Mem | grep -v Swap;
rm $LOG1 ; 
echo
echo -n "Pressione qualquer tecla para continuar..."
read MSG
clear
sub_menu_0001
}

# ======================================================================================================
# Abaixo - Monitorar o I/O nos discos
# ======================================================================================================

IOSTAT_DISCO ()
{
clear

clear
echo "-------------------------------------------------------------------------------------------------"
echo -n
echo -n "$(date "+%d/%m/%Y")"
echo -n "      "
echo -n "                ***** INFORMIX BASIC SERVICES *****   "
echo -n "                   "
echo "$(date "+%T")"
echo "-------------------------------------------------------------------------------------------------"
echo

iostat -x 2 5

echo "  +---------------------------------------------------------------------------------------------------------------------+ "
echo "  | O uso alto de um disco pode haver uma maior chance de que um requerimento solicitando os dados do disco ira bloquear| "
echo "  | (parar) ate que o disco estaja pronto para esse processo. A solucao geralmente envolve a divisao de sistemas de     | "
echo "  | arquivos em discos ou arrays, no entanto, o primeiro passo saber se voce tem este problema.                         | "
echo "  +---------------------------------------------------------------------------------------------------------------------+ "
echo

echo -n "Pressione qualquer tecla para continuar..."
read MSG
clear
sub_menu_0001
}       

# ======================================================================================================
# Nao remover a linha abaixo
# ======================================================================================================

Principal