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

Requêtes PostgreSQL Discussion :

Simuler une session bloquée [11]


Sujet :

Requêtes PostgreSQL

  1. #1
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut Simuler une session bloquée
    Rerere... bonjour
    Je voudrais bloquer une session suite à une maj de données mais j'ai du mal à voir comment faire sous PostgreSQL à cause de l'auto-commit.

    Sous Oracle je fais:
    Transaction 1 user 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    update t1 set nom='TITI' where id=1;
    Transaction 2 user 2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    update t1 set nom='TATA' where id=1;
    et donc la transaction 2 est bloquée à cause du verrou posé sur l'enregistrement de id=1 et ne sera débloquée qu'avec un COMMIT ou ROLLBACK dans la transaction 1.

    Sous PostgreSQL je ne vois pas comment faire sous PGAdmin ou DBeaver car dès que je mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    update t1 set nom='TITI' where id=1;
    la transaction est automatiquement validée.

    Merci pour votre aide.
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  2. #2
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Bonjour,

    Il suffit de démarrer les transactions explicitement. C'est à dire mettre un BEGIN; avant chaque UPDATE.
    Dans ce cas, on est hors auto-commit et les transactions devront se terminer par un COMMIT ou un ROLLBACK.

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  3. #3
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    J'y avais pensé mais je pense que ça ne marchera pas car le commit ou le rollback va se faire immédiatement, alors que moi j'ai besoin de temps pour analyser ce qu ise passe, utiliser les outils "Session Manager" et "Lock Manager".

    On est d'accord pour dire que ta méthode ne fonctionne que si l'UPDATE de la transaction 1 prend un temps suffisamment important pour bloquer la transaction 2 et que, dans ce laps de temps, je peux accéder aux deux outils ci-dessus?
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  4. #4
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Non, ce n'est pas tout à fait ça.
    En démarrant la transaction par un ordre SQL (BEGIN ou START TRANSACTION, etc), on lance une transaction explicite et l'autocommit n'intervient plus.
    On joue alors l'UPDATE, qui ne sera pas effectif tant qu'on n'a pas validé (COMMIT) ou annulé (ROLLBACK) la transaction ouverte explicitement.

    ced
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  5. #5
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    J'ai dû avoir une crise de crétinisme car j'aurais dû y penser

    Donc je fais
    Transaction 1 user 1
    je ne fais rien de plus

    Transaction 2 user 2
    Et tant que je ne tape pas COMMIT ou ROLLBACK et exécution de l'ordre dans la transaction 1, la transaction 2 est bloquée.

    Ensuite, je mets dans la transaction 1 les lignes suivantes pour débloquer la transaction 2.
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  6. #6
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Oui, c'est exactement ça.
    Et du coup, la session 2 va apparaître dans la liste des sessions bloquées.
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [C#] Simuler une variable de session en C#
    Par dinbougre dans le forum C#
    Réponses: 11
    Dernier message: 01/10/2007, 12h01
  2. simuler une session
    Par LeXo dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 01/03/2007, 15h10
  3. [Applet]simuler une touche clavier
    Par mat10000 dans le forum Interfaces Graphiques en Java
    Réponses: 19
    Dernier message: 12/12/2003, 16h23
  4. Déconnexion d'une session Win2k
    Par lamasse dans le forum C++Builder
    Réponses: 3
    Dernier message: 02/10/2003, 08h39

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