2012-10-26 46 views
2

我在生產中遇到了GDG生成中的問題。如何在步驟2中創建GDG代,並在第3步中提及相同的代碼

新一代在步驟2中創建:

//INP DD DSN=sample.test(+1), 
//  DISP=(,CATLG,KEEP),      
//  SPACE=(CYL,(50,20),RLSE),    
//  DCB=(RECFM=FB,LRECL=1020,BLKSIZE=4080) 

的同代人,3步中refered:

//step3 exec PGM=SORT        
//SORTIN DD DSN=sample.test(+1),  
//   DISP=SHR         
//SORTOUT DD DSN=xxxx.yyyy,  
//   DISP=(NEW,CATLG,DELETE),     
//   UNIT=(SYSDA,9),DCB=(RECFM=FB,LRECL=132), 
//   SPACE=(CYL,(50,20),RLSE)  

我給這樣的,但失敗並JCL錯誤。

任何人都可以幫忙,爲什麼這會失敗?

根據理論一旦工作完成只。我們必須參考第0版。在同樣的工作中,我們必須引用+1版本。如果我在第3步中更改爲第0版,那麼作業運行良好。

+0

你看到的JCL錯誤是什麼?它是「找不到數據集」還是其他東西? – cschneid

+0

「DISP FIELD INCOMPATIBLE WITH DSNAME」 – user1776796

+0

請剪切/粘貼作業日誌和系統消息。但是,我相信你應該在STEP3中使用DISP = OLD。一旦你發佈了日誌和消息,如果NEW是一個問題,我會寫一個正確的答案。 – zarchasmpgmr

回答

1

您需要指定消息編號IEF ... INP步驟中的默認處置是NEW,因此消息指示該數據集已存在 - 未看到卡片中的其他步驟很難提供幫助。

1

您正在使用錯誤的GDG索引。 您應該使用(0)索引將最新添加的數據集引用到GDG。

(+1)表示應將新數據集添加到GDG。

的更多信息:IBM Retrieving a Generation Data Set

+0

GDG計算是在作業開始時完成的,因此在引用上一步中創建的GDG時,+1是正確的。 –

+0

關於這方面的文檔?我嘗試過錯誤,但沒有奏效。也許這是一個調度器的事情。 – user823959

+0

來自您的鏈接:在創建它的作業中,通過它們的相對編號(如(+1))引用處於延遲滾入狀態的生成數據集。該聲明有點難以理解,我知道。我在JCL工作了20多年。我懷疑在步驟2中實際上並沒有創建+1 GDG,可能的原因包括文件沒有被ther程序打開,繞過步驟(檢查cond),步驟失敗(步驟3具有cond =偶數)。仔細看看這些消息應該揭示這些事情是否會發生。看到我的答案可能的解決方案' –

0

這是很難解釋有哪些DD說法是錯誤的有限信息的確切問題。我認爲你有正確的想法在你的例子中使用+1。我不相信這是你的錯誤的問題。

我懷疑這個錯誤是出現在// INP DD語句中的第一個DD的KEEP異常處置上。實際上,您要求創建一個新的gdg數據集,只有在步驟2正常執行時纔會對其進行編目。如果作業在步驟2中暫停,則系統要求系統保留未在系統目錄中註冊的GDG數據集,但尚未在中註冊。在這種情況下,我認爲DISP =(,CATLG,CATLG)對於// INP DD語句來說是更合適的編碼。

通常情況下,您會在數據集已存在且應保留的情況下使用KEEP。

但是,如果您的店鋪正在使用SMS管理的數據集,則KEEP被視爲CATLG,因爲必須對所有由SMS管理的數據集編目。如果是這種情況,那麼這種迴應可能不適用於您的具體情況。從你的例子中看不出SMS是一個因素。

1

您對GDG的想法是正確的。在這種情況下,如果步驟創建GDG 失敗由於COND/IF語句跳過或步驟2未打開GDG(非SMS ???),則步驟3將獲得JCL錯誤,則步驟3將獲得一個JCL錯誤,因爲sample.test(+1)不存在。還有其他可能導致JCL錯誤的可能性(例如,不能分配數據集),但我認爲這是最可能的。這將是,如果在那裏上市

全JCL /錯誤消息有兩種可能的解決方案更容易(在大多數情況下選擇選擇1或2

  1. 添加IEBGENER step1a創建GDG在第二步之前,這應該確保創建GDG。

  2. 添加COND到步驟3

    //步驟3 EXEC PGM = SORT,COND =(0,NE)

  3. 更改DISP來DISP =(,CATLG,CATLG),(如果步驟失敗)

    // INP DD DSN = sample.test(+1),
    // DISP =(,CATLG,CATLG),

    只有當你想,如果作業的輸出選擇選項2失敗。

我會改變DISP =(,CATLG,KEEP)到DISP =(,CATLG),DISP =(,CATLG,DELETE)或DISP =(,CATLG,CATLG)中的一個。在過去,KEEP允許你創建一個未註冊的數據集。

或者,SMS可能是一個問題。