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 :

Ma sequence saute certains nonbres.


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de rvfranck
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 746
    Par défaut Ma sequence saute certains nonbres.
    Salut,
    J'ai crée une sequence seq_connexion pour génèrer les clés primaires automatiquement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    create sequence seq_connexion start with 1 increment by 1;
    hier ça fonctionnait, les clés étaitent: 1, 2, 3. Ce matin elle continue à 21, 22, 23. donc elle à sauté les nombres 4, 5 ... 20.
    pourquoi?
    Et c'est comme ça a chaque fois que je redémarre la machine. aprés elle passe à 41, 42, 43. elle saute les nombres 24, 25 ... 40.
    Est ce normal que quand je redemarre la machine, elle continue avec n'importe quel nombre?

    Merci.

  2. #2
    Membre Expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Par défaut
    Tout à fait normal, une séquence peut comporter des "trous"

  3. #3
    Membre émérite Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Par défaut
    regarde les paramètres de ta séquence... tu dois avoir un certain nombre au paramètre "Cache".

    si la base est redémarrée, le nombre de no séquentiels mis en cache est perdu...

  4. #4
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    c'est parce que tu as défini un cache de 10 probablement... donc Oracle réserve 10 chiffres à l'avance mais si tu redémarres la base ces chiffres réservés sont perdus

  5. #5
    Membre Expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Par défaut
    Une autre possibilité est que la transaction qui réalise l'insertion soir annulée.

    Dans ce cas, le trigger qui calcule le nextval est appellé, mais le rollback ne décrémente pas la séquence, d'où les trous.

  6. #6
    Rédacteur

    Homme Profil pro
    Consultant / formateur Oracle et SQL Server
    Inscrit en
    Décembre 2002
    Messages
    3 461
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant / formateur Oracle et SQL Server

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 461
    Par défaut
    C'est tout simple : une séquence a son paramètre CACHE fixé à 20 par défaut. Comme vous n'avez pas précisé une autre valeur, ni choisi NOCACHE, cette valeur de 20 s'applique.
    Vous pouvez d'ailleurs le vérifier dans la colonne CACHE_SIZE de USER_SEQUENCES.

    Et comme le cache est vidé à l'arrêt de la base, vous progressez de 20 en 20 à chaque fois que vous redémarrez la base.

  7. #7
    Membre chevronné Avatar de Cerberes
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 328
    Par défaut
    Pour enlever ces trous:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    CREATE OR REPLACE PROCEDURE pr_classement(nom_tb IN VARCHAR2,pk_tb IN VARCHAR2) AS
    	ldd VARCHAR2(500);
    	TYPE refcursor IS REF CURSOR;
    	curseur refcursor;
    	curseur2 refcursor;
    	pk_old NUMBER(6);
    	pk_max NUMBER(6);
    	test_table VARCHAR2(30);
    	compteur NUMBER(6):=0;
    BEGIN
    	OPEN curseur2 FOR 'SELECT table_name FROM CAT';
    	LOOP
    		FETCH curseur2 INTO test_table;
    		EXIT WHEN curseur2%NOTFOUND;
    		IF test_table='TB_COPIE' THEN
    			EXECUTE IMMEDIATE 'DROP TABLE tb_copie';
    		END IF;
    	END LOOP;
    	ldd:='CREATE TABLE tb_copie AS SELECT * FROM '||nom_tb||' ORDER BY '||pk_tb;
    	EXECUTE IMMEDIATE ldd;
    	OPEN curseur FOR 'SELECT '||pk_tb||' FROM tb_copie';
    	LOOP
    		FETCH curseur INTO pk_old;
    		EXIT WHEN curseur%NOTFOUND;
    		compteur:=compteur+1;
    		dbms_output.put_line('Ancienne clé:'||pk_old||' remplacée par '||compteur);
    		ldd:='UPDATE '||nom_tb||' SET '||pk_tb||'='||compteur||' WHERE '||pk_tb||'='||pk_old;
    		EXECUTE IMMEDIATE ldd;
    	END LOOP;
    	CLOSE curseur;
    	EXECUTE IMMEDIATE 'DROP TABLE tb_copie';
    END;
    /

  8. #8
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    c'est pas un peu lent sur des grosses tables ce script ?

  9. #9
    Membre chevronné Avatar de Cerberes
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 328
    Par défaut
    Si, il me faut encore l'optimiser, mais c'est pratique pour les petites tables (moins de 400 enregistrements). Je susi en train de l'optimiser, il me fallait pour moi une solution rapide pour mes petites tables...

    [EDIT] Quand je dis rapide, c'est qu'il me la fallait pour hier, qu'il faut comprendre [/EDIT]

  10. #10
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    l'idéal serait que le script trouve la PK tout seul 8)

  11. #11
    Membre chevronné Avatar de Cerberes
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 328
    Par défaut

    Pfffffou... Je ne suis pas encore sorti de l'auberge
    Effectivement, ce serais une idée... Merci pour cette info, je viens de trouver quelque chsoe, là...

  12. #12
    Membre éclairé Avatar de rvfranck
    Profil pro
    Étudiant
    Inscrit en
    Novembre 2004
    Messages
    746
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2004
    Messages : 746
    Par défaut
    Merci à tous.

    Pomalaix à dit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    C'est tout simple : une séquence a son paramètre CACHE fixé à 20 par défaut. Comme vous n'avez pas précisé une autre valeur, ni choisi NOCACHE, cette valeur de 20 s'applique. 
    Vous pouvez d'ailleurs le vérifier dans la colonne CACHE_SIZE de USER_SEQUENCES. 
     
    Et comme le cache est vidé à l'arrêt de la base, vous progressez de 20 en 20 à chaque fois que vous redémarrez la base.
    Avec ça je n'ai plus de trous

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     create sequence seq_connexion start with 1 increment by 1 nocache;
    Merci encore.

  13. #13
    Membre confirmé
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2004
    Messages
    81
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2004
    Messages : 81
    Par défaut
    essey de mettre des citations au lieu des codes;

    donc ça marche si vous éliminé le cache, géniale

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 08/03/2012, 09h42
  2. Réponses: 6
    Dernier message: 29/01/2012, 22h45
  3. [Sequence] Encore et toujours des sauts
    Par elkamaro dans le forum Oracle
    Réponses: 15
    Dernier message: 16/10/2009, 15h24
  4. [sed]Suppression de saut de ligne dans certains cas
    Par Anthony.Desvernois dans le forum Linux
    Réponses: 11
    Dernier message: 09/07/2007, 11h33
  5. encodage de certains caractères (saut ligne)
    Par benkunz dans le forum Langage
    Réponses: 11
    Dernier message: 18/10/2006, 10h05

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