Processo

Localização de qual usuário/posto está bloqueando uma tabela (Lock)

Tarefa
Objetivo
Evento
Abrangência

Recursos



Passo a Passo 

O objetivo deste documento é descrever como determinar quais os usuários que estão bloqueando um determinado registro/tabela.
As instalações feitas a partir de 07/10/2003, os "script's" mencionados estarão disponíveis. Para as instalações anteriores, serão enviados aos Clientes.  
Se for necessário utilizar em algum Cliente que não possua estes "script's", proceder da seguinte forma: 

  1. Transfira o arquivo "check_locks.tgz" para o diretorio "/ext/install" do servidor em modoBinário;


  1. De qualquer lugar no servidor, como usuário "root" execute o comando:

"tar pvxzf /ext/install/check_locks.tgz --directory /usr/bin

  1. Para executá-lo é necessário efetuar login como usuário "Informix" e escolher a instância que possui usuários bloqueados.


O procedimento de execução está detalhado a seguir.  

Como verificar os Locks do Usuarios SISDIA 
Este Shell Script interativo verifica os Locks que os usuários do Sisdia provocam. Estes locks costumam ser mais freqüente em novas instalações, onde os usuários ainda não têm o hábito de concluir suas atividades, deixando os programas em "pontos críticos".
Neste exemplo utilizado para demonstrar a funcionalidade foi bloqueado a tabela cofilial diversas vezes com o mesmo usuário (informix) por isso na consulta do usuário lista diversas vezes o mesmo usuário.
Execute o Shell check_locks.sh, sua primeira tela é o comando 'onstat –u|more' que lista todos os usuários que estão conectados ao Banco de Dados Sisdia.
A próxima pergunta é para informar o login do usuário bloqueado. 
 


Neste ponto, o shell irá pesquisar as sessões que este usuário possuem, de modo geral, pelo menos duas sessões serão listadas. Escolha a sessão que possui o sessid maior, pois a menor é a conexão que o monitor faz com o banco de dados. Agora informe este sessid na próxima pergunta. 
 


Quando informar o SessID, o shell irá consultar o sql que tal sessão esta executando, mostrando-o.
Interprete-o para identificar a tabela em questão, pois será a próxima pergunta do Shell Script. No exemplo utilizado a tabela que esta bloqueada é a ("coagente"). 
 


O resultado da consulta da tabela é ilustrado pela figura abaixo, o primeiro usuário é o que esta bloqueando o registro, já os demais, neste exemplo, o tipo de lock "IX" indica um Intend Exclusive Mode, ou seja, tentando um lock do tipo Exclusive Mode. 
 


Logo com esse resultado, é possível solicitar ao primeiro usuário que conclua seu processo, ou se este estiver com sua estação Travada ou Desligada o analista/responsável pode matar a respectiva sessão com o comando 'onmode –z sessid', onde o sessid é o identificador (nro) da sessão. 

Conteúdo do arquivo "check_locks.sh"

#!/bin/bash
echo "Lista dos usuario conectados ao SISDIA" 
onstat -u | more 
USER=""
echo "Qual o usuario que esta Bloqueado?"
read USER
onstat -u | grep $USER 
SESSID=""
echo "Qual a SessID de vc quer consultar?"
read SESSID
onstat -g sql $SESSID 
TABLE=""
echo "Qual tabela vc quer verificar os locks?"
read TABLE 
cat /usr/bin/check_locks.sql > /tmp/check_locks_$USER.sql
echo "and tabname = \"$TABLE\"" >> /tmp/check_locks_$USER.sql
echo "order by 5 desc" >> /tmp/check_locks_$USER.sql 
chmod a+x /tmp/check_locks_$USER.sql 
RUNN=""
RUNN="dbaccess sysmaster /tmp/check_locks_"$USER".sql"
$RUNN 
rm -f /tmp/check_locks_$USER.sql 
echo "-------------------------------------------------------------------"
echo " O primeiro Usuario Listado certamente esta bloqueando os outros. "
echo " Solicite que conclua sua atividade. "
echo "" 

Conteúdo do arquivo "check_locks.sql"


Documentação de versões anteriores deste programa

Não há informações disponíveis.