"Превышено число блокировок общего доступа к файлам..." ошибка во время обработки больших транзакций

Симптомы

Когда один или несколько пользователей обрабатывают несколько транзакций в многопользовательской среде, транзакции могут завершиться ошибкой со следующим сообщением об ошибке:

Превышено пороговое значение счетчика блокировок для общего доступа к файлам. Увеличьте запись реестра MaxLocksPerFile.

Причина

Ошибка возникает, если количество блокировок, необходимых для выполнения транзакции, превышает максимальное число блокировок на файл.

Обходной путь

Внимание! В этом разделе метод или задача содержит шаги по изменению реестра. Однако неправильное изменение параметров реестра может привести к возникновению серьезных проблем. Поэтому следует в точности выполнять приведенные инструкции. Для дополнительной защиты создайте резервную копию реестра, прежде чем редактировать его. Так вы сможете восстановить реестр, если возникнет проблема. Дополнительные сведения о создании резервной копии и восстановлении реестра см. в соответствующей статье базы знаний Майкрософт:

322756 Создание резервной копии и восстановление реестра Windows

Чтобы обойти эту проблему, увеличьте максимальное число блокировок на файл. Для этого воспользуйтесь одним из указанных ниже способов.

Способ 1. Задайте для раздела реестра значение MaxLocksPerFile, чтобы увеличить максимальное число блокировок на файл.

  1. Нажмите кнопку Пуск и выберите пункт Выполнить.

  2. Введите regeditи нажмите кнопку ОК.

  3. В зависимости от установки Access найдите следующий раздел реестра:

    Установка установщика Windows (MSI)

    • Для 32-разрядной версии Access, работающей в 32-разрядной версии Windows, или 64-разрядной версии Access, работающей в 64-разрядной версии Windows

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

    • Для 32-разрядной версии Access, работающей в 64-разрядной версии Windows

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

    Установка "нажми и запуск"

    • Для 32-разрядной версии Access, работающей в 32-разрядной версии Windows, или 64-разрядной версии Access, работающей в 64-разрядной версии Windows

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

    • Для 32-разрядной версии Access, работающей в 64-разрядной версии Windows

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

    Примечание.

    Заполнитель <x.0> представляет вашу версию Office (16.0 = Office 2016, Office 2019, Office LTSC 2021 или Microsoft 365, 15.0 = Office 2013).

  4. В правой области Редактор реестра дважды щелкните Элемент MaxLocksPerFile.

  5. В диалоговом окне Изменение значения DWORD выберите Десятичный.

  6. При необходимости измените значение поля Значение и нажмите кнопку ОК.

Обратите внимание , что этот метод изменяет параметр реестра для всех приложений, использующих ядро СУБД Microsoft Jet версии 4.0.

Метод 2. Временное изменение MaxLocksPerFile с помощью метода SetOption

Примечание.

В примере кода в этой статье используются объекты Доступа к данным Майкрософт. Чтобы этот код выполнялся правильно, необходимо ссылаться на библиотеку объектов Microsoft DAO 3.6. Для этого щелкните Ссылки в меню Сервис в Редактор Visual Basic и убедитесь, что выбрано поле Библиотека объектов Microsoft DAO 3.6 проверка.

Метод SetOption временно переопределяет количество блокировок по умолчанию для каждого файла. Количество блокировок по умолчанию для каждого файла устанавливается при установке раздела реестра MaxLocksPerFile. Новое значение задается с помощью метода SetOption. Новое значение будет допустимым до тех пор, пока вы не закроете объект DBEngine. Чтобы использовать метод 2, выполните следующие действия.

  1. Откройте Microsoft Access.

  2. Откройте базу данных и нажмите клавиши ALT+F11, чтобы запустить редактор Visual Basic.

  3. В окне Microsoft Visual Basic -<Database Name>-[<Имя> модуля (код)] выберите Интерпретация окна в меню Вид .

  4. В окне Интерпретация введите следующий код:

    DAO.DBEngine.SetOption dbmaxlocksperfile,15000

  5. Нажмите клавишу ВВОД, чтобы запустить строку кода. Эта команда временно задает значение MaxLocksPerFile в 15 000.

Для обработки больших транзакций задайте значение MaxLocksPerFile в соответствии с вашими требованиями, а затем выполните транзакции в сеансе.

Изменения, внесенные в параметр MaxLocksPerFile с помощью метода SetOption, доступны только для текущего сеанса.

Дополнительная информация

Параметр MaxLocksPerFile определяет максимальное количество блокировок Microsoft Jet для файла. Значение MaxLocksPerFile по умолчанию равно 9500. Однако не изменяйте это значение, если вы работаете на сервере Novell NetWare, так как максимальное число блокировок записей сервера на подключение составляет 10 000.