Что произойдет, если несколько пользователей захотят изменить один и тот же блок данных в Oracle База данных - PullRequest
1 голос
/ 16 марта 2020

Как база данных Oracle справляется с такой ситуацией, если несколько пользователей пытаются изменить строки в одном блоке? Я знаю, что они не могут изменить один и тот же ряд. Но как это работает для разных строк в одном блоке? Я имею в виду, как Oracle обрабатывает блокировку уровня строки, в то время как он изменяет весь блок при изменении одной строки?

1 Ответ

2 голосов
/ 16 марта 2020

Вы должны задать этот вопрос на dba.stackexchange.com, чтобы получить лучший ответ.

Блокировка на уровне строк происходит, когда выполняются DML (Вставка, Обновление, Удаление) или SELECT FOR UPDATE. Эта блокировка на уровне строк контролируется транзакцией, которая содержит DML, который создал блокировку. Когда транзакция фиксируется или откатывается, блокировка снимается. Если другая транзакция пытается обновить ту же строку, она должна ждать, пока начальная транзакция не завершит фиксацию или откат.

Заголовок блока содержит ITL (список заинтересованных транзакций) со слотами, выделенными для каждой транзакции, которую требуется изменить. блок. Параметр таблицы INITRANS - это число, которое допускает несколько транзакций для блоков таблицы. По умолчанию используется низкий уровень, и для таблиц с высоким уровнем параллелизма это значение может быть от 10 до 50. Если для параметра INITRANS задано значение 1, будет ожидание следующей транзакции, которая попытается изменить тот же блок.

Итак, весь блок не модифицирован; блокировка строки обрабатывается в ITL, а номер присваивается таблице.

...