Oracle
 sql >> Base de données >  >> RDS >> Oracle

Verrouillage exclusif de la table (lecture) sur Oracle 10g ?

Si vous souhaitez simplement empêcher toute autre session de modifier les données que vous pouvez émettre

LOCK TABLE whatever
/

Cela empêche les autres sessions de mettre à jour les données, mais nous ne pouvons pas empêcher les autres personnes de les lire.

Notez que dans Oracle, un tel verrouillage de table est rarement requis, car Oracle applique une politique de cohérence de lecture. Ce qui signifie que si nous exécutons une requête qui prend quinze minutes pour s'exécuter, la dernière ligne renvoyée sera cohérente avec la première ligne ; en d'autres termes, si le jeu de résultats avait été trié dans l'ordre inverse, nous verrions toujours exactement les mêmes lignes.

modifier

Si vous souhaitez implémenter une file d'attente (sans utiliser réellement Oracle fonctionnalité de mise en file d'attente avancée intégrée ) puis SELECT ... FOR UPDATE est la voie à suivre. Cette construction permet à une session de sélectionner et de verrouiller une ou plusieurs lignes. D'autres sessions peuvent mettre à jour les lignes déverrouillées. Cependant, l'implémentation d'une véritable file d'attente est assez lourde, à moins que vous n'utilisiez 11g. Ce n'est que dans la dernière version qu'Oracle a pris en charge le SKIP LOCKED clause. En savoir plus .