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

《大型機學習之具體技術之-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系統中,系統將視連續的兩個“&”爲一個字符。所以建議用戶將含有“&”的參

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

發佈了116 篇原創文章 · 獲贊 8 · 訪問量 31萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章