IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PL/SQL Oracle Discussion :

transaction et plsql


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    r83
    r83 est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 271
    Par défaut transaction et plsql
    Bonjour,

    Est-il possible, dans une procédure stockée de poser explicitement un verrou sur certaines lignes d'une table de sorte que les autres sessions ne voient pas, par un select, les lignes sur lesquelles le verrou est posé.
    Merci pour vos réponses

  2. #2
    Expert confirmé
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 822
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    poser explicitement un verrou sur certaines lignes d'une table
    Oui, select for update
    de sorte que les autres sessions ne voient pas
    Non, un verrou n'empêche pas de voir.
    Cordialement,
    Franck.

  3. #3
    r83
    r83 est déconnecté
    Membre éclairé
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    271
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 271
    Par défaut
    c'est bien ce qui me semblait. J'en ai maintenant la confirmation.
    Merci pour la réponse
    R83

  4. #4
    Membre très actif Avatar de star
    Homme Profil pro
    .
    Inscrit en
    Février 2004
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Corée Du Nord

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Février 2004
    Messages : 941
    Par défaut
    Non, un verrou n'empêche pas de voir
    Sauf, lorsque le verrou concerne l'ordre DELETE.
    Une méthode pour y arriver serait de supprimer les lignes concernées le temps de la transaction, puis dans une transaction autonome procéder au traitement proprement dit, et en final faire un ROLLBACK.
    Pendant ce temps là, les sessions concurrentes ne verront pas les lignes car l'ordre SELECT émis tiendra compte des suppressions contenues dans les redo logs en ligne (me semble-t-il !)

    .

  5. #5
    Expert confirmé
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 822
    Billets dans le blog
    1
    Par défaut
    Bonjour star,
    Dans ton exemple (delete+rollback) une session concurrent verra ses enregistrements: lorsqu'il ira les lire, il sera en attente de verrou puis le rollback qui relachera le verrou et alors les liges seront là.
    Et désolé, mais les redo logs n'ont rien à voir là dedans
    cordialement,
    Franck.

  6. #6
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Citation Envoyé par star Voir le message
    Sauf, lorsque le verrou concerne l'ordre DELETE.
    Une méthode pour y arriver serait de supprimer les lignes concernées le temps de la transaction, puis dans une transaction autonome procéder au traitement proprement dit, et en final faire un ROLLBACK.
    Pendant ce temps là, les sessions concurrentes ne verront pas les lignes car l'ordre SELECT émis tiendra compte des suppressions contenues dans les redo logs en ligne (me semble-t-il !)

    .
    Non, c'est complétement erroné.
    Lisez Multiversion Read Consistency et Overview of Autonomous Transactions

    Alternativement essayez de prouver avec un exemple vos propos.

  7. #7
    Membre expérimenté Avatar de mongilotti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    314
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations forums :
    Inscription : Février 2003
    Messages : 314
    Par défaut
    je confirme le point de vue de "pachot" avec un select for update, tu vérouille toute la table pour insert ou delete, mais tu peux jamais vérouiller un select sur table quelque soit le motif.

  8. #8
    Membre très actif Avatar de star
    Homme Profil pro
    .
    Inscrit en
    Février 2004
    Messages
    941
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Corée Du Nord

    Informations professionnelles :
    Activité : .

    Informations forums :
    Inscription : Février 2004
    Messages : 941
    Par défaut
    Dans la conception même de la notion de transaction, cette ineptie est regrettable de la part du SGBD Oracle. La lecture de données à l'instant T devrait tenir compte des modifications en cours des données transactionnelles, à mon sens !
    Admettons d'un moment donné, qu'une transaction débite un compte pour en créditer un autre, comment alors empêcher une autre de faire la même transaction alors que le compte est à zéro avant consolidation. Oui, la notion de transaction doit se situer au plus près de l'action, càd, au moment même de l'intention de l'utilisateur (de l'interaction via l'IHM).
    Cas d'école. La règle voudrait qu'un verrou soit avant tout posé sur l'objet mais bon ce n'est pas forcément la solution.

    .

  9. #9
    Expert confirmé
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : Suisse

    Informations professionnelles :
    Activité : Developer Advocate YugabyteDB
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 822
    Billets dans le blog
    1
    Par défaut
    Star,
    Admettons d'un moment donné, qu'une transaction débite un compte pour en créditer un autre, comment alors empêcher une autre de faire la même transaction alors que le compte est à zéro avant consolidation
    C'est le but du select for update: tu veut garantir que les données que tu lis ne changent pas durant toute ta transaction.

    Un select simple (sans le 'for update') lis des données consistantes, conformément au niveau d'isolation.

    Dans la conception même de la notion de transaction, cette ineptie est regrettable de la part du SGBD Oracle.
    Etudie le concept de transaction et d'isolation, puis sur le fonctionnement d'Oracle. Je ne suis pas sûr que tu maîtrise assez l'un et l'autre pour porter ce genre de jugement.

    Cordialement,
    Franck.

Discussions similaires

  1. [T-SQL]Transact SQL vs PLSQL
    Par MouMouh dans le forum Sybase
    Réponses: 7
    Dernier message: 05/10/2011, 23h06
  2. Transformation PLSQL à Transact-SQL
    Par obitpp dans le forum Migration
    Réponses: 1
    Dernier message: 02/11/2006, 18h07
  3. gestion d'erreur et de transactions....
    Par Dge dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 08/02/2006, 22h20
  4. Apropos des Transactions au sein d'un Stored Procedure
    Par Sarbacane dans le forum Connexion aux bases de données
    Réponses: 6
    Dernier message: 16/11/2004, 08h21
  5. Transaction avec DoCmd.runsql ???
    Par Gandalf24 dans le forum VBA Access
    Réponses: 29
    Dernier message: 11/02/2003, 20h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo