Допустим две таблицы, PARENT
и CHILD
. Предположим, что существует ограничение внешнего ключа на CHILD.PARENT_ID
, ссылающееся на PARENT.PARENT_ID
, и что CHILD.PARENT_ID
является обязательным (не нулевым) столбцом, и что для CHILD.PARENT_ID.
не существует индекса
При обновлении PARENT_ID
или удалении записей из PARENT
Oracle необходимо предотвратить одновременное добавление новыми транзакциями новых записей в CHILD
при удалении значений PARENT_ID
. Oracle может использовать индекс против CHILD.PARENT_ID
, чтобы проверить, какие записи, если таковые имеются, могут быть затронуты - и заблокировать новые строки, использующие PARENT_ID
, от принятия до тех пор, пока действие против PARENT
не будет зафиксировано или отменено .
Однако для этой проблемы параллелизма такого индекса не существует. Таким образом, Oracle использует единственный инструмент, который у него есть - полная блокировка таблицы CHILD
до тех пор, пока операция с PARENT
не завершится или не откатится.