Локальные сети персональных компьютеров. Работа с сервером Novell NetWare


Блокирование физических записей


Если вы разрабатываете СУБД с коллективным доступом к файлам базы данных, расположенным на сервере, метод блокирования файлов может оказаться не слишком удобным. Так как разные пользователи в разные моменты времени работают с различными участками (записями) базы данных, едва ли стоит блокировать весь файл, если один из пользователей решил изменить содержимое только одной записи в базе данных. Было бы лучше заблокировать только эту запись.

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

Для создания группы физических записей используется функция LogPhysicalRecord(), аналогичная по назначению функции LogFile(), но работающая с записями. Удалить запись из группы можно функцией ClearPhysicalRecord(). Вся группа записей удаляется функцией ClearPhysicalRecordSet().

Записи можно блокировать сразу при их добавлении в группу либо позже. Вы можете заблокировать сразу все записи, относящиеся к группе, вызвав функцию LockPhysicalRecordSet().

Для разблокирования записи используется функция ReleasePhysicalRecord(). Если надо разблокировать сразу все записи, вызывайте функцию ReleasePhysicalRecordSet().

Функция LogPhysicalRecord() имеет следующий прототип:

int LogPhysicalRecord(int FileHandle, long RecordStartOffset, long RecordLength, BYTE LockDirective,WORD Timeout);

Параметр FileHandle задает индекс файла, которому принадлежит блокируемая запись.

Параметры RecordStartOffset и RecordLength задают смещение от начала файла и размер блокируемой записи в байтах.

Параметр LockDirective определяет, надо ли блокировать запись сразу после его добавления в группу:

0x00 Запись добавляется в группу, но не блокируется
0x01 Добавляемая запись блокируется для использования заблокировавшей его программой в монопольном режиме
0x03 Добавляемая запись блокируется для совместного использования
<


Начало  Назад  Вперед