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

DB2 Discussion :

Unload et PL1


Sujet :

DB2

  1. #1
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    1 907
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 907
    Points : 411
    Points
    411
    Par défaut Unload et PL1
    Bonjour,

    aujourd'hui un programme PL1 attaque directement une table DB2 en select *
    puis selection des colonnes via le programme PL1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    %INCLUDE (XXSQL) ;                                            
     
    /*---------------------------------------------------------*/ 
    DCL 1 TABAAA UNAL,                                            
    %INCLUDE (TFXYZ);
    j'aimerais savoir quel est l'impact sur le programme PL1 quand on va passer par un fichier d'unload. En effet, le but est que le programme PL1 n'attaque plus la table directement mais le fichier d'unload.
    Le souci c'est le format du fichier d'unload :

    1) Si on change de version DB2, le fichier est susceptible de changer de format et donc de faire planter le programme... ?

    2) Si je passe par un unload à partir d'une FIC, le fichier d'unload est-il identique au fichier d'unload à partir de la table directement.

    3) Si je décide de faire un unload en passant par un select avec une clause WHERE, le fichier d'unload serat'il identique à un fichier d'unload sans select ?


    4) Et quel est le plus optimal, faire un unload pus et simple de toute une table (plus de 500 Millions de lignes)
    ou faire un unlaod par sql avec une clause WHERE qui elle ramènerait 400 Millions de Lignes (les lignes dont on a besoin)

    Je sais, ça fait pas mal de question mais je préfère prendre ds précaustions avant de me lancer dans cette optimisation.

    Merci pour votre aide.

  2. #2
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    Citation Envoyé par sam01 Voir le message
    Bonjour ...


    1) Si on change de version DB2, le fichier est susceptible de changer de format et donc de faire planter le programme... ?
    Heureusement que non ... Si chaque fois qu'on changeait de version de DB2, les fichiers issus de UNLOAD changeaient de format, on aurait de gros problèmes sur nos sites z/OS ...


    2) Si je passe par un unload à partir d'une FIC, le fichier d'unload est-il identique au fichier d'unload à partir de la table directement.
    Je dirais oui. Format identique.


    3) Si je décide de faire un unload en passant par un select avec une clause WHERE, le fichier d'unload serat'il identique à un fichier d'unload sans select ?
    Qu'appelles-tu un UNLOAD avec un SELECT ?


    4) Et quel est le plus optimal, faire un unload pus et simple de toute une table (plus de 500 Millions de lignes)
    ou faire un unlaod par sql avec une clause WHERE qui elle ramènerait 400 Millions de Lignes (les lignes dont on a besoin)
    La plupart des utilitaires IBM ou autres ont une fonction de sélection qui permet de ne décharger que les lignes nécessaires. Ce n'est pas du SQL à proprement parler, et donc, moins sophistiqué mais ça permet de traiter la plupart des cas, à mon sens. Avec l'UNLOAD IBM c'est le mot clé WHEN, par exemple. Une piste à explorer donc ...

  3. #3
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    1 907
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 907
    Points : 411
    Points
    411
    Par défaut
    Bonjour Luc Orient,

    j'ai fais le test UNLOAD à partir d'une FIC, le contenu à une donnée bizarre en début de ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ********************************* Top of Data *****
    .ÚXXXXXXXX-08-21104640YYY2003-08-27165300920200
    et avec un UNLOAD classique (DSNTIAUL)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    ********************************* Top of Data ****
    XXXXXXXX-08-21104640YYY2003-08-27165300920200D
    Je ne sais si ça peut faire planter un programme pl1...

  4. #4
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    Citation Envoyé par sam01 Voir le message
    ...
    j'ai fais le test UNLOAD à partir d'une FIC, le contenu à une donnée bizarre en début de ligne
    Quel UNLOAD ? IBM ?

  5. #5
    Membre chevronné Avatar de bernard59139
    Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2006
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Octobre 2006
    Messages : 950
    Points : 2 064
    Points
    2 064
    Par défaut
    attention, DSNTIAUL n'est pas UNLOAD.
    UNLOAD utilitaire
    DSNTIAUL programme classique

    Le format de fichier produit par DSNTIAUL n'est pas identique à UNLOAD.
    Pour commencer, le RECFM peut être différent, UNLOAD c'est VB, dsntiaul c'est selon.
    ensuite, si tu as des colonnes avec NULL possible, tu as des différences.

    Lit et relit la doc Utility Guide and Reference


    les 2c ajoutés par UNLOAD donnent l'OBID de la table.

  6. #6
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    1 907
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 907
    Points : 411
    Points
    411
    Par défaut
    Citation Envoyé par Luc Orient Voir le message
    Quel UNLOAD ? IBM ?
    oui

    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
     
    //UNL01    EXEC PGM=DSNUTILB,DYNAMNBR=20,PARM='DB2T,TCFD.FIC'        
    //SYSTSPRT DD SYSOUT=*                                                
    //SYSPRINT DD SYSOUT=*                                                
    //SYSUDUMP DD SYSOUT=*                                                
    //SYSREC00 DD DSN=XC2.UNLFIC01.UNLOAD,                        
    //            DISP=(NEW,CATLG,KEEP),SPACE=(CYL,(10,20),RLSE)          
    //SYSCOPY  DD DSN=XCFTS144SHR,VOL=SER=931981,DISP=SHR,    
    //      UNIT=VTS2,LABEL=(144,SL)                                      
    //SYSPUNCH DD DSN=CB01.SYSPUNCH,DISP=(,CATLG,DELETE), 
    //            SPACE=(CYL,(1,2),RLSE)                                  
    //SYSIN    DD  *                                                      
      UNLOAD TABLESPACE DBAXW.TSFTOP FROMCOPYDDN SYSCOPY              
      PUNCHDDN SYSPUNCH UNLDDN SYSREC00                                   
    /*

  7. #7
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    1 907
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 907
    Points : 411
    Points
    411
    Par défaut
    Citation Envoyé par bernard59139 Voir le message
    attention, DSNTIAUL n'est pas UNLOAD.
    UNLOAD utilitaire
    DSNTIAUL programme classique

    Le format de fichier produit par DSNTIAUL n'est pas identique à UNLOAD.
    Pour commencer, le RECFM peut être différent, UNLOAD c'est VB, dsntiaul c'est selon.
    ensuite, si tu as des colonnes avec NULL possible, tu as des différences.

    Lit et relit la doc Utility Guide and Reference


    les 2c ajoutés par UNLOAD donnent l'OBID de la table.
    oui d'accord mais le résultat est le même.

    Avec le programme suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    //S010N  EXEC PGM=DSNUTILB,REGION=0M,PARM='DBXX'                  
    //SYSPRINT DD SYSOUT=*                                            
    //*UTPRINT  DD SYSOUT=*                                           
    //SYSREC   DD DSN=XX.UNLDSNUA.SYSREC00,                  
    //            DISP=(,CATLG),SPACE=(CYL,(25,25),RLSE)              
    //SYSPUNCH DD DSN=XX.UNLDSNUA.SYSPUNCH,                  
    //            DISP=(,CATLG),SPACE=(CYL,(25,25),RLSE)              
    //SYSIN    DD *                                                   
     UNLOAD DATA FROM TABLE CC2.TDXX HEADER NONE
    j'obtiens la même chose qu'avec

    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
     
    //UNL01    EXEC PGM=IKJEFT01,DYNAMNBR=20                               
    //SYSTSPRT DD SYSOUT=*                                                 
    //SYSTSIN  DD *                                                        
     DSN SYSTEM(DBXC)                                                      
     RUN  PROGRAM(DSNTIAUL) PLAN(DSNTIAUL) PARM('SQL')                     
     END                                                                   
    //SYSPRINT DD SYSOUT=*                                                 
    //SYSUDUMP DD SYSOUT=*                                                 
    //SYSREC00 DD DSN=XDBS.UNLDSN.SYSREC00,                         
    //            DISP=(NEW,CATLG,KEEP),SPACE=(CYL,(5,20),RLSE)            
    //SYSPUNCH DD DSN=XDSB.UNLDSN.SYSPUNCH,                         
    //            DISP=(NEW,CATLG,KEEP),SPACE=(CYL,(5,20),RLSE)            
    //SYSIN    DD  *                                                       
        SELECT * FROM TECV.CFB;
    Ma question est quelle est l'unload le plus performant. Qui sollicite moins DB2.

    L'avantage que je vois avec la deuxième solution, c'est que je peux sélectionner des conditions (clause Where) avec le langage SQL...

    Il y en a un troisième qui fonctionne aussi bien :

    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
     
    //UNL01    EXEC PGM=IKJEFT01,DYNAMNBR=20                              
    //SYSTSPRT DD SYSOUT=*                                                
    //SYSTSIN  DD *                                                       
     DSN SYSTEM(DXCT)                                                     
     RUN  PROGRAM(DSNTIAUL) PLAN(DSNTIAUL)                                
     END                                                                  
    //SYSPRINT DD SYSOUT=*                                                
    //SYSUDUMP DD SYSOUT=*                                                
    //SYSREC00 DD DSN=CVXQ.NLDSN01.SYSREC00,                      
    //            DISP=(NEW,CATLG,KEEP),SPACE=(CYL,(10,20),RLSE)          
    //SYSPUNCH DD DUMMY                                                   
    //SYSIN    DD  *                                                      
        TCT.TVFGT                                                       
    /*

  8. #8
    Membre chevronné Avatar de bernard59139
    Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2006
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Octobre 2006
    Messages : 950
    Points : 2 064
    Points
    2 064
    Par défaut
    Citation Envoyé par sam01 Voir le message
    oui d'accord mais le résultat est le même.
    Avec cette table, dans ce cas là.
    N'en fait pas une généralité.

  9. #9
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    Citation Envoyé par sam01 Voir le message
    ...
    j'ai fais le test UNLOAD à partir d'une FIC, le contenu à une donnée bizarre en début de ligne
    Le fichier généré par UNLOAD est un fichier en longueur variable ( VB comme l'indique bernard59129) et ce que tu vois en début de ligne c'est tout simplement le record descriptor word qui contient la longueur de l'enregistrement sur 2 octets.

    Un programme PL/1 ( du PL/1 quelle drôle d'idée ... ) devrait être capable de lire un tel fichier ...

  10. #10
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    1 907
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 907
    Points : 411
    Points
    411
    Par défaut
    Citation Envoyé par Luc Orient Voir le message
    Un programme PL/1 ( du PL/1 quelle drôle d'idée ... )
    Par curiosité, pourquoi cette remarque, ça m'intéresse.

    Toutes les critiques sont les bienvenues

    Quoiqu'il en soit, je pense avoir trouver l'unload que je veux :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    //S010N  EXEC PGM=DSNUTILB,REGION=0M,PARM='DB2T'                       
    //SYSPRINT DD SYSOUT=*                                                 
    //SYSREC   DD DSN=XYZ.UNLDSNUA.SYSREC00,                       
    //            DISP=(,CATLG),SPACE=(CYL,(25,25),RLSE)                   
    //SYSPUNCH DD DSN=XYZ.UNLDSNUA.SYSPUNCH,                       
    //            DISP=(,CATLG),SPACE=(CYL,(25,25),RLSE)                   
    //SYSIN    DD *                                                        
      UNLOAD TABLESPACE CV2.TFG2                                   
      PUNCHDDN SYSPUNCH UNLDDN SYSREC                                      
      FROM TABLE VBT2.VCG                                               
      WHEN (VOLSER LIKE ='920200')                                         
    /*
    J'utilise l'utilitaire UNLOAD avec la clause WHEN.

  11. #11
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    Citation Envoyé par sam01 Voir le message
    Par curiosité, pourquoi cette remarque, ça m'intéresse.
    Non, c'est juste que il n'y a plus grand monde qui programme en PL/1 de nos jours ...

  12. #12
    Membre actif
    Inscrit en
    Juin 2008
    Messages
    154
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : Juin 2008
    Messages : 154
    Points : 225
    Points
    225
    Par défaut
    Bonjour,

    J'arrive après la bataille juste pour dire que :

    1/ L'utilitaire UNLOAD est plus performant que le programme DSNTIAUL et surtout il est pérenne, alors que DSNTIAUL est gracieusement fourni par IBM depuis toujours mais sans certitude pour les futures versions. Pour info, lorsque l'utilitaire UNLOAD est apparu en V7 ou V8, je ne sais plus trop, nous avons modifié tous nos PCL et JCL qui contenait un DSNTIAUL pour le remplacer par UNLOAD. Le gain est d'en moyenne 20 à 30% si je me souviens bien.

    2/ Récupérer 500 M de lignes sans se poser de question ou n'en sélectionner "que" 400 M avec une clause WHERE, ça ne changera pas grand chose en terme de temps de réponse, puisqu'on peut logiquement penser que DB2 va scanner toute la table. Ceci dit, tu gagneras quand même 100 M d'écritures fichier, ce qui n'est pas négligeable quand on atteint de tels chiffres.

    La question que je me poserais, c'est plutôt : quel traitement peut avoir besoin d'une mise à plat de 400 millions de lignes. S'il s'agit d'un processus de reprise, de migration, ..., OK, s'il s'agit d'un traitement périodique, je doute un peu du bien fondé de l'analyse. Mais chaque société a ses spécificités et ses propres méthodes de travail, je ne porterai donc pas de jugement. Comme dirait l'autre : chacun porte se croix...

  13. #13
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    1 907
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 907
    Points : 411
    Points
    411
    Par défaut
    Bonjour pdz74 et merci pour ta réponse qui est très précise. C'est exactement ce que je voulais savoir.

    J'utiliserais donc l'utilitaire UNLOAD.

    Au niveau fonctionnel, je dois t'avouer que je ne comprends pas bien pourquoi on doit balayer une table de 500 M de lignes. C'est un programme qui existe de puis très longtemps, il est donc possible que la table à l'époque était petite...
    et qu'elle ne cesse de grandir... Mais je n'en suis pas certain...

  14. #14
    Membre averti
    Inscrit en
    Mars 2004
    Messages
    1 907
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 1 907
    Points : 411
    Points
    411
    Par défaut
    Citation Envoyé par Luc Orient Voir le message
    Non, c'est juste que il n'y a plus grand monde qui programme en PL/1 de nos jours ...
    Ils programme en quoi alors ?

    COBOL ?

    Quelle est la différence entre les deux ? (je sais, ça peut faire partie d'un autre poste )

  15. #15
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    Citation Envoyé par sam01 Voir le message
    Ils programme en quoi alors ?
    COBOL ?
    Oui. COBOL reste encore très utilisé sur z/OS (et sûrement davantage que PL/1)


    Quelle est la différence entre les deux ? (je sais, ça peut faire partie d'un autre poste )
    C'est un tout autre débat en effet ...

Discussions similaires

  1. [PL1] Recherche de doc sur le langage PL1
    Par letili dans le forum Autres langages
    Réponses: 5
    Dernier message: 29/11/2007, 19h13
  2. Body on Unload
    Par olé dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 26/03/2006, 15h11
  3. Réponses: 1
    Dernier message: 22/11/2005, 14h49
  4. Réponses: 6
    Dernier message: 09/10/2005, 14h56
  5. [C#] Load et Unload assembly en c#
    Par PST dans le forum Windows Forms
    Réponses: 10
    Dernier message: 26/09/2005, 14h40

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