Bonjour,
Oui, d'aprés la doc (
http://download.oracle.com/docs/cd/B...t.htm#BABCJIAJ): SRX prohibits SRX
Maintenant par rapport à ton besoin:
1- Si tu utilise un lock exclusif (comme SHARE ROW EXCLUSIVE MODE ou EXCLUSIVE MODE), les appels simultanés seront en fait sérialisés sur ce verrou.
2- Un simple select for update permet celà: les données que tu as lues ne seront pas modifiées par une session concurrente. Par contre, celà n'empêche pas des insertions concurrentes. A toi de voir si tu veux empêcher celà.
Un exemple: tu as 20 places dans un avion et tu as une table qui enregistre une ligne par réservation. Tu fais un select qui te dit qu'il reste une place libre, alors tu la reserve. Mais si entre temps une autre session a fait la même chose tu a fait du surbooking.
Pour prévenir celà,
- soit tu empêches tout DML sur la table (LOCK TABLE ... IN SHARE MODE)
Celà empêche toute réservation concurrente, mais pas la consultation du nombre de place libre.
- soit tu peux vérouiller un enregistrement père, genre select for update sur l'avion. Et tu garantis que toute nouvelle réservation fait celà.
Celà ne bloque que les réservations sur le même avion
Cordialement,
Franck.
Partager