- Este tópico contém 7 respostas, 3 vozes e foi atualizado pela última vez 14 anos, 3 meses atrás por
vieri.
-
AutorPosts
-
24 de novembro de 2011 às 9:07 pm #101789
davidfs
ParticipanteBoa tarde à todos,
Como o próprio titulo do tópico já diz, quero saber qual registro esta em lock. Com um porém, sei de qual objeto este registro faz parte e sei também qual a rowid do registro. Mas não sei como fazer a verificação se este determinado registro está travado.
Agradeço deste de já, Obrigado.
24 de novembro de 2011 às 10:04 pm #101792vieri
ParticipanteSELECT substr(DECODE(request,0,’Holder: ‘,’Waiter: ‘)||sid,1,12) sess,
id1, id2, lmode, request, type, inst_id
FROM GV$LOCK
WHERE (id1, id2, type) IN
(SELECT id1, id2, type FROM GV$LOCK WHERE request>0)
ORDER BY id1, request;aqui mostrará o usuário bloqueado e quem tá bloqueando.
select do.owner
, do.object_name
, row_wait_obj#
, row_wait_file#
, row_wait_block#
, row_wait_row#
, dbms_rowid.rowid_create (1, ROW_WAIT_OBJ#, ROW_WAIT_FILE#,
ROW_WAIT_BLOCK#, ROW_WAIT_ROW#)
from gv$session s
, dba_objects do
where sid=899
and s.ROW_WAIT_OBJ# = do.OBJECT_ID
/aqui vc pega os rowid’s bloqueados pelo sid que está bloqueado ou que desejar.
select * from table where rowid = (rowid);
aqui o sql fala por sí.
24 de novembro de 2011 às 10:59 pm #101795davidfs
Participante[quote=”vieri”:3lz2pshu]SELECT substr(DECODE(request,0,’Holder: ‘,’Waiter: ‘)||sid,1,12) sess,
id1, id2, lmode, request, type, inst_id
FROM GV$LOCK
WHERE (id1, id2, type) IN
(SELECT id1, id2, type FROM GV$LOCK WHERE request>0)
ORDER BY id1, request;aqui mostrará o usuário bloqueado e quem tá bloqueando.
select do.owner
, do.object_name
, row_wait_obj#
, row_wait_file#
, row_wait_block#
, row_wait_row#
, dbms_rowid.rowid_create (1, ROW_WAIT_OBJ#, ROW_WAIT_FILE#,
ROW_WAIT_BLOCK#, ROW_WAIT_ROW#)
from gv$session s
, dba_objects do
where sid=899
and s.ROW_WAIT_OBJ# = do.OBJECT_ID
/aqui vc pega os rowid’s bloqueados pelo sid que está bloqueado ou que desejar.
select * from table where rowid = (rowid);
aqui o sql fala por sí.[/quote]
Obrigado Vieri, mais até ai eu havia chego o problema é que o rowid que traz não bate com o que esta realmente travado.
Mais Alguma dica?
25 de novembro de 2011 às 1:23 am #101800vieri
Participanteas vezes não bate mesmo….
pois depende de como está implementado o proceso que bloqueia a linha.
25 de novembro de 2011 às 3:09 am #101808davidfs
ParticipanteO que fazer então..
“QUERY NOSSA QUE ESTAIS NO BANCO,
RODE RÁPIDO MINHA CONSULTA,
ASSIM NO CONSOLE QUANTO NA APLICAÇÃO
QUE RETORNE NOSSA CONSULTA
AMÉM!”❓
25 de novembro de 2011 às 3:19 am #101809fabiogalera
ParticipanteTenta fazer de um modo diferente
Pegue o valor que está lockado, na coluna ROW_WAIT_OBJ#, e inclua abaixo:
select object_name, object_type, object_id, data_object_id
from dba_objects where object_id = &ID;
Pegue o valor da coluna data_object_id, e troque abaixo.
Ao inves do usual:select dbms_rowid.rowid_create(, , , ) from dual;
use
select dbms_rowid.rowid_create(, , , ) from dual;
Irá gerar outro rowid. Caso seja o mesmo código, ignore hehe[/b]
25 de novembro de 2011 às 4:34 am #101810davidfs
ParticipanteNão vigou 🙁
O engraçado é que é por uma letra que não fecha o rowid:
É para ser assim: AAAFRjAAIAAAaZpAAA
Sempre vem assim: AAAFRjAAIAAAaZ6AAA😡
25 de novembro de 2011 às 6:24 pm #101831vieri
Participantese vc fazer um processo básico de DML irá funcionar.
se for dentro de tabela temporária, se for trigger ou outras operações, procedure que trabalha os dados.
o ROWID , pode sofrer alterações em tempo de execução.. então acaba não batendo mesmo.não conheço outra solução para isso. e não sei se o Oracle tem.
-
AutorPosts
- Você deve fazer login para responder a este tópico.