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

AS/400 Discussion :

Commande pour le CLEAR de tous les fichiers données d'une bibliothèque (en une seule fois)


Sujet :

AS/400

  1. #1
    Rédacteur
    Avatar de JauB
    Homme Profil pro
    Freelancer
    Inscrit en
    Octobre 2005
    Messages
    1 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Maroc

    Informations professionnelles :
    Activité : Freelancer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 792
    Points : 2 914
    Points
    2 914
    Par défaut Commande pour le CLEAR de tous les fichiers données d'une bibliothèque (en une seule fois)
    Bonjour,
    Est ce qu'il y a un moyen (sans passer par des développements spécifiques) pour clearer tous les fichiers DATA d'une bibliothèque donnée. Ceci me permettra d'éviter de faire un CLRPFM par fichier de la bibliothèque en question.
    Merci d'avance.
    Mes articles, Mon Blog

    Rubrique Jasper/iReport :
    ------- Forum Jasper --------
    ----- FAQ Jasper/iReport -----


  2. #2
    Rédacteur
    Avatar de JauB
    Homme Profil pro
    Freelancer
    Inscrit en
    Octobre 2005
    Messages
    1 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Maroc

    Informations professionnelles :
    Activité : Freelancer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 792
    Points : 2 914
    Points
    2 914
    Par défaut
    Bon,
    Juste pour débloquer la situation j'ai procédé comme suit :
    1. J'ai récupéré la liste des fichiers données , via une requête, à partir de la bibliothèque voulue en générant directement la requête de suppression des données comme suit :

    Requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
     
    select  'DELETE FROM ' || TABLE_SCHEMA || '.' || TABLE_NAME || ';'
    from sysibm.TABLES
    WHERE TABLE_SCHEMA = 'MABIB'
    AND   TABLE_TYPE = 'BASE TABLE'
    AND   TABLE_NAME NOT LIKE 'Q%'
    2. J'ai exporté le résultat de la requête dans un fichier que j'ai exécuté via un outil SQL.

    3. Le tour est joué
    Mes articles, Mon Blog

    Rubrique Jasper/iReport :
    ------- Forum Jasper --------
    ----- FAQ Jasper/iReport -----


  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Août 2008
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 123
    Points : 146
    Points
    146
    Par défaut
    Bjr,

    A ma connaissance cela n'existe pas. Mais il est très simple de faire un petit CL pour cela.
    Voici une trame simple (Aucun controle d'erreurs) :

    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
                  PGM        PARM(&LIB)                                     
                  DCL        VAR(&LIB) TYPE(*CHAR) LEN(10)                  
                  DCLF       FILE(QADSPOBJ)                                 
                  DSPOBJD    OBJ(&LIB/*ALL) OBJTYPE(*FILE) +          
                               OUTPUT(*OUTFILE) OUTFILE(QTEMP/WOBJD)        
                  OVRDBF     FILE(QADSPOBJ) TOFILE(QTEMP/WOBJD)             
     NEXT:                                                                  
                  RCVF                                                      
                  MONMSG     MSGID(CPF0864) EXEC(GOTO CMDLBL(EOF))          
                  /* On ne traite que les objets *FILE/PF, SAUF ceux  */    
                  /* commençant pat 'Q' pour ne pas clearer les sources */  
                  IF         COND(&ODOBTP *EQ '*FILE' *AND &ODOBAT *EQ +    
                               'PF' *AND %SST(&ODOBNM 1 1) *NE 'Q') THEN(DO)
                  CLRPFM     FILE(&LIB/&ODOBNM)                             
                  GOTO       CMDLBL(NEXT)                                   
     EOF:                                                                   
                  ENDPGM

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Août 2008
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 123
    Points : 146
    Points
    146
    Par défaut
    Bien vue le SQL

    Il y a cependant une petite différence entre DELETE (SQL) et CLRPFM au niveau des perfs et des verrouillages.
    - CLRPFM est bien plus rapide (surtout si la table est journalisée) car travaille au niveau du membre, mais impose un verrouillage exclusive sur l'objet *FILE
    - DELETE est plus lent (il travaille ligne à ligne) mais du coup n'a pas besoin d'un verrouillage exclusif sur l'objet

  5. #5
    Rédacteur
    Avatar de JauB
    Homme Profil pro
    Freelancer
    Inscrit en
    Octobre 2005
    Messages
    1 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Maroc

    Informations professionnelles :
    Activité : Freelancer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 792
    Points : 2 914
    Points
    2 914
    Par défaut
    Merci pour le CL.
    Sinon question performance, je ne voulais pas m'y prendre la tête, je cherchais juste à vider ma bibliothèque d'une façon automatique


    Citation Envoyé par jump400 Voir le message
    Bien vue le SQL

    Il y a cependant une petite différence entre DELETE (SQL) et CLRPFM au niveau des perfs et des verrouillages.
    - CLRPFM est bien plus rapide (surtout si la table est journalisée) car travaille au niveau du membre, mais impose un verrouillage exclusive sur l'objet *FILE
    - DELETE est plus lent (il travaille ligne à ligne) mais du coup n'a pas besoin d'un verrouillage exclusif sur l'objet
    Mes articles, Mon Blog

    Rubrique Jasper/iReport :
    ------- Forum Jasper --------
    ----- FAQ Jasper/iReport -----


  6. #6
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    DELETE ne fait que détruire les liens de chaînage des enregistrements dans la BDD mais l'espace disque est toujours occupé, alors que CLRPFM nettoie le fichier en le vidant de ses enregistrements et surtout en récupérant l'espace disque occupé pour le mettre à disposition des autres fichiers.
    Quant à l'aspect perfs, CLRPFM bat à plates coutures tout delete, quel qu'il soit, il n'y a pas photo. En final, cela fait une grosse différence, surtout sur les fichiers volumineux !

  7. #7
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    821
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Mai 2008
    Messages : 821
    Points : 1 084
    Points
    1 084
    Par défaut
    Citation Envoyé par jump400 Voir le message
    Bien vue le SQL

    Il y a cependant une petite différence entre DELETE (SQL) et CLRPFM au niveau des perfs et des verrouillages.
    - CLRPFM est bien plus rapide (surtout si la table est journalisée) car travaille au niveau du membre, mais impose un verrouillage exclusive sur l'objet *FILE
    - DELETE est plus lent (il travaille ligne à ligne) mais du coup n'a pas besoin d'un verrouillage exclusif sur l'objet
    Depuis la V5R3, un DELETE * FROM MATABLE sans clause WHERE et sur une table non journalisée n'est pas plus lente qu'un CLRPFM, car "under the cover" c'est bien un CLRPFM qui est exécuté si la table n'est pas tenue par un autre job, c'est que ce l'on appelle communément le FASTER DELETE.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Août 2008
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 123
    Points : 146
    Points
    146
    Par défaut
    Citation Envoyé par K2R400 Voir le message
    Depuis la V5R3, un DELETE * FROM MATABLE sans clause WHERE et sur une table non journalisée n'est pas plus lente qu'un CLRPFM, car "under the cover" c'est bien un CLRPFM qui est exécuté si la table n'est pas tenue par un autre job, c'est que ce l'on appelle communément le FASTER DELETE.
    Oups, faut que je me mette à jour merci pour l'info

  9. #9
    Membre expérimenté

    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    1 298
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 298
    Points : 1 578
    Points
    1 578
    Par défaut
    Moi aussi !

  10. #10
    Rédacteur
    Avatar de JauB
    Homme Profil pro
    Freelancer
    Inscrit en
    Octobre 2005
    Messages
    1 792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Maroc

    Informations professionnelles :
    Activité : Freelancer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 792
    Points : 2 914
    Points
    2 914
    Par défaut
    moi on n'en parle plus
    Mes articles, Mon Blog

    Rubrique Jasper/iReport :
    ------- Forum Jasper --------
    ----- FAQ Jasper/iReport -----


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

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/02/2014, 23h20
  2. [Toutes versions] coller les données d'une plage d'une cellule dans une cellule d'une autre feuille[VBA]
    Par arthson dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/01/2012, 17h37
  3. Renommer tous les fichiers d'un répertoire à partir d'une liste
    Par erustika dans le forum Shell et commandes GNU
    Réponses: 7
    Dernier message: 01/09/2011, 17h10
  4. Réponses: 7
    Dernier message: 16/09/2009, 09h34
  5. Réponses: 1
    Dernier message: 12/09/2007, 11h42

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