Muitas vezes, precisamos monitorar a sessão do banco de dados oracle por motivos de desempenho, verificar bloqueios, obter a localização de arquivos de dados, refazer arquivos, obter as informações sobre db_links. Aqui estão os principais scripts oracle dba para Oracle Banco de dados para fins administrativos e de monitoramento
Script para encontrar o lado da sessão em que você está conectado
selecione distinct(sid) de v$mystat;
Script para ver todas as sessões ativas
selecione nome de usuário,osuser,sid,serial#, programa,sql_hash_value,module de v$session onde nome de usuário não é nulo e status ='ACTIVE' e módulo não é nulo;
Script para ver garçons
definir tamanho de linha 1000coluna esperando_sessão título 'WAITING|SESSION'coluna holding_session título 'HOLDING|SESSION'coluna lock_type formato a15coluna mode_held formato a15coluna mode_requested formato a15selectwaiting_session,holding_session,lock_type,mode_pre,mode_requested,>lock_id1,lock_id2fromdba_waiters/ Script para como a transação ativa no banco de dados
col RBS formato a15 trunccol SID formato 9999col USER formato a15 trunccol COMMAND formato a60 trunccol status formato a8 truncselect r.name "RBS", s.sid, s.serial#, s.username "USER", t.status, t.cr_get, t.phy_io, t.used_ublk, t.noundo,substr(s.program, 1, 78) "COMMAND"de v$session s, v$transaction t, v$rollname rwhere t.addr =s. taddrand t.xidusn =r.usnorder por t.cr_get, t.phy_io/
Script para monitorar as consultas de longa duração
definir tamanho de linha 1000selectOPNAME,sid,SOFAR/TOTALWORK*100,to_char(start_time,'dd-mon-yy hh:mi') iniciado,elapsed_seconds/60,time_remaining/60fromv$session_longopswheresid =&sid
Script para ver todos os objetos de bloqueio
definir termo em;definir linhas 130;formato da coluna sid_ser a12 cabeçalho 'session,|serial#';formato do nome de usuário da coluna a12 cabeçalho 'os user/|db user';formato do processo da coluna a9 cabeçalho 'os|process';coluna formato spid a7 título 'trace|número';coluna formato proprietário_objeto a35 título 'proprietário.objeto';coluna formato bloqueado_modo a13 título 'bloqueado|modo';formato de status da coluna a8 título 'status';selectsubstr(to_char(l.session_id)| |','||to_char(s.serial#),1,12) sid_ser,substr(l.os_user_name||'/'||l.oracle_username,1,12) username,l.process,p.spid, substr(o.owner||'.'||o.object_name,1,35) owner_object,decode(l.locked_mode,1,'No Lock',2,'Row Share',3,'Row Exclusive',4 ,'Share',5,'Share Row Excl',6,'Exclusive',null) closed_mode,substr(s.status,1,8) statusfromv$locked_object l,all_objects o,v$session s,v$process pwherel .object_id =o.object_idand l.session_id =s.sidand s.paddr =p.addrand s.status !='KILLED'/
Script para ver eventos de espera
definir tamanho da linha 1000coluna formato sid 999coluna formato de nome de usuário a15 wrapncolumn spid formato a8coluna formato de evento a30 wrapcolumn osuser formato a12 wrapcolumn machine format a25 wrapcolumn programa formato a30 wrapselect sw.sid sid, p.spid spid, s.username nome de usuário, s.osuser osuser, sw.event event, s.machine machine, s.program programfrom v$session_wait sw, v$session s, v$process pwhere s.paddr =p.addrand event not in ('pipe get','client message' ) e sw.sid =s.sid/
Script para ver esperas de sessões específicas
selecione sid,seq#,wait_time,event,seconds_in_wait,state from v$session_wait onde sid in (&sid);
Script para ver todos os usuários acessando esses objetos
formato do objeto da coluna a30formato do proprietário da coluna a10selecionar * de v$access where object='&object_name'/
O script fornece informações sobre as sessões do usuário bloqueando um objeto específico
definir tamanho da linha 1000coluna formato do programa a15coluna formato do objeto a15select substr(username||'('|| se0.sid||')',1,5) "User Session",substr(owner,1,5) "Object Owner",substr(object,1,15) "Object",se0.sid,substr(serial#,1,6) "Serial#",substr(program,1,15) "Program",logon_time "Logon Time" ,processo "Unix Process" de v$access ac, v$session se0where ac.sid =se0.sidand Object ='&PACKAGE'ordenar por logon_time,"Proprietário do objeto","Objeto"/
Script para ver o plano de explicação no Oracle para a instrução no cache da biblioteca
definir tamanho de linha 9999coluna QUERY formato a999definir páginas 250definir deslocamento da cabeça verificar offselect id,lpad(' ',2*(profundidade-1)) || profundidade ||'.' || nvl(posição,0) || ' '|| operação || ' '|| opções || ' '|| nome_objeto ||' '||'custo='|| to_char(custo)||' '|| otimizador "QUERY" de v$sql_planwhere hash_value =&sql_hash_valueorder by child_number,id/
Script para encontrar a localização do servidor
selecione nvl(username,'ORACLE SHADOW PROCESS'),machine fromv$session onde username é nulle rownum <2/
Script para ver o uso do segmento de classificação superior
col formato sid 999999col formato spid formato a6col tablespace formato a10col nome de usuário formato a25col noexts formato 9999 head EXTScol formato proginfo formato a25 trunccol formato mbused 999.999.90col formato de status a1 truncset verificar offselect * from (selecione s.sid,s.status,b.spid ,s.sql_hash_value sesshash,u.SQLHASH sorthash,s.username,u.tablespace,sum(u.blocks*p.value/1024/1024) mbused ,sum(u.extents) noexts,u.segtype,s.module || ' - ' || s.program proginfofrom v$sort_usage u, v$session s, v$parameter p, v$process bwhere u.session_addr =s.saddrand p.name ='db_block_size'and b.addr =s .paddrgroup por s.sid,s.status,b.spid,s.sql_hash_value,u.sqlhash,s.username,u.tablespace,u.segtype,s.module || ' - ' || s.programorder by 8 desc,4) where rownum <11;
Script para verificar a última análise das tabelas na instrução sql
set lin 1000set check offcol owner format a15col object_name format a25col object_type format a12col "LAST ANALYZED" formato a13 selecione do.OWNER,do.OBJECT_NAME,OBJECT_TYPE,decode (OBJECT_TYPE,'TABLE' , (selecione LAST_ANALYZED em dba_tables onde proprietário=do.owner e TABLE_NAME=do.object_name) ,'INDEX' , (Selecione LAST_ANALYZED em dba_indexes onde owner=do.owner e INDEX_NAME=do.object_name) ,'UNKNOWN') "LAST ANALYZED",STATUSfrom DBA_OBJECTS dowhere OBJECT_TYPE em (' TABLE','INDEX') e (OWNER,OBJECT_NAME) em (selecione OBJECT_OWNER,OBJECT_NAME de V$SQL_PLAN onde HASH_VALUE=&1)/
Para verificar os bloqueios e pins do Cache da Biblioteca
selecione /*+ all_rows */ w1.sid wait_session,h1.sid holding_session,w.kgllktype lock_or_pin,w.kgllkhdl address,decode(h.kgllkmod, 0, 'None', 1, 'Null', 2, 'Compartilhar', 3, 'Exclusivo','Desconhecido') mode_held,decode(w.kgllkreq, 0, 'Nenhum', 1, 'Nulo', 2, 'Compartilhar', 3, 'Exclusivo','Desconhecido') mode_requestedfrom dba_kgllock w, dba_kgllock h, v$session w1, v$session h1where(((h.kgllkmod !=0) e (h.kgllkmod !=1) e ((h.kgllkreq =0) ou (h.kgllkreq =1)))e(((w.kgllkmod =0) ou (w.kgllkmod=1))e ((w.kgllkreq !=0) e (w.kgllkreq !=1))))e w.kgllktype =h.kgllktypeand w.kgllkhdl =h.kgllkhdland w.kgllkuse =w1.saddra e h.kgllkuse =h1.saddr/
Para verificar a localização do arquivo de controle
formato do nome da coluna a60 cabeçalho "Arquivos de controle" selecione o nome de sys.v_$controlfile/
Para verificar a localização do log de refazer
col Grp format 9999col member format a50 header "Online REDO Logs"col File# format 9999col name format a50 header "Online REDO Logs"quebra no Grpselect group#,memberfrom sys.v_$logfile/
Para verificar a localização do arquivo de dados
col Formato Tspace formato de status a25col formato a3 cabeçalho Stacol Id formato 9999col Formato Mbyte 999999999col formato de nome a50 título "Arquivos de dados do banco de dados" col Lê o formato 99.999.999col Grava o formato 99.999.999break no relatóriocomputar rótulo de soma 'Total(MB)' de Mbyte na seleção de relatório F.file_id Id,F.file_name name,F.bytes/(1024*1024) Mbyte,decode(F.status,'AVAILABLE','OK',F.status) status,F.tablespace_name Tspacefrom sys.dba_data_files Forder by tablespace_name;
Verificando a ativação/desativação da extensão automática para Tablespaces:
selecione substr(file_name,1,50), AUTOEXTENSIBLE de dba_data_files(OR)SQL> selecione tablespace_name,AUTOEXTENSIBLE de dba_data_files;
Como verificar os parâmetros de sublinhado
SELECT X.KSPPINM NAME, DECODE(BITAND(KSPPIFLG/256, 1), 1, 'TRUE', 'FALSE') SESMOD,DECODE( BITAND(KSPPIFLG/65536, 3), 1, 'IMMEDIATE', 2 , 'DEFERRED', 3, 'IMMEDIATE', 'FALSE' ) SYSMOD,KSPPDESC DESCRIPTIONFROM SYS.X_$KSPPI X WHERE X.INST_ID =USERENV('INSTANCE') ANDTRANSLATE(KSPPINM,'_','#') LIKE ' #%' ORDENAR POR 1;
Como mostrar links de DBA
definir tamanho de linha 128 páginas 1000col formato de proprietário a15col formato db_link a15col formato de nome de usuário a20col formato de host a15col formato de nome a30Prompt Links de banco de dados:selecione proprietário, db_link, nome de usuário, host de dba_db_links ordem por proprietário, db_link, nome de usuário/Prompt Sinônimo Links:selecione distintos proprietário, db_link de dba_synonyms onde db_link não é nulo/Prompt Snapshot Links:selecione proprietário, nome, substitua(master_link,'@','') db_link de dba_snapshotsonde master_link não é nulo/
Identificando o segmento por DBA_extents usando file-id e bloco
SELECT segment_name, segment_typeFROM dba_extentsWHERE file_id =AND ENTRE block_id e block_id + blocks - 1;
Listagem de jobs executados em DBMS_SCHEDULER
SET HEADING ONSET LINESIZE 300SET PAGESIZE 60COLUMN owner FORMAT A20SELECT owner,job_name,running_instance,elapsed_timeFROM dba_scheduler_running_jobsORDER BY owner, job_name/
Listando informações do JOB DBMS_SCHEDULER
SET HEADING ONSET LINESIZE 300SET PAGESIZE 60COLUMN proprietário FORMAT A20COLUMN next_run_date FORMAT A35SELECT proprietário,job_name,habilitado,job_class,next_run_dateFROM dba_scheduler_jobsORDER BY proprietário, job_name/
Como obter o plano histórico para o SQL_ID do AWR
SET PAGESIZE 60SET LINESIZE 300SELECT * FROM TABLE(dbms_xplan.display_awr('&SQL_ID'))/
Como fazer a análise de espera do banco de dados
selecionar evento, estado, contagem(*) de v$session_wait agrupar por evento, ordem de estado por 3 desc;
Como encontrar o buffer alto obtém sql
selecione * de (SELECT address, hash_value,buffer_gets,executions, buffer_gets/executions "Gets/Exec",sql_textFROM v$sqlareaWHERE buffer_gets> 500000 and executions>0ORDER BY 3 desc) where rownum <20;
Esta lista de scripts dba oracle para banco de dados oracle para fins de monitoramento não está completa. Existem muitos outros scripts para monitoramento. Vou apresentá-los nos próximos posts
Também lê
Hash Join no Oracle:Confira este post para a descrição detalhada do Hash join no Oracle, como é diferente do Nested Loop join no oracle
Oracle Table locks :Oracle Enqueue ,Row level &DDL,table locks, como funciona o oracle locks, consultas úteis para descobrir os waiters e blockers no oracle
v$active_session_history :Confira sobre o Active Session History, como ele é configurado,como encontrar gargalo de desempenho usando ASH, geração de relatórios ASH, Consultas ASH
https://en.wikipedia.org/wiki/Oracle_Database