"Contagem de bloqueios de compartilhamento de arquivos excedida..." erro durante o processamento de transações grandes

Sintomas

Quando um ou mais usuários processam muitas transações em um ambiente de vários usuários, as transações podem falhar com a seguinte mensagem de erro:

Contagem de bloqueios de compartilhamento excedida. Aumente a entrada de registro MaxLocksPerFile.

Motivo

O erro ocorrerá se o número de bloqueios necessários para executar uma transação exceder o número máximo de bloqueios por arquivo.

Solução alternativa

Importante Esta seção, seção ou tarefa contém etapas que informam como modificar o Registro. Entretanto, sérios problemas poderão ocorrer caso você modifique o Registro incorretamente. Portanto, siga essas etapas cuidadosamente. Para mais proteção, faça o backup do registro antes de modificá-lo. Em seguida, você poderá restaurar o registro se ocorrer um problema. Para obter mais informações sobre como fazer backup e restaurar o Registro, clique no número abaixo para ler o artigo na Base de Dados de Conhecimento Microsoft:

322756 Como fazer o backup e a restauração do Registro no Windows

Para contornar esse problema, aumente o número máximo de bloqueios por arquivo. Para fazer isso, utilize um dos métodos seguintes.

Método 1: defina a chave do registro como MaxLocksPerFile para aumentar o número máximo de bloqueios por arquivo

  1. Clique em Iniciar e em Executar.

  2. Digite regedite clique em OK.

  3. Localize a seguinte chave do registro dependendo da instalação do Access:

    Instalação do MSI (Instalador do Windows)

    • Para a versão de 32 bits do Access em execução na versão de 32 bits do Windows ou na versão de 64 bits do Access em execução na versão de 64 bits do Windows

      HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\<x.0>\Access Connectivity Engine\Engines\ACE

    • Para a versão de 32 bits do Access em execução na versão de 64 bits do Windows

      HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Office\<x.0>\Access Connectivity Engine\Engines\ACE

    Instalação click-to-Run

    • Para a versão de 32 bits do Access em execução na versão de 32 bits do Windows ou na versão de 64 bits do Access em execução na versão de 64 bits do Windows

      HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Microsoft\Office\<x.0>\Access Connectivity Engine\Engines\ACE

    • Para a versão de 32 bits do Access em execução na versão de 64 bits do Windows

      HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Office\ClickToRun\REGISTRY\MACHINE\Software\Wow6432Node\Microsoft\Office\<x.0>\Access Connectivity Engine\Engines\ACE

    Observação

    O marcador de posição <x.0> representa a sua versão do Office (16.0 = Office 2016, Office 2019, Office LTSC 2021 ou Microsoft 365, 15.0 = Office 2013).

  4. No painel direito do Editor do Registro, clique duas vezes em MaxLocksPerFile.

  5. Na caixa de diálogo Editar Valor DWORD , selecione Decimal.

  6. Modifique o valor da caixa de dados Valor conforme necessário e selecione OK.

Observe que esse método altera a configuração do registro para todos os aplicativos que usam o mecanismo de banco de dados do Microsoft Jet versão 4.0.

Método 2: use o método SetOption para alterar temporariamente MaxLocksPerFile

Observação

O código de exemplo neste artigo usa objetos do Microsoft Data Access. Para que esse código seja executado corretamente, você deve fazer referência à Biblioteca de Objetos do Microsoft DAO 3.6. Para fazer isso, clique em Referências no menu Ferramentas no Visual Basic Editor e verifique se a caixa marcar da Biblioteca de Objetos do Microsoft DAO 3.6 está selecionada.

O método SetOption substitui temporariamente o número padrão de bloqueios por arquivo. Você define o número padrão de bloqueios por arquivo ao definir a chave de registro MaxLocksPerFile. Você define o novo valor usando o método SetOption. O novo valor é válido até que você feche o objeto DBEngine. Para usar o Método 2, siga estas etapas:

  1. Abra o Microsoft Access.

  2. Abra um banco de dados e pressione Alt+F11 para iniciar o editor do Visual Basic.

  3. Na janela Nome do Microsoft Visual Basic -<Database> [<Nome> do Módulo (Código)] , selecione Janela Imediata no menu Exibir .

  4. Na Janela Imediata, insira o seguinte código:

    DAO.DBEngine.SetOption dbmaxlocksperfile,15000

  5. Pressione a tecla ENTER para executar a linha de código. Esse comando define temporariamente o valor MaxLocksPerFile como 15.000.

Para processar transações grandes, defina o valor MaxLocksPerFile para atender aos seus requisitos e execute as transações na sessão.

As alterações feitas na configuração MaxLocksPerFile usando o método SetOption estão disponíveis apenas para a sessão atual.

Mais informações

A configuração MaxLocksPerFile determina o número máximo de bloqueios que o Microsoft Jet coloca em um arquivo. O valor maxlocksperfile padrão é 9.500. No entanto, não altere esse valor se você estiver trabalhando em um servidor Novell NetWare, pois o máximo de bloqueios de registro de servidor por conexão é de 10.000.