大型機學習之具體技術之-z/OS中的作業管理系統,SDSF工具及JCL

anyue417發表於2007-08-15

《大型機學習之具體技術之-z/OS中的作業管理系統,SDSF工具及JCL

Z/OS中的作業管理概覽

Z/OS 作業系統通過 JES 子系統對系統中絕大多數的作業進行控制和管理,包括從系統外部接收作業、對系統中的作業進行排程、管理作業的輸出等。現在,在定製z/OS 系統時客戶可以選擇使用兩個不同的JES 子系統:JES2 JES3

JES2 HASP(Houston   automatic   spooling   priority)的繼承和發展。HASP 是早期使用的一個程式,它能夠提供排程、作業流程控制、資料管理和作業管理等功能。作為歷史的遺蹟,至今仍然在 JES2  中可以發現HASP  的影子,如許多模組名的字首、所有從JES2 發給操作員的訊息的字首都是HASP。實際上JES2 僅僅是HASP 在功能上的一個擴充套件,從這個意義上說,JES2 可以看成是 z/OS  的一個組成部件,是用來在z/OS  中更高效地實現離線列印、作業排程和管理等功能的。那麼為什麼要將z/OS 和作業控制子系統分開呢?

簡單地說,為了使系統的效率更高,系統中的每一個作業都被分成了多個任務進行處理,在任意時間點上,系統資源忙於處理來自於不同作業的任務,還有許多工在等待被處理。

JES 子系統和z/OS 的基礎控制程式(BCP)分別管理作業和系統資源,JES2 管理執行前和執行後的作業;基礎控制程式管理執行中的任務。下圖簡單地表示了兩者之間的關係:

 

z/OS 系統中,我們將一個作業的生命期分為六個階段:

輸入(Input)

轉換(Conversion)

執行(Processing)

輸出(Output)

列印(Print/Punch)

清除(Purge)

(如果操作員的每一個動作都要被歸結為一個作業的話,那豈不是相當的麻煩,不過好在使用者只負責輸入這一步,可即使如此,也讓我從此跟雙擊執行的好日子劃上了句號。)

除了第三步由 z/OS 的基礎控制程式管理外,其餘階段全部由 JES2  進行管理。對這些階段的我們將會在後面的章節中進行詳細介紹。

  我們可以選擇使用JES3 作為作業控制子系統,那麼這兩者之間的區別在哪裡呢?如果

在僅有一個處理器的系統配置情況下,JES2 JES3 所完成的工作基本類似,也就是將作業

讀入系統、轉換為系統可識別的格式、排程作業的執行、處理作業的輸出、最終將作業從系

統中清除。但如果在包含多個處理器的系統配置情況下(我覺得這句話真廢,哪個大機系統不是裝了一大堆處理器的,)JES2 JES3 便有了明顯的不同

JES2 的功能 

下面主要介紹 JES2 在系統中所完成的主要功能,包括對系統中大部分作業處理的六個 階段進行管理,以及JES2 的主要功能。

一.作業處理的六個階段

z/OS 系統中基礎控制程式和JES2 共同分擔對作業的管理任務。JES2 負責將作業輸

入系統,然後由基礎控制程式負責為作業分配裝置並真正控制程式的執行,最終JES2 負責

管理作業的輸出。下圖簡單表示了作業處理的六個階段:

在上圖中我們可以發現多個作業佇列,在這些作業佇列中分別包含了處於不同階段的作 業。例如:

轉換佇列中包含等待執行的作業

執行佇列中包含正在執行的作業

輸出佇列中的作業在等待它們的執行結果產生

硬拷貝佇列包含所有已經產生執行結果的作業

清除佇列包含所有等待被清除的作業

1 .輸入階段 

JES2 通過讀卡機、遠端終端等輸入裝置接收作業到系統中,這些作業是以輸入資料流的方式存在。除了傳統的輸入裝置外,輸入資料流還可以來自於其它程式的輸出、網路上的其它節點以及內部讀卡機。內部讀卡機實際上是一個用來模擬真正讀卡機功能的程式,其它的程式可以通過它遞交作業、向 JES2 傳送命令。任何在 z/OS 系統中執行的作業都可以通過內部讀卡機將輸入資料流傳遞給 JES2,並且 JES2 可以通過多個內部讀卡機同時接收多個作業。

z/OS 可以通過在系統初始化時建立的內部讀卡機向 JES2 傳遞多種資訊,如所執行任務的作業控制語言、START MOUNT 命令、TSO LOGON 申請等。

JES2 接收輸入資料流的同時,也為每一個作業分配一個作業識別符號並將每一個作業

JCLJES2 的控制語句和作業的輸入資料 SYSIN存放在 DASD資料集中,這些資料集被

稱為 SPOOL 資料集JES2 就是從這些 SPOOL 資料集中選擇作業進行處理。

2.  轉換階段

JES2 通過一個轉換程式對每一個作業的 JCL 語句進行分析。轉換程式讀出作業的 JCL 語句,並將其中用來呼叫庫程式的語句用程式庫(SYS1.PROCLIB)中的JCL 語句進行替換, 然後將結合後的JCL 程式轉換成JES2 z/OS 的排程模組都可以識別的轉換/解釋文字JES2

將這些轉換/解釋文字儲存在 SPOOL 資料集中。如果在轉換過程中發現JCL 語法錯誤,JES2

將傳送訊息,然後相關作業將跳過執行階段進入輸出階段的作業佇列;如果沒有發現 JCL

語法錯誤,相關作業將進入執行階段的作業佇列,根據作業類別和作業優先順序等待執行。

JES2 支援多個轉換程式同時執行,因此作業並不能夠完全按照先進先出的原則進行處理

3.  執行階段

在執行階段,JES2 響應來自於z/OS 初始器的請求,從作業佇列中選擇等待執行的作業

並將它們送到z/OS 中。通過確認作業佇列中所有作業的當前處理階段,JES2 可以通過系統

對作業的流程進行管理。

JES2  的作業排程:為了能夠對作業佇列中的作業進行處理,JES2 必須和 z/OS  的初始器相互配合。一個初始器實際上就是一個系統程式,在系統初始化時這個系統程式可以被操作員用命令啟用也可以隨著JES2 的啟動而自動啟動。一個初始器可以啟動一個作業,允許其和系統中正在執行的其它作業競爭系統資源。

當初始器需要啟動一個作業時便從JES2 那裡申請,JES2 則根據初始器所關聯的作業類

和這些作業類被搜尋的優先權級別選擇作業。當JES2 選擇了一個作業以後,便將這個作業

傳遞給初始器。通過將每個初始器關聯一個或多個作業類,我們便可以很好的控制作業的選

擇,使系統的資源得到更有效的利用

JES2 從所有可選的作業當中選擇了最合適的作業並將這個作業傳遞給初始器之後,

初始器便呼叫直譯器,直譯器根據轉換器產生的轉換/解釋文字為作業建立一個控制塊。  接下來,初始器根據作業的 JCL  中第一步的要求為作業分配資源,在確認所有被分配

的資源都有效後,初始器便執行JCL EXEC 語句所指定的程式。

優選權增長:當所有的初始器全部滿負荷時,系統中某些類別作業的吞吐量便會降到正

常的期望值之下。為了解決這個問題,JES2  使用了附加的排程功能,優先權增長。優先權增長可以幫助那些已經等待執行的作業在剛剛進入系統的作業之前獲得一個被選擇的機會。

通過優先權增長,系統可以提高那些等待執行作業的優先權級別。作業等待的時間越長,它的優先權級別就會越高,直到達到一定的限制,那麼作業被選擇執行的機會便越大。

JES2與基礎控制程式的互動JES2 和基礎控制程式不斷地進行溝通以控制系統的處理

過程,這種溝通是通過子系統介面來完成的。子系統介面允許z/OS  JES2 發出服務申請。

例如,可以申請JES2 去查詢一個作業、處理訊息或命令、開啟或訪問一個 SYSIN SYSOUT 資料集。反過來,基礎控制程式可以注意到JES2 的事件,如訊息的傳送、操作員的命令、作業的結束和任務的結束等。

4.  輸出階段

JES2 控制所有的SYSOUT 處理。SYSOUT 是系統產生的輸出,也就是,系統為一個作

業或由一個作業產生的所有輸出結果。這個輸出結果中包括所有必須被列印的系統訊息和用

戶申請的必須被列印的資料集。在一個作業執行結束後,JES2 根據輸出的類別和要求的設

備配置對作業所有輸出的特徵進行分析,然後根據相同的特徵將輸出分組。這些分組後的輸

出將在JES2 的佇列中等待列印。

5. 列印階段

JES2  根據輸出的類別和優先權等條件從輸出佇列中選擇輸出結果進行處理。位於輸出

佇列中的輸出結果分成兩類,本地處理和遠端處理(RJE 工作站或網路上的其它節點)JES2

對不同類別的輸出結果進行不同的處理。

本地輸出:

       當輸出在本地或者遠端接入的裝置上處理時,JES2 使用這些本地或者遠端接入的裝置作輸出。JES2 將作業的輸出資料集放在輸出佇列中排隊。本地接入或者通過RJE 接入的活動裝置,選擇最符合自身特徵的輸出資料集進行輸出。 

NJO(Network Job Output)輸出:

要通過另一個 JES2 節點的作業輸出放入網路輸出佇列。JES2 根據作業的許可權和到達目

點線路狀況選擇一個作業輸出來進行傳輸。在目標接點發出已收到的訊號後,傳輸 JES2

標節節點釋放輸出所使用的資源。 在處理完作業的的所有輸出後,JES2 將作業放入清除佇列。

6.  清除階段

當作業的所有處理都結束後,可以通過 JES2 釋放分配給作業的 SPOOL 空間,使這些

空間能夠分配給其它作業。JES2 通過傳送一條訊息給操作員指出作業已經被從系統中清除。

二:JES2的效能與功能

JES2 是連線TSO/ETime Sharing Options/Extensions)和 z/OS 的橋樑JES2 通過 JES2

的初始化語句和 JES2 命令,提供資料處理和系統設定管理能力。

JES2 提供以下主要的功能,來管理 z/OS中作業的輸入輸出。所有的這些都在系統程式設計師的控制之下。  

z/OS外得到作業   

排程作業,優化系統效率

解除安裝作業和備份系統

高階列印輸出   

安全管理

 

從上面的作業系統看出,程式這個概念我還是沒有找到在大機系統中的對應之物。不過,我想應該會在作業的6階段中的執行一段當中吧,以後再看啦。。。

下面看JCL:

JCLJob Control Language的縮寫,顧名思義,作業控制語言。至於作業的概念呢上面已經講得很清楚了。舉例來說就是,當我要分配一個資料集的時候,我可以在ISPF中手動一步一步完成,也可以寫一個JCL檔案通過一個提交(SUBMIT)操作進行作業提交(相當於前面的6階段中的輸入)然後讓系統自動完成,另外,當我寫了一個PL1程式,完成原始碼編輯後,我要編譯它的話,要寫一個JCL來完成,要執行編譯得到的二進位制檔案,也可以寫JCL檔案來將這個任務提交到作業系統進行任務分配。每一個被提交的JOB,將會被作業系統新增到作業系統的任務流(JOB STREAM)中去,然後OS會根據任務的優先順序以及其它條件決定何時執行這個JOB。那麼我很自然地就想到了那麼我如何檢視我當前提交的這個JOB,以及其它的系統當前工作流中的任務呢?這時就需要使用同ISPF/PDF一樣屬於TSO的系統工具:SDSF

SDSF(System Display and Search Facility)TSO 環境下另一個常用的工具軟體,其作用是對作業子系統進行控制和操作。使用者通過 SDSF 可瞭解作業執行的情況和結果,檢視作業佇列,顯示系統資訊記錄,輸入系統命令等等。

SDSF的進入方式:如果ISPF主選單介面有SDSF一項,直接輸前面的代表序號即可進入,如果沒有,可以進入主選單介面的COMMAND子選單,然後在命令列中輸入SDSF回車,也可以進入。另外,在退出ISPF後,在TSO的主介面READY提示符下輸入SDSF亦可進入。

進去以後,各個選項皆有註釋,只整理主要的幾個選項的解釋:

1. DA 選項

DA 選項用來顯示活動使用者和地址空間,不同許可權的使用者看到的顯示結果往往不同。只

有授權使用者才能看到所有的活動使用者和地址空間,其中 JOBNAME  列即為活動使用者名稱。對具有足夠許可權的使用者來說,該列還可以是活動作業名、地址空間名或正在執行中的程式名等。在資料行的NP 列輸入 S 並回車,可以檢視活動使用者有關的作業和資料集資訊。

2. H 選項

    H 選項用來顯示保留輸出佇列資訊。使用者提交的作業執行完成後的輸出資訊往往先保留在該佇列中,等候使用者進一步操作如刪除、列印等。具有 OPERATION  許可權的使用者可以看到保持輸出佇列中所有作業的輸出資訊,普通使用者則只能看到以本使用者標識名為字首的作業輸出資訊。其中JOBNAME 列為提交的作業名。如果使用者STUD01 為普通使用者,只能看

到以使用者名稱為字首的作業清單。和顯示活動使用者螢幕一樣,在資料行的NP 列輸入 S 並回車,可以檢視作業詳細清單。

3.I 選項 

    I 選項用來顯示輸入佇列螢幕。使用者提交的作業在處理之前先送入該佇列等候作業子系

統的排程。具有特殊許可權的使用者還可以通過該選項顯示系統排程的執行程式或啟動任務等。

該螢幕顯示內容和保持輸出佇列基本相同。

4. O 選項

O 選項用來顯示輸出佇列螢幕。使用者請求列印的作業一般先送入該佇列等候輸出。對於正在列印的作業,輸出佇列螢幕指明瞭有關列印的狀態資訊。該螢幕顯示內容和保持輸出佇列也基本相同。

5. ST 選項

ST 選項用來顯示作業系統中各作業、執行程式以及分時使用者的有關狀態資訊,包括作 業名(使用者名稱)、優先順序、輸入級別、當前狀態等等。

6. PR 選項

PR 選項用來顯示作業系統定義的所有印表機資訊,包括本地印表機和遠端印表機。顯 示的印表機資訊包括印表機名、狀態、列印作業名、頁面定義等等。

在使用SDSF的過程中,你會發現:大多數 SDSF 子選單視窗都是類似的,一般主要由提示資訊、資訊列表、命令輸入行組成。提示資訊提示當前所處的選項位置以及命令處理結果等;資訊列表由表頭和資料行組成,列表表頭根據不同子選單內容各異,但是都有一個NP 列,使用者可在資料行該列位置處輸入控制命令,這種命令通常由一到兩個字元組成,被稱為作用字元(Action Char )。

常用的作用字元有:

     // :塊定義,通過一對“// ”標誌多行資料以便對它們進行相同的操作;

     =:重複上一個作用字元;

     +:擴充套件NP 列,可用RESET 命令還原;

     ?:顯示輸出資訊資料集列表;

     A:釋放保持佇列中作業的輸出結果;

     C:清除作業的輸出結果;

     CD:清除作業的輸出結果並生成備份;

     D:顯示詳細資訊;

     E:重新啟動作業或列印操作;

     F:設定印表機的空白頁;

     H:保留作業的輸出結果;

     I:中斷一個列印操作;

     L:在日誌中列出作業的輸出結果;

     N :列印作業輸出結果;

     O:釋放輸出結果送印表機;

     P:清除一行列表資料;

     Q:顯示輸出資料集的輸出描述資訊;

     S:顯示輸出結果資料集

     SB:使用ISPF 下的瀏覽工具顯示輸出資料集;

     SE:使用ISPF 下的編輯工具編輯輸出資料集;

     SJ:使用ISPF 下的編輯工具編輯相應的JCL 作業;

     Z:暫停列印操作;

     X:列印輸出資料集;

應該注意的是,以上這些作用字元並非適用於所有 SDSF 子選單視窗,例如有關列印控

制的作用字元大都只能在印表機選項螢幕下使用。

除了在NP 列輸入作用字元完成一定功能外,使用者還可以在“COMMAND   INPUT”處

輸入 SDSF 命令,用來控制資料行的顯示或控制作業子系統的操作。常用的 SDSF 命令有:

     (1) ABEND

     該命令用來中止並退出 SDSF,當SDSF 出現錯誤使使用者無法正常退出時可使用該命令。

     (2) COLS

該命令將在資料輸出視窗顯示一個標尺,使用者通過該標尺可方便地得到螢幕任意字元所在的列號。

     (3) DEST

     該命令可限定資料行的輸出,只顯示帶有指定目的名的作業。例如使用命令:

     DEST MYDEST

將只顯示所有以MYDEST 為目的名的作業。不加任何引數使用DEST 命令將不限制作

業的目的名。

     (4) FILTER

     該命令將根據指定的限制條件篩選顯示的資料行。其格式為:

     FILTER   列名 比較符

     其中列名因 SDSF 下各子選單而異,比較符可為:

        EQ    =  :等於

        NE    ? :不等於

        LT    < :小於

        GT    >  :大於

        LE    <=  :小於或等於

        GE    >=  :大於或等於

     例如使用命令:

     FILTER PRTY GE 3

     將只顯示優先順序大於或等於 3 的作業。可使用命令FILTER OFF 取消資料行顯示的限制條件。

     (5) OWNER

     該命令可限定資料行的輸出,只顯示指定所有者名的作業,其中所有者名可包含萬用字元。 例如使用命令:OWNER JIM

 

     將只顯示所有者為JIM 的作業;使用OWNER T*命令可顯示所有者名以T 開頭的作業;

不帶引數地使用該命令將不限制作業所有者。

     (6) PREFIX

     該命令可限定資料行的輸出,只顯示指定作業名字首的作業。例如使用命令:

     PREFIX STUD01

     將只顯示作業名字首為 STUD01 的作業;而使用命令PREFIX STUD* 則只顯示字首以

STUD 開頭的作業;不帶引數地使用該命令則不限制作業名字首。

     (7) RESET

     該命令重新設定顯示螢幕,將取消已經輸入的作用字元以及標尺等。

     (8) SELECT

     該命令可根據給定的作業名和作業號選擇作業。例如:

     SELECT STUD* JOB00023

     將選擇作業名以 STUD 開頭,作業號為JOB00023 的作業。

     (9) SET DISPLAY

     該命令可控制是否根據PREFIXDESTOWNER 命令限制螢幕的顯示。可通過命令:

     SET DISPLAY OFF

     取消所有限制條件,顯示佇列中所有能看到的作業。

     (10) SORT

     該命令用來對資料行進行排序顯示。其格式為:

 SORT  主排序列名  A|D      輔排序列名  A|D

     其中A 表示升序排列,D 表示降序排列;輔排序部分可以省略。例如使用命令:

     SORT JOBNAME A JOBID D

     可首先以作業名升序排列,相同的作業名則以作業號降序排列。

     (11) WHO

     該命令顯示當前使用者的TSO 屬性,如使用者號、登入過程名、終端特性等。

     除了上述常用命令外,命令列還可輸入螢幕滾動控制命令,這類命令與ISPF/PDF 環境

 下的命令類似,這裡就不再贅述了。其它非常用的作用字元和 SDSF 命令可通過聯機幫助獲得詳細的說明。應該注意的是,許多 SDSF 命令需要一定的許可權才能執行,或者不同許可權執行結果不同。

         大概學習了一下SDSF以後再次回到我的JCL上來:

當然一個JOB也可以包含多個動作,構成一個工作序列。那麼按上面一說,我好像可以將JCL的作用以及寫法理解為可能跟WINDOWS或者UNIX系統中的批處理檔案的作用和寫法類似。或者是WINDOWS下的指令碼檔案。同理,UNIX下的SHELL也可以看成是一種JCL

總得來說呢,與COBOL等一般的程式語言不同,作業控制語言JCLJob Control Language)是使用者與作業系統的介面。使用者通過JCL的相應語句來與作業系統通訊,獲得作業所需的資源等,按自己的意圖來控制作業的執行

那麼一個JCL檔案如何告訴作業系統它的要求呢?這就跟其它別的語言一樣,取決於其編寫語法。

一個作業中,每一段程式的執行稱為一個作業步,一個作業可包含一個或多個作業步。

一般的,作業由以下相對獨立的三步組成:

1)編譯:把源程式語句(源模組)轉換成目標模組;

2)連結編輯:把目標模組同子程式庫中的其他程式連結起來得到可執行模組;

3)執行:執行可執行模組得到結果。

(感覺上面這一段講得不對勁,一個COBOL,或者PL/I程式的執行步驟的確是如上三步,但是一個JCL作業提交好像不是照這麼來的吧???估計他是以編譯執行一個通用程式做為一個作業的例子,然後打算把其中的那三個步驟分解為三個作業步)

一個作業中的各個作業步是順序執行的,因此一個作業步的輸出可以作為下一個作業步的輸入。

使用者的作業可以由一個或多個作業步構成。只有一個作業步的作業叫做單步作業;由多個作業步構成的作業叫做多步作業。不論單步作業還是多步作業都必須包含三個 JCL  基本語句(JCL Statement)。它們分別是:

1)作業語句(JOB ):標識一個作業的開始,提供必要的執行引數。

2 )執行語句(EXEC ):標識一個作業步的開始,定義本作業步所要執行的程式或過 程。

3)資料定義語句(DD ):用於描述應用程式所需要的資料檔案。

 系統規定這三種語句行必須以“// ”開頭。下面是一個多步作業的例子:

     //JOB1      JOB   

     //STEP1     EXEC …

     //DD1       DD          作業步 1

     //STEP2     EXEC …

     //INDD1     DD          作業步2

     //INDD2     DD …

     //

除了上述一些基本概念,有關資料結構和存取方法的概念在 JCL 的使用中也是非常重要的,由於這一部分已在前面詳細討論過,這裡就不再重複了。

JCL 語句

JCL 語句的分類 

作業控制語言 JCL 由九種語句組成,除了上一節中討論過的三種基本語句外,還有以下六種附加語句:

      1/* 語句:表示流內資料結束或呼叫JES 控制語句;

      2 //*語句:註釋語句,由第4 到第80 列寫出註釋內容;

      3 //語句:空語句,用以標記一個作業的結束;

      4 PROC 語句:流內過程(IN-STREAM        PROCEDURE)或編目過程(CATALOGED  PROCEDURE )的起始標記。

      5PEND 語句:標誌一個流內過程的結束。

      6Command 語句:操作員用這個語句在輸入流中寫入操作命令。

     在這九種語句中,JOBEXEC DD 三種語句對於每個作業來說都是必要的。

     下面給出一個單步作業的JCL 例項:

     //BACKUP    JOB       ,’EXAMPLE JOB’

     //************************

     //* IT IS A EXAMPLE!        *

     //************************

     //STEP1       EXEC      PGM=IEBGENER

     //STEPLIB     DD      DSN=SYS1.LINKLIB,DISP=SHR

     //SYSIN        DD      DUMMY

     //SYSPRINT   DD      SYSOUT=A

     //SYSU1    DD      DSN=PR.MASTER,DISP=OLD

     //SYSU2       DD      DSN=PR.MAILY.BACKUP,DISP=(NEW,CATLG),UNIT=TAPE,

     //                  DCB=(RECFM=FB,LRECL=200,BLKSIZE=1000)

     //

     在上述例子中,我們給出了一個名為BACKUP 的單步作業,在這個作業中我們通過呼叫實用程式 IEBGENER 完成了將PR.MASTER 資料集備份到磁帶上的工作。通過該例我們可以初步瞭解 JCL  中各語句的使用方式,下面我們將詳細向大家介紹JCL  的語法規則及語句的使用。

JCL 的語法規則

與其它計算機語言一樣,JCL 有一套嚴格的語法規則。但與我們熟知的一些程式語言不

同的是,JCL 還有其嚴格的語句格式規範。使用者只有嚴格按照這些規則來編寫作業控制程式,

系統才能按照其意圖正確完成使用者的作業,否則系統就會給出錯誤資訊,或產生不可預知的

後果。

 一、 JCL 字符集

      1 字母(共26 個) A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

      2 數字(共10 個)  0   1  2   3   4  5   6  7   8  9  

      3 特殊字元(共10 個) ,  .  /   ‘ (  )  *   &   +   -  =

      4 萬用字元(共6 個)

                  @  $  # (也可分別用X7C   X5B    X7B’表示)

      5 EBCDIC    可列印字符集 使用十六進位制值表示:X40 ~ XFE

JCL 語法中會用到一些特殊字元,其作用列表如下表4-1

二、 一般語句格式規範

  JCL 中,除/*語句外的所有語句均以第 12 列的//符號作為開始標誌,系統規定這些語句的長度為 80 列。這 80 列在邏輯上被劃分為五個區域,分別是識別符號區、名字區、操作符區、引數區和說明區,即:

識別符號區

名字區

操作符區

引數區

註釋區

//

名字

操作符

引數

註釋

l  識別符號區

一般 //”,該符號表明該條語句為 JCL 語句。識別符號區位於每條語句的第 12 列。

在特殊情況下,識別符號區的符號將有所變化。如 3.2.1 中所討論過的“/*”語句和“//*

語句,則分別在識別符號區中使用的符號“/*”和“//*”表示。 

l  名字區

名字區指明一個語句,便於系統控制塊或其他語句引用它。名字可以由 1~8 個字母數字或萬用字元組成,但第一個字元 3 列開始。名字區後必須跟一個或多個空格,可以選擇名字表達出這個 JCL 語句的作用。下面給出幾個正確與錯誤的名字區的例子:

    正確的                                     錯誤的

   //Z                                         //9Z                           

   //BACKUP#1                                 //TAPEBACKUP

   //#99                                       //TEST*9  (?)                      

   //$EXAM                                    //EXAM(0)

l  操作符區

操作符區位於名字區之後,規定了語句的型別:JOBEXECDDPROCPEND,或操作員命令。名字區後必須跟一個或多個空格。例如:

//EXAMPLE   JOB

//STEP1  EXEC

//INDD1   DD

l  引數區

引數區在操作符區之後,其中包括被逗號分隔的引數。這些決定該 JCL語句如何被處理。

引數區沒有固定的長度及列的要求。例如:

//EXAMPLE  JOB  2000CLASS=A

//STEP1  EXEC   PGM=IEYFORT

//PRINT  DD   SYSOUT=A

l  註釋區

說明區位於引數區後,用於對相應語句進行註釋說明,它可以是任何所需的說明資訊,

註釋區後必須跟一個空格。需要注意的是,僅當引數出現時才能書寫說明資訊,不然容易與引數混淆。下面是一個說明區的例子:

    //EXAMPLE  JOB  CLASS=A    IT IS A COMMENT

JCL 只允許在引數區和說明區有續行,當需要續行時,在當前行的第 71 列前必須將某

個引數或某個子引數以及引數後的逗號寫完整,且下一行第 12 列為“//”,第 3 列為空格,續行的內容只能從 4~16列開始,如果從 16 列後開始,將被認為是註釋語句。下面是一個續行的例子:

//DATA  DD  DSN=SYS1.FORTLIB

//  DISP=OLD

三、 引數規則 

JCL 中,引數區內的引數的型別分為兩類:

(1) 位置引數(positional):與其他引數保持相對位置的引數;

(2) 關鍵字引數(keyword):由一個關鍵字和等號後面的可變資料組成。

如果在一個語句內既有位置引數又有關鍵字引數時,所有的關鍵字引數必須位於位置參

數之後。例: 

//EXAMPLE  JOB    2000,CLASS=A   

位置引數  關鍵字引數  

一個位置引數或關鍵字引數中的可變數字,也可能是一個子參數列。該表中同樣可能含

有位置和關鍵字這兩種型別的引數,它們同樣遵循位置引數和關鍵字引數的所有規則。當參

數有子引數時,子引數必須順序排列在圓括號括內。例:

//EXAMPLE  JOB  (2000,100,30),COND=(9,LT)

在瞭解引數型別的概念後,我們總結出引數的書寫規則如下:

1.位置引數和關鍵字引數之間必須用逗號分開,不允許有空格。值得注意的是,在 JCL

語句中錯寫空格,經常導致非常難以查出的錯誤。

      正確的                                    錯誤的

//EXAMPLE  JOB  2000,CLASS=A          //EXAMPLE  JOB  2000,  CLASS=A 

//EXP  JOB  (2000,9),CLASS=A            //EXP  JOB  (2000,9)CLASS=A

 

2.必須按規定的次序書寫引數:所有的關鍵字引數必須位於位置引數之後,而所有位

置引數也必須按規定排列。

      正確的                                    錯誤的

//EXAMPLE  JOB  2000,CLASS=A                 //EXAMPLE  JOB  CLASS=A,2000 

 

3.當預設某個位置引數或某個子引數時,應以一個逗號指明所在位置。當預設最後一

個位置引數時,逗號可以省略。例如:

//EXP    JOB   (2000, ,9),CLASS=A

//SYSTEM  JOB  ,SYSTEM,CLASS=S,MSGLEVEL=(0,0)

 

4 當沒有任何位置引數時,則不必書寫任何內容表示。例如:

//EXP  JOB  CLASS=A

 

5.關鍵字引數之間沒有相對位置的規定,可以按任何次序排列。例如:

//EXP  JOB  2000,CLASS=A,MSGLEVEL=1

也可寫作:

//EXP  JOB  2000, MSGLEVEL=1,CLASS=A

 

6.允許含有特殊字元的引數或子引數,且其中的特殊字元並非起某種特定的語法功能

(見前面表 )時,必須用撇號“’”替代括號將這些引數和子引數括起來,例:ACCT=123+456’。而在這些引數與子引數中要用到撇號時,則需兩個連續的撇號表示,例:ONEIL 需寫作’O’’NEIL’。有些語句中的某些引數或子引數含有一些特定的特殊字元時,將不需要用撇號括起來,詳細的情況清參考表 3.2.2。在表 3.2.1 中我們可以知道,在 JCL 中用“&”來表識符號引數的開始。當引數中含有“&”且不用來表示符號引數時,則需使用連續的兩個“&”來表示“&”。例:

//S1  EXEC  PGM=IEFBR14,ACCT=’&&ABC’

//DD1 DD    DSN=&&TEST,UNIT=SYSDA,SPACE=(TRK,(1,1))

 

MVS系統中,系統將視連續的兩個“&”為一個字元。所以建議使用者將含有“&”的參

數用撇號括起來以避免出錯。

相關文章