- Este tópico contém 2 respostas, 3 vozes e foi atualizado pela última vez 16 anos, 8 meses atrás por
David Siqueira.
-
AutorPosts
-
24 de julho de 2009 às 4:07 pm #88172
RomuloRDM
ParticipanteBom dia,
Estou com um problema em uma aplicação em que trava duas tabelas e como são tabela de saldos (contabil) logo em seguida vai bloqueando varios usuarios, existe alguma forma de fazer um rastreamento pelo oracle para que eu possa identificar qual o usuario que está gravando nesta tabela?, Também verifiquei que nestas situações não apresenta lock de tabelas e o que acontece e que os usuarios que ficam aguardando estão usando o mesmo comando.
Desde já agradeço a atenção.
Att.
RomuloRDM
24 de julho de 2009 às 4:25 pm #88173jspaulonci
ParticipanteBom dia Romulo, já algumas situações peculiares referente a esses assuntos, bom…vamos lá
Eu começaria com o seguinte comando,
select a.command,
a.sid,
a.serial#,
a.username,
b.owner,
a.status,
a.osuser,
b.object,
b.type,
a.sql_address
from V$session a, v$access b
where a.sid = b.sid
— and b.sid in (267)
and b.object in (‘NOME_DA_TABELA’)Execute essa query (sugiro com DBA), você saberá quais sessões estão utilizando esta tabela, isso não quer dizer que ela estará bloqueada.
(se você está em RAC, rode essa query para cada sessão, eu ainda não adequei todas a minha querys para RAC)Rode essa query se você não usa RAC
select distinct (a.holding_session) SID_BLOQUEANDO,
a.waiting_session SID_EM_ESPERA,
c.username OWNER,
c.machine MAQUINA,
c.program APLICACAO,
b.seconds_in_wait / 60 TEMPO_BLOQUEIO
from dba_waiters a,
v$session_wait b,
v$session c
where a.waiting_session = b.sid
and b.sid = c.sid
and a.mode_held like ‘Exclusive’Nessa query vc descobrirá se tem sessões aguardando outras sessões liberarem recursos
Esse query , tem a mesa funcionalidade porem execute-a se seu ambiente é RAC
select to_char(a.inst_id,’9′) “INST ESPERANDO”,
a.sid as “SID ESPERANDO”,
substr(a.username,1,15) usr_blk,
substr(a.blocking_session_status,1,10) status,
to_char(a.blocking_instance,’9′) “INST BLOQUEANDO”,
a.blocking_session AS “SID BLOQUEANDO”,
(select substr(username,1,15) from gv$session
where sid = a.blocking_session
and inst_id = a.blocking_instance) usr
from gv$session a
where a.blocking_session is not nullNão esqueça de postar o resultado
Abraços
João Paulo Spaulonci
24 de julho de 2009 às 4:53 pm #88176David Siqueira
ParticipanteOpa!!..salve, no meu BLOG tem alguma coisa sobre esse assunto cara, depois se tu quiser da uma passada lá, mais aqui fica meu script que uso sempre pra monitorar locks :
set echo off
set feedback on
set linesize 1000
col sid format 99999
col serial format 99999
col username format a20
col osuser format a10
col owner format a10
col object_name format a30
col machine format a15
col program format a35
col lockmode format a10prompt ----Sessions and objects involved in the locks
Select distinct s.sid,s.serial#,
s.username,
s.status,
s.osuser,
p.spid "OS Pid",
o.object_name,
decode(l.locked_mode,
0, 'None',
1, 'Null',
2, 'Row-S',
3, 'Row-X',
4, 'Share',
5, 'S/Row-X',
6, 'Exclusive',
to_char(l.locked_mode)) "LockMode",
s.lockwait,
s.program,
s.taddr
from dba_objects o ,
v$locked_object l,
v$session s,
v$process p,
v$sqltext t
where l.object_id=o.object_id
and l.session_id = s.sid
and s.paddr = p.addr
and t.address = s.sql_address
and t.hash_value = s.sql_hash_value
order by sid,serial#;prompt ----SQL statements sessions currently executing
Select distinct s.sid,
s.serial#,
p.spid "O.S|Id",
t.piece,
t.sql_text
from dba_objects o ,
v$locked_object l,
v$session s,
v$process p,
v$sqltext t
where l.object_id=o.object_id
and l.session_id = s.sid
and s.paddr = p.addr
and t.address = s.sql_address
and t.hash_value = s.sql_hash_value
order by sid,serial#;Abraço, boa sorte!!!
-
AutorPosts
- Você deve fazer login para responder a este tópico.