JCL面試題



尊敬的讀者,這些JCL面試題專為幫助您熟悉在JCL主題面試中可能遇到的問題型別而設計。根據我的經驗,優秀的考官在面試中很少會預先計劃好要問哪些具體問題,通常問題會從該主題的一些基本概念開始,然後根據後續的討論和您的回答繼續進行。

在覆蓋的JCL中為未覆蓋的資料集指定DD DUMMY。

//STEP1.IN1	DD DUMMY
// 		DD DSN=MYDATA.URMI.IN2,DISP=SHR
//		DD DUMMY

以下程式碼片段顯示了每個GDG版本的引用:

Step1 input: (0)
Step1 output: (+1)
Step2 input: (+1)
Step2 output: (+2)

如果檔案為空,則當檔案用作IDCAMS中的輸入時,作業將以警告(返回碼4)完成。

在JOB語句中指定RESTART = STEP2。幷包含如下IF-THEN-ELSE結構:

//URMIIF JOB 1, CLASS=6, MSGCLASS=0, NOTIFY = &SYSUID,RESTART=STEP2
//*
//STEP1   EXEC
//STEP2   EXEC
//IF1     IF (STEP2.RC = 0 & STEP2.RC <> 0) THEN
//STEP3      EXEC
//STEP4      EXEC
//ENDIF  

可以透過檔案、PARM引數和SYSIN DD語句將資料傳遞到COBOL程式。

JCL的可變部分可以使用JOB中的符號引數指定,靜態部分可以在PROC中指定。例如,如果使用PROC的每個JOB的檔名都不同,則可以使用符號引數在JCL中編寫檔名的可變部分。

//IN1 DD DSN = &ID.URMI.IN1, DISP = SHR  //*Coded in PROC
ID=MYDATA1 is coded in JOB1, ID = MYDATA2 is coded in JOB2 and so on

使用IEBGENER並將現有檔案傳遞到SYSUT1。將新檔案傳遞到SYSUT2,並提及DCB=*.SYSUT1以獲得與SYSUT1資料集相同的DCB。

透過在資料集DD語句中使用UNIT和VOL序列引數。

虛擬DD語句、資料卡規範、PROC、JOB、PROC語句不能在INCLUDE成員中編碼。INCLUDE語句可以編碼在INCLUDE成員中,並且可以巢狀多達15層。

在STEP2中編寫COND = ONLY。

在JOB/EXEC語句中使用RD引數。需要執行RESTART的異常終止程式碼可以在IBM系統parmlib庫的SCHEDxx成員中提及。

使用JCL中的IEBEDIT,可以執行另一個JCL的選定步驟。在上述JCL中,包含10個步驟的輸入JCL位於MYDATA.URMI.JOBS(INPUTJOB)中。在IEBEDIT的SYSIN中指定STEP3和STEP7,以便執行這兩個步驟。

//STEP001  EXEC PGM=IEBEDIT                                   
//SYSUT1   DD  DSN=MYDATA.URMI.JOBS(INPUTJOB),DISP=SHR    
//SYSUT2   DD  SYSOUT=(*,INTRDR)                              
//SYSPRINT DD  SYSOUT=*                                       
//SYSIN    DD  *                                              
  EDIT TYPE=INCLUDE,STEPNAME=(STEP3,STEP7)                        
/*

當在建立時使用DISP = (NEW,KEEP)定義時。對於GDG,如果GDG基在達到LIMIT時已使用NOEMPTY引數定義,則最近最少使用的世代將未編目。當使用EMPTY編碼時,所有世代都將未編目。

可以使用IDCAMS實用程式建立GDG基。達到LIMIT時,EMPTY將取消編目所有世代。SCRATCH在取消編目時物理刪除世代。(LIMIT指定GDG基可以容納的最大版本數)。

在SORT/ICETOOL程式中,可以使用SKIPREC = n,它跳過前n條記錄,然後將其餘記錄複製到輸出檔案。

//JSTEP020 EXEC PGM=ICETOOL                                          
//TOOLMSG  DD SYSOUT = *                                               
//DFSMSG   DD SYSOUT = *                                               
//IN1      DD DSN = MYDATA.URMI.SKIPREC,DISP=SHR    
//OUT1	   DD SYSOUT = *
//TOOLIN   DD *                                                      
  COPY FROM(IN1) TO(OUT1) USING(CTL1)                                  
/*
//CTL1CNTL DD *                        
  SORT FIELDS = COPY
  SKIPREC = 1000               
/*   

STARTREC和ENDREC限制對指定記錄號的輸入檔案的讀取。

//URMISPLT EXEC PGM = SORT 
//SORTIN   DD DSN=MYDATA.URMI.FILEIN,DISP=SHR 
//SORTOF01 DD DSN = MYDATA.URMI.FILEOUT1, 
//            DISP = (NEW,CATLG,DELETE),
//            RECFM = FB, LRECL = 50 
//SORTOF02 DD DSN = MYDATA.URMI.FILEOUT2,
//            DISP = (NEW, CATLG, DELETE),
//            RECFM = FB, LRECL = 50 
//SORTOF03 DD DSN = MYDATA.URMI.FILEOUT3, 
//            DISP = (NEW, CATLG, DELETE),
//            RECFM = FB, LRECL = 50 
//SYSPRINT DD SYSOUT = * 
//SYSOUT   DD SYSOUT = * 
//SYSUDUMP DD SYSOUT = * 
//SYSIN DD *      
  SORT FIELDS = COPY 
  OUTFIL FILES = 01,ENDREC=100  //*assuming input file has 300 records.
  OUTFIL FILES = 02, STARTREC = 101, ENDREC = 200 
  OUTFIL FILES = 03, STARTREC = 201 
//*

當程式花費的時間超過指定類別的時限時,可能會發生作業超時錯誤。這稱為S322異常終止。當程式中存在一些迴圈錯誤並且無法完成時,會遇到此錯誤。
如果程式中處理的資料非常龐大,並且需要的時間超過類別限制,則可以將TIME引數編碼為TIME = 1440,以便無限期地執行直到作業完成。

可以根據表的容量增加映像副本資料集的SPACE引數,並且可以從STEP2重新啟動作業。

可以在JOB語句中指定NOTIFY = 使用者ID(不是提交者),以便使用者在作業完成後收到包含返回碼的通知。但是作業日誌僅存在於提交者的使用者ID下的SPOOL中。

SORT中的FTOV選項有助於將FB檔案轉換為VB檔案。

//URMIFTOV EXEC PGM = SORT 
//SORTIN   DD *
  123*******
  4560000000
  123****123
  789
//SORTOF01 DD DSN = MYDATA.URMI.FILEOUT1, 
//            DISP = (NEW, CATLG, DELETE),
//            RECFM = VB, LRECL = 54
//SORTOF02 DD DSN = MYDATA.URMI.FILEOUT2,
//            DISP = (NEW, CATLG, DELETE),
//            RECFM = VB, LRECL = 54 
//SORTOF03 DD DSN = MYDATA.URMI.FILEOUT3, 
//            DISP = (NEW, CATLG, DELETE),
//            RECFM = VB, LRECL = 54 
//SYSPRINT DD SYSOUT = * 
//SYSOUT   DD SYSOUT = * 
//SYSUDUMP DD SYSOUT = * 
//SYSIN DD *      
  SORT FIELDS=COPY 
  OUTFIL FNAMES = SORTOF01, FTOV, VLTRIM = C'*' //*removes trailing '*'
  OUTFIL FNAMES = SORTOF02, FTOV, VLTRIM = X'40'//*removes trailing space
  OUTFIL FNAMES = SORTOF03, FTOV, VLTRIM = X'00'//*removes trailing zeros
//*

JCL代表作業控制語言,它提供處理作業所需的規範。它是一組控制語句,提供處理作業所需的規範。它是程式和MVS作業系統之間的介面。

MVS代表多重虛擬儲存,它是IBM大型主機系統的作業系統。

識別符號是從第1列開始的兩個斜槓(//)。所有JCL語句都以識別符號開頭,但有兩個例外——對於分隔符語句,/* 從第1列開始;對於註釋語句,//* 從第1列開始。

輸入->轉換->執行->輸出->硬複製->清除

JCL以及PROC被轉換為JES可以理解的解釋文字,並存儲到一個我們稱為SPOOL的資料集中。

當作業達到其最高優先順序時,它將從作業佇列中被提取以執行。JCL從SPOOL中讀取,程式被執行,並且輸出被重定向到JCL中指定的相應輸出目標。

指定作業SPOOL所需的資訊,例如作業ID、執行優先順序、作業完成後要通知的使用者ID。

JCL由一個可選的空語句終止。對於空語句,只從第1列編寫//。所有後續行都不會執行。

根據作業所需的時間長度和資源數量,公司會分配不同的作業類別。這些可以被視為作業系統使用的各個排程程式來接收作業。將作業放置在正確的排程程式中將有助於輕鬆執行作業。一些公司在測試和生產環境中為作業分配不同的類別。CLASS引數的有效值為A到Z字元和0到9數字(長度為1)。以下是語法:CLASS=0到9 | A到Z

系統將成功或失敗訊息(最大條件程式碼)傳送給在此引數中指定的使用者。語法:NOTIFY = "userid | &SYSUID"

TYPRUN = SCAN 在不執行JCL的情況下檢查其語法錯誤。

DSN引數指的是新建立或現有資料集的物理資料集名稱。DSN值可以由長度為1到8個字元的子名稱組成,用句點分隔,總長度為44個字元(字母數字)。

DISP引數用於描述資料集的狀態,以及在作業步驟正常和異常完成時的最終處理方式。只有當資料集在同一個作業步驟中建立和刪除時(例如臨時資料集),DD語句中才不需要DISP。語法:DISP = (狀態,正常處理方式,異常處理方式)

SPACE引數指定資料集在DASD(直接存取儲存磁碟)中所需的空間。語法:SPACE = (空間單位,(主要,次要,目錄),RLSE)

資料控制塊 (DCB) 引數詳細說明了資料集的物理特性。此引數對於在作業步驟中新建立的資料集是必需的。LRECL 是資料集內每個記錄的長度。RECFM 是資料集的記錄格式。

臨時資料集是在作業中建立和刪除的資料集,宣告為 DSN=&&TEMP。不要在此處提及 DSN 引數。

程式碼 SYSOUT = *,則資料將定向到輸出佇列。

IEFBR14 是一個無操作實用程式。用於將控制權返回給使用者並終止。它通常用於建立空資料集或刪除現有資料集。

DISP = (NEW,PASS)。PASS 僅對普通處理有效。當資料集需要傳遞並由 JCL 中的下一個作業步驟處理時使用此引數。

IKJEFT01 實用程式用於執行 COBOL-DB2 程式。

DSN(資料集名稱)用於在 DD 語句中宣告資料集的名稱。

PEND 語句用於結束內聯過程。

要引用 GDG 的最新一代,我們使用 (+0) 作為引用。

COND=(12,LT,STEP1),它將條件讀取為 12 小於 8,這是假的,因此將執行此步驟。

在 SORT 步驟中,提及 SYSIN 和 SYSOUT 資料集名稱,並在排序卡中編寫 SORT FIELDS=COPY 以將資料從輸入檔案複製到輸出檔案。

此語句正確。

SORT 實用程式用於根據排序卡以特定順序排序檔案。

IEBUPDTE 用於更新 PDS。

SPACE引數指定資料集在DASD(直接存取儲存磁碟)中所需的空間。語法:SPACE = (空間單位,(主要,次要,目錄),RLSE)

此語句正確。

接下來是什麼?

接下來你可以回顧一下你過去完成的作業,確保你能自信地談論它們。如果你剛畢業,面試官並不期望你會回答非常複雜的問題,而是要確保你的基本概念非常紮實。

其次,如果你無法回答一些問題,其實並不重要,重要的是你回答的任何問題,你都必須自信地回答。所以在面試中要充滿自信。Tutorialspoint 祝你找到一位好面試官,並祝你未來的事業一切順利!乾杯 :-)

jcl_questions_answers.htm
廣告