- Este tópico contém 5 respostas, 3 vozes e foi atualizado pela última vez 13 anos, 7 meses atrás por
Victor Armbrust.
-
AutorPosts
-
4 de agosto de 2012 às 12:08 am #104209
ramasine
ParticipanteCaros,
Alguem tem um script para que eu verifique quais usuários estão acessando determinada tabela no meu banco?
Oracle 8.1.7.4
Temos um job de control-m (aplicação) que roda no banco uma série de procedimentos e desconfiamos que existe um report que faz concorrencia de leitura em determinada tabela, mas para isso precisaria saber quais usuários estão acessando a tabela X…
4 de agosto de 2012 às 5:50 pm #104210Fábio Prado
ParticipanteRAMASINE,
A consulta abaixo poderá te ajudar. Ela irá pesquisar todas as sessões ativas filtrando por uma palavra que exista dentro da instrução SQL. Ao executar a consulta informe o nome da tabela desejada, ok?
select /*+ ALL_ROWS */
a.sid,
a.program,
a.username,
a.status, — active, inactive, killed (marcada p/ finalizar), cached (temporiaramente em cache p/ uso pelo Oracle XA), sniped (inativa, esperando no cliente)
a.server, — dedicated, shared, pseudo, none
a.schemaname,
a.osuser,
a.process,
a.machine,
to_char(a.logon_time, ‘DD-MON-YYYY HH24:MI:SS’) as logon_time,
b.SQL_FULLTEXT
from v$session a
left join v$sqlarea b
on a.sql_hash_value = b.hash_value
inner join v$sess_io c
on a.SID = c.SID
WHERE USERNAME IS NOT NULL
AND STATUS = ‘ACTIVE’
AND UPPER(B.SQL_FULLTEXT) LIKE UPPER(‘%&TABLE_NAME%’);[]s
Fábio Prado
http://www.fabioprado.net6 de agosto de 2012 às 5:36 pm #104213ramasine
Participantecara, deve ter algum problema de sintaxe…
10:28:14 sql’@’jde1 > @tabelas
Enter value for table_name: F0911
left join v$sqlarea b on a.sql_hash_value = b.hash_value
*
ERROR at line 14:
ORA-00933: SQL command not properly ended7 de agosto de 2012 às 7:23 am #104223Victor Armbrust
MestreOpa rasmine,
cara para isso, você pode tentar ver os Locks que estão rolando na base.
Roda esses caras quando você estiver com o job do control-m em andamentoTenta este:
select inst_id, blocking_session, sid, serial#, wait_class, seconds_in_wait from gv$session
where blocking_session is not NULL order by blocking_session,seconds_in_wait;
ou este
set term on;
set lines 200;
set pages 300
column session_id format 9999 heading 'Sid';
column serial# format 999999 heading 'Serial#';
column username format a18 heading 'OS User/|DB User';
column process format a15 heading 'OS Process|Source';
column spid format a15 heading 'OS Process|DB Server';
column owner_object format a32 heading 'Owner.Object';
column locked_mode format a13 heading 'Locked|Mode';
column status format a8 heading 'Status';select
l.session_id,
s.serial#,
substr(l.os_user_name||'/'||l.oracle_username,1,18) 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) locked_mode,
substr(s.status,1,8) status
from
gv$locked_object l,
all_objects o,
gv$session s,
gv$process p
where
l.object_id = o.object_id
and l.session_id = s.sid
and s.paddr = p.addr
and s.status not in('KILLED','INACTIVE')
order by l.session_id
/Abs
Victor
8 de agosto de 2012 às 12:50 am #104229Fábio Prado
Participanteramasine, a query q o victor passou só consegue verificar consultas q estão gerando bloqueios e nelas vc nao consegue filtrar p/ retornar linhas de consultas a uma determinada tabela
a consulta q passei é bem diferente, não considera bloqueios ,mas permite filtrar por acessos a uma determinada tabela
abs
8 de agosto de 2012 às 4:57 am #104232Victor Armbrust
MestreSim. Só não esquece que vai mostrar no momento que acessa.. tem que ficar rodando a query.
Mesma pegada.
Outra ideia é rodar um ASH do intervalo que roda o job no control-m…. -
AutorPosts
- Você deve fazer login para responder a este tópico.