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

Oracle Discussion :

[Sequence] Encore et toujours des sauts


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2003
    Messages : 92
    Par défaut [Sequence] Encore et toujours des sauts
    Bonjour à tous,
    j'ai été confronté à un problème de saut de séquence il y'a quelques jours.
    Comme la séquence n'est pas souvent utilisé je l'ai modifié en enlevant le cache comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    CREATE SEQUENCE seq_unit
      START WITH 41089
      MAXVALUE 999999999999999999999999999
      MINVALUE 1
      NOCYCLE
      NOCACHE
      NOORDER;
    Aujord'hui encore soit un mois plutard, un utilisateur m'appelle et me dit "j'ai encore des sauts dans mes numéro .... "
    Je revérifie la table et je m'apercois qu'il y'a encore des sauts régulier et de valeur différents (4, 10 ....)
    1- avec le script ci-dessous, vous me validez bien qu'il n'y aura pas de problème de cache etc .... ?


    Ma sequence n'est utilisé par aucun élément de la base (sauf deux trigger inactif et qui font un appel seq_unit.currval)

    J'en suis donc à penser que le problème pourrait venir du coté développeur mais je n'ai pas accés à leur code.
    Ce que je veux donc faire avant de leur taper dessus , et c'est pour cela que je demande votre aide et voici mes questions
    2- Les developpeurs ont ils la possibilité de faire directement dans leur code "seq_unit.nextval" quel que soit le language utilisé
    3- est il possible de mettre en place un mécanisme qui me permet de savoir quand est ce que la séquence est appelé avec "un nextval" (je n'ai pas la possibilité d'activer l'audit de la base ..... infogérance problème de paperasse ....) ?
    4- Y'a t il d'autres objet/spécificité à vérifié dans la base qui pourrait généré ses sauts ?


    Merci de m'avoir lu et merci pour vos réponses

  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
    Utiliser une séquence pour une série numérique où il ne doit pas y avoir des trous est une erreur de conception. Une séquence ne pourrait jamais garantir ça.
    Donc la question est: avez-vous vraiment besoin d'une série numérique monotone est sans perte des valeurs ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2003
    Messages : 92
    Par défaut
    Citation Envoyé par mnitu Voir le message
    Utiliser une séquence pour une série numérique où il ne doit pas y avoir des trous est une erreur de conception. Une séquence ne pourrait jamais garantir ça.
    Donc la question est: avez-vous vraiment besoin d'une série numérique monotone est sans perte des valeurs ?
    Bonjour et merci pour votre réponse

    Oui effectivement, on a besoin d'une série numérique incrémentale par 1 sans perte de valeur (il n'y jamais de suppression sur cette table d'ailleurs)

    Je pense que la conception de cette base a besoin de cette séquence car en effet elle génère une clé qui est utilisée dans plusieurs tables pour la même donnée (qu'on retrouve donc dans plus table)

    qu'en dites vous ?

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Vous pouvez conserver la séquence (avec des trous) et après coup calculer la série avec un simple select :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select row_number() over(order by seq_unit asc)
    from MaTable
    Evidement celà peut s'avérer coûteux si votre table comporte des millions de lignes.

    Qu'est-ce qui est dérangeant pour vous dans les trous ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2003
    Messages : 92
    Par défaut
    Bonjour,

    En fait, c'est l'utilisateur qui a besoin de garder tous le temps une serie de numéro qui s'incrémente (un genre de numéro de commande qui s'incremente de 1 à chaque fois)
    il a besoin de cette cohérence car il voudrait par exemple effectué des traitement derrière (lesquels je ne sais pas)




    Citation Envoyé par Waldar Voir le message
    Vous pouvez conserver la séquence (avec des trous) et après coup calculer la série avec un simple select :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select row_number() over(order by seq_unit asc)
    from MaTable
    Evidement celà peut s'avérer coûteux si votre table comporte des millions de lignes.

    Qu'est-ce qui est dérangeant pour vous dans les trous ?

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2003
    Messages : 92
    Par défaut
    Bon, en cherchant un peu a droite a gauche, j'en arrive a ceci

    1/ soit il y'a des sessions qui commence une transaction utilisant cette séquence puis qui ne se termine pas, un rollback est donc joué sur oracle (une séquence est toujours incrémenté indépendamment du commit/rollback d'une transaction (cf mealink 1026750.6)

    2/ soit les développeurs se sont gouré dan le code en incrémentant la dite séquence avant d'en avoir réellement besoin et ensuite il ne l'utilise pas

    qu'en pensez vous ?

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2003
    Messages : 92
    Par défaut
    Effectivement mnitu tu avait et tu as toujours raison

    sinon avez vous une solution pour ceci :
    3- est il possible de mettre en place un mécanisme qui me permet de savoir quand est ce que la séquence est appelé avec "un nextval" (je n'ai pas la possibilité d'activer l'audit de la base ..... infogérance problème de paperasse ....) ?
    4- Y'a t il d'autres objet/spécificité à vérifié dans la base qui pourrait généré ses sauts ?

  8. #8
    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 elkamaro Voir le message
    ...sinon avez vous une solution pour ceci :
    Je ne pense pas. Les séquences sont gérés via la table sys.seq$ Pour une séquence avec nocache ( ?!) la valeur de la colonne HighWater est incrémentée à chaque nextval. Mais quelque un qui pourrait utiliser cette information pourrait très probablement activer l’audit.
    Dans le cas général, oui : pour exemple le mécanisme de cache. Mais au lieu de chercher que est-ce que fait une séquence de perdre des valeurs, je me poserais la question : ai je besoin ou pas. Et ensuite, en fonction de la réponse j’adopterais la séquence ou pas.

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2003
    Messages : 92
    Par défaut
    Citation Envoyé par mnitu Voir le message
    Je ne pense pas. Les séquences sont gérés via la table sys.seq$ Pour une séquence avec nocache ( ?!) la valeur de la colonne HighWater est incrémentée à chaque nextval. Mais quelque un qui pourrait utiliser cette information pourrait très probablement activer l’audit.
    Dans le cas général, oui : pour exemple le mécanisme de cache. Mais au lieu de chercher que est-ce que fait une séquence de perdre des valeurs, je me poserais la question : ai je besoin ou pas. Et ensuite, en fonction de la réponse j’adopterais la séquence ou pas.
    pour déclenchez l'audit de la base, il faut la redémarrer et ceci est quasiment impossible pour le moment (car base de haute disponibilité h24 et tout et tout ...).
    De plus je ne suis que dba junior sur cette base infogérée, tout ne m'est donc pas permis. Je dois juste essayer de fournir une explication du problème dans la mesure du possible


    L'autre problème c'est qu'il s'agi d'une base qui tourne depuis des lustre et dont la conception a déjà validé bien avant que je ne sois arrivé.
    L'utilisateur nous explique qu'il a forcément besoin que les numéros délivré par cette séquence soient dans l'ordre et sans saut pour ces besoins.

    Bon je vais essayer de comprendre comment ces tables sont alimentées et aller taper sur les développeurs en espérant que ces de leur faute

    Si ce n'est pas eu, cela voudrait peut être dire que c'est à cause de session qui saute juste aprés avoir appelé la séquence

    Merci

  10. #10
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    92
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2003
    Messages : 92
    Par défaut
    Re-moi

    je viens de récupérer le code source (vb) utilisé.

    Et rien qu'en regardant un tout petit peu, le problème vient des développeur, ils lance des requête d'insert (avec seq_unit.nextval) et dés que la base leur renvoie une erreur (généralement d'inégrité référentiel) il font un rollback


  11. #11
    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 elkamaro Voir le message
    ...
    Et rien qu'en regardant un tout petit peu, le problème vient des développeur, ils lance des requête d'insert (avec seq_unit.nextval) et dés que la base leur renvoie une erreur (généralement d'inégrité référentiel) il font un rollback
    ...
    Non, le problème vient probablement de la conception. Mais, je suis curieux comment, après avoir découvert ça, vous allez arriver à éliminer le problème.

Discussions similaires

  1. stencil buffer, encore et toujours
    Par JAimeBienCoderBourre dans le forum OpenGL
    Réponses: 4
    Dernier message: 08/04/2005, 11h16
  2. toujours des problemes avec ce DROP
    Par Missvan dans le forum PostgreSQL
    Réponses: 2
    Dernier message: 18/02/2004, 08h43

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