Уборка «мусора»

Успешно закончившиеся транзакции не убирают за собой версии записей, сделанные на соответствующих листах учета записей. Поэтому источником возникновения «мусора» являются транзакции, закончившиеся как успешно, так и аварийно.

В InterBase предусмотрены две процедуры уборки «мусора»: а) при выполнении резервной копии процедурой backup выполняется удаление из базы данных всех неактуальных записей и помещение в резервную копию по одной актуальной (последней подтвержденной) записи (подробнее см. гл. 12);

б) в старших версиях InterBase, начиная с версии 5, каждая текущая транзакция после определения актуальной записи удаляет неактуальные версии записи, оставшиеся от работы предыдущей транзакции.

Управление выполнением транзакций

Разработчик (он же и владелец) базы данных на стадии проектирования решает вопрос, какой тип транзакций, явный или неявный, следует использовать в конкретном клиентском приложении базы данных.

При использовании неявного типа:

  • • в локальных базах данных транзакция запускается одним из методов Insert, Append, Edit или Delete и заканчиваются методами Post или Cancel;
  • • в удаленных базах данных транзакция запускается одним из запросов INSERT, UPDATE или DELETE и автоматически заканчивается фиксацией изменений в базе данных.

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

Управление транзакцией в приложении клиента

Управление транзакциями на уровне приложения пользователя реализуется с помощью свойств и методов следующих компонентов.

Компонент IBTransaction

Property InTransaction : Boolean; — если свойство содержит True, то в приложении имеется незавершенная транзакция;

Procedure StartTransaction — активизирует начало транзакции. После исполнения этого метода все внесенные изменения через визуальные компоненты накапливаются в текущей транзакции;

Procedure Commit; — завершает (закрывает) текущую транзакцию и фиксирует каждое действие транзакции на сервере;

Procedure Rollback; — завершает текущую транзакцию откатом назад, т. е. восстанавливает базу данных до внесения изменений.

Открытая (текущая) транзакция обязательно должна быть завершена или методом Commit, или методом Rollback.

При повторном запуске метода StartTransaction и незакрытой текущей транзакции возбуждается исключительная ситуация. Для индикации текущей (незавершенной) транзакции в компоненте IBTransaction предусмотрено свойство InTransaction.

Компонент IBDatabase

Procedure AppleUpdates(const DataSet array of TDataSet); — метод вносит изменения в несколько наборов данных (таблиц). Изменения каждой записи фиксируются на версии (копии) записи на соответствующей странице базы данных. Список наборов данных определяется в параметре Dataset этого метода. Имена наборов данных перечисляются через запятую. Для фиксации в базе данных сделанных изменений автоматически вызывается метод Commit компонента IBTransaction. В случае аварии метода выполняется откат, но при этом кэш не очищается. Для очистки кэша используют метод Cancel Update компонента IBQuery или аналогичных компонентов. В случае возникновения ошибки (откате транзакции) ею можно управлять через обработчик события On Update Error компонента IBQuery или аналогичных компонентов.

Компоненты IBQuery, IBTable, IBStoredProc, IBDataSet

Property CahedUpdates: Boolean; — если свойство содержит True, то изменения, которые находятся в кэше, активны и к ним можно применить либо метод Commit, либо метод Rollback. Установку этого свойства можно выполнить через Object Inspector или программно. Свойство отсутствует у компонента IBStoredProc,

Procedure Cancel Updates; — метод отменяет кэшированные изменения (очищает кэш);

Procedure AppleUpdates; — метод вносит изменения в версию (копию) записи на соответствующей странице базы данных. Использование метода AppleUpdates на этом уровне обеспечивает внесение изменений только в один набор данных (в одну таблицу). Для фиксации выполненных изменений надо подать метод Commit.

 
< Пред   СОДЕРЖАНИЕ     След >