Пессимистическая блокировка

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

При использовании пессимистической блокировки вероятность конфликтов при обращении к данным может быть уменьшена. Когда используется блокировка на уровне страницы, появляется дополнительная проблема, связанная с блокировкой всех записей на странице в течение определенного периода времени. Если обычно процесс редактирования оказывается достаточно длительным и существует много конкури­рующих пользователей, пессимистическую блокировку следует применять с осторожностью. В некоторых приложениях, например баз данных для хранения информации о продажах и товарах, вероятно, предпоч­тение следует отдавать пессимистической блокировке, поскольку основные операции связаны с обработ­кой существующих записей. В то же время для систем отслеживания изменений данных во времени пессимистическая блокировка негативно отражается на производительности. Большинство касающихся пес­симистической блокировки предупреждений и оговорок относятся к способу страничной блокировки в Access. Теперь, когда в Access имеется возможность выполнять блокировку на уровне строки, пессимис­тическая блокировка должна получить более широкое распространение и применение.

Блокировка на уровне строки

Основным преимуществом блокировки на уровне строки является расширение доступа к базе данных для многих пользователей. При блокировке единственной редактируемой записи многим пользователям пре­доставляется доступ к большему объему данных без возникновения конфликтов блокировки или доступа к записям. Использование блокировки на уровне строки также позволяет разработчикам расширить гра­ницы использования пессимистической блокировки. Таким образом, пользователям предоставляются бо­лее знакомые и очевидные условия работы, в ходе которой они выполняют несложные операции открытия записи, ее редактирования и сохранения изменений. В предшествующих версиях Access пессимистическая блокировка не могла получить широкого распространения, поскольку страничный способ блокировки ог­раничивал количество одновременно работающих пользователей, которые должны были мириться с воз­можностью блокировки внесенных ими изменений другими пользователями. При этом разработчикам приходилось создавать схемы реализации привычных для пользователей условий работы (расширяющиеся записи, временные таблицы и т.п.). Блокировка на уровне строки является главным достижением в Jet 4.0. Она должна найти csoe применение в наиболее популярных и надежных приложениях.

Свойство RecordLocks и связанные интерфейсные элементы

При открытии в Access связанной формы или набора записей имеется возможность наложения бло­кировки на соответствующий набор записей. Конечно, эти параметры можно использовать только при ра­боте с Jet, тогда как при использовании конфигурации приложения Access клиент-сервер предполагается установка режима No Locks (отсутствует).

Существует три режима блокировки:

• No Locks (отсутствует) - эквивалентен оптимистической блокировке,

• Edited Records (изменяемой записи) - эквивалентен пессимистической блокировке,

• All Records (всех записей) - блокировка всех записей набора. В многопользовательских приложениях этот режим следует использовать с осторожностью.

СОВЕТ

Связывание пользовательского интерфейса с данными является простым способом предоставления пользователям доступа к данным, но при этом теряется контроль над данными. В связанной с пессимистически блокированной за­писью форме пользователь увидит в панели выбора записи символ "перечеркнутое О", но информация о том, кто заблокировал запись, отсутствует. Если панель выбора записи не отображается, пользователь услышит звуковой сигнал.

Методы блокировки в Jet

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

Определение состояния блокировки

Как отмечалось ранее, фактическая блокировка записи или страницы записей происходит в различное время, а сама блокировка может быть оптимистической либо пессимистической. Кроме того, разные части приложения (или разные приложения) могут использовать различные виды блокировки тех же записей в то же самое время. Поэтому в разные моменты времени будут возникать различные ошибки. Возникаю­щая ошибка зависит от состояния блокировки.

В ADO существует свойство набора записей LockType, содержащее информацию о применяемом к записям типе блокировки. Это свойство доступно для чтения и записи до момента открытия набора за­писей, если набор записей уже открыт, оно доступно только для чтения. Значения свойства LockType для Microsoit.Jet.OLEDB.4.0 приводятся в табл. 2. При использовании других поставщиков могут применяться иные константы. Для определения поддерживаемых поставщиком параметров следует использовать метод. Supports с параметрами adUpdate либо adUpdateBatch.

Таблица 2 Константы для свойства LockType в Jet 4.0 при использовании провайдера Microsoft.Jet.OLEDB.4.0

Константа Описание
adLockReadOnly Значение, принятое по умолчанию. Набор записей не может изменяться, открывается только для чтения, и к данным не применяются никакие блокировки.
adLockPessimistic Пессимистическая блокировка при редактировании.
adLockOptimistic Оптимистическая блокировка при вызове обработчика события Update.
adLockBatchOptimistic Оптимистическая блокировка для режима группового обновления.

ПРИМЕЧАНИЕ

Если свойство CursorLocation имеет значение adUseClient, значение adLockPessimistic не поддерживается, однако при этом ошибка возникать не будет. Jet подставляет в свойство LockType другое подходящее значение. Так про­исходит потому, что при использовании значения adUseClient сервер не отслеживает состояние текущей записи, и поэтому пессимистическая блокировка невозможна.

ПРИМЕЧАНИЕ

ADOR является подмножеством объектной модели ADO и содержит только объекты RecordSet и Field. Он может создаваться специально либо передаваться от сервера клиенту. Объект ADOR поддерживает единственное значение свойства LockType - adLockBatchOptimistic.

При разработке, тестировании и поддержке приложения важно иметь информацию о состоянии бло­кировки записи. Необходимо проверить соответствие каждого процесса обработки данных требованиям, предъявляемым к приложению. Подобная процедура затруднений не вызывает. Следует остановить выпол­нение программы и проверить значение свойства набора записей LockType (рис. 1).

РИСУНОК 1 Свойство LockType отображает •остояние блокировки набора wnuceu.

Для индикации режима редактирования набора записей предназначено другое свойство. До вхождения в режим редактирования свойство EditMode содержит значение adEditNone. Во время редактирования записи оно содержит значение adEditInProgress. После успешного обновления записи свойство EditMode вновь принимает значение adEditNone. Остальные значения свойства EditMode описываются в табл. 3.



Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: