Tempo aproximado para leitura: 00:02:27 min
Dúvida
Como identificar locks no banco de dados no Logix para banco Oracle?
Ambiente
Framework - Framework (Linha Logix) - Administração Logix - Todas as versões
Solução
Para identificar locks no banco de dados do Logix em Oracle basta executar as consultas abaixo diretamente no banco de dados, utilizando qualquer ferramenta SQL - Structured Query Language suportada pelo banco.
Para melhorar a saída quando utilizada a ferramenta SQL Plus do Oracle, executar os comandos a seguir antes da consulta:
set lines 200
set pages 100
col tabela format a30
col bloqueador format a60
col bloqueado format a60
Consulta para identificar os locks:
select
s2.audsid || ',' || bloqueador.usuario || ',' || bloqueador.programa bloqueador,
s1.audsid || ',' || bloqueado.usuario || ',' || bloqueado.programa bloqueado,
o.object_name tabela
from gv$session s1
inner join gv$session s2 on s2.inst_id = s1.blocking_instance and s2.sid = s1.blocking_session
left outer join log_dados_sessao_logix bloqueador on bloqueador.sid = s2.audsid
left outer join log_dados_sessao_logix bloqueado on bloqueado.sid = s1.audsid
left outer join all_objects o on o.object_id = s1.row_wait_obj#
where s1.blocking_session is not null;
Importante
As consultas apenas apresentarão os locks que estão bloqueando outros usuários. Caso queira consultar todos os locks, mesmo aqueles que não estejam bloqueando outros, basta retirar a cláusula WHERE dos comandos. Caso o bloqueador ou bloqueado não seja um programa do Logix, serão apresentados apenas a coluna AUDSID e as vírgulas ao invés dos nomes do usuário e programa do Logix.
Nesses casos utilize a consulta abaixo para identificar quem é o bloqueador:
select osuser, terminal, program from gv$session where audsid = <valor_indicado_na_coluna_bloqueador>;
Para descobrir quem são os usuários bloqueados, execute o seguinte comando:
select osuser, terminal, program from gv$session where audsid in (<valores_das_colunas_bloqueado_separados_por_virgula>);
0 Comentários