BLOB-данные
Ниже перечислены особенности работы с данными типа BLOB:
• Добавление в BLOB.
• Как и в предыдущих версиях СУБД ЛИНТЕР, добавление в BLOB осуществляется с помощью команд ABOJ, ABLB. Но если в предыдущих версиях вставка была “видна” конкурирующим транзакциям до фиксации транзакции, произведшей ее, то теперь вставка видна (транзакциям с режимами выше READ UNCOMMITTED) только после фиксации транзакции.
• Очистка BLOB.
Как и в предыдущих версиях СУБД ЛИНТЕР, очистка BLOB осуществляется командами COBJ, CBLB при этом реальная очистка страниц BLOB происходит в момент фиксации транзакции. Но при наличии конкурирующей SERIALIZABLE транзакции фиксация транзакции не приводит с физической очистке страниц BLOB. Они только помечаются “к удалению”. После того, как все SERIALIZABLE транзакции, стартовавшие до операции очистки BLOB, завершатся, эти страницы могут быть переиспользованы для других BLOB.
Замечание 1: если две транзакции пытаются добавить в BLOB некоторые данные или очистить BLOB, то для одной из них такая попытка завершится ошибкой: ДАННЫЕ БЫЛИ МОДИФИЦИРОВАНЫ (ИЛИ УДАЛЕНЫ) КОНКУРИРУЮЩЕЙ ТРАНЗАКЦИЕЙ. Приостановки выполнения запроса до завершения конкурирующей транзакции не произойдет вне зависимости от текущего режима работы канала ( блокирующий / неблокирующий ).
Замечание 2: запрос на модификацию BLOB, поданный из SERIALIZABLE-транзакции, завершится ошибкой: НЕСЕРИЙНЫЙ ДОСТУП К ДАННЫМ (8102), если BLOB был модифицирован после начала этой транзакции.
Замечание 3: процесс очистки по возможности очищает страницы BLOB, помеченные “к удалению”.