SPOOL
본 장에서는 SPOOL 데이터 셋과 SPOOL 백업방법에 대해 기술한다.
1. 개요
SPOOL은 JOB 수행에 필요한 입력 및 JOB 수행으로 생성된 결과물인 SPOOL 데이터셋을 담고 있는 볼륨을 지칭하거나 또는 SPOOL 데이터셋을 사용하는 오퍼레이션을 뜻한다.
JCL이 submit되면, TJES에서는 JOB에 유일한 JOBID를 부여하고 JOBQ에 등록한다. 이 때 부여된 JOBID 이름으로 SPOOL 볼륨에 SPOOL 공간이 할당된다. 그리고 INPJCL이라는 SPOOL 데이터셋이 생성된 후 JCL을 INPJCL에 복사한다. 이후의 JOB 수행에서는 INPJCL이 입력으로 사용된다.
tjclrun은 JOBID로 생성된 SPOOL 공간에 JESMSG, JESJCL, SYSMSG, CATPROC라는 이름의 SPOOL 데이터셋들과 JCL에 기술된 SYSOUT DD에 대한 SPOOL 데이터셋을 생성하고 JOB 수행에 사용한다.
생성된 SPOOL 데이터셋은 tjesmgr 명령어 또는 OpenFrame Manager를 통해서 내용을 확인할 수 있다.
2. SPOOL 데이터셋
SPOOL 데이터셋은 JOB이 수행될 때 기본적으로 생성되는 데이터셋(INPJCL, SYSMSG, CATPROC, CONVJCL, JESMSG, JESJCL)과 JCL에 SYSOUT으로 기술되어 생성되는 데이터셋이 있다.
다음은 데이터셋 TEST.DATASET1의 내용을 데이터셋 TEST.DATASET2, TEST.DATASET3으로 복사한 후 TEST.DATASET1을 삭제하는 JCL의 예이다.
<TESTPROC JCL>
//TESTPROC JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1) //STEP01 EXEC IBGPROC //PS010.SYSUT1 DD DSN=TEST.DATASET1,DISP=(SHR,KEEP) //PS010.SYSUT2 DD DSN=TEST.DATASET2,DISP=(NEW,CATLG), // DCB=(RECFM=FB,LRECL=10,BLKSIZE=100) //STEP02 EXEC IBGPROC //PS010.SYSUT1 DD DSN=TEST.DATASET1,DISP=(SHR,DELETE) //PS010.SYSUT2 DD DSN=TEST.DATASET3,DISP=(NEW,CATLG), // DCB=(RECFM=FB,LRECL=10,BLKSIZE=100)
이 JCL은 CATALOGED PROCEDURE인 IBGPROC를 사용하는 2개의 STEP으로 되어 있다. IBGPROC의 내용은 다음과 같고 IEBGENER 유틸리티를 수행한다.
<IBGPROC>
//PS010 EXEC PGM=IEBGENER //STEPLIB DD DSN=SYS1.USERLIB,DISP=SHR // DD DSN=SYS1.TEMPLIB,DISP=SHR //SYSPRINT DD SYSOUT=* //SYSUT1 DD DUMMY //SYSUT2 DD DUMMY
JCL TESTPROC을 submit하여 실행하면 다음과 같은 SPOOL 데이터셋이 생성된다.
SPOOL LIST : --------------------------------------------------------------------------- NO STEP DDNAME SIZE DSNAME --------------------------------------------------------------------------- 0 -------- INPJCL 409 INPJCL 1 -------- SYSMSG 5K SYSMSG 2 -------- CATPROC 444 CATPROC 3 -------- CONVJCL 791 CONVJCL 4 -------- JESMSG 1K JESMSG 5 -------- JESJCL 3K JESJCL 6 STEP01/PS010 SYSPRINT 463 oframe.TESTPROC.JOB00040.D000004 7 STEP02/PS010 SYSPRINT 463 oframe.TESTPROC.JOB00040.D000009 -----------------------------------------------------------------------------
2.1. 기본 데이터셋
본 절에서는 SPOOL LIST의 SPOOL 데이터셋 내용은 다음과 같다.
INPJCL
submit된 JCL이 복사되어 있다. 이후의 JOB 실행에서는 INPJCL의 내용을 사용한다.
//TESTPROC JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1) //STEP01 EXEC IBGPROC //PS010.SYSUT1 DD DSN=TEST.DATASET1,DISP=(SHR,KEEP) //PS010.SYSUT2 DD DSN=TEST.DATASET2,DISP=(NEW,CATLG), // DCB=(RECFM=FB,LRECL=10,BLKSIZE=100) //STEP02 EXEC IBGPROC //PS010.SYSUT1 DD DSN=TEST.DATASET1,DISP=(SHR,DELETE) //PS010.SYSUT2 DD DSN=TEST.DATASET3,DISP=(NEW,CATLG), // DCB=(RECFM=FB,LRECL=10,BLKSIZE=100)
SYSMSG
JOB이 실행되는 동안 tjclrun이 생성한 메시지를 저장한다.
------------------------------------------------------------------------------ ** Cataloged Procedure IBGPROC in SYS1.PROCLIB SCAN start ** ------------------------------------------------------------------------------ ------------------------------------------------------------------------------ ** Cataloged Procedure IBGPROC in SYS1.PROCLIB SCAN start ** ------------------------------------------------------------------------------ JOBID=JOB00040 JOBPOS=0 RUNPID=2454 TESTPROC JOB ============================================================================== --------------------------- STEP01 EXEC PROC step ---------------------------- (JRN0210I) Start parsing Cataloged Procedure ... ---------------------------- PS010 EXEC PGM step ----------------------------- (JRN0320I) SYSUT1 DD ALLOC - DSNAME=TEST.DATASET1 (JRN0320I) SYSUT2 DD ALLOC - DSNAME=TEST.DATASET2 (JRN0320I) STEPLIB DD ALLOC - DSNAME=SYS1.USERLIB (JRN0320I) CONCATED DD ALLOC - DSNAME=SYS1.TEMPLIB (JRN0321I) SYSPRINT DD ALLOC - DSNAME=JOB00040(oframe.TESTPROC.JOB00040.D000004) --------------------------- STEP02 EXEC PROC step ---------------------------- (JRN0210I) Start parsing Cataloged Procedure ... ---------------------------- PS010 EXEC PGM step ----------------------------- (JRN0320I) SYSUT1 DD ALLOC - DSNAME=TEST.DATASET1 (JRN0320I) SYSUT2 DD ALLOC - DSNAME=TEST.DATASET3 (JRN0320I) STEPLIB DD ALLOC - DSNAME=SYS1.USERLIB (JRN0320I) CONCATED DD ALLOC - DSNAME=SYS1.TEMPLIB (JRN0321I) SYSPRINT DD ALLOC - DSNAME=JOB00040(oframe.TESTPROC.JOB00040.D000009) (JRN0210I) Start parsing Cataloged Procedure ... (JRN0210I) Start parsing Cataloged Procedure ... ============================================================================== --------------------------- STEP01 EXEC PROC step ---------------------------- (JRN0210I) Start parsing Cataloged Procedure ... ---------------------------- PS010 EXEC PGM step ----------------------------- EXEC PGM=IEBGENER (JRN0129I) TACF CHECK UTILITY PROGRAM AUTH OK (JRN0320I) SYSUT1 DD ALLOC - DSNAME=TEST.DATASET1 (JRN0320I) SYSUT2 DD ALLOC - DSNAME=TEST.DATASET2 (JRN0320I) STEPLIB DD ALLOC - DSNAME=SYS1.USERLIB (JRN0320I) CONCATED DD ALLOC - DSNAME=SYS1.TEMPLIB (JRN0321I) SYSPRINT DD ALLOC - DSNAME=JOB00040(oframe.TESTPROC.JOB00040.D000004) (JRN0044I) dsalc_report_start OK (JRN0240I) SYSPRINT DD in STEP01/PS010 open (JRN0335I) SYSUT1 DD in STEP01/PS010 exported (JRN0335I) SYSUT2 DD in STEP01/PS010 exported (JRN0335I) STEPLIB DD in STEP01/PS010 exported (JRN0335I) SYSPRINT DD in STEP01/PS010 exported (JRN0056I) coprocess child: argv[0]=IEBGENER (JRN0058I) pgm pid=2460 (JRN0060I) Entering exec_pipe_loop() ... (JRN0301I) SYSIN DD to PGM done (JRN0245I) PGM closed stdout pipe (JRN0061I) Leaving exec_pipe_loop() ... (JRN0063I) pipe work done with coprocess child (PGM) (JRN0080I) PGM pid[2460] EXITED (JRN0065I) PS010 EXEC PGM step done with RC=0 (JRN0073I) dsalc_report_info OK (JRN0069I) step res usage: real[ 0.47] user[ 0.05] system[ 0.03] cuser[ 0.01] csystem[ 0.01] (JRN0070I) res usage: cpu_time[ 0.10] proc_time=[ 0.47] (JRN0345I) SYSUT1 DD DISPOSE COND=NORMAL (JRN0345I) SYSUT2 DD DISPOSE COND=NORMAL (JRN0345I) STEPLIB DD DISPOSE COND=NORMAL (JRN0345I) CONCATED DD DISPOSE COND=NORMAL (JRN0345I) SYSPRINT DD DISPOSE COND=NORMAL --------------------------- STEP02 EXEC PROC step ---------------------------- (JRN0210I) Start parsing Cataloged Procedure ... ---------------------------- PS010 EXEC PGM step ----------------------------- EXEC PGM=IEBGENER (JRN0129I) TACF CHECK UTILITY PROGRAM AUTH OK (JRN0320I) SYSUT1 DD ALLOC - DSNAME=TEST.DATASET1 (JRN0320I) SYSUT2 DD ALLOC - DSNAME=TEST.DATASET3 (JRN0320I) STEPLIB DD ALLOC - DSNAME=SYS1.USERLIB (JRN0320I) CONCATED DD ALLOC - DSNAME=SYS1.TEMPLIB (JRN0321I) SYSPRINT DD ALLOC - DSNAME=JOB00040(oframe.TESTPROC.JOB00040.D000009) (JRN0044I) dsalc_report_start OK (JRN0240I) SYSPRINT DD in STEP02/PS010 open (JRN0335I) SYSUT1 DD in STEP02/PS010 exported (JRN0335I) SYSUT2 DD in STEP02/PS010 exported (JRN0335I) STEPLIB DD in STEP02/PS010 exported (JRN0335I) SYSPRINT DD in STEP02/PS010 exported (JRN0056I) coprocess child: argv[0]=IEBGENER (JRN0058I) pgm pid=2467 (JRN0060I) Entering exec_pipe_loop() ... (JRN0301I) SYSIN DD to PGM done (JRN0245I) PGM closed stdout pipe (JRN0061I) Leaving exec_pipe_loop() ... (JRN0063I) pipe work done with coprocess child (PGM) (JRN0080I) PGM pid[2467] EXITED (JRN0065I) PS010 EXEC PGM step done with RC=0 (JRN0073I) dsalc_report_info OK (JRN0069I) step res usage: real[ 0.42] user[ 0.04] system[ 0.02] cuser[ 0.02] csystem[ 0.02] (JRN0070I) res usage: cpu_time[ 0.10] proc_time=[ 0.42] (JRN0345I) SYSUT1 DD DISPOSE COND=NORMAL (JRN0345I) SYSUT2 DD DISPOSE COND=NORMAL (JRN0345I) STEPLIB DD DISPOSE COND=NORMAL (JRN0345I) CONCATED DD DISPOSE COND=NORMAL (JRN0345I) SYSPRINT DD DISPOSE COND=NORMAL --------------------------- DATA SET UNALLOCATION ---------------------------- (JRN0346I) SYSPRINT DD UNALLOC COND=NORMAL (JRN0346I) STEPLIB DD UNALLOC COND=NORMAL (JRN0346I) SYSUT2 DD UNALLOC COND=NORMAL (JRN0346I) SYSUT1 DD UNALLOC COND=NORMAL (JRN0346I) SYSPRINT DD UNALLOC COND=NORMAL (JRN0346I) STEPLIB DD UNALLOC COND=NORMAL (JRN0346I) SYSUT2 DD UNALLOC COND=NORMAL (JRN0346I) SYSUT1 DD UNALLOC COND=NORMAL (JRN0333I) JOB is enqueued for output processing - JOBID=JOB00040, ABEND=0
다음은 SYSMSG에 저장되는 정보 중 step res usage와 res usage에 기록된 스텝이 실행 중 사용한 시스템 자원에 대한 설명이다.
-
step res usage
필드 설명 real
해당 스텝의 실행시간이다. (단위: 초)
user
해당 스텝이 사용자 영역에서 사용한 CPU시간이다. (단위: 초)
system
해당 스텝이 시스템 영역(커널모드)에서 사용한 CPU 시간이다. (단위: 초)
cuser
스텝에서 생성한 child process가 사용자 영역에서 사용한 CPU 시간이다.
(단위: 초)
csystem
스텝에서 생성한 child process가 시스템 영역(커널모드)에서 사용한 CPU 시간이다. (단위: 초)
-
res usage
필드 설명 cpu_time
해당 스텝이 사용한 총 CPU 시간이다. (단위: 초)
proc_time
step res usage의 real과 같으며, 해당 스텝의 총 실행시간이다. (단위: 초)
memory size
-1로 고정한다.
CATPROC
JOB 실행에서 CATALOGED PROCEDURE를 사용할 때 프러시저의 내용을 저장한다.
XX-------- IBGPROC in SYS1.PROCLIB --------XX //PS010 EXEC PGM=IEBGENER //STEPLIB DD DSN=SYS1.USERLIB,DISP=SHR // DD DSN=SYS1.TEMPLIB,DISP=SHR //SYSPRINT DD SYSOUT=* //SYSUT1 DD DUMMY //SYSUT2 DD DUMMY XX-------- IBGPROC in SYS1.PROCLIB --------XX //PS010 EXEC PGM=IEBGENER //STEPLIB DD DSN=SYS1.USERLIB,DISP=SHR // DD DSN=SYS1.TEMPLIB,DISP=SHR //SYSPRINT DD SYSOUT=* //SYSUT1 DD DUMMY //SYSUT2 DD DUMMY
CONVJCL
JOB 실행에서 전개된 PROCEDURE와 파라미터 값을 치환한 내용을 저장한다. CATALOGED PROCEDURE의 경우 'XX’로 출력되며, JCL INSTREAM PROCEDURE의 경우 '++'로 출력된다.
//TESTPROC JOB CLASS=A,MSGCLASS=X,MSGLEVEL=(1,1) //STEP01 EXEC IBGPROC XX$DUMMY$ PROC XXPS010 EXEC PGM=IEBGENER XXSTEPLIB DD DSN=SYS1.USERLIB,DISP=SHR XX DD DSN=SYS1.TEMPLIB,DISP=SHR XXSYSPRINT DD SYSOUT=* //PS010.SYSUT1 DD DSN=TEST.DATASET1,DISP=(SHR,KEEP) X/SYSUT1 DD DUMMY //PS010.SYSUT2 DD DSN=TEST.DATASET2,DISP=(NEW,CATLG), // DCB=(RECFM=FB,LRECL=10,BLKSIZE=100) X/SYSUT2 DD DUMMY //STEP02 EXEC IBGPROC XX$DUMMY$ PROC XXPS010 EXEC PGM=IEBGENER XXSTEPLIB DD DSN=SYS1.USERLIB,DISP=SHR XX DD DSN=SYS1.TEMPLIB,DISP=SHR XXSYSPRINT DD SYSOUT=* //PS010.SYSUT1 DD DSN=TEST.DATASET1,DISP=(SHR,DELETE) X/SYSUT1 DD DUMMY //PS010.SYSUT2 DD DSN=TEST.DATASET3,DISP=(NEW,CATLG), // DCB=(RECFM=FB,LRECL=10,BLKSIZE=100) X/SYSUT2 DD DUMMY
JCL의 실행이 완전히 성공했을 경우에만 CONVJCL에 모든 내용이 출력되며, 중간에 문법 오류가 발생하는 경우에는 CONVJCL이 생성은 되지만 일부 내용만 출력 되거나 아예 출력되지 않을 수도 있다. |
JESMSG
JOB과 관련된 정보와 각각의 STEP에 대한 정보가 저장된다.
---< JOB INFO >----------------------------------------------------------------- JOB ID : JOB00040 JOB NAME : TESTPROC NODENAME : NODE1 JOB CLASS : A , JOB STATUS : D(R00000) , JOB PRTY : 5 , RUNNER INDEX : 8 JOB USER : ROOT JCL PATH : /home/oframe/OpenFrame/volume_default/SYS1.JCLLIB/TESTPROC TIME STAMP : SUBM 20200122164142, EXEC 20200122164143, TERM 20200122164145 RES USAGE : CPU - 0s (p:1s) , 0% ---<STEP INFO>------------------------------------------------------------------ STEP : [STEP01/PS010] CPU 0s(p: 0s) SYSUT1 TEST.DATASET1 R:10 W:0 SYSUT2 TEST.DATASET2 R:0 W:10 STEPLIB SYS1.USERLIB R:0 W:0 SYS1.TEMPLIB R:0 W:0 SYSPRINT JOB00040(oframe.TESTPROC.JOB00040.D000004) R:0 W:5 STEP : [STEP02/PS010] CPU 0s(p: 0s) SYSUT1 TEST.DATASET1 R:10 W:0 SYSUT2 TEST.DATASET3 R:0 W:10 STEPLIB SYS1.USERLIB R:0 W:0 SYS1.TEMPLIB R:0 W:0 SYSPRINT JOB00040(oframe.TESTPROC.JOB00040.D000009) R:0 W:5
다음은 JESMSG에 저장되는 JOB 정보와 STEP 정보에 대한 설명이다.
-
JOB 정보
필드 설명 JOB ID
할당된 JOB의 고유번호이다.
JOB NAME
JOB 이름이다.
NODENAME
JOB이 실행된 TJES 노드 이름이다.
JOB CLASS
JOB CLASS이다.
JOB STATUS
JOB의 현재 상태(반환값)이다.
JOB PRTY
실행한 JOB의 JOB 스케줄링 우선순위이다.
RUNNER INDEX
JOB을 실행한 Runner Slot 번호이다.
JOB USER
JOB을 실행한 사용자이다.
JCL PATH
USER가 submit한 JCL 파일의 위치 및 파일이름이다.
TIME STAMP
JOB이 submit된 시각, JOB 실행의 시작 및 종료 시각이다.
RES USAGE
JOB 실행에 사용된 CPU 시간을 나타낸다.
-
CPU
-
0s : tjclrun 및 fork된 자식 프로세스의 CPU 사용량의 합
-
(p:2s) : tjclrun이 fork된 시점부터 종료 시까지의 시간(JOB 수행시간)
-
0% : JOB 수행시간 대비 CPU 사용량
-
-
STEP 정보
필드 설명 STEP
해당 JOBSTEP의 이름이다.
CPU
해당 JOBSTEP 처리에 사용된 CPU 시간(실제 처리시간)이다.
SYSUT1
해당 JOBSTEP에서 발생한 SYSUT1에 대한 I/O 카운트이다.
SYSUT2
해당 JOBSTEP에서 발생한 SYSUT2에 대한 I/O 카운트이다.
STEPLIB
해당 JOBSTEP에서 발생한 STEPLIB에 대한 I/O 카운트이다.
SYSPRINT
해당 JOBSTEP에서 발생한 SYSPRINT에 대한 I/O 카운트이다.
JESJCL
INPJCL에 대하여 JCL 문장의 parse tree가 저장된다.
JOB STREAM=[/home/oframe/OpenFrame/spool/JOB00040/INPJCL], JOBPOS=[0] ======================================================================== /JOB[name=TESTPROC,lineno=1]={ |[key=CLASS]={STR,value=[A]} |[key=MSGCLASS]={STR,value=[X]} |[key=MSGLEVEL]={SUB,value={ | |[pos=1]={STR,value=[1]} | |[pos=2]={STR,value=[1]} |}} |-------- child statements -------- |/EXEC[name=STEP01,lineno=2]={ | |[pos=1]={STR,value=[IBGPROC]} |} |/DD[name=PS010.SYSUT1,lineno=3]={ | |[key=DSN]={STR,value=[TEST.DATASET1]} | |[key=DISP]={SUB,value={ | | |[pos=1]={STR,value=[SHR]} | | |[pos=2]={STR,value=[KEEP]} | |}} |} |/DD[name=PS010.SYSUT2,lineno=4]={ | |[key=DSN]={STR,value=[TEST.DATASET2]} | |[key=DISP]={SUB,value={ | | |[pos=1]={STR,value=[NEW]} | | |[pos=2]={STR,value=[CATLG]} | |}} | |[key=DCB]={SUB,value={ | | |[key=RECFM]={STR,value=[FB]} | | |[key=LRECL]={STR,value=[10]} | | |[key=BLKSIZE]={STR,value=[100]} | |}} |} |/EXEC[name=STEP02,lineno=6]={ | |[pos=1]={STR,value=[IBGPROC]} |} |/DD[name=PS010.SYSUT1,lineno=7]={ | |[key=DSN]={STR,value=[TEST.DATASET1]} | |[key=DISP]={SUB,value={ | | |[pos=1]={STR,value=[SHR]} | | |[pos=2]={STR,value=[DELETE]} | |}} |} |/DD[name=PS010.SYSUT2,lineno=8]={ | |[key=DSN]={STR,value=[TEST.DATASET3]} | |[key=DISP]={SUB,value={ | | |[pos=1]={STR,value=[NEW]} | | |[pos=2]={STR,value=[CATLG]} | |}} | |[key=DCB]={SUB,value={ | | |[key=RECFM]={STR,value=[FB]} | | |[key=LRECL]={STR,value=[10]} | | |[key=BLKSIZE]={STR,value=[100]} | |}} |} } ======================================================================== CATALOGED PROCEDURE=[IBGPROC] ======================================================================== /PROC[name=$DUMMY$,lineno=2]={ |-------- child statements -------- |/EXEC[name=PS010,lineno=3]={ | |[pos=1,key=PGM]={STR,value=[IEBGENER]} |} |/DD[name=STEPLIB,lineno=4]={ | |[key=DSN]={STR,value=[SYS1.USERLIB]} | |[key=DISP]={STR,value=[SHR]} |} |/DD[name=,lineno=5]={ | |[key=DSN]={STR,value=[SYS1.TEMPLIB]} | |[key=DISP]={STR,value=[SHR]} |} |/DD[name=SYSPRINT,lineno=6]={ | |[key=SYSOUT]={STR,value=[*]} |} |/DD[name=SYSUT1,lineno=7]={ | |[pos=1]={STR,value=[DUMMY]} |} |/DD[name=SYSUT2,lineno=8]={ | |[pos=1]={STR,value=[DUMMY]} |} } /PEND[name=,lineno=8]={ } CATALOGED PROCEDURE=[IBGPROC] ======================================================================== /PROC[name=$DUMMY$,lineno=2]={ |-------- child statements -------- |/EXEC[name=PS010,lineno=3]={ | |[pos=1,key=PGM]={STR,value=[IEBGENER]} |} |/DD[name=STEPLIB,lineno=4]={ | |[key=DSN]={STR,value=[SYS1.USERLIB]} | |[key=DISP]={STR,value=[SHR]} |} |/DD[name=,lineno=5]={ | |[key=DSN]={STR,value=[SYS1.TEMPLIB]} | |[key=DISP]={STR,value=[SHR]} |} |/DD[name=SYSPRINT,lineno=6]={ | |[key=SYSOUT]={STR,value=[*]} |} |/DD[name=SYSUT1,lineno=7]={ | |[pos=1]={STR,value=[DUMMY]} |} |/DD[name=SYSUT2,lineno=8]={ | |[pos=1]={STR,value=[DUMMY]} |} } /PEND[name=,lineno=8]={ }
2.2. JCL에서 SYSOUT으로 정의된 데이터셋
주로 JCL에 기술된 유틸리티나 애플리케이션에서 Output으로 사용된다. 현재 이 예제에서는 STEP01, STEP02에서 각각 IEBGENER의 메시지를 저장하는 SYSPRINT 문에 대하여 SPOOL 데이터셋이 생성되었다.
<STEP01/PS010 SYSPRINT oframe.TESTPROC.JOB00040.D000004>
[2020-01-22T16:41:43.906976] [IEBGENER(2460) ] [M] [IBG0001M] =====< IEBGENER START >===== [2020-01-22T16:41:43.911809] [IEBGENER(2460) ] [M] [IBG0005M] RECORD COUNT = 10 [2020-01-22T16:41:43.911817] [IEBGENER(2460) ] [M] [IBG0006M] TOTAL RECORD COUNT = 10 [2020-01-22T16:41:43.934682] [IEBGENER(2460) ] [M] [IBG0002M] =====< IEBGENER FINISH >=====
<STEP02/PS010 SYSPRINT oframe.TESTPROC.JOB00040.D000009>
[2020-01-22T16:41:44.490414] [IEBGENER(2467) ] [M] [IBG0001M] =====< IEBGENER START >===== [2020-01-22T16:41:44.493186] [IEBGENER(2467) ] [M] [IBG0005M] RECORD COUNT = 10 [2020-01-22T16:41:44.493194] [IEBGENER(2467) ] [M] [IBG0006M] TOTAL RECORD COUNT = 10 [2020-01-22T16:41:44.509200] [IEBGENER(2467) ] [M] [IBG0002M] =====< IEBGENER FINISH >=====
3. SPOOL BACKUP
JOBQ에서 필요없게 된 JOB을 삭제하게 되면, 해당 SPOOL도 삭제하게 된다. 만약 SPOOL을 보존해야 할 필요가 있으면 SPOOL BACKUP 기능을 사용하여 SPOOL을 백업할 수 있다.
SPOOL BACKUP 명령이 내려지면 OpenFrame 환경설정에 tjes 서브젝트, SPOOL 섹션의 SPOOL_BACKUP_DIR 키의 VALUE 항목에 설정된 백업 디렉터리에 현재 날짜로 디렉터리가 생성된다.
그리고 이 디렉터리에 백업된 JOB에 대해서 해당 SPOOL을 압축하여 JOBID_JOBNAME_submitDATE_submitTIME.tar.gz 형식의 파일을 생성한 후 백업된 JOB을 JOBQ와 SPOOL에서 삭제한다. 백업된 SPOOL에 대해서 조회하게 되면, OpenFrame 환경설정에 tjes 서브젝트, SPOOL 섹션의 SPOOL_UNPACK_DIR 키의 VALUE 항목에 설정된 디렉터리에 압축된 JOBID_JOBNAME_submitDATE_submitTIME.tar.gz 형식의 파일을 풀어 놓고, 이후 해당 JOB에 대한 SPOOL을 조회할 수 있다.
SPOOL BACKUP이 가능한 JOB 상태는 DONE, ERROR, STOP, FLUSH이다.
|