"Se superó el número de bloqueos de uso compartido de archivos..." error durante el procesamiento de transacciones grandes

Síntomas

Cuando uno o varios usuarios procesan muchas transacciones en un entorno de varios usuarios, es posible que se produzca un error en las transacciones con el siguiente mensaje de error:

Se excedió el número de bloqueos de archivos compartidos. Aumente el valor de la entrada MaxLocksPerFile del Registro.

Causa

El error se produce si el número de bloqueos necesarios para realizar una transacción supera el número máximo de bloqueos por archivo.

Solución alternativa

Importante: esta sección, método o tarea incluye pasos que le indicarán cómo modificar el registro. No obstante, pueden producirse problemas graves si modifica el registro de manera incorrecta. En consecuencia, asegúrese de seguir estos pasos cuidadosamente. Para mayor protección, cree una copia de seguridad del registro antes de modificarlo. Después, puede restaurar el registro si se produce un problema. Para obtener más información acerca de cómo realizar una copia de seguridad y restaurar el Registro, haga clic en el número de artículo siguiente para verlo en Microsoft Knowledge Base:

322756 Hacer una copia de seguridad del Registro y restaurarlo en Windows

Para solucionar este problema, aumente el número máximo de bloqueos por archivo. Para ello, use uno de los métodos siguientes.

Método 1: Establezca la clave del Registro en MaxLocksPerFile para aumentar el número máximo de bloqueos por archivo.

  1. Haga clic en Inicio y luego en Ejecutar.

  2. Escriba regedity, a continuación, haga clic en Aceptar.

  3. Busque la siguiente clave del Registro en función de la instalación de Access:

    Instalación de Windows Installer (MSI)

    • Para la versión de 32 bits de Access que se ejecuta en la versión de 32 bits de Windows o la versión de 64 bits de Access que se ejecuta en la versión de 64 bits de Windows

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

    • Para la versión de 32 bits de Access que se ejecuta en la versión de 64 bits de Windows

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

    Instalación de hacer clic y ejecutar

    • Para la versión de 32 bits de Access que se ejecuta en la versión de 32 bits de Windows o la versión de 64 bits de Access que se ejecuta en la versión de 64 bits de Windows

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

    • Para la versión de 32 bits de Access que se ejecuta en la versión de 64 bits de Windows

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

    Nota:

    El marcador de posición <x.0> representa su versión de Office (16.0 = Office 2016, Office 2019, Office LTSC 2021 o Microsoft 365, 15.0 = Office 2013).

  4. En el panel derecho de Editor del Registro, haga doble clic en MaxLocksPerFile.

  5. En el cuadro de diálogo Editar valor DWORD , seleccione Decimal.

  6. Modifique el valor del cuadro Datos de valor según sea necesario y, a continuación, seleccione Aceptar.

Tenga en cuenta que este método cambia la configuración del Registro para todas las aplicaciones que usan la versión 4.0 del motor de base de datos de Microsoft Jet.

Método 2: Usar el método SetOption para cambiar temporalmente MaxLocksPerFile

Nota:

En el código de ejemplo de este artículo se usan objetos de Microsoft Data Access. Para que este código se ejecute correctamente, debe hacer referencia a la biblioteca de objetos de Microsoft DAO 3.6. Para ello, haga clic en Referencias en el menú Herramientas del Editor de Visual Basic y asegúrese de que la casilla Biblioteca de objetos de Microsoft DAO 3.6 esté activada.

El método SetOption invalida temporalmente el número predeterminado de bloqueos por archivo. Al establecer la clave del Registro MaxLocksPerFile, se establece el número predeterminado de bloqueos por archivo. El nuevo valor se establece mediante el método SetOption. El nuevo valor es válido hasta que se cierra el objeto DBEngine. Para usar el método 2, siga estos pasos:

  1. Abra Microsoft Access.

  2. Abra una base de datos y presione Alt+F11 para iniciar el editor de Visual Basic.

  3. En la ventana Microsoft Visual Basic -<Nombre> de base de datos-[<Nombre> del módulo (código)] , seleccione Ventana inmediata en el menú Ver .

  4. En Ventana inmediata, escriba el código siguiente:

    DAO.DBEngine.SetOption dbmaxlocksperfile,15000

  5. Presione la tecla ENTRAR para ejecutar la línea de código. Este comando establece temporalmente el valor MaxLocksPerFile en 15 000.

Para procesar transacciones grandes, establezca el valor MaxLocksPerFile para satisfacer sus necesidades y, a continuación, ejecute las transacciones en la sesión.

Los cambios realizados en la configuración MaxLocksPerFile mediante el método SetOption solo están disponibles para la sesión actual.

Más información

La configuración MaxLocksPerFile determina el número máximo de bloqueos que Microsoft Jet coloca en un archivo. El valor predeterminado de MaxLocksPerFile es 9500. Sin embargo, no cambie este valor si trabaja en un servidor de Novell NetWare, ya que el número máximo de bloqueos de registros de servidor por conexión es de 10 000.