Таблицата USER вероятно има много външни ключове, отнасящи се до нея. Ако някой от тях не е индексиран, Oracle ще заключи цялата дъщерна таблица, докато изтрива реда от родителската таблица. Ако няколко оператора се изпълняват едновременно, дори за различен потребител, едни и същи дъщерни таблици ще бъдат заключени. Тъй като редът на тези рекурсивни операции не може да се контролира, възможно е множество сесии да заключат едни и същи ресурси в различен ред, причинявайки блокиране.
Вижте този раздел в ръководството за концепции за повече информация.
За да разрешите това, добавете индекси към всички неиндексирани външни ключове. Ако имената на колоните са стандартни, скрипт като този може да ви помогне да намерите потенциални кандидати:
--Find un-indexed foreign keys.
--
--Foreign keys.
select owner, table_name
from dba_constraints
where r_constraint_name = 'USER_ID_PK'
and r_owner = 'THE_SCHEMA_NAME'
minus
--Tables with an index on the relevant column.
select table_owner, table_name
from dba_ind_columns
where column_name = 'USER_ID';