Скачиваний:
201
Добавлен:
17.06.2016
Размер:
2.69 Mб
Скачать

Db_openinvalid/3

Предикат позволяет открыть базу данных, которая ранее была объявлена

"непригодной".

db_openinvalid(Dbase, Name, Place) /* (i,i,i) */

Если в процессе обновления базы данных было отключено электропитание

компьютера, все содержимое базы данных может быть утеряно, так как часть

буфера могла быть не переписана на диск. После этого система объявляет

базу данных "непригодной".

База данных объявляется "непригодной" после обработки любого преди-

ката, изменяющего содержимое базы данных, изменяющего содержимое базы

данных. Эти предикаты: chain_inserta, chain_insertz, chain_insertafter,

term_replace, term_delete, chain_delete, btree_create, key_insert,

key_delete. База данных объявляется "пригодной" снова после того, как она

закрывается предикатом db_close, или после того, как происходит обращение

к db_flush для освобождения буферов.

Используя db_openinvalid, возможно продолжение обработки базы дан-

ных, если она была объявлена непригодной. При этом возможно восстановле-

ние части данных, если все дублирующие файлы были удалены. Однако, все

попытки использования непригодной базы данных после открытия ее с помощью

db_openinvalid могут привести к нежелательным результатам.

Db_flush/1

Этот предикат высвобождает буферы и записывает их содержимое в места

их назначения в вашей базе данных:

db_flush(Dbase) /* (i) */

После обновления базы данных она объявляется непригодной и остается

такой до заполнения с помощью db_flush или до закрытия.

Уровень осторожности, с которой вы будете работать, зависит, безус-

ловно, от содержимого базы данных. Наиболее осторожный путь - сохранять

копии файлов на диске. Промежуточный уровень - обращение к db_flush после

обновления базы данных. Однако освобождение буферов весьма медленная опе-

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

ком неповоротлива. Наконец, если содержимое ваше базы данных особо ценно,

вы можете записывать все изменения в особом файле - "журнале" или поддер-

живать две идентичные базы данных, может быть на различных дисках.

Db_close/1

Предикат закрывает открытую базу данных:

db_close(Dbase) /* (i) */

Если база данных помещается на диске, то соответствующий файл будет

закрыт. При этом база данных не будет удалена, даже если она помещена в

оперативной памяти или в EMS-памяти, т.е. вы можете открыть ее вновь пу-

тем обращения к db_open. Для удаления закрытой базы данных используется

предикат db_delete.

Db_delete/1

Если база данных расположена в оперативной или EMS-памяти, то заня-

тая ею память высвобождается.

db_delete (Name, Place) /* (i,i) */

Если база данных расположена в файле, то db_delete удаляет файл.

Возникает ситуация ошибки, если при обработке db_delete база данных Name

не находится в данном месте, указанном Place.

Db_garbagecollect/1

Этот предикат просматривает свободные участки в базе данных и пыта-

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

db_garbagecollect(Dbase) /* (i) */

Это сканирование происходит автоматически, если база данных находит-

ся в оперативной или EMS-памяти.

В нормальных условиях нет необходимости использовать этот предикат.

Однако, если оказывается, что база данных содержит много пустых мест, ко-

торые не могут быть заполнены при введении новых термов в базу данных, то

db_garbagecollect может высвободить некоторое дополнительное количество

памяти.

Соседние файлы в папке Документация