Pular para o conteúdo
  • Este tópico contém 3 respostas, 3 vozes e foi atualizado pela última vez 8 anos atrás por Avatar photoJosé Laurindo Chiappa.
Visualizando 4 posts - 1 até 4 (de 4 do total)
  • Autor
    Posts
  • #108422
    Avatar de Andre LuizAndre Luiz
    Participante

      Pessoal

      Temos uma aplicação em Delphi com cerca de 950 tabelas onde varias acessam as informações no banco de dados, mas uma tabela especifica ao ser acessada por dois usuários, um acessa normalmente, mas o outro retorna a mensagem “ORA-00054: resource busy and acquire with NOWAIT specified, em varios foruns”
      Nas pesquisas que fiz vi que teria duas opções, esperar o recurso ser liberado ou matar a sessão que esteja inativa, mas as duas estão ativas, nas outras tabelas, com as mesmas configurações, normalmente tem acesso de vários usuários ao mesmo tempo sem apresentar a mensagem acima.
      Sei que as informações aqui são meio vagas, mas mesmo assim caso alguém tenha alguma sugestão.

      O banco de dados é um Oracle 11g Express Edition instalado em um CentOS 6.4

      #108423
      Avatar de Paulo WerneckPaulo Werneck
      Participante

        Você consegue nos dizer o que cada sessão está executando?

        #108424
        Avatar de Andre LuizAndre Luiz
        Participante

          Primeiro faz um select para listar os itens na aplicação para o usuário poder lançar, alterar ou deletar as informações, mas ao colocar o primeiro filtro já apresenta a mensagem citada tendo um outro usuário logado na mesma tabela.

          #108425
          Avatar photoJosé Laurindo Chiappa
          Moderador

            Seguinte : essa mensagem acontece quando um programa que está conectado no banco de dados quer fazer uma alteração (normalmente algum tipo de DDL) numa tabela ou índice que no momento está em uso por outro programa, e é INESCAPÁVEL no sentido que se alguém tá usando um recurso de maneira exclusiva não tem como outro alguém usar ao mesmo tempo….

            O procedimento CORRETO e LIMPO é a danada da aplicação *** PERGUNTAR ** para o banco se o objeto que ela quer alterar tá em uso por outros ou não, yep ?? Isso é o CERTO, se vc está vendo msgs do tipo tá Líquido e PROVADO EM DEFINITIVO que a porquinha da aplicação NÂO ESTÁ FAZENDO isso….

            Na ausência da situação recomendada e correta, o que vc pode fazer enquanto a Aplicação Não é Consertada seria :

            => identificados os dois programas/telas/procedimentos que estão concorrendo entre si/querendo Alterar/mexer no mesmo objeto ao mesmo tempo, re-agendar um deles para ser executado numa outra hora

            => de momento, enquanto a alteração de schedule não ocorre, se depois de esperar um pouco e tentar re-executar e ainda assim a msg ocorre, sim, vc deve ou matar a sessão ou (se conseguir identificar o usuário que causou o bloqueio) demandar que esse usuário saia da aplicação/programa que está usando o objeto em disputa…

            []s

            Chiappa

            OBS : se vc precisar de um script/consulta pra identificar as sessões/programas/módulos envolvidos, vc pode usar um tipo este :

            select a.sid, a.serial#, a.username, a.machine, a.module, a.terminal, c.owner, c.object_type, c.object_name
            from v$session a, v$locked_object b, dba_objects c
            where b.object_id = c.object_id
            and a.sid = b.session_id;

          Visualizando 4 posts - 1 até 4 (de 4 do total)
          • Você deve fazer login para responder a este tópico.
          plugins premium WordPress