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 29/09/2011, 16h27   #1
Membre confirmé
 
Inscription : mars 2004
Messages : 1 187
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 187
Points : 233
Points : 233
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 :
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.
sam01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2011, 23h00   #2
Membre Expert

 
Homme François Durand
Spécialiste Delivery Mainframe IBM
Inscription : octobre 2005
Messages : 1 096
Détails du profil
Informations personnelles :
Nom : Homme François Durand
Âge : 53
Localisation : France, Seine Saint Denis (Île de France)

Informations professionnelles :
Activité : Spécialiste Delivery Mainframe IBM
Secteur : Finance

Informations forums :
Inscription : octobre 2005
Messages : 1 096
Points : 1 704
Points : 1 704
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 ...


Citation:
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.


Citation:
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 ?


Citation:
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 ...
Luc Orient est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2011, 09h56   #3
Membre confirmé
 
Inscription : mars 2004
Messages : 1 187
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 187
Points : 233
Points : 233
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 :
1
2
3
 
********************************* Top of DATA *****
.ÚXXXXXXXX-08-21104640YYY2003-08-27165300920200
et avec un UNLOAD classique (DSNTIAUL)

Code :
1
2
3
 
********************************* Top of DATA ****
XXXXXXXX-08-21104640YYY2003-08-27165300920200D
Je ne sais si ça peut faire planter un programme pl1...
sam01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2011, 11h27   #4
Membre Expert

 
Homme François Durand
Spécialiste Delivery Mainframe IBM
Inscription : octobre 2005
Messages : 1 096
Détails du profil
Informations personnelles :
Nom : Homme François Durand
Âge : 53
Localisation : France, Seine Saint Denis (Île de France)

Informations professionnelles :
Activité : Spécialiste Delivery Mainframe IBM
Secteur : Finance

Informations forums :
Inscription : octobre 2005
Messages : 1 096
Points : 1 704
Points : 1 704
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 ?
Luc Orient est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2011, 11h29   #5
Membre chevronné
 
Avatar de bernard59139
 
Administrateur de base de données
Inscription : octobre 2006
Messages : 503
Détails du profil
Informations personnelles :
Localisation : France

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

Informations forums :
Inscription : octobre 2006
Messages : 503
Points : 688
Points : 688
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.
bernard59139 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2011, 13h23   #6
Membre confirmé
 
Inscription : mars 2004
Messages : 1 187
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 187
Points : 233
Points : 233
Citation:
Envoyé par Luc Orient Voir le message
Quel UNLOAD ? IBM ?
oui

Code :
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                                   
/*
sam01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2011, 13h46   #7
Membre confirmé
 
Inscription : mars 2004
Messages : 1 187
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 187
Points : 233
Points : 233
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 :
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 :
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 :
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                                                       
/*
sam01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2011, 14h46   #8
Membre chevronné
 
Avatar de bernard59139
 
Administrateur de base de données
Inscription : octobre 2006
Messages : 503
Détails du profil
Informations personnelles :
Localisation : France

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

Informations forums :
Inscription : octobre 2006
Messages : 503
Points : 688
Points : 688
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é.
bernard59139 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2011, 15h03   #9
Membre Expert

 
Homme François Durand
Spécialiste Delivery Mainframe IBM
Inscription : octobre 2005
Messages : 1 096
Détails du profil
Informations personnelles :
Nom : Homme François Durand
Âge : 53
Localisation : France, Seine Saint Denis (Île de France)

Informations professionnelles :
Activité : Spécialiste Delivery Mainframe IBM
Secteur : Finance

Informations forums :
Inscription : octobre 2005
Messages : 1 096
Points : 1 704
Points : 1 704
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 ...
Luc Orient est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2011, 15h42   #10
Membre confirmé
 
Inscription : mars 2004
Messages : 1 187
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 187
Points : 233
Points : 233
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 :
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.
sam01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/09/2011, 20h59   #11
Membre Expert

 
Homme François Durand
Spécialiste Delivery Mainframe IBM
Inscription : octobre 2005
Messages : 1 096
Détails du profil
Informations personnelles :
Nom : Homme François Durand
Âge : 53
Localisation : France, Seine Saint Denis (Île de France)

Informations professionnelles :
Activité : Spécialiste Delivery Mainframe IBM
Secteur : Finance

Informations forums :
Inscription : octobre 2005
Messages : 1 096
Points : 1 704
Points : 1 704
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 ...
Luc Orient est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2011, 08h12   #12
Membre actif
 
Inscription : juin 2008
Messages : 146
Détails du profil
Informations personnelles :
Âge : 44

Informations forums :
Inscription : juin 2008
Messages : 146
Points : 183
Points : 183
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...
pdz74 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2011, 10h26   #13
Membre confirmé
 
Inscription : mars 2004
Messages : 1 187
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 187
Points : 233
Points : 233
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...
sam01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2011, 10h51   #14
Membre confirmé
 
Inscription : mars 2004
Messages : 1 187
Détails du profil
Informations forums :
Inscription : mars 2004
Messages : 1 187
Points : 233
Points : 233
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 )
sam01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/10/2011, 15h48   #15
Membre Expert

 
Homme François Durand
Spécialiste Delivery Mainframe IBM
Inscription : octobre 2005
Messages : 1 096
Détails du profil
Informations personnelles :
Nom : Homme François Durand
Âge : 53
Localisation : France, Seine Saint Denis (Île de France)

Informations professionnelles :
Activité : Spécialiste Delivery Mainframe IBM
Secteur : Finance

Informations forums :
Inscription : octobre 2005
Messages : 1 096
Points : 1 704
Points : 1 704
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)


Citation:
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 ...
Luc Orient 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 20h56.


 
 
 
 
Partenaires

Hébergement Web