Pause-Café Volubis

pause-café

rendez-vous technique
Pause-Café est une réunion technique
destinée aux informaticiens sur plateforme IBM i.
Elle a lieu 3 à 4 fois par an : en Bretagne et sur internet.

Pause-café #64

Mai 2013

Quelques nouveautés Début 2013

Nouveautés SQL


SF99701, level 21

• Nouvelle fonction SQL_CHECK_AUTHORITY , permettant de vérifier les droits de l'utilisateur en cours sur une table

• Nouvelles procédures de comparaison de deux machines :

IBM fournit deux procédures dans SYSTOOLS utilisant le nommage en trois parties (serveur.schema.table)

  • CHECK_SYSCST

    Permettant de faire la liste des différences entre deux machines, pour une bibliothèque donnée, en ce qui concerne les contraintes
    ( le profil utilisant cette procédure doit pouvoir se connecter automatiquement (ADDSVRAUTE) )


  • CHECK_SYSROUTINE

    Permettant de faire la liste des différences entre deux machines, pour une bibliothèque donnée, en ce qui concerne les procédures enregistrées

Ces routines (dans SYSTOOLS) sont fournies à titre d'exemple et peuvent être modifiées

 

SF99701, level 23

 

Attention la PTF SF99701 level 22 est déclarée en erreur, ne l'installez pas, installez le level 23 à la place ou la SI49730

 

• La commande RGZPFM a été modifiée afin d'autoriser un critère de reprise

Nouveau Paramètre FROMRCD

  • *START , comme aujourd'hui
  • *PRVRGZ, repart de la dernière réorganisation incomplète
    (cas d'ajouts de lignes pendant le RGZPFM)

    ==> ALWCANCEL(*YES)
  • un-chiffre, permet de démarrer la réorganisation à une ligne donnée

 

• Au même niveau, la création d'objets avec des noms longs admet maintenant

FOR SYSTEM NAME permettant d'indiquer un nom système (avant il fallait renommer)

• La création de triggers SQL admet plusieurs événements

CREATE TRIGGER PERSOTRG
AFTER INSERT OR DELETE OR UPDATE OF SALAIRE ON PERSONP1
REFERENCING NEW AS N OLD AS O FOR EACH ROW
BEGIN
 IF INSERTING
  THEN UPDATE COMPANY_STATS SET NBREMP = NBREMP + 1;
 END IF;
 IF DELETING
  THEN UPDATE COMPANY_STATS SET NBREMP = NBREMP - 1;
 END IF;
 IF UPDATING AND (N.SALAIRE > 1.1 * O.SALAIRE)
  THEN SIGNAL SQLSTATE '75000'
  SET MESSAGE_TEXT = 'Salaire augmenté de plus de 10%'
 END IF;
END

 

• Structure de la table SYSIXADV suite à ce correctif :

nom de la colonne (zone) nom système Type de donnée Description
TABLE_NAME TBNAME VARCHAR(258) Table sur laquelle l'index est suggéré
TABLE_SCHEMA DBNAME CHAR(128) Schéma de la table
SYSTEM_TABLE_NAME SYS_TNAME CHAR(10) nom système (court) de la table
PARTITION_NAME TBMEMBER CHAR(10) Partition
KEY_COLUMNS_ADVISED KEYSADV VARCHAR(16000) nom des clés suggérées
LEADING_COLUMN_KEYS LEADKEYS VARCHAR(16000) clé principale, dont le critère de tri (croissant/décroissant) n'importe pas.
INDEX_TYPE INDEX_TYPE CHAR(14) type d'index (normal ou EVI)
LAST_ADVISED LASTADV TIMESTAMP date/heure de suggestion
TIMES_ADVISED TIMESADV BIGINT nombre de fois la suggestion a été faite
ESTIMATED_CREATION_TIME ESTTIME INT nombre de secondes(estimées) pour la création
REASON_ADVISED REASON CHAR(2) Code raison (Sélection / tri ou groupage / les deux)
LOGICAL_PAGE_SIZE PAGESIZE INT taille des pages recommandée
MOST_EXPENSIVE_QUERY QUERYCOST INT temps d'exécution le plus long
AVERAGE_QUERY_ESTIMATE QUERYEST INT temps d'exécution moyen
TABLE_SIZE TABLE_SIZE BIGINT nombre de lignes dans la table (lors de la suggestion)
NLSS_TABLE_NAME NLSSNAME CHAR(10) Séquence de tri à utiliser
NLSS_TABLE_SCHEMA NLSSDBNAME CHAR(10) Bibliothèque de la séquence de tri
MTI_USED MTIUSED BIGINT Nombre de fois ou cet MTI a été utilisé
(le système n'utilise plus un MTI, dès qu'un index permanent existe)
MTI_CREATED MTICREATED INT Nombre de fois ou cet MTI a été créé
(rappel un index MTI disparaît à l'IPL)
LAST_MTI_USED LASTMTIUSE TIMESTAMP Date/heure de dernière utilisation de cet index MTI.
AVERAGE_QUERY_ESTIMATE _MICRO QRYMICRO BIGINT temps moyen d'exécution de la requête à l'origine de cette suggestion
EVI_DISTINCT_VALUES EVIVALS INTEGER Nombre de valeurs distinctes pour création index EVI
INCLUDE_COLUMNS INCLCOL CLOB(10000) INCLUDE pour création index EVI
FIRST_ADVISED FIRSTADV TIMESTAMP Première suggestion
SYSTEM_TABLE_SCHEMA SYS_DNAME CHAR(10) Nom système de la bibliothèque
MTI_USED_FOR_STATS + MTISTATS BIGINT Nbr de fois, Index MTI utilisé pour des statistiques
LAST_MTI_USED_FOR_STATS * LASTMTISTA TIMESTAMP dernière utilisation Index MTI pour des statistiques
DEPENDENT_ADVICE_COUNT ** DEPCNT CHAR(10) Nombre de dépendances d'index (traitement de OR)

* SF99701, level 14 : les index MTI peuvent être utilisés pour collecter des performances

** SF99701, level 23 : les index proposés sont liés et utilisables par la même requête contenant des OR
si cette zone est différente de 0.

Exemple :

select * from vins
       where vin_cepage1 = 'Cabernet'
          or vin_cepage2 = 'Cabernet'
          or vin_cepage3 = 'Cabernet'

Contenu de SYSIXADV

INDEX_TYPE DEPENDENT_ADVICE_COUNT KEY_COLUMNS_ADVISED
----------- --------------------- -------------------
RADIX 1 VIN_CEPAGE1
RADIX 1 VIN_CEPAGE3
RADIX 1 VIN_CEPAGE2

                      

Enfin la PTF SF99701, level 23 apporte de nouvelles fonctions orientées web services

  • httpGetBlob
    httpGetClob
    httpPutBlob
    httpPutClob
    httpPostBlob
    httpPostClob
    httpDeleteBlob
    httpDeleteClob
    httpBlob
    httpClob
    httpHead
     
  • UrlEncode
    UrlDecode
    base64Encode
    base64Decode

le but de ces fonctions est de consommer des services web plutôt orientés RESTful


Regardons à travers des exemples

Values SYSTOOLS.HTTPGETCLOB('http://www.volubis.fr' ,'') ;
                      


Récupère dans une variable le contenu de notre page d'accueil


Le premier paramètre est de type VARCHAR(2048) et représente une URL

Le deuxième paramètre est de type CLOB(10K) et représente l'entête http

  • vide ( '' ) , aucune entête n'est transmise
  • une chaîne représentant l'entête HTTP, sous la forme
    <httpHeader [options]>
       <header name="entete" value="valeur" />
    </httpHeader>

    options possibles
    • ConnectionTimeout = millisecondes
    • readTimeout = millisecondes
    • followRedirects = true|false (suivre les redirections en cas de status 3xx)
    • useCaches = true|false (utiliser le cache, voir paramètres de la JVM)

  • Voir les entêtes possible http://en.wikipedia.org/wiki/List_of_HTTP_header_fields


La valeur retour est la réponse fournie par le serveur (ce que vous aurait affiché votre navigateur)


Si le site retourne du XML, l'utilisation de la fonction XMLTABLE permettra de ne recevoir que les données utiles

Ici, le site www.redbooks.ibm.com propose des flux RSS donnant les publications récentes


le code

SELECT *
 FROM XMLTABLE('$result/rss/channel/item' 
 PASSING XMLPARSE(
  DOCUMENT 
     SYSTOOLS.HTTPGETBLOB('http://www.redbooks.ibm.com/rss/iseries.xml','')
  ) as "result"
 COLUMNS 
  title VARCHAR(128) PATH 'title',
  description VARCHAR(1024) PATH 'description',
  link VARCHAR(255) PATH 'link',
  pubDate VARCHAR(20) PATH 'substring(pubDate, 1, 16)'
 ) AS RESULT; 
                      

permet de lire les données de manière structurée :


Ce code permet de lire le fichier cours.xml , s'il est disponible via HTTP

SELECT cours, texte, motcle1,  monthname(modif) concat '-' concat year(modif)
 FROM XMLTABLE('$result/AF400/COURS' 
  PASSING XMLPARSE( 
  DOCUMENT 
   SYSTOOLS.HTTPGETBLOB('http://as400.volubis.intra/af4dir/courshtm/XML/cours.xml','')
 ) as "result"
 COLUMNS 
  cours CHAR(10) PATH 'AF4MBR',
  texte CHAR(50) PATH 'AF4TXT',
  motcle1 VARCHAR(20) PATH 'MOTCL1',
  MODIF DATE PATH 'DATOUT'
 ) AS TABLEXML;  

Ce code permet de le lire via HTTP, la page étant protégée par un mot de passe

-- LECTURE fichier XML via INTERNET avec authentification
SELECT cours, texte, motcle1, monthname(modif) concat '-' concat year(modif)
FROM XMLTABLE('$result/AF400/COURS'
PASSING XMLPARSE(
DOCUMENT
SYSTOOLS.HTTPGETBLOB('http://af400:motdepasse@as400.volubis.fr/af4dir/courshtm/XML/cours.xml','')
) as "result"
COLUMNS
cours CHAR(10) PATH 'AF4MBR',
texte CHAR(50) PATH 'AF4TXT',
motcle1 VARCHAR(20) PATH 'MOTCL1',
MODIF DATE PATH 'DATOUT'
) AS TABLEXML;

Vous pouvez aussi passer l'authentification dans les entêtes :

  • Profil et mot de passe séparés par ":" (comme dans notre exemple) en UTF-8
  • puis encodé en Base64 (voir la fonction base64ENCODE)
  • enfin précédé du mot "basic"
<header name="Authorization" value="Basic bmljazpwYXNzdzByZA=="/>

Appel d'un Web services, utilisation du deuxième paramètre permettant de fournir les entêtes http
(ici, nous demandons la valeur de l'action IBM à aujourd'hui dans une enveloppe SOAP)

-- Appel d'un web service , récupération de l'enveloppe SOAP réponse dans une variable
VALUES SYSTOOLS.HTTPPOSTCLOB('http://www.webservicex.net//stockquote.asmx',
CAST ('<httpHeader>
<header name="Content-Type" value="text/xml;charset=utf-8"/>
<header name="SOAPAction" value="&quot;http://www.webserviceX.NET/GetQuote&quot;"/>
</httpHeader>' AS CLOB(1K)),
CAST('<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<GetQuote xmlns="http://www.webserviceX.NET/">
<symbol>IBM</symbol>
</GetQuote>
</soap:Body>
</soap:Envelope>' AS CLOB(10K)) ) ;
-- Appel d'un web service , récupération de l'enveloppe SOAP, "parsée"
-- il y a des espaces de nommage (xmlns) SOAP et d'autres propres au web service, d'où -> *:
-- les données extraites sont elles mêmes au format XML (on voit que l'action est à 210 $ 55 ) SELECT* FROM XMLTABLE('$result/*:Envelope/*:Body/*:GetQuoteResponse' PASSING XMLPARSE( DOCUMENT SYSTOOLS.HTTPPOSTCLOB('http://www.webservicex.net//stockquote.asmx', CAST ('<httpHeader> <header name="Content-Type" value="text/xml;charset=utf-8"/> <header name="SOAPAction" value="&quot;http://www.webserviceX.NET/GetQuote&quot;"/> </httpHeader>' AS CLOB(1K)), CAST('<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> <soap:Body> <GetQuote xmlns="http://www.webserviceX.NET/"> <symbol>IBM</symbol> </GetQuote> </soap:Body> </soap:Envelope>' AS CLOB(10K)) ) ) as "result" COLUMNS resultat VARCHAR(2000) PATH '*:GetQuoteResult' ) AS TABLEXML;
-- Appel d'un web service , récupération de l'enveloppe SOAP, "parsée" pour lire le montant de l'action
-- puis découpage du XML extrait à nouveau par la fonction XMLTABLE
WITH temp as (SELECT resultat
     FROM XMLTABLE('$result/*:Envelope/*:Body/*:GetQuoteResponse'
     PASSING XMLPARSE(
     DOCUMENT 
     SYSTOOLS.HTTPPOSTCLOB('http://www.webservicex.net//stockquote.asmx',
     CAST ('<httpHeader>
           <header name="Content-Type" value="text/xml;charset=utf-8"/>
           <header name="SOAPAction" value="&quot;http://www.webserviceX.NET/GetQuote&quot;"/>
           </httpHeader>' AS CLOB(1K)),
     CAST('<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
            <soap:Body>
              <GetQuote xmlns="http://www.webserviceX.NET/">
               <symbol>IBM</symbol> 
              </GetQuote>
            </soap:Body>
           </soap:Envelope>' AS CLOB(10K))  ) 
     ) as "result"
     COLUMNS 
      resultat  VARCHAR(2000) PATH '*:GetQuoteResult'
     ) AS TABLEXML
   )
select * from temp, 
     XMLTABLE ('$c/StockQuotes/Stock' passing XMLPARSE(DOCUMENT RESULTAT) as "c"
     COLUMNS 
     symbol     CHAR(30)    PATH 'Symbol',
     prix 	dec(11, 2 )    PATH 'Last' 
) AS X ;



Les mails GMAIL sont accessibles depuis un navigateur (c'est même un peu le principe de base)
Mais aussi en web service REST :
-- lecture de mes mails chez google, penser à changer le mot de passe -;)
SELECT *
     FROM XMLTABLE('$result/*[local-name()=''feed'']/*[local-name()=''entry'']' 
             PASSING 
             XMLPARSE(DOCUMENT 
                 systools.HTTPGETBLOB('https://af400Volubis:motdepasse@gmail.google.com/mail/feed/atom/','')) 
              AS "result"
          COLUMNS 
              title VARCHAR(128) PATH '*[local-name()=''title'']',
              summary VARCHAR(1024) PATH '*[local-name()=''summary'']',
              author_name VARCHAR(255) PATH '*[local-name()=''author'']/*[local-name()=''name'']',
              author_email VARCHAR(255) PATH '*[local-name()=''author'']/*[local-name()=''email'']'
     ) AS RESULT;


-> Remarquez la fonction XPATH [local-name()= ] permettant de recherche un élément quelque soit sa localisation dans l'arborescence

 

  • URLENCODE permet de coder une chaîne au format compatible URL
    (le deuxième caractère, optionnel est un code page)
  • URLDECODE fait le contraire

  • base64ENCODE encode une donnée en base 64
  • bien sûr base64DECODE fait le contraire


  • Les fonction HTTP ont leur équivalent en mode VERBOSE, ce sont alors des fonctions table, retournant :
    1. le message (comme la fonction simple)
    2. l'entête


httpGetBlobVerbose
httpGetClobVerbose
httpPutBlobVerbose
httpPutClobVerbose
httpPostBlobVerbose
httpPostClobVerbose
httpDeleteBlobVerbose
httpDeleteClobVerbose
httpBlobVerbose
httpClobVerbose
httpHeadVerbose

                        


Vous pouvez mettre des options à java, en créant un fichier d'options

-Xmx Mémoire pour java (par exemple -Xmx2g -> 2 Go)
http.proxyHost Coordonnées du Proxy
http.proxyPort port du proxy (80 par défaut)
http.proxyUser Utilisateur pour proxy
http.proxyPassword Mot de passe pour proxy
http.nonProxyHosts Liste des serveurs pour lesquels ne pas utiliser le proxy
javax.net.ssl.trustStore emplacement du fichier contenant la liste des certificats des sites de confiance
javax.net.ssl.trustStorePassword mot de passe pour ouvrir le fichier trustStore
javax.net.ssl.keyStore emplacement du fichier contenant la liste des certificats et des clés privées (keystore)
javax.net.ssl.keyStorePassword mot de passe pour ouvrir le fichier keyStore



Le fichier de propriétés java peut être indiqué comme suit

  1. en créant une variable d'environnement indiquant sa localisation
    ADDENVVAR ENVVAR(QIBM_JAVA_PROPERTIES_FILE)
    VALUE(/QIBM/userdata/java400/mySystem.properties)
  2. en créant un fichier SystemDefault.properties dans la home directory de l'utilisateur
  3. en créant un fichier SystemDefault.properties dans /QIBM/userdata/java400/


 Attention

Toutes ces fonctions sont livrées dans SYSTOOLS, donc "as is' et ne peuvent faire l'objet d'une demande de support

 

 

XMLSERVICE

  • Un web-service : c'est un logiciel qui interagis avec d'autres au moyen de protocoles universels (http, xml...)

    • Il existe deux types de services WEB

Les services dits WS, utilisant de nouveaux protocoles :

    Il existe deux formes de services-web WS : SOAP et XML-RPC. SOAP est orienté objet et gère les états tandis que XML-RPC est procédural et sans gestion des états.

    Les services web présentent les 2 caractéristiques suivantes :

    enregistrement facultatif auprès d'un service de recherche (UDDI)

    interface publique avec laquelle le client invoque le service (WSDL)

    UDDI : Universal Desciption, Discovery and Integration peut être vu comme les pages blanches (ou jaunes) des services-web. C'est un annuaire permettant à des fournisseurs de présenter leurs services à des 'clients'.

    WSDL : Web Service Description Language est un langage reposant sur XML dont on se sert pour décrire les services-web. Il est indispensable à UDDI pour permettre aux clients de trouver les méthodes leur permettant d'invoquer les services web. Beaucoup d'outils comme JBuilder, Delphi ou Office se servent de WSDL pour découvrir et générer les mécanismes d'invocation des services-web.

    SOAP : Simple Object Access Protocol est un protocole basé sur XML et qui définit les mécanismes d'échanges d'information entre les clients et les fournisseurs de service-web. Les messages SOAP sont susceptibles d'être transportés en HTTP, SMTP, FTP...(souvent HTTP)

    XML-RPC : protocole RPC (Remote Procedure Call) basé sur XML. Permet donc l'invocation de procédure distante sur internet.


       

     

     

Les services REST, utilisant uniquement des méthodes standard du WWW

  • Accès par URI (comme une URL)
  • HTTP comme méthode d'appel (GET, POST , PUT et DELETE)
  • Retour de la donnée dans un format normalisé comme HTML, XML, ...
  • il sont dit stateless, c'est à dire qu'ils fonctionnent comme le web classique, ils ne se souviennent de rien, tout paramètre doit être retransmis.

    Exemple d'implémentation de services RESTful : projet XMLSERVICE


    Ce projet qui était à l'origine en Opensource a été intégré à l'IBM i en V7 / TR5 par le biais de la bibliothèque QXMLSERV

    Modification de la configuration Apache

    ScriptAlias /cgi-bin/ /QSYS.LIB/QXMLSERV.LIB/ 
    <Directory /QSYS.LIB/QXMLSERV.LIB/> 
     AllowOverride None 
     order allow,deny 
     allow from all 
     SetHandler cgi-script 
     Options +ExecCGI 
    </Directory> 
                                  

    L'API s'utilise de la manière suivante

    • db2 : nom de la base de donnée (*LOCAL pour travailler sur la même machine)
    • uid  : profil de connexion
    • pwd : mot de passe
    • ipc   : répertoire dans lequel placer les informations de session
    • ctl   : Action
      • *SBMJOB -> soumettre l'action (mode de fonctionnement "normal")
      • *IMMED -> arrêt immédiat du service
      • *DEBUG -> message dans QSYSOPR
      • ... Voir la liste complète
    • xmlin : document xml transmis (requête)
      <?xml version='1.0' ?>
      <script>
      <keyword>voir les paramètres possibles</keyword>
      </script>
    • xmlout : document réponse

    Les mot-clés transmis peuvent être

    <cmd>...commande 5250...</cmd>

    <cmd>...commande PASE...</cmd>

    <pgm name='PGM' lib='BIB' func='Fonction'>
    <parm><data type='12P2'>...paramètre simple...</data></parm>
    <parm><ds dim='xx'><data type='200A'>...paramètre complexe...</data></ds></parm>
    <return><ds dim='xx'><data type='32A'>...paramètre retour...</data></ds></return>
    </pgm>
    <sql>
    <query>select * from vins</query>
    <fetch block='all|un chiffre' desc='on|off'/>
    </sql>


    Utilisation

    Lancement d'un commande

    Résultat

     

    Lancement d'une commande PASE

    Résultat

    Lancement d'un ordre SQL

    Résultat

    Les nouvelles fonctions, HTTPPOSTCLOB , HTTPPOSTCLOBVerbose permetterons de les utiliser en SQL


 

Système Optique

 

Pour les DVD, Seuls les formats DVD-RAM (4,7 G ou 9,4/double face) peuvent être des supports de sauvegarde à la volée

La doc leur donne ces caractéristiques


o Prise en charge d'opérations multiples de lecture et d'écriture.

o Réutilisation de l'espace correspondant aux fichiers supprimés lors de la création de nouveaux fichiers ou de
l'extension d'un fichier existant.

o Conservation des données préalablement sauvegardées lors de la réinitialisation du support, sauf demande explicite.

En effet Le DVD-RAM est un disque réinscriptible, il peut supporter jusqu'à 100.000 cycles d'écriture / réécriture.

A titre d'informations et de comparaisons, les DVD-RW et DVD+RW supportent eux 1.000 cycles d'écriture / réécriture.


Pour les DVD-ROM(RW) , il faudra donc passer par la commande DUPOPT (comme vu à la Pause-Café 61)

Comment s'en servir ?

Vous Devez passer par une unité optique virtuelle

CRTDEVOPT  DEVD(OPTVRT01) RSRCNAME(*VRT)   

pensez à mettre l'unité VARY ON par wrkcfgsts *dev optvrt01

Ensuite, créez un catalogue d'images

CRTIMGCLG  IMGCLG(OPTVIR) DIR('/optvir') CRTDIR(*YES)
ADDIMGCLGE IMGCLG(OPTVIR) FROMFILE(*NEW) TOFILE(nom-de-fichier) IMGSIZ(*DVD4700)
LODIMGCLG IMGCLG(OPTVIR) DEV(OPTVRT01) VFYIMGCLG IMGCLG(OPTVIR) TYPE(*OTHER) SORT(*NO)

Sauvegardez sur ce catalogue

INZOPT     NEWVOL(VOLUMENAME) DEV(OPTVRT01) TEXT('volume pour xxx')
SAV DEV('/qsys.lib/optvrt01.devd') OBJ(('/xxx/*' *INCLUDE)) /* par exemple */
 

Enfin, dupliquez vers le volume physique (c'est la seule action possible)

DUPOPT     FROMVOL(*MOUNTED) TOVOL(*MOUNTED) NEWVOL(*FROMVOL)
FROMDEV(OPTVRT01) TODEV(OPT01) TOENDOPT(*UNLOAD)


Avec un DVD-RAM une fois l'initialisation faite (format UDF)
   (Pour les DVD-RAM double face, il faut initialiser chaque face)

Après l'insertion d'un DVD-RAM vierge de marque Verbatim

Option 10 : Initialiser

==>



L'option 4, permet d'éjecter le DVD

 

Nous pouvons utiliser les commandes de sauvegarde :

• SAVLIB LIB(FORMATION) DEV(OPT01)

Mais nous pouvons aussi faire des copies :

• MKDIR DIR('/QOPT/DVDRAM47/Volubis')
• CPY OBJ('/volubis/*') TODIR('/QOPT/DVDRAM47/Volubis') SUBTREE(*ALL)

Attention les temps de réponses sont assez longs (1h30 pour 1580 objets et un volume de 380 Mo, notre DVD-RAM est en 3X seulement)

 

La PTF Technology Refresh 6 permet d'utiliser les clés USB jusqu'à 32 Go, qui vont apparaitre sous l'unité RMS01(créé automatiquement)


  Cette fonction n'est proposée que sur un Power 7 (ou 7+) et n'est pas compatible avec VIOS à ce jour.



L'unité est de type 63BC (elle est partagée entre partitions "hostées", tout comme le lecteur DVD)

 

Vous devez voir alloué à cette partition le contrôleur USB



Qui, si nous regardons le détail, correspond aux trois ports UBS (2 à l'arrière, 1 en facade)



Si nous insérons une deuxième clé USB à l'arrière de notre 720

 

La clé apparaît aussi via WRKLNK dans /QOPT (elles font parties du système optique de l'IBM i)



elles doivent être formatées au format UDF (reconnu par Windows Seven)

elles doivent être enlevées logiquement, avant d'être enlevées physiquement

  • (RMVOPTVOL -> WRKOPTVOL/option 4)
  • ou bien VRYCFG STATUS(*OFF)

Une clé USB accepte tout type de sauvegarde même un SAVSYS et peut être la source d'un IPL/D



passons l'option 3 pour vérifier :

 

 


Copyright © 1995,2013 VOLUBIS