Tabulka USER má pravděpodobně mnoho cizích klíčů, které na ni odkazují. Pokud některý z nich není indexován, Oracle uzamkne celou podřízenou tabulku, zatímco odstraní řádek z nadřazené tabulky. Pokud je spuštěno více příkazů současně, a to i pro jiného uživatele, budou uzamčeny stejné podřízené tabulky. Vzhledem k tomu, že pořadí těchto rekurzivních operací nelze řídit, je možné, že více relací uzamkne stejné zdroje v jiném pořadí, což způsobí uváznutí.
Viz tuto sekci Další informace naleznete v příručce Koncepty.
Chcete-li tento problém vyřešit, přidejte indexy do všech neindexovaných cizích klíčů. Pokud jsou názvy sloupců standardní, skript jako tento vám může pomoci najít potenciální kandidáty:
--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';