DB2 LUW のパーティション テーブルに対するサポート

Enterprise Developer 2.3 Update 2 から、Micro Focus MBDT DSNUTILB では、単一パーティションの範囲内でのパーティション テーブルとの間におけるデータ移動について、DB2 LUW のサポートされているすべての IBM バージョンの DB2 LUW テーブル パーティション機能をサポートしています。

LOAD も、UNLOAD も、1 つの JCL ジョブ内でのパーティション テーブルの複数パーティションとの間における並列データ移動はサポートしていません。

パーティション テーブルの単一パーティションにデータをロードするには、JCL の制御文で PART n オプションを指定します。次に例を示します。

//DB2LDPAR JOB
//DSNUTILB EXEC PGM=TSTUTILB,PARM='DB2C,SH      '
//*
//SYSPRINT DD   SYSOUT=*
//UTPRINT  DD   SYSOUT=*
//SYSUDUMP DD   SYSOUT=*
//STPRIN01 DD   SYSOUT=*
//IDIOFF   DD   DUMMY
//*
//SYSUT1   DD   DISP=MOD,DSN=SH.DSNUTILB.SYSUT1
//SORTOUT  DD   DISP=MOD,DSN=SH.DSNUTILB.SYSOUT
//SYSMAP   DD   DISP=MOD,DSN=SH.DSNUTILB.SYSMAP
//SYSERR   DD   DISP=MOD,DSN=SH.DSNUTILB.SYSERR
//SYSREC   DD   DISP=SHR,DSN=MCSDB2.UNLOAD.ULDB2EMP
//SYSIN    DD   *
LOAD DATA INDDN(SYSREC) ASCII                                  
 INTO TABLE TEST.EMPLOYEE PART 1 REPLACE                                                    
 WHEN(00001:00002) = X'0001'                                                     
 ( "EMPNO"                                                                       
        POSITION(  00003:00008) CHAR(00006)                                      
 , "FIRSTNME"                                                                    
        POSITION(  00009:00022) VARCHAR                                          
 , "MIDINIT"                                                                     
        POSITION(  00024:00024) CHAR(00001)                                      
                          NULLIF(00023)=X'FF'                                    
 , "LASTNAME"                                                                    
        POSITION(  00025:00041) VARCHAR                                          
 , "WORKDEPT"                                                                    
        POSITION(  00043:00045) CHAR(00003)                                      
                          NULLIF(00042)=X'FF'                                    
 , "PHONENO"                                                                     
        POSITION(  00047:00050) CHAR(00004)                                      
                          NULLIF(00046)=X'FF'                                    
 , "HIREDATE"                                                                    
        POSITION(  00052:00061) DATE EXTERNAL                                    
                          NULLIF(00051)=X'FF'                                    
 , "JOB"                                                                         
        POSITION(  00063:00070) CHAR(00008)                                      
                          NULLIF(00062)=X'FF'                                    
 , "EDLEVEL"                                                                     
        POSITION(  00071:00072) SMALLINT                                         
 , "SEX"                                                                         
        POSITION(  00074:00074) CHAR(00001)                                      
                          NULLIF(00073)=X'FF'                                    
 , "BIRTHDATE"                                                                   
        POSITION(  00076:00085) DATE EXTERNAL                                    
                          NULLIF(00075)=X'FF'                                    
 , "SALARY"                                                                      
        POSITION(  00087:00091) DECIMAL                                          
                          NULLIF(00086)=X'FF'                                    
 , "BONUS"                                                                       
        POSITION(  00093:00097) DECIMAL                                          
                          NULLIF(00092)=X'FF'                                    
 , "COMM"                                                                        
        POSITION(  00099:00103) DECIMAL                                          
                          NULLIF(00098)=X'FF'                                    
 )                  
/*
//

JCL の構文およびパーティション番号は、メインフレームの DB2 規則に従います。パーティション番号は 1 を基準としますが、DB2 LUW での番号は 0 を基準とします。MBDT DSNUTILB では、この 2 つの規則を内部的に変換します。実行された JCL ジョブは、DB2 LUW のパーティション 0 にデータ セットをロードします。

パーティション テーブルの単一パーティションからデータをアンロードするには、次の 2 つの形式で JCL の制御文で PART n オプションを指定します。

UNLOAD TABLESPACE tabespacename PART n FROM TABLE
tablename

および:

UNLOAD TABLESPACE tabespacename PART n

次に例を示します。

//ULDB2PAR JOB CLASS=A,MSGCLASS=X,NOTIFY=&SYSUID,REGION=0M
/*JOBPARM  SYSAFF=ANY
//DELETE  EXEC PGM=IDCAMS
//SYSPRINT DD SYSOUT=*
//SYSIN    DD *
  DELETE MCSDB2.UNLOAD.ULDB2PAR
  SET    MAXCC=0
//*------------------------------------------------------------------
//*       EXECUTE DSNUPROC 
//*------------------------------------------------------------------
//DSNUTILB EXEC PGM=TSTUTILB,PARM='DB2C,ULDB2PAR’
//SYSUT1   DD UNIT=SYSDA,SPACE=(CYL,(10,10))
//SORTOUT  DD UNIT=SYSDA,SPACE=(CYL,(10,10))
//SYSPRINT DD SYSOUT=*
//UTPRINT  DD SYSOUT=*
//SYSPUNCH DD SYSOUT=*
//SYSREC   DD DSN=MCSDB2.UNLOAD.ULDB2PAR,DISP=(MOD,CATLG),
//            UNIT=SYSDA,SPACE=(CYL,(1,1))
//SYSIN    DD *
   UNLOAD TABLESPACE PARTSPACE1 PART 1
   FROM TABLE XINYUC.EMPLOYEE2 
/*                                                                      
//

繰り返しになりますが、パーティション番号の規則はメインフレームの DB2 規則に従います。JCL では PART 1 を指定しますが、DB2 LUW での実際のパーティション番号は 0 になります。JCL で指定されたパンチ カードが実行後に生成されます。アンロード データ セット MCSDB2.UNLOAD.ULDB2PAR は、DSNUTILB によって自動的にカタログ化されます。デフォルトのコード セットは ASCII であり、必要に応じて EBCDIC に変更できます。