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

Adaptive Server Enterprise Sybase Discussion :

[ASE 15.0.2] Tracer erreur insertion


Sujet :

Adaptive Server Enterprise Sybase

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 254
    Points : 80
    Points
    80
    Par défaut [ASE 15.0.2] Tracer erreur insertion
    Bonjour,
    J'exécute un script contenant une série d'insertions dans une même table.
    Ces insertions sont de type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Insert <table> (<liste colonnes>) values <(liste valeurs>)
    De façon aléatoire, l'un de mes ordres d'insertion échoue sans que le moindre message ne soit généré.
    Il ne s'agit pas d'erreur de type "Foreign Key":
    l'insertion posant le problème est rejetée / exécutée de façon aléatoire
    au fur et mesure que je repasse mon script.

    Le test de la variable @@ status <> 0 est positif en cas de rejet.

    Je ne trouve pourtant rien dans le log du serveur,.

    Comment savoir plus sur la raison de ces échecs ?
    Comment positionner une trace détaillée ?


    Merci
    msomso

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 254
    Points : 80
    Points
    80
    Par défaut
    Bonjour
    le problème a été résolu par la suppression et recréation de la table.
    Il a été spécifique à une seule de nos bases du même serveur.

    Toute suggestion d'investigation de ce genre de problème, serait quand même bien venue ...

    Merci
    msomso

  3. #3
    Rédacteur/Modérateur

    Avatar de Fabien Celaia
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2002
    Messages
    4 222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Suisse

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Service public

    Informations forums :
    Inscription : Octobre 2002
    Messages : 4 222
    Points : 19 551
    Points
    19 551
    Billets dans le blog
    25
    Par défaut
    Il y a pas mal de possibilités pouvant expliquer une insertion qui plante : le type de donnée, le format d'une date, la portée du domaine...

    Chacune de ces erreurs génère un @@error<>0, et il faut le tester pour CHAQUE insert.

    Dans le cas d'inserts massifs, si un tuple plante, c'est toute la transaction qui est rollbackée.

    Les erreurs n'apparaissent pas dans le journal car elles n'ont pas une severity suffisante... Heureusement que l'errorlog ne se ramasse pas toutes les erreurs de syntaxe de n'importe quel ordre...
    Sr DBA Oracle / MS-SQL / MySQL / Postgresql / SAP-Sybase / Informix / DB2

    N'oublie pas de consulter mes articles, mon blog, les cours et les FAQ SGBD

    Attention : pas de réponse technique par MP : pensez aux autres, passez par les forums !

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 254
    Points : 80
    Points
    80
    Par défaut
    Bonjour
    Heureusement que l'errorlog ne se ramasse pas toutes les erreurs de syntaxe de n'importe quel ordre...
    Certes, mais dans notre cas, c'est un même (et inchangé) ordre d'insertion qui s'exécutait ou échouait de façon aléatoire.
    Il ne s'agit donc absolument pas d'erreur de syntaxe.
    Ce genre d'erreur est d'ailleurs clairement signalé sous isql par un message de type : "Incorrect syntax near ..."

    ***
    Je suis d'accord qu'on doit tester @@error, mais comment poursuivre l'analyse si précisément sa valeur est <> 0 ?

    Pourquoi, l'exécution directe sous isql d'un tel ordre ne génère aucun message de rejet/plantage ?

    On aimerait bien avoir quelque part un indice/retour d'information du serveur ...
    Merci
    msomso
    P.S.
    Désolée pour la confusion: j'ai indiqué @@status dans mon post initial au lieu de @@error, mais j'ai bien testé la variable @@error.

  5. #5
    Membre chevronné

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 307
    Points : 1 828
    Points
    1 828
    Par défaut
    Si un insert ne s'execute pas c'est qu'il y a une raison... :-)

    Cela peut venir d'une stack trace ou erreur interne ASE - dans ce cas la session qui fait l'insert est en général interrompue.
    Ou d'un trigger qui refuse la ligne via un "rollback trigger" - sans raiserror cela ne positionne pas le @@error.
    Ou peut-être d'une autre cause qui ne me vient pas à l'esprit juste là...

    Michael
    Michael Peppler
    Membre de TeamSybase - www.teamsybase.com

    "A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 254
    Points : 80
    Points
    80
    Par défaut
    Bonjour
    Cela peut venir d'une stack trace ou erreur interne ASE
    Comment statuer entre ces 2 causes plausibles ?

    Nous n'avons pas défini de trigger pour la table concernée, peut être un trigger interne ... ?
    Je reprécise, que dans notre cas il n'y avait aucun signe d'erreur: notamment, la session restait non interrompue.

    Merci
    msomso

  7. #7
    Membre chevronné

    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 307
    Détails du profil
    Informations personnelles :
    Âge : 64
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 307
    Points : 1 828
    Points
    1 828
    Par défaut
    En fait - si il y a une erreur interne il doit normallement y avoir une stack trace dans la log ASE, et une erreur de severité > 17 dans le client (ou alors interuption de la connexion).

    Je ne sais pas vraiment ce qui peut ce passer dans ton cas - c'est qqch que je n'ai jamais vu.

    La seule autre chose à laquelle je peux penser c'est que dans un cas tu es en autocommit on (cad chained mode off), et dans l'autre en chained mode on, et qu'il n'y a pas de commit dans le script... ou alors qu'il manque un "go" qqpart... mais c'est quand même peu probable!

    Michael
    Michael Peppler
    Membre de TeamSybase - www.teamsybase.com

    "A successful [software] tool is one that was used to do something undreamed of by its author." -- S. C. Johnson

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    254
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 254
    Points : 80
    Points
    80
    Par défaut
    Bonjour,
    faut-il positionner explicitement un niveau pour la stack trace ?

    Pour le reste : cette erreur aléatoire se produisait même en exécutant l'instruction concernée par "copier/coller" dans une session isql ouverte dans une fenêtre DOS. Dans cette même session (puisque jamais interrompue), en testant @@error et le résultat d'insertion, j'ai constaté ce qui fait l'objet de notre discussion.

    Donc au départ on avait un script avec 3 inserts et 3 "GO", ensuite vu que l'un d'eux ne passait pas toujours, j'ai continué les tests sans script mais en lançant cet ordre d'insertion "à la main" par copier/coller.

    Merci
    msomso

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

Discussions similaires

  1. [MySQL] erreur insertion quand je saisi des '
    Par snakejl dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 28/06/2006, 12h59
  2. Erreur INSERT id vide
    Par concombre dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 26/05/2006, 17h23
  3. [ASE][T-SQL]Message d'erreur pendant INSERT
    Par Benjamin78 dans le forum Sybase
    Réponses: 3
    Dernier message: 23/03/2006, 10h38
  4. DBMemo sur champ Text erreur insert
    Par htristra dans le forum C++Builder
    Réponses: 1
    Dernier message: 02/11/2005, 15h17
  5. [ASE]probleme memoire: select dans une insert
    Par SegmentationFault dans le forum Sybase
    Réponses: 2
    Dernier message: 16/08/2005, 12h20

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