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

Признаки

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

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

Причина

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

Временное решение

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

322756 как создать резервную копию и восстановить реестр в Windows

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

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

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

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

  3. Используйте соответствующий метод:

    • В Microsoft Access 2000, в Microsoft Access 2002 и Microsoft Office Access 2003, запущенных в составе операционной системы Windows на 32 бит, используйте редактор реестра, чтобы определить следующий раздел реестра:

      HKEY_LOCAL_MACHINE \SOFTWARE\Microsoft\Jet\4.0\Engines\Jet 4,0

      В Microsoft Access 2000, в Microsoft Access 2002 и Microsoft Office Access 2003, запущенных в составе операционной системы Windows на 64 бит, используйте редактор реестра, чтобы определить следующий раздел реестра:

      HKEY_LOCAL_MACHINE \SOFTWARE\Wow6432Node\Microsoft\Jet\4.0\Engines\Jet 4,0

    • В Microsoft Office Access 2007, работающем под управлением 32-разрядной операционной системы Windows, с помощью редактора реестра откройте следующий раздел реестра:

      HKEY_LOCAL_MACHINE \SOFTWARE\Microsoft\Office\12.0\Access Connectivity Енгине\енгинес\аце

      В Microsoft Office Access 2007, работающем под управлением 64-разрядной операционной системы Windows, с помощью редактора реестра откройте следующий раздел реестра:

      HKEY_LOCAL_MACHINE \SOFTWARE\Wow6432Node\Microsoft\Office\12.0\Access Connectivity Енгине\енгинес\аце

    • В Microsoft Access 2010, работающем под управлением 32-разрядной операционной системы Windows, с помощью редактора реестра откройте следующий раздел реестра:

      HKEY_LOCAL_MACHINE \SOFTWARE\Microsoft\Office\14.0\Access Connectivity Енгине\енгинес\аце

      В Microsoft Office Access 2010, работающем под управлением 64-разрядной операционной системы Windows, с помощью редактора реестра откройте следующий раздел реестра:

      HKEY_LOCAL_MACHINE \SOFTWARE\Wow6432Node\Microsoft\Office\14.0\Access Connectivity Енгине\енгинес\аце

    • В Microsoft Access 2013, работающем под управлением 32-разрядной операционной системы Windows, с помощью редактора реестра откройте следующий раздел реестра:

      HKEY_LOCAL_MACHINE \SOFTWARE\Microsoft\Office\15.0\Access Connectivity Енгине\енгинес\аце

      В Microsoft Office Access 2013, работающем под управлением 64-разрядной операционной системы Windows, с помощью редактора реестра откройте следующий раздел реестра:

      HKEY_LOCAL_MACHINE \SOFTWARE\Wow6432Node\Microsoft\Office\15.0\Access Connectivity Енгине\енгинес\аце

    • В Microsoft Access 2016, работающем под управлением 32-разрядной операционной системы Windows, с помощью редактора реестра откройте следующий раздел реестра:

      HKEY_LOCAL_MACHINE \SOFTWARE\Microsoft\Office\16.0\Access Connectivity Енгине\енгинес\аце

      В Microsoft Office Access 2016, работающем под управлением 64-разрядной операционной системы Windows, с помощью редактора реестра откройте следующий раздел реестра:

      HKEY_LOCAL_MACHINE \SOFTWARE\Wow6432Node\Microsoft\Office\16.0\Access Connectivity Енгине\енгинес\аце

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

  5. В диалоговом окне изменение параметра DWORD нажмите кнопку десятичное число.

  6. Измените значение поля значение , как необходимо, а затем нажмите кнопку ОК.

Обратите внимание , что этот метод изменяет параметр реестра для всех приложений, использующих ядро базы данных Microsoft Jet версии 4,0.

Способ 2: использование метода SetOption для временного изменения MaxLocksPerFile

Примечание

В примере кода, приведенном в этой статье, используются объекты Microsoft Data Access. Чтобы этот код выполнялся правильно, необходимо сослаться на библиотеку объектов 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 —<имя базы данных>-<[имя модуля> (код)] выберите окно Интерпретация в меню вид .
  4. В окне Интерпретациявведите следующий код.

Программирован. DBEngine. SetOption дбмакслокксперфиле, 15000 5. Нажмите клавишу ВВОД, чтобы выполнить строку кода.

Note (Примечание ) Это временно устанавливает значение MaxLocksPerFile равным 15 000.

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

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

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

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