Skip to content

VSAMファイルとは

VSAM(Virtual Storage Access Method)は、IBMメインフレームで使用されるファイルアクセス方法です。

従来のファイルアクセスの問題点

Section titled “従来のファイルアクセスの問題点”

問題:

従来のシーケンシャルファイルアクセスでは、以下の問題がありました:

  • ランダムアクセスが困難
  • インデックスによる高速検索ができない
  • 大量のデータ処理に非効率

メリット:

  • ランダムアクセスが可能
  • インデックスによる高速検索
  • 効率的なデータ管理

特徴:

  • レコードが追加順に格納される
  • シーケンシャルアクセスのみ
  • レコードの削除ができない

使用例:

  • ログファイル
  • 履歴データ
  • 監査トレイル

特徴:

  • キーによるインデックスアクセス
  • ランダムアクセスが可能
  • レコードの追加・更新・削除が可能

使用例:

  • マスターファイル
  • トランザクションファイル
  • 参照データ

特徴:

  • 相対レコード番号によるアクセス
  • 固定長レコード
  • 高速なランダムアクセス

使用例:

  • 配列のようなデータ
  • 固定長レコードの大量データ
//VSAMFILE DD DSN=USER01.CUSTOMER.KSDS,
// DISP=SHR
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT CUSTOMER-FILE ASSIGN TO CUSTOMER-KSDS
ORGANIZATION IS INDEXED
ACCESS MODE IS RANDOM
RECORD KEY IS CUSTOMER-KEY
FILE STATUS IS WS-FILE-STATUS.
DATA DIVISION.
FILE SECTION.
FD CUSTOMER-FILE.
01 CUSTOMER-RECORD.
05 CUSTOMER-KEY PIC X(10).
05 CUSTOMER-NAME PIC X(30).
05 CUSTOMER-BALANCE PIC 9(10)V99.

シーケンシャル読み取り:

READ CUSTOMER-FILE
AT END SET WS-FILE-EOF TO TRUE
NOT AT END
DISPLAY "Customer: " CUSTOMER-NAME
END-READ

ランダム読み取り:

MOVE 'CUST001' TO CUSTOMER-KEY
READ CUSTOMER-FILE
INVALID KEY
DISPLAY "Customer not found"
NOT INVALID KEY
DISPLAY "Customer: " CUSTOMER-NAME
END-READ
MOVE 'CUST001' TO CUSTOMER-KEY
MOVE 'John Doe' TO CUSTOMER-NAME
MOVE 1000.00 TO CUSTOMER-BALANCE
WRITE CUSTOMER-RECORD
INVALID KEY
DISPLAY "Write error"
END-WRITE
MOVE 'CUST001' TO CUSTOMER-KEY
READ CUSTOMER-FILE
NOT INVALID KEY
ADD 100.00 TO CUSTOMER-BALANCE
REWRITE CUSTOMER-RECORD
INVALID KEY
DISPLAY "Update error"
END-REWRITE
END-READ
MOVE 'CUST001' TO CUSTOMER-KEY
DELETE CUSTOMER-FILE
INVALID KEY
DISPLAY "Delete error"
END-DELETE

ファイルステータスの確認:

01 WS-FILE-STATUS PIC X(2).
88 WS-FILE-OK VALUE '00'.
88 WS-FILE-EOF VALUE '10'.
88 WS-FILE-DUPLICATE VALUE '02'.
88 WS-FILE-NOT-FOUND VALUE '23'.
88 WS-FILE-ERROR VALUE '99'.
READ CUSTOMER-FILE
IF WS-FILE-OK
DISPLAY "Read successful"
ELSE IF WS-FILE-NOT-FOUND
DISPLAY "Record not found"
ELSE
DISPLAY "Error: " WS-FILE-STATUS
END-IF
IDENTIFICATION DIVISION.
PROGRAM-ID. VSAM-OPERATIONS.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT CUSTOMER-FILE ASSIGN TO CUSTOMER-KSDS
ORGANIZATION IS INDEXED
ACCESS MODE IS RANDOM
RECORD KEY IS CUSTOMER-KEY
FILE STATUS IS WS-FILE-STATUS.
DATA DIVISION.
FILE SECTION.
FD CUSTOMER-FILE.
01 CUSTOMER-RECORD.
05 CUSTOMER-KEY PIC X(10).
05 CUSTOMER-NAME PIC X(30).
05 CUSTOMER-BALANCE PIC 9(10)V99.
WORKING-STORAGE SECTION.
01 WS-FILE-STATUS PIC X(2).
88 WS-FILE-OK VALUE '00'.
88 WS-FILE-EOF VALUE '10'.
88 WS-FILE-NOT-FOUND VALUE '23'.
88 WS-FILE-ERROR VALUE '99'.
PROCEDURE DIVISION.
MAIN-PROCEDURE.
OPEN I-O CUSTOMER-FILE
*> レコードの追加
MOVE 'CUST001' TO CUSTOMER-KEY
MOVE 'John Doe' TO CUSTOMER-NAME
MOVE 1000.00 TO CUSTOMER-BALANCE
WRITE CUSTOMER-RECORD
INVALID KEY
DISPLAY "Write error: " WS-FILE-STATUS
END-WRITE
*> レコードの読み取り
MOVE 'CUST001' TO CUSTOMER-KEY
READ CUSTOMER-FILE
INVALID KEY
DISPLAY "Record not found"
NOT INVALID KEY
DISPLAY "Customer: " CUSTOMER-NAME
DISPLAY "Balance: " CUSTOMER-BALANCE
END-READ
*> レコードの更新
MOVE 'CUST001' TO CUSTOMER-KEY
READ CUSTOMER-FILE
NOT INVALID KEY
ADD 100.00 TO CUSTOMER-BALANCE
REWRITE CUSTOMER-RECORD
INVALID KEY
DISPLAY "Update error"
END-REWRITE
END-READ
*> レコードの削除
MOVE 'CUST001' TO CUSTOMER-KEY
DELETE CUSTOMER-FILE
INVALID KEY
DISPLAY "Delete error"
END-DELETE
CLOSE CUSTOMER-FILE
STOP RUN.

VSAMファイルのポイント:

  • ESDS: シーケンシャルアクセスのみ、履歴データに適している
  • KSDS: キーによるインデックスアクセス、マスターファイルに適している
  • RRDS: 相対レコード番号によるアクセス、固定長レコードに適している
  • 操作: READ、WRITE、REWRITE、DELETE
  • ファイルステータス: エラーハンドリングに重要

適切なVSAMファイルの使用により、効率的なデータ管理が可能になります。