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

SQL Oracle Discussion :

Rollback sur un ou plusieurs update


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre émérite Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Par défaut Rollback sur un ou plusieurs update
    Bonjour,

    je me pose une petite question aux vues d'un script que j'ai dev qui a tendance à pas beaucoup apprécier les rollback que je lui fais faire.
    Bon, ok, c'est pas génial les rollback, mais c'est justement pour tester la solidité du process LOL

    Alors, voila mon cas.
    J'ai une table (id, status)
    avec des ID allant de 1 à X (PK)
    et mon status qui est soit W soit S
    j'extrais tous les W et je les updates à S.

    jusque là, rien de bien embetant.

    Maintenant, en terme de process, si j'ai un probleme sur un ID (regles fonctionnelle) je rollback pour l'ensemble de mes ID
    et donc, est ce que ca change qlq chose si je fais un update par id et que je rollback ou si je fais update global et que je le rollback ?
    est ce qu'il y en a un qui sera mieux géré ?

    Merci pour votre retour.


    Steven

  2. #2
    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 bstevy Voir le message
    ...
    est ce que ca change qlq chose si je fais un update par id et que je rollback ou si je fais update global et que je le rollback ?
    ...
    Faire un update par ID c'est à dire N updates pour modifier N lignes c'est inefficace est par voie de conséquence complétement erroné. De plus une instruction Oracle est atomique, quand elle échoue elle remet la base à l'état que celle ci avais au départ. Donc un update qui concerne N ligne arrivant à se planter à la M-émé ligne va annuler automatiquement l'effet produit sur la base pour les 1 à M-1 ligne déjà modifiées. Null besoin de exécuter rollback.

  3. #3
    Membre émérite Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Par défaut
    Citation Envoyé par mnitu Voir le message
    Faire un update par ID c'est à dire N updates pour modifier N lignes c'est inefficace est par voie de conséquence complétement erroné. De plus une instruction Oracle est atomique, quand elle échoue elle remet la base à l'état que celle ci avais au départ. Donc un update qui concerne N ligne arrivant à se planter à la M-émé ligne va annuler automatiquement l'effet produit sur la base pour les 1 à M-1 ligne déjà modifiées. Null besoin de exécuter rollback.
    Désolé, mais en fait, j'aurais du mettre ce message dans le forum PLSQL... car c'est un cas qui se produit en parcourant un curseur.

    Je parcours mon curseur (une liste de contrat), j'extrais des données relatives à ces contrats, et je mets à jours ma table d'extraction (unitairement, chaque contrat apres avoir extrait les données).
    Si lors de l'extraction de mes données, je detecte un problème, par exemple, le contrat n'existe pas en base, je fais un rollback (et je sors).
    Et donc dans ce cas, je rollback les n updates que j'ai fait précédement...


    Maintenant, imaginons la meme chose, mais fait differement.
    Je crée mon curseur à partir de ma table d'extraction, et je mets à jours ma table d'extraction d'un seul update, mais sans commit.
    J'extrais alors mes données de contrat, et si un n'existe pas, je fais un rollback (et je sors).
    Et donc dans ce cas, je rollback 1 update mais sur l'ensemble de ma table au lieu de n update sur une partie...

    Le résultat fonctionnellement parlant est le même, mais en terme d'opération que doit réaliser oracle, je ne me rends pas compte de la charge que ca peut representer et c'est uniquement sur ce point que je veux des infos. Est ce que ca change qlq chose lors du rollback ?




    Soit dit en passant, je sais que c'est terriblement inefficace. Mais je viens d'arriver dans une nouvelle boite ou ils font comme ca, et j'essaye petit à petit de changer les choses. mais pour le moment, ils aiment leur curseur et le travail sequentiel unitaire...

  4. #4
    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
    Vous est dans la confusion: l'instruction rollback concerne une transaction et non pas des "l'ensemble de ma table" ou des "de n update sur une partie".

  5. #5
    Membre émérite Avatar de bstevy
    Homme Profil pro
    Solutions Architect
    Inscrit en
    Mai 2009
    Messages
    552
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : Japon

    Informations professionnelles :
    Activité : Solutions Architect
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 552
    Par défaut
    Mais justement... ce que je veux savoir, c'est si dans une transaction il y a 15 update de fait sur une table, ou un seul, et que je rollback ma transaciton.... est ce que ca va changer qlq chose ?

    donc, ce que j'en deduis de votre réponse, c'est que peut importe le nombre d'instruction qu'il y a a rollbacker, le résultat est le même

    donc pour le moment, je peux rester sur mon traitement unitaire.

  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 bstevy Voir le message
    ... ce que je veux savoir, c'est si dans une transaction il y a 15 update de fait sur une table, ou un seul, et que je rollback ma transaciton.... est ce que ca va changer qlq chose ? ...
    C'est le temps de revisiter les Concepts

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

Discussions similaires

  1. [AC-2007] Update sur un champ à plusieurs valeurs
    Par mike1310 dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 08/04/2009, 15h02
  2. [Data] [Spring/Hibernate] RollBack sur plusieurs ajouts
    Par eracius dans le forum Spring
    Réponses: 3
    Dernier message: 31/10/2007, 11h54
  3. Réponses: 3
    Dernier message: 27/11/2005, 17h59
  4. [débutant] 1 ordre select sur une OU plusieurs tables
    Par goony dans le forum Langage SQL
    Réponses: 10
    Dernier message: 18/08/2005, 10h57
  5. ROLLBACK sur une seul enregistrement
    Par toctoc80 dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 30/04/2004, 20h22

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