2012-03-15 27 views
0

我用下面的JCL建立在現有的PDS成員:如何使用JCL

//STEP1 EXEC PGM=IEBGENER        
//SYSUT1 DD DUMMY,RECFM=FB,LRECL=80     
//SYSUT2 DD DSN=RK.MYDIR.FILES(NEW1),DISP=(SHR)  
//SYSPRINT DD SYSOUT=*         
//SYSIN DD DUMMY 

我能夠創建它。但我無法理解這裏的代碼。有沒有可能使用IEFBR14創建。如果不是這是最好的方式。請向我解釋代碼。謝謝

回答

0

的IEBGENER實用程序用於複製單個文件。

SYSUT1 DD名稱用於提供要從中複製的INPUT或文件。

SYSUT2 DD名稱是OUTPUT文件。

SYSIN DD提供CONTROL語句(如果有的話)。

//STEP1 EXEC PGM=IEBGENER        
//SYSUT1 DD DISP=SHR,DSN=your.input.dataset     
//SYSUT2 DD DISP=SHR,DSN=your.output.dataset  
//SYSPRINT DD SYSOUT=*         
//SYSIN DD DUMMY <-- no CONTROL statements 

請注意,文件/數據集可以是順序數據集或分區數據集的成員。

//SYSUT1 DD DISP=SHR,DSN=your.input.dataset(member)     
//SYSUT2 DD DISP=SHR,DSN=your.output.dataset(member) 
1

如果您想一次創建多個成員,我建議IEBUPDTE。

從IBM:

這個基本示例使用IEBUPDTE兩個JCL過程添加到數據集命名MY.PROCLIB:

//ADDPROC1 JOB 1,SMCHUGH,MSGCLASS=X 
//   EXEC PGM=IEBUPDTE 
//SYSPRINT DD SYSOUT=* 
//SYSUT1 DD DISP=OLD,DSN=MY.PROCLIB 
//SYSUT2 DD DISP=OLD,DSN=MY.PROCLIB 
//SYSIN DD DATA 
./ ADD LIST=ALL,NAME=MYJOB1 
//STEP1 EXEC=SUZNX1 
//PRINT DD SYSOUT=A 
// (more JCL for MYJOB1) 
//SYSUDUMP DD SYSOUT=* (last JCL for MYJOB1) 
./ REPL LIST=ALL,NAME=LASTJOB 
//LIST EXEC PGM=SUZNLIST 
// (more JCL for this procedure) 
//* LAST JCL STATEMENT FOR LASTJOB 
./ ENDUP 
/* 

這將創建一個新的成員,MYJOB1,但你可以看到,它也可以取代成員(LASTJOB)。

http://publib.boulder.ibm.com/infocenter/zos/basics/topic/com.ibm.zos.zdatamgmt/zsysprogc_utilities_IEBUPDTE.htm

4

如果你有興趣的原因所在,明白IEFBR14實際上不打開任何DD語句您在JCL代碼。相反,它只是驅動系統分配(和分配)例程的簡便方式。事實上,如果您要查看iEFBR14的彙編程序列表,您會發現只有兩條指令:將R15返回碼設置爲零,然後退出。

對於批處理,其思想是在應用程序啓動之前系統(JES加上批處理啓動器)應該執行大量工作。因此,如果你分配一個新的數據集,或者引用(比如說)需要時間讓操作員掛載的磁帶設備,系統會在你的程序啓動之前爲你完成所有這些工作。 IEFBR14是一種使用系統分配例程來使用JCL的這些功能分配文件的便捷方式。

但是在涉及到訪問JCL中的PDS數據集方面存在一個問題,就像您正在嘗試的那樣。

當您在JCL中指定DSN(MEMBER)語法時,分配例程並不特別在意MEMBER部分 - 事實證明,這不是啓動器的功能,而是在OPEN/CLOSE中實現。在您的示例中,分配驗證數據集是否存在(因爲您編碼了DISP = SHR),並且程序打開DD語句時,OPEN例程會自動發出BPAM FIND/POINT/STOW以將您導向到您指定的PDS成員。這就是你的PDS成員如何創建的,所以你需要使用一個實際打開文件的程序(IEBGENR,IEBUPDTE,IEBCOPY,IDCAMS等都可以)。

一個小無關的評論是,你可能想要小心使用DISP = SHR更新數據集(特別是PDS)。如果您設法弄錯時間,這兩項工作理論上可能在同一時間運行,這可能會導致數據集損壞。除非您確定您是訪問PDS的唯一任務,否則在這種情況下使用DISP = OLD會更安全。

0

如果您要將DSN的內容複製到新成員中,請使用IEBGENER。

要動態使用LIKE參數設置新DSN的屬性。例如(使用上述米凱什例子)

//STEP1 EXEC PGM=IEBGENER        
//SYSUT1 DD DISP=SHR,DSN=your.input.dataset     
//SYSUT2 DD DISP=(,CATLG,DELETE),DSN=your.output.dataset, 
//    LIKE=your.input.dataset  
//SYSPRINT DD SYSOUT=*         
//SYSIN DD DUMMY <-- no CONTROL statements 

的LIKE屬性讓您輕鬆創建一個新的數據集,使用您指定的數據集的屬性,我也改變了性格,以反映新的DSN應該設置爲。

+0

問題是關於在現有的PDS/PDSE上創建/替換成員。 TS/OP *使用* IEBGEBER,但不明白它是如何工作的。 – 2013-10-11 15:57:44

0

警告! - 重新使用IEBGENER和SYSUT2 DD DSN = PDS(MEMBER):不要忘記指定MEMBER名稱 - 如果你這樣做,IEBGENER將從開頭覆蓋你的PDS,不管它在SYSUT1中發現什麼, PDS目錄!