返回文章列表

REXX 與 COBOL 大型主機程式設計技術

本文探討大型主機環境下的 REXX 與 COBOL 程式設計技術,涵蓋條件判斷、迴圈控制、子程式與函式、陣列操作等 REXX 基礎語法,並解析 COBOL 的限制與改進,以及物件導向 COBOL 的特性。此外,文章也詳細介紹大型主機資料函式庫 IMS 與 Db2,以及交易管理系統 CICS

大型主機 程式設計

大型主機系統在金融、電信等關鍵產業中扮演著重要角色,而 REXX 和 COBOL 作為其主要的程式語言,對於維護和開發大型主機應用至關重要。本文將探討 REXX 的基礎語法,包括條件判斷、迴圈、子程式和陣列操作,並以實際程式碼範例輔助說明。同時,文章也將探討 COBOL 的發展歷程,包括其物件導向的特性以及在程式模組化方面的挑戰。此外,本文將介紹大型主機環境中常用的資料函式庫系統,例如 IMS 和 Db2,以及交易管理系統 CICS,並深入解析 IMS 的階層式資料函式庫架構、交易處理機制和相關工具,以幫助讀者更全面地理解大型主機程式設計的技術核心。

REXX 程式語言基礎與應用

REXX(Restructured Extended Executor)是一種功能強大的指令碼語言,廣泛用於大型主機系統和各種作業系統中。它的語法簡單易學,同時具備豐富的功能,使其成為程式設計師和系統管理員的得力工具。

條件判斷:IF/THEN/ELSE

在 REXX 中,條件判斷是透過 IF/THEN/ELSE 結構來實作的。下面是一個簡單的登入驗證範例:

Say "Enter your user name"
Pull user_name
Say "Enter your password"
Pull password
If user_name = "tom" then
  If password = "t123" then
    Say "Login successful"
  Else
    Say "Incorrect password"
Else
  Say "Incorrect user name"

內容解密:

  1. 首先,程式會提示使用者輸入使用者名稱和密碼。
  2. 使用 IF 陳述式檢查使用者名稱是否為 “tom”。如果是,則進入巢狀的 IF 陳述式檢查密碼。
  3. 如果密碼正確,則顯示 “Login successful”。否則,顯示相應的錯誤訊息。

多重條件選擇:SELECT 陳述式

當需要評估多個條件時,使用 SELECT 陳述式比多層巢狀的 IF/THEN/ELSE 更為簡潔清晰。以下是一個範例,用於根據輸入的業務編號顯示對應的業務實體型別:

Say "Enter the business number"
Pull business_number
Select
  When business_number = '1' then
    Say 'Sole Proprietor'
  When business_number = '2' then
    Say 'Single-Member LLC'
  When business_number = '3' then
    Say 'S Corporation'
  When business_number = '4' then
    Say 'C-Corporation'
  When business_number = '5' then
    Say 'Partnership'
  When business_number = '6' then
    Say 'Trust/Estate'
  Otherwise
    Say 'The number does not exist'
End

內容解密:

  1. 使用者被提示輸入一個業務編號。
  2. SELECT 陳述式根據輸入的編號評估多個條件,並執行對應的 Say 陳述式。
  3. 如果輸入的編號沒有匹配的條件,則執行 Otherwise 子句下的陳述式。

迴圈控制:DO 和 DO WHILE

REXX 提供了兩種主要的迴圈控制結構:DODO WHILE

DO 迴圈範例:

Counter = 1
Do 5
  Say Counter
  Counter = Counter + 1
End

內容解密:

  1. 初始化計數器 Counter 為 1。
  2. DO 陳述式指定迴圈次數為 5。
  3. 在迴圈內,印出當前的 Counter 值並將其遞增。

DO WHILE 迴圈範例:

Counter = 1
Do While Counter <= 5
  Say Counter
  Counter = Counter + 1
End

內容解密:

  1. 初始化計數器 Counter 為 1。
  2. DO WHILE 陳述式根據條件(Counter <= 5)決定是否繼續迴圈。
  3. 在迴圈內,印出當前的 Counter 值並將其遞增。

子程式和函式呼叫

REXX 允許呼叫子程式和函式。下面是一個簡單的子程式範例,用於將兩個數字相乘:

Say "Enter the first number"
Pull First_number
Say "Enter the second number"
Pull Second_number
Call MultiplyNumbers First_number, Second_number
Exit

MultiplyNumbers:
  PARSE ARG a, b
  Say a * b

內容解密:

  1. 使用者被提示輸入兩個數字。
  2. 使用 Call 陳述式呼叫 MultiplyNumbers 子程式,並傳遞兩個數字作為引數。
  3. 在子程式中,使用 PARSE ARG 陳述式接收引數並進行乘法運算。

將子程式轉換為函式

要將子程式轉換為函式,需要使用 Return 陳述式傳回計算結果。下面是將 MultiplyNumbers 修改為函式的範例:

Say "Enter the first number"
Pull first_number
Say "Enter the second number"
Pull second_number
Say MultiplyNumbers(first_number, second_number)
Exit

MultiplyNumbers:
  PARSE ARG a, b
  Return a * b

內容解密:

  1. 不再使用 Call 陳述式,而是直接在表示式中呼叫 MultiplyNumbers 函式。
  2. 使用 Return 陳述式傳回計算結果。

陣列操作

REXX 的陣列功能強大,支援多維陣列。以下是一個簡單的一維陣列範例:

First_name. = ''
First_name.0 = 'Jane'
First_name.1 = 'Joe'
First_name.2 = 'Alice'
do Counter = 0 to 2
  Say 'Name: ' First_name.Counter
end

內容解密:

  1. 初始化 First_name. 為空字串。
  2. 指定給 First_name. 的不同索引。
  3. 使用迴圈印出陣列中的名字。

COBOL 程式設計技術與進階應用

COBOL 語言自誕生以來,經歷了多次的更新與改進,特別是在 1990 年代引入了物件導向程式設計(Object-Oriented Programming, OOP)的概念,稱為 OO COBOL。儘管如此,COBOL 仍面臨著諸多挑戰與限制,例如全域變數的使用以及程式模組化的困難。

COBOL 的限制與改進

COBOL 的主要限制包括全域變數的使用以及程式碼模組化的困難。為瞭解決這些問題,COBOL 在 1990 年代引入了物件導向程式設計(OO COBOL),提供了繼承、介面、抽象和多型等特性。然而,儘管具備這些現代化的程式設計特性,COBOL 並未成為主流的開發語言,許多開發者更傾向於使用 C++ 或 Java 等語言。

物件導向 COBOL 的特點

  1. 繼承(Inheritance):允許開發者建立新的類別,並繼承現有類別的屬性和方法。
  2. 介面(Interfaces):定義了一組方法,但不提供實作,類別可以實作多個介面。
  3. 抽象(Abstraction):允許開發者定義抽象類別和抽象方法,以實作更高層次的抽象。
  4. 多型(Polymorphism):允許不同類別的物件以相同的方式被處理。

程式設計技術

本章節將介紹幾種 COBOL 程式設計技術,包括複製成員(Copy Members)和子程式(Subprograms),這些技術有助於提高程式設計效率和可維護性。

複製成員(Copy Members)

複製成員是一種將常用程式碼片段儲存在資料集中的方法,可以在 COBOL 程式中透過 COPY 命令參照。複製成員的主要優點包括:

  1. 提高生產力:避免重複編寫相同的程式碼。
  2. 減少錯誤:只需修改一次程式碼,即可影響所有參照該複製成員的程式。
  3. 標準化:促程式式碼的標準化,提高可維護性。

使用 COPY 命令時,需要指定成員名稱和相關的資料集。例如:

COPY member-name

在 JCL 中,需要定義相關的 DD 陳述式,以指定資料集:

//SYS1 DD DSN=USER1.DATA1,DISP=SHR
//SYS2 DD DSN=USER1.DATA2,DISP=SHR
//SYSIN DD *
COPY INDD=(SYS1),OUTDD=SYS2
SELECT MEMBER=B

子程式(Subprograms)

子程式是已經編譯完成的程式,可以透過 CALL 命令呼叫,並使用 USING 命令傳遞引數。子程式的主要優點包括:

  1. 模組化:將程式碼分解為獨立的模組,提高可維護性。
  2. 重用性:可以在多個程式中重用子程式。

使用子程式時,需要注意引數的順序和 PIC 定義的一致性。例如:

CALL "TaxRate" USING INCOME-AMOUNT FILING-STATUS.

在 JCL 中,需要定義相關的 DD 陳述式,以連結子程式的物件模組:

//LINK.SYSLIB DD
// DD DSN=USER1.PROG.OBJLIB,DISP=SHR

資料函式庫與交易管理系統在大型主機環境中的應用

全球資料函式庫軟體市場龐大,根據ReportLinker的研究,2020年的支出超過1420億美元。當然,主要玩家包括Oracle、SAP和Microsoft等公司。但Amazon已成為市場上的重要因素,各種新創公司,如MongoDB、Couchbase和Trino,也迅速獲得關注。

大型主機資料函式庫的重要性

自從大型主機電腦誕生以來,資料函式庫就變得至關重要。企業需要有效的方式來儲存大量關於客戶、庫存、薪水等的資料。事實上,自從有了資料函式庫以來,經濟成長就變得更加依賴於它們,因為紙本檔案的需求減少了。

傳統大型主機資料函式庫:IMS與Db2

在本章中,我們將探討兩種傳統的大型主機資料函式庫:IMS和Db2。我們還將探討交易系統,如CICS,它們能夠近乎實時地處理大量資料。

資訊管理系統(IMS)

IBM的資訊管理系統(IMS)的起源可以追溯到20世紀60年代中期。該資料函式庫的開發是由阿波羅太空計劃所推動的,該計劃需要建立一個系統來管理太空模組的會計,每個太空模組都有超過200萬個零件。

IMS的主要元件

IMS基本上是三個產品的組合,如圖8-1所示。

圖8-1:IMS的主要元件

內容解密:

  • IMS Database Manager 負責核心的資料函式庫功能,例如儲存和檢索資訊。
  • IMS Transaction Manager 是一個線上系統,能夠使用根據佇列的系統處理來自終端和裝置的大量交易資料。
  • IMS Systems Services 負責協調交易並提供日誌。

大型主機環境中的交易管理

在大型主機環境中,交易管理系統如CICS能夠處理大量的交易資料。這些系統對於企業來說至關重要,因為它們能夠近乎實時地處理客戶的交易請求。

重點整理

  • 大型主機資料函式庫自誕生以來就對經濟成長至關重要。
  • IMS和Db2是兩種傳統的大型主機資料函式庫。
  • 交易管理系統如CICS能夠近乎實時地處理大量交易資料。
  • IMS是一個由三個主要元件組成的系統:IMS Database ManagerIMS Transaction ManagerIMS Systems Services

重點程式碼範例與解析

IDENTIFICATION DIVISION.
PROGRAM-ID. IMS-EXAMPLE.

PROCEDURE DIVISION.
    CALL 'DL/I' USING  DFSLI000-PCB
                       DFSLI001-SSA.

內容解密:

  • IDENTIFICATION DIVISION 是COBOL程式的第一部分,用於標識程式。
  • PROGRAM-ID 指定了程式的名稱。
  • PROCEDURE DIVISION 是程式的主要邏輯部分。
  • CALL 'DL/I' 是用於呼叫DL/I介面的陳述式,用於存取和操作IMS資料函式庫中的資料。
  • DFSLI000-PCBDFSLI001-SSA 是用於與IMS介面互動的引數。

本章節對大型主機環境中的資料函式庫和交易管理系統進行了詳細的介紹,包括IMS的主要元件和COBOL程式範例。下一章將繼續探討相關主題。

IMS 資料函式倉管理系統與交易管理系統深度解析

IMS 資料函式倉管理系統:階層式資料函式庫架構

IMS 資料函式倉管理系統採用階層式資料函式庫設計,將資料以樹狀結構組織,從一般到具體層層細分。例如,若要為公司部門建立資料函式庫,其架構設計如圖 8-2 所示。

圖 8-2:階層式資料函式庫範例

此圖示呈現部門資訊的階層結構,根節點代表部門的一般資訊,每個資料函式庫記錄僅允許一個根節點。根節點以下的各層級稱為從屬節點,例如員薪水訊(EMPLOYEES)是部門資訊(DEPARTMENT)的子節點,同時也是稅務資訊(TAXES)的父節點。

每個節點包含多個欄位,如部門資訊包含部門名稱(DNAME)、部門編號(DNUMBER)和部門描述(DDESCRIP)。這種結構使得資料儲存於特定的節點中。

階層式資料函式庫的優缺點分析

階層式資料函式庫的設定較為複雜,且一旦初始結構建立後,進行變更會比較困難,因為需要重新對映關係,這非常耗時。

然而,階層式資料函式庫的最大優勢在於其處理速度極快。IMS 是目前唯一能夠支援每秒超過 117,000 筆資料函式庫更新交易的資料函式庫環境。其速度優勢主要來自於階層結構中已存在的關係,無需額外的處理程式。

效能與優勢

在處理大量平行指令時,速度至關重要。IMS 除了具備高速處理能力外,還具有以下優點:

  • 長期的可靠性與安全性
  • 高擴充套件性
  • 較低的磁碟空間與 CPU 使用率
  • 相對較低的每筆交易成本

IMS 資料函式庫型別

IMS 資料函式倉管理系統支援多種資料函式庫型別:

  1. 全功能資料函式庫(Full-function databases)

    • 使用 DL/I 呼叫進行資料存取,可進行查詢、替換、刪除或新增節點。
    • 支援多種存取方法,如 HDAM 和 HIDAM。
    • 資料以 VSAM 格式儲存,並可使用主索引和次索引加速操作。
  2. 快速路徑資料函式庫(Fast path databases)

    • 針對高交易速度需求的應用場景。
    • 包含資料輸入資料函式庫(DEDBs)和主記憶體資料函式庫(MSDBs),無次索引。
  3. 高用性大型資料函式庫(HALDBs)

    • 由 IBM 開發,用於提升可用性和管理龐大資料量。
    • 可儲存超過 40 TB 的資料。

IMS 資料函式庫具有高效能、資料完整性和內建備份與還原機制等特點。與 XML 結合使用時,由於兩者皆採用階層式結構,因此可以無縫整合,簡化 API 呼叫的處理。

IMS 交易管理系統:高效能交易處理平台

IMS 交易管理系統是一個全面性的交易處理平台,不僅與 IMS 資料函式庫整合,也支援 Db2 資料函式庫。其支援三種主要的交易型別:

  1. 交易(Transactions)

    • 最常見的交易形式,通常來自外部來源,如 POS 系統、ATM、信用卡裝置或行動應用程式。
    • 若交易來自應用程式,則稱為程式切換。
  2. 命令(Commands)

    • 來自系統通道的訊息,用於管理 IMS 平台,如 TSO、z/OS 或使用者終端機指令。
  3. 訊息切換(Message switch)

    • 不同機器之間的訊息傳遞。

IMS 的運作架構

IMS 在 z/OS 子系統上運作,並存取多個位址空間,以實作更高的速度和安全性。這些位址空間被稱為區域(regions),包括:

  • IMS 控制區域(IMS control region):系統的核心,負責交易和訊息的管理、排程和活動日誌記錄。
  • IMS 環境(IMS environments):根據需求設定的硬體和軟體組態,可包含 IMS 交易管理器和 IMS 資料函式倉管理器。
  • 訊息處理區域(Message processing region):負責即時交易處理。
  • Java 處理區域(Java processing region):支援 Java 應用程式的特殊訊息處理。

內容解密:

本段落詳細介紹了 IMS 交易管理系統的核心功能與運作模式。透過不同的區域劃分,IMS 能夠實作高效能的交易處理,並確保系統的安全性和穩定性。值得注意的是,IMS 能夠與多種 IBM 技術(如 Db2 和 z/OS)緊密整合,為企業提供全面的大型主機解決方案。

資訊管理系統(IMS)複雜度管理與工具支援

在現代企業環境中,多個IMS交易管理器的共存並不罕見。此外,資料可能來自多種來源,如CICS、MQ和WebSphere應用伺服器。這種多元化的資料來源和管理需求大大增加了交易管理的複雜性。為瞭解決這個問題,企業通常採用先進的訊息佇列系統來進行有效的交易管理。

IMS交易管理器的另一個重要優勢在於它是整合系統的一部分。這意味著使用者無需在不同的LPAR或系統之間切換,從而提高了整體的效能和生產力。

IMS服務與工具

雖然IMS主要在z/OS系統上執行,但IBM已經使該技術具有可擴充套件性,允許其他平台如Linux、z/VM和z/VSE能夠存取其資料函式庫或啟動交易。其中一種常見的方法是透過Java資料函式庫連線(JDBC),甚至可以透過TCP/IP建立連線。另一方面,IMS也可以呼叫外部系統,這個過程被稱為「呼叫輸出」。

多年來,IBM開發了多種與IMS配合使用的工具。以下是一些例子:

IBM IMS相關工具

  • IBM Z應用效能管理聯結器:用於交易追蹤。
  • IBM Z服務自動化套件:自動化sysplex中的硬體和軟體資源,提供高用性。
  • IMS資料函式庫解決方案套件for z/OS:幫助管理完整功能的資料函式庫,提供24/7可用性,並減少資料函式庫重組的影響。
  • IMS克隆工具for z/OS:簡化IMS子系統和資料函式庫的克隆過程,降低成本並減少停機時間。
  • IBM Security Guardium資料加密:為IMS等資料函式庫、檔案和應用提供先進的加密功能,包括令牌化、資料遮罩和金鑰管理,符合多項法規要求,如GDPR、HIPAA和PCI DSS。

IMS企業套件

IMS企業套件提供現代化的使用者介面和多種工具,所有IMS客戶均可免費獲得。以下是其主要功能:

  • IMS Explorer for Development:根據Eclipse框架的開發環境,可輕鬆顯示和編輯資料函式庫、段和欄位。
  • IMS Data Provider for Microsoft .NET:允許使用SQL進行查詢,並支援.NET語言如C#和Visual Basic。
  • IMS SOAP閘道:連線外部Web服務和IMS應用,無需更改現有業務邏輯。
  • IMS Connect API for Java:簡化使用Java在z/OS、Linux和Windows上的應用開發。

第三方IMS工具

除了IBM的工具外,還有多家獨立軟體開發商提供相關產品。例如,BMC AMI Data利用AI和機器學習技術實作IMS資料函式庫的自動化管理,提供更高的可用性、更好的備份和還原選項,以及團隊開發的敏捷性。

以下是其他廠商提供的IMS工具範例:

  • Broadcom Database Management Solutions for IMS for z/OS:最佳化資料函式庫效能,如更快的資料檢索、更低的備份和還原時間、更高的資料可用性等。
  • CONNX DB Adapter for IMS:透過JDBC、ODBC、.NET和OLE DB等聯結器實作與資料函式庫的無縫連線,建立跨企業資料來源和應用的單一後設資料模型。
  • DataVantage for IMS:透過先進的遮罩處理保護個人可識別資訊(PII)和公司私有資料。

IMS程式語言

IMS擁有自己的程式語言,並支援多種其他語言,能夠更好地處理傳入和傳出的訊息和交易,以及對資料函式庫的查詢、排序等操作。圖8-3展示了IMS系統與語言的工作流程。

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

title REXX 與 COBOL 大型主機程式設計技術

package "NumPy 陣列操作" {
    package "陣列建立" {
        component [ndarray] as arr
        component [zeros/ones] as init
        component [arange/linspace] as range
    }

    package "陣列操作" {
        component [索引切片] as slice
        component [形狀變換 reshape] as reshape
        component [堆疊 stack/concat] as stack
        component [廣播 broadcasting] as broadcast
    }

    package "數學運算" {
        component [元素運算] as element
        component [矩陣運算] as matrix
        component [統計函數] as stats
        component [線性代數] as linalg
    }
}

arr --> slice : 存取元素
arr --> reshape : 改變形狀
arr --> broadcast : 自動擴展
arr --> element : +, -, *, /
arr --> matrix : dot, matmul
arr --> stats : mean, std, sum
arr --> linalg : inv, eig, svd

note right of broadcast
  不同形狀陣列
  自動對齊運算
end note

@enduml

圖示說明

此圖示展示了IMS系統如何支援多種程式語言,並利用這些語言處理各種操作,從而提高整體的處理效率。