Oracle обрабатывает это автоматически через SCN (номер изменения системы), плюс табличное пространство UNDO и (для блокировки) часть заголовка блока (заинтересованный список транзакций).
Когда вы делаетеизменяя данные с помощью оператора DML, оракул записывает эти изменения в соответствующие блоки (помечая соответствующие строки как заблокированные в разделе ITL заголовка каждого блока), а также способ отменить транзакцию в табличном пространстве UNDO.Каждый раз, когда вы фиксируете, у каждого блока обновляется его SCN.
Теперь предположим, что вы выполняете запрос (который, как известно базе данных, находится в SCN # 1), но кто-то изменил блок, так что теперь он находится в SCN # 2.,Когда блок извлекается по вашему запросу, Oracle знает, что ему нужно откатить данные до того, как это было в SCN # 1, - это делает это, используя информацию в табличном пространстве UNDO для обработки данных обратно в конкретный SCN.
Это все часть согласованности чтения, и вы можете прочитать больше о SCN в этом ответе ASKTOM , и больше о блокировке строк здесь .