Access выдает ошибку ( Превышено число блокировок...)

Работа VB и СУБД (Access, MSSQL, MySQL, Oracle и пр.)
Правила форума
При создании новой темы не забывайте указывать используемую СУБД.
ArtemonX
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 08.02.2011 (Вт) 14:38

Access выдает ошибку ( Превышено число блокировок...)

Сообщение ArtemonX » 08.02.2011 (Вт) 14:51

Добрый день.
Вылазит ошибка: Превышено число блокировок файлов общего доступа. Увеличьте значение параметра реестра MaxLocksPerFile.
Аccess 2002. БД 1,1Гига. В таблице всего 14тысяч записей. Обработка записей в цикле; каждую запись поочереди анализируем\вычисляем, результат вычислений вносим в текущую запись в поле "рез_выч".
Как решить эту проблему, чтобы не лазить в реестр?
И вообще, что это за ошибка (физический смысл) ?
Лазил по другим форумам - нифига не понял. Куча рецептов и того, что эти рецепты не помогают (в смысле "Увеличьте значение параметра реестра MaxLocksPerFile"). :drunken:

Денис
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2734
Зарегистрирован: 07.11.2006 (Вт) 13:55
Откуда: Ейск, Краснодарский край

Re: Access выдает ошибку ( Превышено число блокировок...)

Сообщение Денис » 08.02.2011 (Вт) 15:51

ArtemonX писал(а):И вообще, что это за ошибка (физический смысл) ?

Я, если позволите, объясню логический смысл.
Ошибка была в выборе СУБД Access.
Поздравляю! Если вы не делали архивов файла MDB, то новости у меня для вас плохие. Очень плохие.
Программирование — богоизбранная дисциплина! Если бог и есть, то вселенную он скомпилировал, не иначе.

ArtemonX
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 08.02.2011 (Вт) 14:38

Re: Access выдает ошибку ( Превышено число блокировок...)

Сообщение ArtemonX » 08.02.2011 (Вт) 19:23

А поконкретнее можно? какие новости ? почему всё плохо? Какая альтернатива ?

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Re: Access выдает ошибку ( Превышено число блокировок...)

Сообщение VVitafresh » 09.02.2011 (Ср) 10:33

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

В свое время сталкивался с таким. Изменение реестра помогает:
Код: Выделить всё
Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Jet 4.0]
"PageTimeout"=dword:00001388
"LockRetry"=dword:00000014
"MaxBufferSize"=dword:00000000
"Threads"=dword:00000003
"ExclusiveAsyncDelay"=dword:000007d0
"SharedAsyncDelay"=dword:00000032
"FlushTransactionTimeout"=dword:000001f4
"MaxLocksPerFile"=dword:0007a120
"LockDelay"=dword:00000064
"RecycleLVs"=dword:00000000
"PagesLockedToTableLock"=dword:00000000
"UserCommitSync"="yes"
"ImplicitCommitSync"="no"

Если JET не 4.0 может понадобиться подправить в ветках:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\3.5\Engines\Jet 3.5] и [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Jet 3.x]

viewtopic.php?f=7&t=25006&p=6606230&hilit=MaxLocksPerFile#p6606230
viewtopic.php?f=5&t=23480&p=6586812&hilit=MaxLocksPerFile#p6586812

ArtemonX писал(а):И вообще, что это за ошибка (физический смысл) ?
Смысл описан прямо в тексте ошибки: превышено максимальное количество блокировок для файла :)

ArtemonX писал(а):А поконкретнее можно? ... Какая альтернатива ?
Например, MS SQL Server Express Edition
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

Roman Koff
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 495
Зарегистрирован: 17.09.2008 (Ср) 9:22
Откуда: От туда

Re: Access выдает ошибку ( Превышено число блокировок...)

Сообщение Roman Koff » 09.02.2011 (Ср) 13:48

Код: Выделить всё
Private Sub Form_Load()
    DBEngine.SetOption dbMaxLocksPerFile, 900000
End Sub
Слава роботам! Убить всех человеков! Bite my shiny metal ass!

ArtemonX
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 08.02.2011 (Вт) 14:38

Re: Access выдает ошибку ( Превышено число блокировок...)

Сообщение ArtemonX » 09.02.2011 (Ср) 17:42

Roman Koff , ваш рецепт сработал.
Я так понял, что метод от Roman Koff изменяет значение только на текущий сеанс.
А если изменять значение как рекомендует VVitafresh, то на постоянно.
Благодарю.

"И вообще, что это за ошибка (физический смысл) ?"
"Смысл описан прямо в тексте ошибки: превышено максимальное количество блокировок для файла :)"

А кто знает , кто и что блокирует конкретно и зачем? Как можно не допустить превышения количества блокировок для файла ? От чего зависит это количество блокировок для файла ? От каких параметров?
Изменять значение в реестре невозможно до бесконечности. Наступит момент , когда эта мера не поможет. Т.к. база данных все время дополняется.
----------------------
Если понять процесс, то можно легко им управлять :)

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Re: Access выдает ошибку ( Превышено число блокировок...)

Сообщение VVitafresh » 09.02.2011 (Ср) 18:33

ArtemonX писал(а):Я так понял, что метод от Roman Koff изменяет значение только на текущий сеанс.
А если изменять значение как рекомендует VVitafresh, то на постоянно.
Именно так и есть. Я сначала тоже хотел на сеанс менять, но потом понял, что изменение реестра никакому другому ПО не мешает и эти изменения можно сразу внести при установке в инсталляторе и в дальнейшем не париться.

ArtemonX писал(а):А кто знает , кто и что блокирует конкретно и зачем? Как можно не допустить превышения количества блокировок для файла ? От чего зависит это количество блокировок для файла ? От каких параметров?
По-видимому сам Microsoft Jet Database Engine и блокирует. Подробности вряд ли кто раскажет. Вот что в MSDN нашел: http://support.microsoft.com/kb/815281/ru

ArtemonX писал(а):Изменять значение в реестре невозможно до бесконечности. Наступит момент , когда эта мера не поможет. Т.к. база данных все время дополняется.
К наступлению этого момента нужно подготовить план перехода на другую СУБД 8)

P.S. У меня при обработке около 1 млн. записей хватало MaxLocksPerFile=500000
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

Andrey Fedorov
Член-корреспондент академии VBStreets
Член-корреспондент академии VBStreets
 
Сообщения: 3287
Зарегистрирован: 21.05.2004 (Пт) 9:28
Откуда: Москва

Re: Access выдает ошибку ( Превышено число блокировок...)

Сообщение Andrey Fedorov » 10.03.2011 (Чт) 9:54

VVitafresh писал(а):По-видимому сам Microsoft Jet Database Engine и блокирует. Подробности вряд ли кто раскажет.


Чтобы понять почему так происходит надо смотреть собственно программу. Может превышается кол-во блокируемых записей в рамках транзакции... Но не видя кода конкретно это сказать просто невозможно...
Фиг Вам! - Сказал Чебурашка, обгладывая Крокодила Гену...


Вернуться в Базы данных

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 10

    TopList