Как ORACLE проверяет заблокирована ли запись ?

dbstalker, 21 октября

Для начала ознакомьтесь с постами: Что такое таблица транзакций, «SCN - Что это такое?» , «Структура ITL» , «Очистка блока» .

Логика при проверке заблокированости записи приближенно выглядит вот так:

  1. Читаем блок, находим нужную запись.Проверяется lock byte в заголовке записи.
  2. Если lock byte является не нулевым (Если там стоит hex 00 тогда блокировки нет и можно пользоваться записью), тогда идем в ITL( массив слотов) по значению lock byte находим запись в массиве (слот) и проверяем статус транзакции в ITL. Так, например, lock byte = 0x01 соответствует первому члену массива ITL.
  3. Если в слоте стоит статус - C или U, то предыдущая транзакция зафиксирована. Очищаем lock byte и модифицируем для текущей сделки.
  4. Если в слоте стоит статус is null (----), тогда идем в заголовок сегмента отмены к таблице транзакций и пытаемся определить статус транзакции.
  5. Если wrap# для транзакции в слоте таблицы транзакций и wrap# транзакции в ITL - один и тот же, значит слот таблицы транзакций не перезаписан. Теперь в слоте таблицы транзакции смотрим на статус транзакции. Если транзакция завершена (статус 9), тогда для использования берем commit SCN транзакции и корректируем scn/fsc поля в слоте ITL и там же устанавливаем флаг на 'C’.
  6. Если wrap# в слоте таблицы транзакций будет большим, чем wrap# из слота ITL, тогда используем control SCN (upper bound commit number), чтобы заполнять scn/fsc поля в слоте ITL и там же устанавливать флаг на 'U’. Если вы сделаете дамп заголовка сегмента отмены, то перед таблицей транзакций найдете раздел TRN CTL. Тот scn, который вы там видите и есть control SCN. см статью.
  7. продолжается работа сессии.

 

Новый комментарий

Я не спамер: введите суму 9+6



 

От авторов блога

О Блоге - прочитай перед началом.

Задать вопрос и получить ответ - уже решено 94 вопросов

Глоссарий - список терминов и сокращений


 
 

Бизнес форум

Последние темы:

Кейс: Льем на Gardenin c Instagram
22 февраля, 1 ответа
Житло
20 февраля, 1 ответа
покер
19 февраля, 2 ответа