Précédent   Forum des professionnels en informatique > Bases de données > DB2
DB2 Forum d'entraide technique sur la base de données DB2. Voir aussi -> Rubrique DB2
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 27/09/2011, 17h51   #1
Invité régulier
 
Inscription : juin 2004
Messages : 47
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 47
Points : 9
Points : 9
Par défaut [ISeries] ALTER TABLE

Bonjour à tous,

Je rencontre un soucis sur DB2 ISeries (version 6). Voici le problème :
j'ai une table nommée INV_LISTE_PN_LOT_RES et je souhaiterais ajouter un champ CLASSE (type = VARCHAR).
Si j'exécute le script suivant :
Code :
"ALTER TABLE MSF.INV_LISTE_PN_LOT_RES ADD COLUMN CLASSE VARCHAR (10) CCSID 37 NOT HIDDEN ;"
j'obtiens l'erreur suivante :
Citation:
"Etat SQL : 58004
Code fournisseur : -901
Message : [SQL0901] Erreur système SQL. Cause . . . . . : Une erreur système SQL est intervenue. L'instruction SQL en cours ne peut s'exécuter avec succès.
Cette erreur n'empêchera pas cependant l'exécution des instructions suivantes. Il se peut que des messages précédents aient signalé un incident lié à cette instruction SQL et que SQL
n'ait pas correctement diagnostiqué l'erreur. Les messages précédents indiquent peut-être qu'un incident s'est produit sur cette instruction SQL,
mais que le diagnostic n'a pas été correctement effectué par SQL. L'ID message précédent est . Une erreur interne de type 4408 s'est produite. S'il s'agit d'une précompilation,
le traitement s'interrompra sur cette instruction.
Que faire . . . : Consultez les messages précédents pour déterminer si un incident s'est produit sur cette instruction SQL.
Pour consulter les messages, utilisez la commande DSPJOBLOG en mode interactif, ou la commande WRKJOB pour visualiser la sortie d'une précompilation.
Un programme d'application recevant ce code retour peut tenter de lancer de nouvelles instructions SQL. Corrigez les erreurs éventuelles et renouvelez votre demande.".

En regardant dans l'historique du travail, je trouve les erreurs suivantes :
- "Tentative de division par zéro pour opération en virgule fixe"
- "Erreur interne dans le processeur de requête de fichier.".

Avez-vous une idée pour résoudre mon problème ?

Merci d'avance et bonne soirée
Luc
luc2verga est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 09h56   #2
Membre Expert
 
Patrick
Inscription : mai 2008
Messages : 821
Détails du profil
Informations personnelles :
Nom : Patrick
Âge : 42
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : mai 2008
Messages : 821
Points : 1 041
Points : 1 041
A l'origine, s'agit d'un fichier (DDS) ou d'une table (DDL) ? Je pense que tu peux avoir cette info par un DSPFD ?

Essaye de dupliquer l'objet et d'essayer ton ALTER TABLE sur une table vide (sans données) pour voir.

Aussi, attention, je vois que tu créés un VARCHAR sans ALLOCATE, en espérant que ta zone CLASSE ne soit pratiquement jamais renseignée, dans le cas contraire, attention aux performances !
K2R400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 10h54   #3
Invité régulier
 
Inscription : juin 2004
Messages : 47
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 47
Points : 9
Points : 9
Tout d'abord, merci K2R400 pour ta réponse.

Citation:
Envoyé par K2R400 Voir le message
A l'origine, s'agit d'un fichier (DDS) ou d'une table (DDL) ?
INV_LISTE_PN_LOT_RES est une table (DDL)

Citation:
Envoyé par K2R400 Voir le message
Essaye de dupliquer l'objet et d'essayer ton ALTER TABLE sur une table vide (sans données) pour voir.
J'ai donc dupliqué ma table :
Code :
CREATE TABLE msf.inv_liste_pn_lot_res1 LIKE msf.inv_liste_pn_lot_res
et j'ai appliqué mon ALTER TABLE qui fonctionne correctement ! Le problème viendrait-il de mes données ?

Citation:
Envoyé par K2R400 Voir le message
Aussi, attention, je vois que tu créés un VARCHAR sans ALLOCATE, en espérant que ta zone CLASSE ne soit pratiquement jamais renseignée, dans le cas contraire, attention aux performances !
Pour être honnête, je suis débutant sur DB2 (nous étions auparavant sur Oracle). Et pour tout dire, nous avons des problèmes de performances, ce qui nous a amené à créer pas mal d'index. Peux-tu donc m'expliquer pourquoi tu me parles d'ALLOCATE ?

Merci d'avance
luc2verga est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 14h41   #4
Membre Expert
 
Patrick
Inscription : mai 2008
Messages : 821
Détails du profil
Informations personnelles :
Nom : Patrick
Âge : 42
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : mai 2008
Messages : 821
Points : 1 041
Points : 1 041
Citation:
Envoyé par luc2verga Voir le message
INV_LISTE_PN_LOT_RES est une table (DDL)
Il faut en être certain, et le vérifier avec un DSPFD qui doit te donner :

Code :
1
2
Attributs fichier base de données                                
  Type de fichier SQL . . . . . . . . . . . . :            TABLE

Citation:
Envoyé par luc2verga Voir le message
Le problème viendrait-il de mes données ?
C'est pour ça que je pense qu'à l'origine c'est un fichier DDS au lieu de DDL.
Ces entités ne sont pas fiables, ton problème pourrait provenir de zones numériques ou packées (decimal) qui contiendraient des caractères.

Citation:
Envoyé par luc2verga Voir le message
Pour être honnête, je suis débutant sur DB2 (nous étions auparavant sur Oracle). Et pour tout dire, nous avons des problèmes de performances, ce qui nous a amené à créer pas mal d'index. Peux-tu donc m'expliquer pourquoi tu me parles d'ALLOCATE ?
Pour ton problème de performances il faudrait déjà savoir en quelle version es-tu. Pour ce qui est de l'allocate, quand on cree un VARCHAR ou CLOB sa valeur a une grande importance et peu effectivement jouer sur les performances.

Exemple : Tu créés un VARCHAR(10000) avec un ALLOCATE(100).
Dans la table, les 9900 caractères n'y sont pas, mais stockés dans une autre table (cachée), seuls les 100 premiers y sont (plus la longueur totale soit 102 pour un VARCHAR et 104 pour un CLOB).

L'avantage :
- Il est plus rapide d’accéder aux données consécutivement sur disque quand on lit plusieurs enregistrements (groupages, result set...)
L'inconvénient :
- Si ta zone est lue (attention au SELECT *) et qu'elle contient plus de 100 caractères, il faudra un deuxième I/O disque pour lire les informations (extra data).

Dans ton exemple, chaque fois que tu liras un enregistrement, il y aura 2 I/O d'où un impact sur les performances.
K2R400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 15h37   #5
Invité régulier
 
Inscription : juin 2004
Messages : 47
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 47
Points : 9
Points : 9
Citation:
Envoyé par K2R400 Voir le message
Il faut en être certain, et le vérifier avec un DSPFD qui doit te donner :

Code :
1
2
Attributs fichier base de données                                
  Type de fichier SQL . . . . . . . . . . . . :            TABLE
La vérification a été faite avec DSPFD.



Citation:
Envoyé par K2R400 Voir le message
Pour ton problème de performances il faudrait déjà savoir en quelle version es-tu.
v6r1

Citation:
Envoyé par K2R400 Voir le message
Dans ton exemple, chaque fois que tu liras un enregistrement, il y aura 2 I/O d'où un impact sur les performances.
Dans mon cas, je retrouve 0 si j'affiche ALLOCATE pour mes champs VARCHAR. Dois-je modifier cela ? Et si oui comment ?

Merci d'avance !
luc2verga est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 17h11   #6
Invité régulier
 
Inscription : juin 2004
Messages : 47
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 47
Points : 9
Points : 9
Autre information, si je vide ma table et que je cherche à ajouter cette nouvelle colonne, j'ai la même erreur.
luc2verga est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2011, 19h06   #7
Membre Expert
 
Patrick
Inscription : mai 2008
Messages : 821
Détails du profil
Informations personnelles :
Nom : Patrick
Âge : 42
Localisation : France, Hérault (Languedoc Roussillon)

Informations forums :
Inscription : mai 2008
Messages : 821
Points : 1 041
Points : 1 041
humm, bizarre....

Procédons par élimination :

1) Ce n'est pas un fichier DDS donc le problème ne vient pas des données.
2) Sur une table identique sans données ca marche mais pas sur la tienne sans données. Peut-être un problème de dépendants (triggers, index, vues, MQTs, etc...). Il faudrait peut-être supprimer les dépendants et ressayer.

Il faudrait s'assurer aussi que tu es les dernières PTFs DB2 Group à vérifier sur le site IBM FIX CENTRAL et par la commande WRKPTFGRP.
Il faudrait aussi lancer un RCLDBXREF pour vérifier.
K2R400 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/10/2011, 10h45   #8
Membre habitué
 
Homme
Analyste-Programmeur as/400
Inscription : août 2002
Messages : 96
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Luxembourg

Informations professionnelles :
Activité : Analyste-Programmeur as/400
Secteur : Finance

Informations forums :
Inscription : août 2002
Messages : 96
Points : 116
Points : 116
Ma question.
Est-ce que tu as des fichiers logiques attachés à ta table ?
Fait un DSPDBR de ton fichier.
Il y a peut-être un problème à ce niveau.
larry57 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h00.


 
 
 
 
Partenaires

Hébergement Web