Oracle : Le problème des verrous sur des contraintes d'intégrité.

A chaque contrainte d'intégrité de type "foreignkey" (FK), Oracle préconise la création d'index. Sans cet index sur la FK, Oracle posera des verrous lors des mises à jour sur les enregistrements de la table "parent" et verrouillera toute la table "enfant" (tous les enregistrements de la table) jusqu'au prochain commit / rollback. Ce qui fera qu'un 2ieme utilisateur qui voudra accéder aux données en MAJ sur la table "enfant" sera mis en attente (verrou). Pour éviter ce fonctionnement par défaut Oracle, il est IMPERATIF de créer à chaque FK un index associé.

Pour voir la liste des contraintes, utiliser les vues du dictionnaire de données :

user_constraints, user_cons_columns, user_cons_obj_columns

cf : "Oracle Composite Indexes and Foreign Key Constraints" Doc de Andy Rivenes - AppsDBA Consulting - Copyright © 2005, AppsDBA Consulting, All Rights Reserved. The following will describe how composite indexes can be used to index foreign key constraints. In Oracle, foreign key constraints should be indexed if the parent table incurs updates or deletes. With unindexed foreign key columns, Oracle will lock the child table when an update (rare – you really shouldn't be updating a primary key) or a delete occurs on the parent table. In the case of multiple foreign keys in a child table, there are times when a composite index (e.g. multi-column) provides a better access path than two separate indexes. The following will first show what happens with indexed and unindexed foreign key columns and then will show how to implement a composite index on multiple foreign key columns.

Isabelle Chapre