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 :

Alter index rebuild ne fonctionne pas [10g]


Sujet :

SQL Oracle

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 73
    Points : 47
    Points
    47
    Par défaut Alter index rebuild ne fonctionne pas
    Bonjour,

    ALTER INDEX XXX REBUILD COMPUTE STATISTICS PARALLEL

    ERROR at line 1:
    ORA-12801: error signaled in parallel query server YYY
    ORA-01410: invalid ROWID
    J'attends un peut, je recommence l'opération même résultat.
    Du coup j'ai cherché sur le net et trouvé que l'invalid rowid pouvait provenir d'une migration (Ce qui est possible puisqu'on est passé de la 9i à la 10g il y a quelques mois déjà).

    j'ai trouvé une solution de contournement : effectuer un rebuild online qui d'après ce que j'ai compris reconstruit un nouvel index tout en laissant l'ancien jusqu'à ce que le nouveau soit terminé et supprime l'ancien (ça permet en autre de rebuild un index sans intéruption des requêtes qui l'utilise).

    Une fois ce rebuild effectué, je reprends ma première requête qui s'exécute sans encombre.

    Quelques jours plus tard, mon traitement qui utilise la première requête tombe encore pour le même problème.

    Je pense que le problème vient du rowid de la table mais je ne sais pas comment le mettre à jour sans faire un export/import ?

    Pouvez vous m'aider svp ?

    Merci d'avance.

  2. #2
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut,

    dbms_redefinition peut être ?
    http://docs.oracle.com/cd/B19306_01/...8/d_redefi.htm

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 73
    Points : 47
    Points
    47
    Par défaut
    Merci pour votre retour réponse.

    En revanche, ca me parait un peu compliqué à mettre en place.

    Pensez vous qu'un simple transfert de table peut résoudre mon problème ?

    En gros dans l'idée faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Create table X1 as select * from table X2;
    Drop table X2;
    Create table X2 as select * from table X1;
    Ca devrait me donner de nouveaux rowid non ?

  4. #4
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Oui tout à fait, mais je pensais pas que ça te conviendrait, vu que tu ne voulais pas d'import / export

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Citation Envoyé par skyarnangel Voir le message
    Je pense que le problème vient du rowid de la table mais je ne sais pas comment le mettre à jour sans faire un export/import ?
    Peut être en utilisant move :
    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
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    SQL> create table test as select level as lvl from dual connect by level <= 10;
     
    Table created.
     
    SQL> select rowid, lvl from test;
     
    ROWID                     LVL
    ------------------ ----------
    AAAMalAABAAALIRAAA          1
    AAAMalAABAAALIRAAB          2
    AAAMalAABAAALIRAAC          3
    AAAMalAABAAALIRAAD          4
    AAAMalAABAAALIRAAE          5
    AAAMalAABAAALIRAAF          6
    AAAMalAABAAALIRAAG          7
    AAAMalAABAAALIRAAH          8
    AAAMalAABAAALIRAAI          9
    AAAMalAABAAALIRAAJ         10
     
    10 rows selected.
     
    SQL> alter table test move;
     
    Table altered.
     
    SQL> select rowid, lvl from test;
     
    ROWID                     LVL
    ------------------ ----------
    AAAMamAABAAALIZAAA          1
    AAAMamAABAAALIZAAB          2
    AAAMamAABAAALIZAAC          3
    AAAMamAABAAALIZAAD          4
    AAAMamAABAAALIZAAE          5
    AAAMamAABAAALIZAAF          6
    AAAMamAABAAALIZAAG          7
    AAAMamAABAAALIZAAH          8
    AAAMamAABAAALIZAAI          9
    AAAMamAABAAALIZAAJ         10
     
    10 rows selected.
     
    SQL>

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2008
    Messages : 73
    Points : 47
    Points
    47
    Par défaut
    Je n'ai pas pensé au move.

    Je pense que cette solution est la meilleures, puisqu'elle conservera les objets liés à la table

    Merci skuatamad

  7. #7
    Expert éminent
    Avatar de pachot
    Homme Profil pro
    Developer Advocate YugabyteDB
    Inscrit en
    Novembre 2007
    Messages
    1 821
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

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

    Informations forums :
    Inscription : Novembre 2007
    Messages : 1 821
    Points : 6 443
    Points
    6 443
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    Le rebuild offline d'un index utilise l'ancien index pour construire le nouveau. Donc s'il y a une corruption logique (ou bug -> dans ce cas ouvrir un SR), on a cette erreur.
    Pour contourner, il suffit probablement de mettre l'index unusable avant: ALTER INDEX XXX UNUSABLE

    Pensez vous qu'un simple transfert de table peut résoudre mon problème ?
    Non: l'erreur invalid ROWID vient de l'index, pas de la table. Mais vu que le MOVE va de toute façon mettre les index unusable...

    COMPUTE STATISTICS
    C'est quelle version pour préciser COMPUTE STATISTICS ? les versions récentes font un COMPUTE STATISTICS par défaut.

    Cordialement,
    Franck.
    Franck Pachot - Developer Advocate Yugabyte 🚀 Base de Données distribuée, open source, compatible PostgreSQL
    🗣 twitter: @FranckPachot - 📝 blog: blog.pachot.net - 🎧 podcast en français : https://anchor.fm/franckpachot

  8. #8
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2010
    Messages
    536
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2010
    Messages : 536
    Points : 1 359
    Points
    1 359
    Par défaut
    Citation Envoyé par skuatamad Voir le message
    Peut être en utilisant move :
    Ce n'est pas le move de la table en soi qui résout le problème. Mais c'est parce que le move de cette table provoque "l'inusabilité" de ses indexes (unusable) vous conduisant à refaire un rebuild de ces indexes. Toute la question vient de l'existence d'un problème dans l'index relativement à la table sur laquelle il est créé. Si vous reconstruisez votre index offline (corrompu, invalid rowid, etc...) vous allez utiliser le même index pour reconstruire le même index; ce qui conduira forcément aux mêmes conséquences.

    Donc, dans ce genre de situation, il faut reconstruire l'index sur la base des données de sa table et non sur la base de ce même index.

    Comment?

    1. en faisant un rebuild online
    2. en faisant un rebuild (même offline) d'un index unusable
    3. drop index; recreate index

    Je n'ai, pour ainsi dire, pas besoin de faire un move de la table. il me suffit de mettre mon index dans un statut unusable et de le reconstruire offline. Ou de le reconstruire online sans l'avoir mis dans un statut unusable.

    Voici deux liens qui traitent un sujet ressemblant à celui soulevé ici.

    problematic index part II
    problematic index part I
    Bien Respectueusement
    www.hourim.wordpress.com

    "Ce qui se conçoit bien s'énonce clairement"

  9. #9
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 947
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 947
    Points : 5 846
    Points
    5 846
    Par défaut
    Citation Envoyé par Mohamed.Houri Voir le message
    Ce n'est pas le move de la table en soi qui résout le problème.
    Ma réponse ne concernait que la modification du rowid de la table comme indiqué en citation.

    N'étant pas dba, je n'avais pas la prétention de résoudre le problème, et je découvre les subtilités de certaines commandes en lisant les très bonnes interventions des dba du forum

  10. #10
    Expert éminent sénior 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
    Points : 11 252
    Points
    11 252
    Par défaut
    Citation Envoyé par skyarnangel Voir le message
    ...Une fois ce rebuild effectué, je reprends ma première requête qui s'exécute sans encombre.

    Quelques jours plus tard, mon traitement qui utilise la première requête tombe encore pour le même problème.
    ....
    Si quelques jours plus tard c'était juste au moment d'une autre opération de reconstruction de l'index c'est peut être "normal." Index Rebuild

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/09/2014, 10h59
  2. ORA-01555 lors d'un alter index rebuild partition
    Par regal dans le forum Administration
    Réponses: 0
    Dernier message: 03/01/2012, 16h44
  3. index.jsp ne fonctionne pas mais si je lance le servlet oui
    Par cedric190985 dans le forum Servlets/JSP
    Réponses: 1
    Dernier message: 31/01/2011, 11h34
  4. Suppression d'index qui ne fonctionne pas
    Par FamiDoo dans le forum Développement
    Réponses: 1
    Dernier message: 27/05/2008, 08h58
  5. Index sur datetime ne fonctionnant pas
    Par Pierrinot dans le forum Requêtes
    Réponses: 5
    Dernier message: 18/10/2004, 09h10

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