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

Примечание

Office 365 ProPlus переименован в Майкрософт 365 корпоративные приложения. Для получения дополнительной информации об этом изменении прочитайте этот блог.

Симптомы

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

Превышено количество блокировок общего доступа к файлам. Увеличение записи реестра 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

    Установка click-to-Run

    • Для 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. Используйте метод SetOption, чтобы временно изменить MaxLocksPerFile

Примечание

В примере кода в этой статье используются объекты доступа к данным Майкрософт. Чтобы этот код был правильно работать, необходимо ссылаться на объектную библиотеку Microsoft DAO 3.6. Для этого щелкните Ссылки в меню Tools в редакторе 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> -[ <Module Name> (Код)] выберите немедленное окно в меню Просмотр.

  4. В немедленном окне введите следующий код:

    DAO.DBEngine.SetOption dbmaxlocksperfile,15000

  5. Нажмите клавишу ENTER для запуска строки кода. Эта команда временно задает значение MaxLocksPerFile до 15 000.

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

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

Дополнительные сведения

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