834
z/OS DFSMS データ・セットの使用法 SC88-9114-06 (英文原典:SC26-7410-08)

DFSMS データ・セットの使用法

  • Upload
    others

  • View
    7

  • Download
    0

Embed Size (px)

Citation preview

Page 1: DFSMS データ・セットの使用法

z/OS

DFSMS データ・セットの使用法

SC88-9114-06

(英文原典:SC26-7410-08)

���

Page 2: DFSMS データ・セットの使用法
Page 3: DFSMS データ・セットの使用法

z/OS

DFSMS データ・セットの使用法

SC88-9114-06

(英文原典:SC26-7410-08)

���

Page 4: DFSMS データ・セットの使用法

本書、および本書で記述されている製品をご使用になる前に、 759ページの『特記事項』を必ずお読みください。

本書は、z/OS® (5694-A01) のバージョン 1 リリース 10 に適用されます。改訂版などで特に断りのない限り、以降のすべてのリリースおよびモディフィケーションに適用されます。

本書は、SC88-9114-05 の改訂版です。

お客様の環境によっては、資料中の円記号がバックスラッシュと表示されたり、バックスラッシュが円記号と表示されたりする場合があります。

 

原典: SC26-7410-08

z/OS

DFSMS Using Data Sets

発行: 日本アイ・ビー・エム株式会社

担当: ナショナル・ランゲージ・サポート

第9版第1刷 2008.10

© Copyright International Business Machines Corporation 1987, 2008.

Page 5: DFSMS データ・セットの使用法

目次図. . . . . . . . . . . . . . . . . xiii

表 . . . . . . . . . . . . . . . . . xv

本書について . . . . . . . . . . . . xvii本書の主な内容. . . . . . . . . . . . . xvii必要な製品知識. . . . . . . . . . . . . xvii参照資料 . . . . . . . . . . . . . . . xviiiインターネットの z/OS DFSMS 情報へのアクセス xviii

変更の要約 . . . . . . . . . . . . . xixSC26-7410-08 z/OS バージョン 1 リリース 10 の要約 . . . . . . . . . . . . . . . . . xix新規情報 . . . . . . . . . . . . . . xix削除された情報 . . . . . . . . . . . . xix

SC88-9114-05 z/OS バージョン 1 リリース 9 の要約 . . . . . . . . . . . . . . . . . xix新規情報 . . . . . . . . . . . . . . xx

SC88-9114-04 z/OS バージョン 1 リリース 8 の要約 . . . . . . . . . . . . . . . . . xx新規情報 . . . . . . . . . . . . . . xx変更情報 . . . . . . . . . . . . . . xx削除情報 . . . . . . . . . . . . . . xx

SC88-9114-03 z/OS バージョン 1 リリース 7 の要約 . . . . . . . . . . . . . . . . . xxi新規情報 . . . . . . . . . . . . . . xxi変更情報 . . . . . . . . . . . . . . xxi削除情報 . . . . . . . . . . . . . . xxi

第 1 部 すべてのデータ・セット . . . 1

第 1 章 データ・セットの処理 . . . . . 3データの保管および管理 . . . . . . . . . . 3システム管理データ・セット . . . . . . . . 4分散ファイル・マネージャー . . . . . . . . 4

アクセス方式 . . . . . . . . . . . . . . 4基本直接アクセス方式 . . . . . . . . . . 5基本区分アクセス方式 . . . . . . . . . . 5基本順次アクセス方式 . . . . . . . . . . 6仮想域内データ (DIV) . . . . . . . . . . 6索引順次アクセス方式 . . . . . . . . . . 6オブジェクト・アクセス方式 . . . . . . . . 6待機順次アクセス方式 . . . . . . . . . . 7仮想記憶アクセス方式 . . . . . . . . . . 7z/OS UNIX ファイルへのアクセス . . . . . . 8アクセス方式の選択 . . . . . . . . . . . 8

直接アクセス記憶装置 (DASD) ボリューム . . . . 9DASD ラベル . . . . . . . . . . . . . 9トラックのフォーマット . . . . . . . . . 9トラック・オーバーフロー . . . . . . . . 11

VSAM レコード・アドレッシング . . . . . . 11非 VSAM アクセス方式を使用した実アドレスおよび相対アドレッシング . . . . . . . . . 12

磁気テープ・ボリューム . . . . . . . . . . 14磁気テープ・ラベルの使用 . . . . . . . . 14ファイル・シーケンス番号の指定 . . . . . . 14ラベルなしテープの識別 . . . . . . . . . 17テープ・マークの使用 . . . . . . . . . . 17

データ管理マクロ . . . . . . . . . . . . 18データ・セット処理 . . . . . . . . . . . 19データ・セットの割り振り . . . . . . . . 19プログラムを使用したデータ・セットの処理 . . 19アクセス方式の使用 . . . . . . . . . . 20アドレッシング・モードの使用 . . . . . . . 21Hiperspace および Hiperbatch の使用 . . . . . 21VSAM データ・セットの処理 . . . . . . . 21PDS、PDSE、および UNIX ディレクトリーの処理 . . . . . . . . . . . . . . . . 22順次データ・セットおよび PDSE と PDS のメンバーの処理 . . . . . . . . . . . . . 23アクセス方式を使用した UNIX ファイルの処理 24EXCP、EXCPVR、および XDAP マクロの処理 25

分散データ管理 (DDM) 属性 . . . . . . . . 25一時データ・セットの仮想入出力 . . . . . . . 26データ・セット名 . . . . . . . . . . . . 27カタログおよびボリューム目録 . . . . . . . . 28

VTOC . . . . . . . . . . . . . . . 28カタログ . . . . . . . . . . . . . . 28データ・セット名およびメタデータ . . . . . 29データ・セット名のセキュリティー . . . . . 30

第 2 章 ストレージ管理サブシステムの使用 . . . . . . . . . . . . . . . . . 31自動クラス選択ルーチンの使用 . . . . . . . . 33データ・セットの割り振り . . . . . . . . . 35

JCL を使用したデータ・セットの割り振り . . . 35アクセス方式サービス・プログラムのALLOCATE コマンドを使用したシステム管理データ・セットの割り振り . . . . . . . . . 38TSO ALLOCATE コマンドを使用したデータ・セットの割り振り . . . . . . . . . . . . 39動的割り振りを使用したデータ・セットの割り振り . . . . . . . . . . . . . . . . 40

第 3 章 直接アクセス・ボリュームでのスペースの割り振り . . . . . . . . . . 41スペース所要量の指定 . . . . . . . . . . . 41ブロック . . . . . . . . . . . . . . 41平均レコード長 . . . . . . . . . . . . 42トラックまたはシリンダー . . . . . . . . 43

© Copyright IBM Corp. 1987, 2008 iii

Page 6: DFSMS データ・セットの使用法

絶対トラック . . . . . . . . . . . . . 43その他のスペース割り振りオプション . . . . 43

最大データ・セット・サイズ . . . . . . . . 431 つのボリューム上での最大サイズ . . . . . 43ボリュームの最大数 . . . . . . . . . . 44最大 VSAM データ・セット・サイズ. . . . . 44

最小データ・セット・サイズ . . . . . . . . 44保証スペース属性を指定しない 1 次および 2 次のスペース割り振り . . . . . . . . . . . . 45マルチボリューム VSAM データ・セット . . . 45マルチボリューム非 VSAM データ・セット . . 46拡張フォーマット・データ・セット . . . . . 46

保証スペース属性を指定したデータ・セットの割り振り . . . . . . . . . . . . . . . . . 47

DISP=NEW または MOD を指定した保証スペース . . . . . . . . . . . . . . . . 47VSAM の場合の保証スペース . . . . . . . 47DISP=OLD または SHR を指定した保証スペース 47拡張フォーマット・データ・セットを指定した保証スペース . . . . . . . . . . . . . 48保証スペースの例 . . . . . . . . . . . 48

スペース制約軽減属性を指定したデータ・セットの割り振り . . . . . . . . . . . . . . . 49別の DASD ボリュームへの拡張 . . . . . . . 50データ・セットを定義するときの動的ボリューム・カウントの例 . . . . . . . . . . . 50既存のデータ・セットを割り振るときの動的ボリューム・カウントの例 . . . . . . . . . . 51

順次データ・セットについてのマルチボリューム考慮事項 . . . . . . . . . . . . . . . . 51拡張アドレス・ボリューム . . . . . . . . . 53スペース割り振りに関する追加情報 . . . . . . 55

第 4 章 データ・セットのバックアップとリカバリー . . . . . . . . . . . . . 57バックアップとリカバリー用の REPRO の使用 . . 58EXPORT と IMPORT を使用した VSAM データ・セットのバックアップとリカバリー . . . . . . 60エクスポートされたデータ・セットの構造 . . . 61EXPORT と IMPORT コマンド . . . . . . . 61

バックアップとリカバリー用のプログラムの書き込み . . . . . . . . . . . . . . . . . 61バックアップとリカバリー用の並行コピーの使用 . . 62リカバリー後のデータ・セットの更新 . . . . . 62リカバリー中でのカタログと VSAM データ・セット情報の同期 . . . . . . . . . . . . . . 62異常終了の処理 . . . . . . . . . . . . 63不適切にクローズされたデータ・セットを処理するための VERIFY の使用 . . . . . . . . 63

CICS VSAM Recovery . . . . . . . . . . . 65

第 5 章 データ・セットの保護 . . . . . 67z/OS セキュリティー・サーバー (RACF) . . . . 67

VSAM データ・セットに対する RACF 保護 . . 67VSAM データ・セットに対する総称プロファイルと個別プロファイル . . . . . . . . . . 68

非 VSAM データ・セットに対する RACF 保護 68データ・セット名の隠蔽 . . . . . . . . . 69

データ・セット・パスワード保護 . . . . . . . 70パスワードの割り当て . . . . . . . . . . 71データ・セットを定義するときの保護 . . . . 71誤ったパスワードの処理 . . . . . . . . . 71PASSWORD データ・セット内でのレコードの入力 . . . . . . . . . . . . . . . . 71

ユーザー・セキュリティー検査ルーチン . . . . . 72残存データの消去 . . . . . . . . . . . . 72

DASD データの消去 . . . . . . . . . . 72テープ・データの消去 . . . . . . . . . . 74

許可プログラム機能とアクセス方式サービス・プログラム . . . . . . . . . . . . . . . . 74アクセス方式サービス・プログラム暗号オプション 76データの暗号化と復号 . . . . . . . . . . 76ICSF に関する REPRO ENCIPHER およびDECIPHER. . . . . . . . . . . . . . 80

第 2 部 データ・セットと UNIX ファイルへの VSAM アクセス . . . . . 81

第 6 章 VSAM データ・セットの編成 85VSAM データ・フォーマット . . . . . . . . 85データ・セット・サイズ . . . . . . . . . 86制御インターバル . . . . . . . . . . . 86制御情報フィールド . . . . . . . . . . 86圧縮制御情報フィールド . . . . . . . . . 89制御域 . . . . . . . . . . . . . . . 89スパン・レコード . . . . . . . . . . . 89

VSAM データ・セット・タイプの選択 . . . . . 91入力順データ・セット . . . . . . . . . . 92UNIX ファイルへのシミュレートされた VSAMアクセス . . . . . . . . . . . . . . 93キー順データ・セット . . . . . . . . . . 95線形データ・セット . . . . . . . . . . 99固定長相対レコード・データ・セット . . . . 99可変長相対レコード・データ・セット . . . . 100VSAM データ・セット・タイプの要約 . . . . 101

拡張フォーマット VSAM データ・セット . . . . 102拡張フォーマット・データ・セットの定義に関する制約事項 . . . . . . . . . . . . . 103VSAM データ・ストライピング . . . . . . 104圧縮データ . . . . . . . . . . . . . 108

VSAM データ・セット内のレコードへのアクセス 109入力順データ・セットへのアクセス . . . . . 110キー順データ・セットへのアクセス . . . . . 110線形データ・セットへのアクセス . . . . . . 111固定長相対レコード・データ・セットへのアクセス . . . . . . . . . . . . . . . . 112可変長相対レコード・データ・セットへのアクセス . . . . . . . . . . . . . . . . 112

代替索引を通じてのレコードへのアクセス . . . . 112キー順データ・セットの場合の代替索引構造 . . 113入力順データ・セットの場合の代替索引構造 . . 115

iv z/OS V1R10 DFSMS データ・セットの使用法

||

Page 7: DFSMS データ・セットの使用法

代替索引のビルド . . . . . . . . . . . 116代替索引の自動アップグレード . . . . . . 116

データ圧縮 . . . . . . . . . . . . . . 116

第 7 章 VSAM データ・セットの定義 119データおよび索引コンポーネントに対するクラスター名の使用 . . . . . . . . . . . . . . 120アクセス方式サービス・プログラムを使用したデータ・セットの定義 . . . . . . . . . . . . 120クラスターの命名 . . . . . . . . . . . 120クラスター情報の指定 . . . . . . . . . 122アクセス方式サービス・プログラム・パラメーターの使用 . . . . . . . . . . . . . . 123VSAM データ・セット用のスペースの割り振り 125KSDS のデータ・コンポーネント用のスペースの計算 . . . . . . . . . . . . . . . 130索引コンポーネント用のスペースの計算 . . . 130ALTER を使用したコンポーネント属性の変更 131ALTER を使用したデータ・セットの名前変更 131

JCL を使用したデータ・セットの定義 . . . . . 131VSAM データ・セットのロード . . . . . . . 132

REPRO を使用した VSAM データ・セットのコピー . . . . . . . . . . . . . . . 132プログラムを使用したデータ・セットのロード 134作業ファイルとしての VSAM データ・セットの再使用 . . . . . . . . . . . . . . . 136

データ・セットのコピーおよびマージ . . . . . 137代替索引の定義 . . . . . . . . . . . . . 138代替索引の命名 . . . . . . . . . . . . 139代替索引情報の指定 . . . . . . . . . . 139代替索引のビルド . . . . . . . . . . . 141代替索引の維持 . . . . . . . . . . . . 141パスの定義 . . . . . . . . . . . . . 142

ページ・スペースの定義 . . . . . . . . . . 143カタログおよびデータ・セット内の問題の検査 . . 144カタログ項目のリスト . . . . . . . . . 144データ・セットの内容の印刷 . . . . . . . 145

データ・セットの削除 . . . . . . . . . . 146

第 8 章 VSAM データ・セットの定義と操作: 例 . . . . . . . . . . . . . . 147VSAM データ・セットを定義する例. . . . . . 148一時 VSAM データ・セットの定義の例 . . . . 150例 1: ALLOCATE を使用しての一時 VSAM データ・セットの定義 . . . . . . . . . . 150例 2: デフォルト・パラメーター値を使用しての一時データ・セットの作成 . . . . . . . . 151

代替索引とパスの定義の例 . . . . . . . . . 151JCL ステートメント . . . . . . . . . . 151コマンド . . . . . . . . . . . . . . 152

第 9 章 VSAM データ・セットの処理 155アクセス方式制御ブロックの作成 . . . . . . . 156出口リストの作成 . . . . . . . . . . . . 157データ・セットのオープン . . . . . . . . . 158要求パラメーター・リストの作成 . . . . . . . 159

制御ブロックの内容の操作 . . . . . . . . . 161制御ブロックの生成 . . . . . . . . . . 161ACB、EXLST、および RPL フィールドの内容のテスト . . . . . . . . . . . . . . . 161ACB、EXLST、または RPL の内容の変更 . . . 162ACB、EXLST、および RPL フィールドの内容の表示 . . . . . . . . . . . . . . . 162

データ・セットへのアクセスの要求 . . . . . . 163レコードの挿入と追加 . . . . . . . . . 163レコードの検索 . . . . . . . . . . . . 166レコードの更新 . . . . . . . . . . . . 168レコードの削除 . . . . . . . . . . . . 169バッファー書き込みの据え置きおよび強制 . . . 169データ・バッファーの保存および位置決め . . . 169多重ストリングの処理 . . . . . . . . . 170並行要求をする . . . . . . . . . . . . 171パスを使用してのレコードへのアクセス . . . 172非同期要求をする . . . . . . . . . . . 173要求の終了 . . . . . . . . . . . . . 173

データ・セットのクローズ . . . . . . . . . 174SRB またはクロスメモリー・モードでの操作. . . 175プログラムでの VSAM マクロの使用 . . . . . 176

第 10 章 VSAM パフォーマンスの最適化 . . . . . . . . . . . . . . . . 179制御インターバル・サイズの最適化 . . . . . . 179制御インターバル・サイズの制限 . . . . . . 180データ制御インターバル・サイズ . . . . . . 181索引制御インターバル・サイズ . . . . . . 182VSAM は制御インターバル・サイズをどのように調整するか . . . . . . . . . . . . 183

制御域サイズの最適化 . . . . . . . . . . 183大きい制御域サイズの利点 . . . . . . . . 184大きい制御域サイズの欠点 . . . . . . . . 185

フリー・スペース分散の最適化 . . . . . . . 185フリー・スペースの最適パーセンテージの選択 187データ・セットをロードするときのフリー・スペース指定の変更 . . . . . . . . . . . . 188

非共用リソース用の入出力バッファー・スペースの決定 . . . . . . . . . . . . . . . . 189

16 MB を超えるバッファーの入手 . . . . . 190システム管理バッファリングの調整 . . . . . 191並行データ・セット位置決め用のバッファーの割り振り . . . . . . . . . . . . . . . 198直接アクセス用のバッファーの割り振り . . . 198順次アクセス用のバッファーの割り振り . . . 201パス用のバッファーの割り振り . . . . . . 202バッファーの獲得 . . . . . . . . . . . 202

索引オプションの使用 . . . . . . . . . . 203索引セット・レコード用の仮想記憶域の増加 . . 204制御域分割の回避 . . . . . . . . . . . 204別個のボリュームでの索引およびデータのプット 204

診断情報の入手 . . . . . . . . . . . . . 205大容量記憶システムからのマイグレーション . . . 205Hiperbatch の使用 . . . . . . . . . . . . 205

目次 v

Page 8: DFSMS データ・セットの使用法

第 11 章 制御インターバルの処理 . . . 207制御インターバルへのアクセス . . . . . . . 208制御情報の構造 . . . . . . . . . . . . . 209

CIDF - 制御インターバル定義フィールド . . . 211RDF - レコード定義フィールド . . . . . . 211

ユーザー・バッファー方式 . . . . . . . . . 216改良制御インターバル・アクセス . . . . . . . 217改良制御インターバル・アクセス用のオブジェクトのオープン . . . . . . . . . . . . 217改良制御インターバル・アクセスを使用してのデータ・セットの処理 . . . . . . . . . . 217実記憶域での制御ブロックおよびバッファーの固定 . . . . . . . . . . . . . . . . 218

共通制御ブロック (CBIC) オプション . . . . . 218

第 12 章 VSAM データ・セットの共用 221サブタスク共用 . . . . . . . . . . . . . 222単一の制御ブロック構造の作成 . . . . . . 222排他制御競合の解決 . . . . . . . . . . 223共用リソースの排他制御でのデッドロックの防止 225

領域間共用 . . . . . . . . . . . . . . 227クロス領域共用オプション . . . . . . . . 227クロス領域共用中の読み取り保全性 . . . . . 229クロス領域共用中の書き込み保全性 . . . . . 230

システム間共用 . . . . . . . . . . . . . 231制御ブロック更新機能 (CBUF) . . . . . . . 232

CBUF 処理の考慮事項 . . . . . . . . . 233共用データ・セット用のチェックポイント . . . 235

データ共用の技法 . . . . . . . . . . . . 235領域間共用 . . . . . . . . . . . . . 235システム間共用 . . . . . . . . . . . . 237VSAM 共用情報へのユーザー・アクセス . . . 238

第 13 章 VSAM データ・セット間でのリソースの共用 . . . . . . . . . . . 239リソース・プールのプロビジョン . . . . . . . 239リソース・プールのビルド: BLDVRP . . . . 240リソース・プールへのデータ・セットの接続:OPEN . . . . . . . . . . . . . . . 244DLVRP マクロを使用してのリソース・プールの削除 . . . . . . . . . . . . . . . 244

共用リソース用の入出力バッファーの管理 . . . . 246書き出し要求の据え置き . . . . . . . . . 246トランザクション ID による据え置き要求の関連付け . . . . . . . . . . . . . . . 247書き込みが据え置かれたバッファーの書き込み:WRTBFR . . . . . . . . . . . . . . 247共用リソースでの制御インターバルへのアクセス 249

共用リソース用の制約事項およびガイドライン . . 251

第 14 章 VSAM レコード・レベル共用の使用 . . . . . . . . . . . . . . 253VSAM データ・セットへのアクセスの制御 . . . 253DFSMStvs および VSAM レコード・レベル共用を使用したデータ・セットへのアクセス . . . . . 253

レコード・レベル共用 CF キャッシング . . . 255VSAM レコード・レベル共用の複数のロック構造 . . . . . . . . . . . . . . . . 256VSAM RLS と CICS の併用 . . . . . . . 257VSAM RLS の CICS 以外での使用 . . . . . 26064 ビット・アドレス可能なデータ・バッファーの使用 . . . . . . . . . . . . . . . 260リカバリー可能データ・セットの読み取り共用 262KSDS CI および CA 分割にまたがる読み取り共用保全性 . . . . . . . . . . . . . . 263リカバリー不能データ・セットの読み取りおよび書き込み共用 . . . . . . . . . . . . 263VSAM データ・セットへの非 RLS アクセスの使用 . . . . . . . . . . . . . . . 264RLS アクセス・ルール . . . . . . . . . 264RLS アクセスと非 RLS アクセスの比較 . . . 265VSAM RLS 実行モードの要求. . . . . . . 268VSAM RLS 読み取り保全性オプションの使用 268

VSAM RLS と ESDS の併用 . . . . . . . . 270読み取り保全性の指定 . . . . . . . . . . 270ロック要求のタイムアウト値の指定 . . . . . . 271索引トラップ . . . . . . . . . . . . . 271

第 15 章 構造エラーについての VSAMキー順データ・セット・クラスターの検査 . . . . . . . . . . . . . . . . 273EXAMINE コマンド . . . . . . . . . . . 273データ・セットのタイプ . . . . . . . . . 273EXAMINE のユーザー . . . . . . . . . 273

EXAMINE の実行方法 . . . . . . . . . . 274INDEXTEST、DATATEST、または両方のテストを実行する決定 . . . . . . . . . . . . 274重大な INDEXTEST エラーでの DATATEST のスキップ . . . . . . . . . . . . . . 275ユーザー・カタログの検査 . . . . . . . . 275メッセージ階層の理解 . . . . . . . . . 275メッセージ印刷出力の制御 . . . . . . . . 276

EXAMINE 実行からの出力の例 . . . . . . . 276エラー・フリー・データ・セットの INDEXTESTおよび DATATEST テスト . . . . . . . . 276構造エラーを持つデータ・セットの INDEXTESTおよび DATATEST テスト . . . . . . . . 277複写キー・エラーを持つデータ・セットのINDEXTEST および DATATEST テスト . . . 278

第 16 章 VSAM ユーザー作成出口ルーチンのコーディング . . . . . . . . . 279出口ルーチンのコーディングについてのガイドライン . . . . . . . . . . . . . . . . . 279プログラミングに関するガイドライン . . . . . 280複数の要求パラメーター・リストまたはデータ・セット . . . . . . . . . . . . . . . 281メインプログラムに戻る . . . . . . . . . 281

バッチ指定変更用の IGW8PNRU ルーチン . . . 282レジスターの内容 . . . . . . . . . . . 283

vi z/OS V1R10 DFSMS データ・セットの使用法

|||

Page 9: DFSMS データ・セットの使用法

プログラミングの考慮事項 . . . . . . . . 283データ終わりを処理するための EODAD 出口ルーチン . . . . . . . . . . . . . . . . 284レジスターの内容 . . . . . . . . . . . 284プログラミングの考慮事項 . . . . . . . . 284

EXCEPTIONEXIT 出口ルーチン . . . . . . . 285レジスターの内容 . . . . . . . . . . . 285プログラミングの考慮事項 . . . . . . . . 285

トランザクションをジャーナル記録するためのJRNAD 出口ルーチン. . . . . . . . . . . 286レジスターの内容 . . . . . . . . . . . 286プログラミングの考慮事項 . . . . . . . . 287

論理エラーを分析するための LERAD 出口ルーチン 294レジスターの内容 . . . . . . . . . . . 294プログラミングの考慮事項 . . . . . . . . 294

RLSWAIT 出口ルーチン . . . . . . . . . . 295レジスターの内容 . . . . . . . . . . . 295要求環境 . . . . . . . . . . . . . . 296

物理エラーを分析するための SYNAD 出口ルーチン . . . . . . . . . . . . . . . . . 296レジスターの内容 . . . . . . . . . . . 296プログラミングの考慮事項 . . . . . . . . 297SYNAD ユーザー作成出口ルーチンの例 . . . 298

ユーザー処理用の UPAD 出口ルーチン. . . . . 299レジスターの内容 . . . . . . . . . . . 300プログラミングの考慮事項 . . . . . . . . 301

ユーザー・セキュリティー検査ルーチン . . . . 302

第 17 章 VSAM での 31 ビット・アドレッシング・モードの使用 . . . . . . 305VSAM のオプション . . . . . . . . . . . 305

第 18 章 VSAM 用のジョブ制御言語の使用 . . . . . . . . . . . . . . . 309JCL ステートメントとキーワードの使用 . . . . 309データ・セット名 . . . . . . . . . . . 309後処理 . . . . . . . . . . . . . . . 309

JCL での VSAM データ・セットの作成 . . . . 310一時 VSAM データ・セット . . . . . . . 313JCL を使用して VSAM データ・セットを割り振る例 . . . . . . . . . . . . . . . 315

既存の VSAM データ・セットの検索 . . . . . 318マイグレーションの考慮事項 . . . . . . . 318VSAM データ・セットを処理するために使用されるキーワード . . . . . . . . . . . . 318

第 19 章 キー順データ・セットの索引の処理 . . . . . . . . . . . . . . 321キー順データ・セットへのアクセス . . . . . . 321

GETIX および PUTIX を使用しての索引へのアクセス . . . . . . . . . . . . . . . 321索引コンポーネントのみへのアクセス . . . . 322基本索引 . . . . . . . . . . . . . . 322索引レベル . . . . . . . . . . . . . 323VSAM 索引トラップ . . . . . . . . . . 325

索引レコードのフォーマット . . . . . . . . 325ヘッダー部分 . . . . . . . . . . . . 326フリー制御インターバル項目部分 . . . . . . 328索引項目部分 . . . . . . . . . . . . 328

キー圧縮 . . . . . . . . . . . . . . . 329制御インターバル分割に続く索引更新 . . . . 332スパン・レコード用の索引項目 . . . . . . 333

第 3 部 データ・セットと UNIX ファイルへの非 VSAM アクセス . . . 335

第 20 章 非 VSAM データ・セット用のレコード・フォーマットの選択 . . . . 341フォーマットの選択 . . . . . . . . . . . 341固定長レコード・フォーマット . . . . . . . 342標準フォーマット . . . . . . . . . . . 343制約事項 . . . . . . . . . . . . . . 343

可変長レコード・フォーマット . . . . . . . 344フォーマット V レコード . . . . . . . . 344スパン・フォーマット VS レコード (順次アクセス方式). . . . . . . . . . . . . . 346スパン・フォーマット V レコード (基本直接アクセス方式) . . . . . . . . . . . . . 350

不定長レコード・フォーマット . . . . . . . 352ISO/ANSI テープ . . . . . . . . . . . . 353文字データ変換 . . . . . . . . . . . . 353フォーマット F レコード . . . . . . . . 354フォーマット D レコード . . . . . . . . 357ISO/ANSI フォーマット DS およびフォーマットDBS レコード . . . . . . . . . . . . 359フォーマット U レコード . . . . . . . . 362

レコード・フォーマット - 装置タイプの考慮事項 363オプショナル制御文字の使用 . . . . . . . 363直接アクセス記憶装置 (DASD) の使用 . . . . 365磁気テープの使用 . . . . . . . . . . . 365プリンターの使用 . . . . . . . . . . . 366カード読取装置およびパンチの使用 . . . . . 368紙テープ読取装置の使用 . . . . . . . . . 369

第 21 章 データ制御ブロックの指定および初期化 . . . . . . . . . . . . . 371順次および区分データ・セットの処理 . . . . . 372処理用のデータ・セットを準備するための OPENの使用 . . . . . . . . . . . . . . . . 378

DCB への書き込み . . . . . . . . . . 379マクロの形式、バッファリング要件定義、およびアドレスの指定 . . . . . . . . . . . . 382処理方法のコーディング . . . . . . . . . 382

データ・セット・オプションの選択 . . . . . . 383ブロック・サイズ (BLKSIZE) . . . . . . . 384データ・セット編成 (DSORG) . . . . . . . 391キー長 (KEYLEN) . . . . . . . . . . . 391レコード長 (LRECL) . . . . . . . . . . 392レコード・フォーマット (RECFM) . . . . . 392書き込み妥当性検査オプション (OPTCD=W) . . 392

目次 vii

Page 10: DFSMS データ・セットの使用法

DD ステートメント・パラメーター . . . . . 393DCB および DCBE の変更および検査 . . . . . 394

DCBD マクロの使用 . . . . . . . . . . 395DCB でのアドレスの変更 . . . . . . . . 395IHADCBE マクロの使用 . . . . . . . . . 396

CLOSE を使用したデータ・セットの処理の終了 396CHECK マクロの発行 . . . . . . . . . 396データ・セットの一時的クローズ . . . . . . 396順次データ・セットでの CLOSE TYPE=T の使用 . . . . . . . . . . . . . . . . 397スペースの解放 . . . . . . . . . . . . 399データ・セットをクローズするときのバッファー・プールの管理 . . . . . . . . . . . 400

データ・セットのオープンおよびクローズ: 考慮事項 . . . . . . . . . . . . . . . . . 400

31 ビット・アドレスを使用したパラメーター・リスト . . . . . . . . . . . . . . . 400同時に複複数のデータ・セットのオープンおよびクローズ . . . . . . . . . . . . . . 401直接アクセス・データ・セットを割り振るときに考慮する事項 . . . . . . . . . . . . 401データ・セットのオープンおよびクローズに関する指針 . . . . . . . . . . . . . . . 401オープン/クローズ/EOV エラー . . . . . . 402インストール・システム出口 . . . . . . . 403

ボリュームの位置決め . . . . . . . . . . 404データ・セットおよびボリュームの解放 . . . 404ボリュームの終わりの処理 . . . . . . . . 404ボリュームの終わりの位置決め . . . . . . 405ボリュームの終わりの強制 . . . . . . . . 407

SAM バッファー・スペースの管理 . . . . . . 407バッファー・プールの組み立て . . . . . . . 408バッファー・プールのビルド . . . . . . . 410バッファー・プールおよびレコード域のビルド 410バッファー・プールの入手 . . . . . . . . 411バッファー・プールの自動的な組み立て . . . 411バッファー・プールの解放 . . . . . . . . 412バッファー・プールの組み立て: 例 . . . . . 412

バッファーの制御 . . . . . . . . . . . . 413待機アクセス方式 . . . . . . . . . . . 413基本アクセス方式 . . . . . . . . . . . 414アプリケーションでの QSAM . . . . . . . 414交換バッファー方式 . . . . . . . . . . 418

バッファリング技法および GET/PUT 処理モードの選択 . . . . . . . . . . . . . . . . 418待機アクセス方式でのバッファリング・マクロの使用 . . . . . . . . . . . . . . . . . 418

RELSE - 解放および入力バッファー. . . . . 418TRUNC - 出力バッファーの切り捨て . . . . 419

バッファリング・マクロと基本アクセス方式の併用 419GETBUF - プールからのバッファーの入手 . . 419FREEBUF - バッファーをプールに戻す. . . . 420

第 22 章 レコードへのアクセス . . . . 421READ および WRITE を使用してのデータへのアクセス . . . . . . . . . . . . . . . . 421

データ・イベント制御ブロック (DECB) の使用 421ページング環境での関連した制御ブロックのグループ化 . . . . . . . . . . . . . . . 421BSAM でのオーバーラップ入出力の使用 . . . 422ブロックの読み取り . . . . . . . . . . 423ブロックの書き込み . . . . . . . . . . 424TRUNC マクロでの入出力開始の保証 . . . . 425読み取りまたは書き込み操作の完了のテスト . . 425読み取りまたは書き込み操作の完了の待ち . . . 425テープでの例外条件の取り扱い . . . . . . 426

GET および PUT を使用してのデータへのアクセス 427GET - レコードの検索 . . . . . . . . . 427PUT - レコードの書き込み . . . . . . . . 428PUTX - 更新済みレコードの書き込み . . . . 428PDAB - 並列入力処理 (QSAM のみ) . . . . 429

入出力エラーの分析 . . . . . . . . . . . 431SYNADAF - SYNAD 分析機能の実行 . . . . 431SYNADRLS - SYNADAF メッセージおよび保管域の解放 . . . . . . . . . . . . . . 432装置サポート機能 (ICKDSF): 入出力問題の診断 433

SRB モードまたはクロスメモリー・モードに関する制約事項 . . . . . . . . . . . . . . 433

第 23 章 非 VSAM データ・セットの共用 . . . . . . . . . . . . . . . . 435共用順次データ・セット向け拡張データ保全機能 439拡張データ保全機能のセットアップ . . . . . 439複数のシステムにおける拡張データ保全機能の同期化 . . . . . . . . . . . . . . . 441START IFGEDI コマンドの使用 . . . . . . 442アプリケーションに即した拡張データ保全機能の迂回 . . . . . . . . . . . . . . . 442データ保全の警告と違反の診断 . . . . . . 443

PDSE . . . . . . . . . . . . . . . . 446直接データ・セット (BDAM) . . . . . . . . 446データ・セットをオープンおよびクローズするときに考慮する事項 . . . . . . . . . . . . . 447共用 DASD ボリュームでのチェックポイント・データ・セットの制御 . . . . . . . . . . . 448入力操作用の検索ダイレクトのシステム使用 . . . 449

第 24 章 データ・セットのスプーリングおよびスケジューリング . . . . . . 451ジョブ入力サブシステム . . . . . . . . . . 451SYSIN データ・セット . . . . . . . . . . 452SYSOUT データ・セット . . . . . . . . . 453

第 25 章 順次データ・セットの処理 455順次データ・セットの作成 . . . . . . . . . 455

DASD 順次データ・セットのタイプ . . . . . 456順次データ・セットの検索 . . . . . . . . . 457データ・セットの順次連結 . . . . . . . . . 458類似データ・セットの連結 . . . . . . . . 459非類似データ・セットの連結 . . . . . . . 464

順次データ・セットの変更 . . . . . . . . . 467同所更新 . . . . . . . . . . . . . . 467

viii z/OS V1R10 DFSMS データ・セットの使用法

Page 11: DFSMS データ・セットの使用法

オーバーラップ操作の使用 . . . . . . . . 467データ・セットの拡張 . . . . . . . . . 468

装置独立性の実現 . . . . . . . . . . . . 469装置依存のマクロ . . . . . . . . . . . 470DCB および DCBE サブパラメーター . . . . 470

順次データ・セットのパフォーマンスの改善 . . . 471非 DASD データ・セットでのチェーン・スケジューリングの使用に関する制限事項 . . . . . 472DASD およびテープに関するパフォーマンス 473

BSAM、BPAM、または BDAM での読み取り時のブロックの長さの決定 . . . . . . . . . . 475BSAM または BPAM での短いフォーマット FBブロックの書き込み . . . . . . . . . . . 477Hiperbatch の使用 . . . . . . . . . . . . 477拡張フォーマット順次データ・セットの処理 . . . 478拡張フォーマット・データ・セットの特性 . . . 478拡張フォーマット・データ・セットの割り振り 479圧縮フォーマット・データ・セットの割り振り 480拡張フォーマット・データ・セットのオープンおよびクローズ . . . . . . . . . . . . 482BSAM および QSAM を使用した拡張フォーマット・データ・セットの読み取り、書き込み、および更新 . . . . . . . . . . . . . . 482拡張フォーマット・データ・セットと他のデータ・セットとの連結 . . . . . . . . . . 482ストライピング順次データ・セットの拡張 . . . 482拡張フォーマット・データ・セットへのマイグレーション . . . . . . . . . . . . . . 483

ラージ・フォーマット・データ・セットの処理 . . 484ラージ・フォーマット・データ・セットの特性 485ラージ・フォーマット・データ・セットの割り振り . . . . . . . . . . . . . . . . 486ラージ・フォーマット・データ・セットのオープンおよびクローズ . . . . . . . . . . . 486ラージ・フォーマット・データ・セットへのマイグレーション . . . . . . . . . . . . 487

第 26 章 区分データ・セット (PDS) の処理 . . . . . . . . . . . . . . . 489PDS の構造 . . . . . . . . . . . . . . 489PDS ディレクトリー . . . . . . . . . . . 490PDS 用のスペースの割り振り . . . . . . . . 493スペースの計算 . . . . . . . . . . . . 494SPACE および AVGREC を使用したスペースの割り振り . . . . . . . . . . . . . . 495

PDS の作成 . . . . . . . . . . . . . . 495BSAM または QSAM を使用した PDS メンバーの作成 . . . . . . . . . . . . . . 495PDS の変換 . . . . . . . . . . . . . 497PDS またはメンバーの別のデータ・セットへのコピー . . . . . . . . . . . . . . . 497メンバーの追加 . . . . . . . . . . . . 497

PDS のメンバーの処理 . . . . . . . . . . 500BLDL - ディレクトリー項目リストの構成 . . . 500DESERV . . . . . . . . . . . . . . 501FIND - メンバーの開始アドレスへの位置決め 504

STOW - ディレクトリーの更新 . . . . . . 505PDS のメンバーの検索 . . . . . . . . . . 506PDS の変更 . . . . . . . . . . . . . . 510同所更新 . . . . . . . . . . . . . . 510メンバーの再書き込み . . . . . . . . . 513

PDS の連結 . . . . . . . . . . . . . . 513順次連結 . . . . . . . . . . . . . . 513区分連結 . . . . . . . . . . . . . . 513

PDS ディレクトリーを順次に読み取る . . . . . 514

第 27 章 拡張区分データ・セット(PDSE) の処理 . . . . . . . . . . . 515PDSE の利点 . . . . . . . . . . . . . 515

PDSE と PDS の類似点 . . . . . . . . . 517PDSE と PDS の相違点 . . . . . . . . . 517

PDSE の構造 . . . . . . . . . . . . . 518PDSE 論理ブロック・サイズ . . . . . . . 519スペースの再使用 . . . . . . . . . . . 519ディレクトリー構造 . . . . . . . . . . 520相対トラック・アドレス (TTR) . . . . . . 520

PDSE レコードの処理 . . . . . . . . . . 521PDSE での BLKSIZE の使用 . . . . . . . 523PDSE での KEYLEN の使用 . . . . . . . 523PDSE レコードのブロック化し直し . . . . . 523短ブロックの処理 . . . . . . . . . . . 524SAM ヌル・セグメントの処理 . . . . . . . 524

PDSE 用のスペースの割り振り . . . . . . . 525PDSE スペースの考慮事項 . . . . . . . . 525PDSE ストレージ要件の要約 . . . . . . . 528

PDSE の定義 . . . . . . . . . . . . . 529PDSE メンバーの作成 . . . . . . . . . . 530

BSAM または QSAM を使用しての PDSE メンバーの作成 . . . . . . . . . . . . . 530PDSE メンバーを連続して追加または置換する 532複数の PDSE メンバーを並行して追加または置換する . . . . . . . . . . . . . . . 533PDSE またはメンバーの別のデータ・セットへのコピー . . . . . . . . . . . . . . . 534

PDSE のメンバーの処理 . . . . . . . . . . 534メンバーへの接続の確立 . . . . . . . . . 535BLDL マクロを使用してのディレクトリー項目リストの構成 . . . . . . . . . . . . 535BSP マクロを使用して物理レコードをバックスペースする . . . . . . . . . . . . . 536ディレクトリー項目サービスの使用 . . . . . 537FIND マクロを使用してメンバーの先頭に位置決めする . . . . . . . . . . . . . . . 544ISITMGD を使用してデータ・セットがシステム管理されているかどうかを判別する . . . . . 545NOTE マクロを使用して相対位置を提供する 546POINT マクロを使用してブロックに位置決めする . . . . . . . . . . . . . . . . 547メンバー間の切り替え . . . . . . . . . 547STOW マクロを使用してディレクトリーを更新する . . . . . . . . . . . . . . . 548

PDSE のメンバーの検索 . . . . . . . . . . 549

目次 ix

Page 12: DFSMS データ・セットの使用法

PDSE の共用 . . . . . . . . . . . . . 551コンピューター・システム内での共用 . . . . 552違反の共用 . . . . . . . . . . . . . 552PDSE を共用する複数システム . . . . . . 553通常または拡張 PDSE 共用 . . . . . . . 555

PDSE のメンバーの変更 . . . . . . . . . . 557同所更新 . . . . . . . . . . . . . . 557PDSE メンバーの拡張 . . . . . . . . . 558PDSE メンバーの削除 . . . . . . . . . 558PDSE メンバーの名前変更 . . . . . . . . 559

PDSE ディレクトリーの読み取り . . . . . . . 559PDSE の連結 . . . . . . . . . . . . . 560順次連結 . . . . . . . . . . . . . . 560区分連結 . . . . . . . . . . . . . . 560

PDS を PDSE に変換、および元に戻す . . . . 561PDSE から PDS への変換 . . . . . . . . 562PDSE の変換に関する変換 . . . . . . . . 562

パフォーマンスの改善 . . . . . . . . . . 562フラグメント化された PDSE でのスペースのリカバリー . . . . . . . . . . . . . . . . 563PDSE アドレス・スペース . . . . . . . . . 563

PDSE アドレス・スペースのチューニング . . . 564

第 28 章 z/OS UNIX ファイルの処理 567z/OS UNIX ファイル・システムへのアクセス . . 567

UNIX ディレクトリーおよびファイルの特性 . . 568使用されるアクセス方式 . . . . . . . . . 569

HFS データ・セットの使用 . . . . . . . . . 569HFS データ・セットの作成 . . . . . . . . 570追加のディレクトリーの作成 . . . . . . . 571

z/OS UNIX ファイルの作成 . . . . . . . . 572BSAM または QSAM を使用した UNIX ファイルの作成 . . . . . . . . . . . . . . 572JCL を使用した UNIX ファイルの作成 . . . . 574UNIX ファイルに使用する JCL パラメーター 576UNIX ディレクトリー内のマクロ・ライブラリーの作成 . . . . . . . . . . . . . . . 577

UNIX ファイルおよびディレクトリーの管理 . . . 579UNIX ファイルとディレクトリーのためのセキュリティー設定値の指定 . . . . . . . . . 579UNIX ファイルの編集 . . . . . . . . . 580ISHELL を使用した UNIX ファイルとディレクトリーの管理 . . . . . . . . . . . . 580UNIX ファイルまたはディレクトリーのコピー 582

UNIX ファイル用のサービスとユーティリティー 584サービスとユーティリティーが UNIX ファイルと一緒に使用できないこと . . . . . . . . 584z/OS UNIX シグナル . . . . . . . . . . 585z/OS UNIX fork サービス . . . . . . . . 585SMF レコード . . . . . . . . . . . . 585

BPAM を使用した UNIX ファイルの読み取り . . 585UNIX ファイルのためのマクロの使用 . . . . 586BLDL によるディレクトリー項目リストの構成 586CHECK による入出力完了の検査 . . . . . . 587CLOSE による DCB のクローズ . . . . . . 587FIND によるファイルの開始アドレス位置の設定 587

READ による UNIX ファイルの読み取り . . . 588STOW DISC による UNIX ファイルのクローズ 588

UNIX ファイルおよびディレクトリーの連結 . . . 589順次連結 . . . . . . . . . . . . . . 589区分連結 . . . . . . . . . . . . . . 589

第 29 章 世代別データ・グループの処理 . . . . . . . . . . . . . . . . 591世代別データ・セットのデータ・セット編成 . . . 592絶対世代およびバージョン番号 . . . . . . . 592相対世代番号 . . . . . . . . . . . . . 593複数ステップ・ジョブに関するプログラミングの考慮事項 . . . . . . . . . . . . . . . . 594世代別データ・グループのカタログ化 . . . . 594世代別データ・グループを更新するための複数ジョブの実行依頼 . . . . . . . . . . . . 595

ISO/ANSI バージョン 3 またはバージョン 4 のラベル用の世代別データ・グループの命名 . . . . 595新規世代の作成 . . . . . . . . . . . . . 596世代別データ・セットの割り振り . . . . . . 596世代別データ・セットのパス . . . . . . . 600世代別データ・セットのロールイン . . . . . 600ロールオフされた世代別データ・セットの有効期限の制御 . . . . . . . . . . . . . . 601

世代別データ・セットの検索 . . . . . . . . 601世代別データ・セットのレクラメーション . . . . 601

GDS 再利用処理をオンにする . . . . . . . 602GDS 再利用処理をオフにする . . . . . . . 602

世代別データ・グループ索引のビルド . . . . . 603

第 30 章 入出力装置制御マクロの使用 605CNTRL マクロを使用して入出力装置を制御する 605PRTOV マクロを使用してプリンター・オーバーフローをテストする . . . . . . . . . . . . 606SETPRT マクロを使用してプリンターをセットアップする . . . . . . . . . . . . . . . . 606BSP マクロを使用して磁気テープまたは直接アクセス・ボリュームをバックスペースする . . . . . 607NOTE マクロを使用してブロックの相対アドレスを戻す . . . . . . . . . . . . . . . . 608POINT マクロを使用してブロックに位置決めする 609SYNCDEV マクロを使用してデータを同期する . . 611

第 31 章 非 VSAM ユーザー作成出口ルーチンの使用 . . . . . . . . . . . . 613一般的なガイダンス . . . . . . . . . . . 613プログラミングの考慮事項 . . . . . . . . 614入出力操作に続く状況情報 . . . . . . . . 614

EODAD データ・セットの終わり出口ルーチン . . 622レジスターの内容 . . . . . . . . . . . 622プログラミングの考慮事項 . . . . . . . . 622

SYNAD 同期エラー・ルーチン出口 . . . . . . 623レジスターの内容 . . . . . . . . . . . 627プログラミングの考慮事項 . . . . . . . . 629

DCB 出口リスト . . . . . . . . . . . . 631EXLST からの出口用のレジスターの内容 . . . 633

x z/OS V1R10 DFSMS データ・セットの使用法

Page 13: DFSMS データ・セットの使用法

逐次化 . . . . . . . . . . . . . . . 634割り振り検索リスト . . . . . . . . . . . 634プログラミング規則 . . . . . . . . . . 635制約事項 . . . . . . . . . . . . . . 635

DCB アベンド出口 . . . . . . . . . . . 636リカバリー要件 . . . . . . . . . . . . 639DCB アベンド・インストール・システム出口 640

DCB OPEN 出口 . . . . . . . . . . . . 640順次連結用の DCB OPEN 出口への呼び出し 641インストール・システム DCB OPEN 出口 . . 641

据え置き標準外入力トレーラー・ラベル出口リスト項目 . . . . . . . . . . . . . . . . 642ブロック数不等出口 . . . . . . . . . . . 642順次データ・セット用の EOV 出口 . . . . . . 643FCB イメージ出口. . . . . . . . . . . . 644JFCB 出口 . . . . . . . . . . . . . . 645JFCBE 出口 . . . . . . . . . . . . . . 646オープン / クローズ /EOV 標準ユーザー・ラベル出口 . . . . . . . . . . . . . . . . 647Open/EOV 非特定テープ・ボリューム・マウント出口 . . . . . . . . . . . . . . . . . 651Open/EOV ボリューム・セキュリティーおよび検査出口 . . . . . . . . . . . . . . . . 655QSAM 並列入力出口 . . . . . . . . . . . 657BSAM および QSAM でのユーザー合計 . . . . 657

付録 A. 直接アクセス・ラベルの使用 661直接アクセス記憶装置アーキテクチャー . . . . 661ボリューム・ラベル・グループ . . . . . . . 662データ・セット制御ブロック (DSCB) . . . . . 664ユーザー・ラベル・グループ . . . . . . . . 664

付録 B. 2 バイト文字セット (DBCS)の使用 . . . . . . . . . . . . . . 667DBCS 文字サポート . . . . . . . . . . . 667DBCS 文字を使用しているときのレコード長 . . . 668固定長レコード . . . . . . . . . . . . 668可変長レコード . . . . . . . . . . . . 668

付録 C. 直接データ・セットの処理. . . 669基本直接アクセス方式 (BDAM) の使用 . . . . . 669直接データ・セットの順次処理 . . . . . . . 670直接データ・セットの編成 . . . . . . . . . 670キーの範囲によって . . . . . . . . . . 670レコードの数によって . . . . . . . . . 671間接アドレッシングを使用して . . . . . . 671

直接データ・セットの作成 . . . . . . . . . 671QSAM を使用して直接データ・セットを作成する際の制約事項 . . . . . . . . . . . . 671キー付きの直接アドレスを使用して . . . . . 672BDAM を使用した VIO データ・セットの割り振り . . . . . . . . . . . . . . . 672

レコードの参照 . . . . . . . . . . . . . 674レコード・アドレッシング . . . . . . . . 674拡張検索 . . . . . . . . . . . . . . 674更新についての排他制御 . . . . . . . . . 676

フィードバック・オプション . . . . . . . 676レコードの追加または更新 . . . . . . . . . 676キー付きのフォーマット F . . . . . . . . 676キーなしのフォーマット F . . . . . . . . 677キーなしのフォーマット V またはフォーマットU . . . . . . . . . . . . . . . . 677キーなしのフォーマット V またはフォーマットU . . . . . . . . . . . . . . . . 677テープからディスクに追加 - 直接データ・セット . . . . . . . . . . . . . . . . 678テープからディスクに更新 - 直接データ・セット . . . . . . . . . . . . . . . . 679ユーザー・ラベルを使用して . . . . . . . 679

DCB の共用 . . . . . . . . . . . . . . 680

付録 D. 索引順次アクセス方式の使用 681基本索引順次アクセス方式 (BISAM) の使用 . . . 681待機索引順次アクセス方式 (QISAM) の使用 . . . 682ISAM データ・セットの処理 . . . . . . . . 682データ・セットの編成 . . . . . . . . . . 683基本区域 . . . . . . . . . . . . . . 684索引域 . . . . . . . . . . . . . . . 684オーバーフロー域 . . . . . . . . . . . 686

ISAM データ・セットの作成 . . . . . . . . 6871 ステップ・メソッド . . . . . . . . . 687全トラック索引書き込みオプション . . . . . 688複数ステップ・メソッド . . . . . . . . . 689レジューム・ロード . . . . . . . . . . 690

スペースの割り振り . . . . . . . . . . . 690基本データ域 . . . . . . . . . . . . 692個別の索引域の指定 . . . . . . . . . . 694独立オーバーフロー域の指定 . . . . . . . 694基本区域およびオーバーフロー域の指定 . . . 694

スペース所要量の計算 . . . . . . . . . . 694ステップ 1. 必要なトラックの数 . . . . . . 694ステップ 2. 必要なオーバーフロー・トラック数 695ステップ 3. トラック当たりの索引項目. . . . 695ステップ 4. 未使用スペースを決定する. . . . 696ステップ 5. 基本データ・レコード用のトラック数を計算する . . . . . . . . . . . . 696ステップ 6. 必要なシリンダー数 . . . . . . 698ステップ 7. シリンダー索引およびトラック索引用のスペース . . . . . . . . . . . . 698ステップ 8. マスター索引用のスペース. . . . 698索引順次スペース所要量の計算の要約 . . . . 699

検索および更新 . . . . . . . . . . . . . 701順次検索および更新 . . . . . . . . . . 701直接検索および更新 . . . . . . . . . . 702

レコードの追加 . . . . . . . . . . . . . 706新規レコードの挿入 . . . . . . . . . . 707データ・セットの末尾への新規レコードの追加 708

索引順次データ・セットの保持 . . . . . . . 710バッファー要件 . . . . . . . . . . . . 712作業域所要量 . . . . . . . . . . . . 713最高レベルの索引用のスペース . . . . . . 715装置制御 . . . . . . . . . . . . . . 715

目次 xi

Page 14: DFSMS データ・セットの使用法

SETL - 順次検索の開始の指定. . . . . . . 716ESETL - 順次検索の終了 . . . . . . . . 717

付録 E. ISAM プログラムの VSAM データ・セットとの併用 . . . . . . . . 719ISAM アプリケーションを VSAM にアップグレード . . . . . . . . . . . . . . . . . 720ISAM プログラムが VSAM データ・セットを処理することができる方法 . . . . . . . . . . 721索引順次データ・セットの変換 . . . . . . . 725ISAM インターフェースを使用して処理するためのJCL. . . . . . . . . . . . . . . . . 727ISAM インターフェースの使用に関する規則 . . . 729例: データ・セットの変換 . . . . . . . . 732例: SYNADAF マクロの発行 . . . . . . . 733

付録 F. 文字セットの変換 . . . . . . 735CCSID でソートされたコード化文字セット . . . 735デフォルトのローカル名でソートされたコード化文字セット . . . . . . . . . . . . . . . 738

CCSID 変換グループ . . . . . . . . . . . 744CCSID デシジョン・テーブル . . . . . . . . 747デフォルト変換コードのテーブル . . . . . . . 754

EBCDIC から ASCII への変換 . . . . . . 754ASCII から EBCDIC への変換 . . . . . . 755

付録 G. アクセシビリティー . . . . . 757支援機能の使用 . . . . . . . . . . . . . 757ユーザー・インターフェースのキーボード・ナビゲーション . . . . . . . . . . . . . . . 757z/OS 情報 . . . . . . . . . . . . . . 757

特記事項. . . . . . . . . . . . . . 759プログラミング・インターフェース情報 . . . . 760サポート対象外ハードウェアに関するポリシー . . 760商標 . . . . . . . . . . . . . . . . 761

用語集 . . . . . . . . . . . . . . 763

索引 . . . . . . . . . . . . . . . 781

xii z/OS V1R10 DFSMS データ・セットの使用法

Page 15: DFSMS データ・セットの使用法

図1. DASD ボリューム・トラックのフォーマット 112. REPRO 暗号化および復号操作 . . . . . . 783. VSAM 論理レコード検索 . . . . . . . . 854. 制御インターバル・フォーマット . . . . . 875. 制御インターバルのレコード定義フィールド 886. 非スパン・レコードを持つデータ・セット 907. スパン・レコードを持つデータ・セット 908. 入力順データ・セット . . . . . . . . . 929. 入力順データ・セットの RBA の例 . . . . 93

10. キー順データ・セットのレコード . . . . . 9611. キー順データ・セットへのレコードの挿入 9612. CI への論理レコードの挿入 . . . . . . . 9813. 固定長相対レコード・データ・セット 10014. 制御インターバル・サイズ . . . . . . . 10315. ストライピング・データ・セットの場合の 1次および 2 次スペース割り振り . . . . . 105

16. 制御域内の制御インターバル . . . . . . 10517. レイヤー (4 ストライプ・データ・セット) 10618. キー順データ・セットの場合の代替索引構造 11419. 入力順データ・セットの場合の代替索引構造 11520. VSAM マクロの関係 . . . . . . . . . 17721. スケルトン VSAM プログラム . . . . . . 17822. 制御インターバル・サイズ、物理トラック・サイズ、およびトラック容量 . . . . . . 181

23. フリー・スペースの決定 . . . . . . . . 18724. 直接アクセス用のバッファーのスケジューリング . . . . . . . . . . . . . . 200

25. 制御インターバルの一般フォーマット 21026. 非スパン・レコード用の制御情報のフォーマット . . . . . . . . . . . . . . 214

27. スパン・レコード用の制御情報のフォーマット . . . . . . . . . . . . . . . 215

28. 排他制御競合の解決 . . . . . . . . . 22429. 基本クラスターと代替索引の間の関係 22630. VSAM RLS アドレス・スペースおよびデータ・スペースと要求側アドレス・スペース . . 255

31. CICS VSAM 非 RLS アクセス. . . . . . 25832. CICS VSAM RLS . . . . . . . . . . 25833. JRNAD 出口の例 . . . . . . . . . . 28934. SYNAD 出口ルーチンの例 . . . . . . . 29935. データ制御インターバルに対する索引項目の関係 . . . . . . . . . . . . . . 323

36. データ制御インターバルに対する索引項目の関係 . . . . . . . . . . . . . . 323

37. 基本索引のレベル . . . . . . . . . . 32438. 索引レコードの一般フォーマット . . . . . 32639. 索引レコードの索引項目部分のフォーマット 32940. 索引レコードのフォーマット . . . . . . 32941. キー圧縮の例 . . . . . . . . . . . 33242. 制御インターバル分割と索引更新 . . . . . 33343. 固定長レコード . . . . . . . . . . . 342

44. 非スパン、フォーマット V レコード 34545. スパン・フォーマット VS レコード (順次アクセス方式) . . . . . . . . . . . . 347

46. 直接データ・セット用のスパン・フォーマット V レコード . . . . . . . . . . . 351

47. 不定長レコード。 . . . . . . . . . . 35248. ISO/ANSI テープ用の固定長レコード 35649. プログラムによって見られた ISO/ANSI テープの非スパン・フォーマット D レコード . . 359

50. プログラムによって見られた ISO/ANSI テープ用のスパン可変長 (フォーマット DS) レコード . . . . . . . . . . . . . . 360

51. 順次データ・セットの読み取り . . . . . 37652. 再入可能 ― 16 MB 境界より上 . . . . . 37753. ソースおよび DCB を完成させるための操作のシーケンス . . . . . . . . . . . 379

54. 同時に 3 つのデータ・セットをオープン 38355. DCB でのフィールドの変更 . . . . . . . 39556. 同時に 3 つのデータ・セットをクローズ 39657. CLOSE TYPE=T で LEAVE または REREADが指定されているときに処理されるレコード . 397

58. 静的ストレージ域からのバッファー・プールの組み立て . . . . . . . . . . . . 412

59. GETPOOL および FREEPOOL を使用したバッファー・プールの組み立て . . . . . . 413

60. MACRF=GL および MACRF=PM を指定した単純バッファー方式 . . . . . . . . . 415

61. MACRF=GM および MACRF=PM を指定した単純バッファー方式 . . . . . . . . . 416

62. MACRF=GL および MACRF=PL を指定した単純バッファー方式 . . . . . . . . . 417

63. MACRF=GL および MACRF=PM-UPDAT モードでの単純バッファー方式 . . . . . . 417

64. 3 つのデータ・セットの並列処理 . . . . . 43065. 複数の DCB を使用してデータ・セットを共用するために必要な JCL、マクロ、およびプロシージャー . . . . . . . . . . . 436

66. 単一の DCB を使用してデータ・セットを共用するために必要な JCL、マクロ、およびプロシージャー . . . . . . . . . . . 438

67. 順次データ・セットの作成 ― 移動モード、単純バッファー方式 . . . . . . . . . 456

68. 順次データ・セットの検索 ― 位置指定モード、単純バッファー方式 . . . . . . . . 458

69. BSAMを通じて読み取られる類似連結 46470. 非類似連結データ・セットについての READまたは GET の再発行. . . . . . . . . 466

71. BSAM を使用して不定長またはブロック・レコードを読み取るときのレコードの長さを決定する方法 . . . . . . . . . . . . 476

72. 区分データ・セット (PDS) . . . . . . . 490

© Copyright IBM Corp. 1987, 2008 xiii

Page 16: DFSMS データ・セットの使用法

73. PDS ディレクトリー・ブロック . . . . . 49174. PDS ディレクトリー項目 . . . . . . . 49175. PDS の 1 つのメンバーの作成 . . . . . . 49676. PDS での標準外メンバー名の作成 . . . . 49777. STOW を使用しての PDS のメンバーの作成 49978. BLDL リスト・フォーマット . . . . . . 50179. NAME_LIST 制御ブロック構造による

DESERV GET . . . . . . . . . . . 50280. PDSDE 制御ブロック構造による DESERV

GET. . . . . . . . . . . . . . . 50381. DESERV GET_ALL 制御ブロック構造 50482. PDS の 1 つのメンバーの検索 . . . . . . 50683. 入出力時間および CPU 時間の重複なしに

PDS のいくつかのメンバーおよびサブグループを検索する . . . . . . . . . . . 508

84. 非同期 BPAM を使用しての PDS またはPDSE のメンバーの読み取り . . . . . . 509

85. PDS のメンバーの更新 . . . . . . . . 51286. 拡張区分データ・セット (PDSE) . . . . . 51687. PDSE メンバー用の TTR (非ブロック・レコード) . . . . . . . . . . . . . . 521

88. 2 つの PDSE メンバー用の TTR(LRECL=80、BLKSIZE=800). . . . . . . 521

89. PDSE レコードがどのようにブロック化し直されるかの例 . . . . . . . . . . . 523

90. ブロック・サイズが変更された場合のブロック化し直しの例 . . . . . . . . . . . 524

91. PDSE の 1 つのメンバーの作成 . . . . . 53092. PDSE での標準外メンバー名の作成 . . . . 53293. PDSE メンバーを連続して追加する . . . . 53394. 複数の PDSE メンバーを並行して置換する 53395. NAME_LIST 制御ブロック構造による

DESERV GET . . . . . . . . . . . 53996. PDSDE 制御ブロック構造による DESERV

GET. . . . . . . . . . . . . . . 54097. DESERV GET_ALL 制御ブロック構造 54198. DESERV GET_NAMES 制御ブロック構造 54299. DESERV RELEASE 入力制御ブロック構造 543

100. DESERV UPDATE . . . . . . . . . . 544101. ISITMGD の例 . . . . . . . . . . . 545102. NOTE および FIND を使用して連結 PDSE

のメンバー間で切り替える . . . . . . . 548103. STOW INITIALIZE の例 . . . . . . . . 549104. PDSE の 1 つのメンバーの検索 . . . . . 549105. PDSE または PDS のいくつかのメンバーの検

索 . . . . . . . . . . . . . . . 551

106. OPEN の成功/失敗 . . . . . . . . . . 553107. UPDAT の OPEN およびメンバー・デシジョ

ン・テーブルへの位置決め . . . . . . . 554108. ファイル・システム内の UNIX ディレクトリ

ーおよびファイル . . . . . . . . . . 568109. QSAM を使用した UNIX ファイルの作成 573110. 「項目の編集 (Edit-Entry)」パネル . . . . 580111. ISPF シェル・パネル . . . . . . . . . 581112. OPUT を使用した PDS または PDSE のメン

バーの UNIX ファイルへのコピー . . . . 583113. PDS エクステント、PDSE、および UNIX デ

ィレクトリーの区分連結 . . . . . . . . 590114. 状況表示 ― BDAM、BPAM、BSAM、および

QSAM . . . . . . . . . . . . . . 621115. DCB アベンド出口ルーチンに渡されるパラメ

ーター・リスト . . . . . . . . . . . 636116. リカバリー作業域 . . . . . . . . . . 639117. 3211 用の FCB イメージの定義 . . . . . 645118. ユーザー・ラベル出口ルーチンに渡されるパ

ラメーター・リスト . . . . . . . . . 648119. IECOENTE マクロのパラメーター・リスト 653120. IECOEVSE マクロ・パラメーター・リスト 656121. 直接アクセス・ラベル付け . . . . . . . 662122. 初期ボリューム・ラベル・フォーマット 663123. DASD またはテープ上のユーザー・ヘッダー

およびトレーラー・ラベル . . . . . . . 665124. 直接データ・セットの作成 (テープからディス

クへ) . . . . . . . . . . . . . . 673125. 直接データ・セットへのレコードの追加 678126. 直接データ・セットの更新 . . . . . . . 679127. 索引順次データ・セットの編成 . . . . . 684128. トラック索引項目のフォーマット . . . . . 685129. 索引順次データ・セットの作成 . . . . . 689130. 索引順次データ・セットを順次更新する 702131. 索引順次データ・セットを直接更新する 705132. 可変長レコードを持つ索引順次データ・セッ

トを直接更新する . . . . . . . . . . 707133. 索引順次データ・セットへのレコードの追加 710134. 索引順次データ・セットからのレコードの削

除 . . . . . . . . . . . . . . . 711135. ISAM 処理プログラムの使用 . . . . . . 720136. CCSID 変換グループ 1 . . . . . . . . 745137. CCSID 変換グループ 2 . . . . . . . . 745138. CCSID 変換グループ 3 . . . . . . . . 745139. CCSID 変換グループ 4 . . . . . . . . 745140. CCSID 変換グループ 5 . . . . . . . . 746

xiv z/OS V1R10 DFSMS データ・セットの使用法

Page 17: DFSMS データ・セットの使用法

表1. データ管理アクセス方式 . . . . . . . . 182. アクセス方式サービス・プログラムのコマンド 193. 非システム管理データ・セットおよびシステム管理データ・セットのデータ・セット・アクティビティー . . . . . . . . . . . . . 32

4. 順次データ・セットのストライプと VSAM データ・セットのストライプとの相違 . . . . 46

5. 入力順データ・セットの処理 . . . . . . . 936. キー順データ・セットの処理 . . . . . . . 967. RRDS 処理 . . . . . . . . . . . . 1008. 可変長 RRDS 処理. . . . . . . . . . 1019. ESDS、KSDS、固定長 RRDS、可変長

RRDS、および線形データ・セットの比較 . . 10110. さまざまなタイプの出力データ・セットへの

データの追加 . . . . . . . . . . . 13811. RPL オプションがデータ・バッファーと位置

決めに及ぼす影響 . . . . . . . . . . 16912. SMB のアクセス・バイアス・ガイドライン 19413. SHAREOPTIONS と VSAM 機能の間の関係 23314. リカバリー可能またはリカバリー不能なデー

タ・セットに対する RLS オープン・ルール . 26415. VSAM ユーザー作成出口ルーチン . . . . 28016. IGW8PNRU 出口ルーチンへの入り口でのレジ

スターの内容 . . . . . . . . . . . 28317. EODAD 出口ルーチンへの入り口でのレジス

ターの内容 . . . . . . . . . . . . 28418. EXCEPTIONEXIT ルーチンへの入り口でのレ

ジスターの内容 . . . . . . . . . . . 28519. JRNAD 出口ルーチンへの入り口でのレジスタ

ーの内容 . . . . . . . . . . . . . 28620. JRNAD 出口用に VSAM によってビルドされ

たパラメーター・リストの内容 . . . . . 29121. LERAD 出口ルーチンへの入り口でのレジスタ

ーの内容 . . . . . . . . . . . . . 29422. RLSWAIT 出口ルーチン用のレジスターの内

容 . . . . . . . . . . . . . . . 29523. SYNAD 出口ルーチンへの入り口でのレジス

ターの内容 . . . . . . . . . . . . 29724. UPAD ルーチンへの出口が取られる場合の条

件 . . . . . . . . . . . . . . . 30025. UPAD 出口ルーチンへの入り口でのレジスタ

ーの内容 . . . . . . . . . . . . . 30126. UPAD ルーチンに渡されるパラメーター・リ

スト . . . . . . . . . . . . . . 30127. ユーザー・セキュリティー検査ルーチンとの

通信 . . . . . . . . . . . . . . 30428. 31 ビット・アドレス・キーワード・パラメー

ター . . . . . . . . . . . . . . 30629. 索引レコードのヘッダーのフォーマット 32630. セグメント制御コード . . . . . . . . 34931. テープ密度 (DEN) 値 . . . . . . . . . 365

32. サポートされる最適および最大のブロック・サイズ . . . . . . . . . . . . . . 387

33. テープ・データ・セットまたは圧縮フォーマット・データ・セット用のブロック・サイズを設定するための規則 . . . . . . . . 390

34. バッファリング技法および GET/PUT 処理モード . . . . . . . . . . . . . . 418

35. データ保全処理のメッセージ . . . . . . 44436. データ保全違反を招くさまざまな条件 44537. DASD 上の順次データ・セットのタイプ - 特

性と利点 . . . . . . . . . . . . . 45638. PDSE と PDS の相違点 . . . . . . . . 51739. DE サービス機能の要約 . . . . . . . . 53740. UNIX ファイルが使用するアクセス方式 56941. UNIX ファイルとディレクトリーのアクセス

許可 . . . . . . . . . . . . . . 58042. DCB 出口ルーチン . . . . . . . . . . 61443. データ・イベント制御ブロック . . . . . 61544. 例外コード・ビット ― BISAM . . . . . 61645. イベント制御ブロック . . . . . . . . 61746. 例外コード・ビット ― BDAM . . . . . 61947. EODAD 出口ルーチンへの入り口でのレジス

ターの内容 . . . . . . . . . . . . 62248. 例外コード・ビット ― QISAM . . . . . 62449. SYNAD ルーチンの入り口でのレジスターの

内容 ― BDAM、BPAM、BSAM、およびQSAM . . . . . . . . . . . . . . 627

50. SYNAD ルーチンの入り口でのレジスターの内容 ― BISAM . . . . . . . . . . . 628

51. SYNAD ルーチンの入り口でのレジスターの内容 ― QISAM. . . . . . . . . . . 628

52. DCB 出口リストのフォーマットおよび内容 63253. オプション・マスク・バイト設定値 . . . . 63754. リカバリーを試行できる条件 . . . . . . 63855. ブロック数出口戻りコードへのシステム応答 64356. ユーザー・ラベル出口ルーチンの戻りコード

へのシステム応答 . . . . . . . . . . 64957. 汎用レジスターの保管および復元 . . . . . 65458. 索引順次データ・セットに対する要求 69259. QISAM エラー条件 . . . . . . . . . 72160. BISAM エラー条件 . . . . . . . . . 72361. DCB で指定された ISAM SYNAD ルーチン

のレジスター内容 . . . . . . . . . . 72462. AMP で指定された ISAM SYNAD ルーチン

のレジスターの内容 . . . . . . . . . 72463. ISAM インターフェースによって発行される

ABEND コード . . . . . . . . . . . 72464. ISAM インターフェースによってサポートさ

れる DEB フィールド . . . . . . . . 72565. ISAM インターフェースによってサポートさ

れる DCB フィールド . . . . . . . . 727

© Copyright IBM Corp. 1987, 2008 xv

Page 18: DFSMS データ・セットの使用法

66. 出力 DISP=NEW,OLD . . . . . . . . . 74967. 出力 DISP=MOD (IBM V4 テープのみ) 749

68. 入力 . . . . . . . . . . . . . . 752

xvi z/OS V1R10 DFSMS データ・セットの使用法

Page 19: DFSMS データ・セットの使用法

本書について

本書の対象読者は、システム・プログラマーおよびアプリケーション・プログラマーです。本書は、読者が DFSMS™ 環境で VSAM データ・セット、順次データ・セット、区分データ・セット (PDS)、拡張区分データ・セット (PDSE)、z/OS®

UNIX® ファイル、および世代別データ・セットを処理するためのアクセス方式を使用するのに役立ちます。 本書では、データ・セットを処理するためにアクセス方式サービス・プログラムのコマンド、マクロ命令、および JCL を使用する方法についても説明します。

身体に障害を持つユーザーのための z/OS のアクセシビリティー機能については、757ページの『付録 G. アクセシビリティー』を参照してください。

本書の主な内容本書は、以下の 3 つの主要な部分に分かれています。

v 第 1 部は、すべてのデータ・セットについての一般的なトピックを扱っています。

v 第 2 部は、VSAM データ・セットの処理を扱っています。

v 第 3 部は、非 VSAM データ・セットおよび UNIX ファイルの処理を扱っています。

v 付録は、以下のトピックを扱っています。– 直接アクセス・ラベルの使用。– 2 バイト文字セットを使用する漢字文字のコピーおよび印刷。– 直接データ・セットの処理。– 索引順次データ・セットの処理。– ISAM プログラムの VSAM データ・セットとの併用。– 文字セットの変換。

必要な製品知識本書を効果的に使用するには、次の情報および言語をよく知っておく必要があります。

v IBM サポートおよびその体制

v アセンブラー言語

v ジョブ制御言語 (JCL)

v 診断の技法

下記の資料で説明する、アクセス方式サービス・プログラムのコマンド、カタログ、およびストレージ管理を使用する方法についても理解しておく必要があります。

© Copyright IBM Corp. 1987, 2008 xvii

Page 20: DFSMS データ・セットの使用法

トピック 資料

アクセス方式サービス・プログラムのコマンド

「z/OS DFSMS Access Method Services for Catalogs」では、仮想記憶アクセス方式 (VSAM) データ・セットを処理するのに使用されるアクセス方式サービス・プログラムのコマンドが説明されています。

カタログ 「z/OS DFSMS Managing Catalogs」では、マスター・カタログとユーザー・カタログを作成する方法が説明されています。

ストレージ管理 「z/OS DFSMS Storage Administration Reference」および「z/OS

DFSMS Implementing System-Managed Storage」では、ストレージ管理が説明されています。

マクロ 「z/OS DFSMS Macro Instructions for Data Sets」では、VSAM データ・セットと非 VSAM データ・セットの処理に使用されるマクロが説明されています。

z/OS UNIX システム・サービス

「z/OS UNIX System Services ユーザーズ・ガイド」では、 z/OS

UNIX ファイルの処理方法が説明されています。

参照資料本書で参照される DFSMS 資料および関連 z/OS 資料の全リストについては、「z/OS 情報ロードマップ」を参照してください。本書および他の DFSMS 資料のソフトコピー・バージョンは、以下にリストされているソースから入手することができます。

本書では、以下の資料を参照します。

資料タイトル 説明

z/OS Collectionz/OS Collection、SK2T-6700 DFSMS ライブラリーおよびその他の z/OS エレメント・ライブラリーを収めた CD-ROM。

http://www.ibm.com/servers/eservers

/zseries/zos

DFSMS ライブラリーおよびその他の z/OS エレメント・ライブラリーのライセンス不要な資料を含む z/OS Web サイト。

Character Data Representation Architecture

Reference and Registry

文字データ表示アーキテクチャー・リポジトリーの中のコード化文字セット ID に関する情報を含む資料。

インターネットの z/OS DFSMS 情報へのアクセスCD-ROM でソフトコピー情報を提供しているほかに、IBM では、インターネットでも、z/OS ソフトコピー情報にアクセスできるようにしています (ただし英語版のみ)。z/OS 情報を表示、検索、および印刷するためには、以下の z/OS Internet

Library に進みます。

http://www.ibm.com/systems/z/os/zos/bkserv/

xviii z/OS V1R10 DFSMS データ・セットの使用法

Page 21: DFSMS データ・セットの使用法

変更の要約

本書には、用語、細かな修正、および編集上の変更が含まれています。テキストおよび図への技術的な変更および追加の個所は、各変更個所の左に縦線で示してあります。

本書の一部の内容のスタイルおよび構成の変更に気付かれたかもしれません。たとえば、見出しが具体的になりました。これらの変更は、 DFSMS 資料の情報の整合性を向上させたり検索を容易にするために、今後も引き続き行われます。

SC26-7410-08 z/OS バージョン 1 リリース 10 の要約本書には、以前に「z/OS DFSMS データ・セットの使用法」、SC26-7410-07 で記載されていた情報が含まれています。

以下の節で、その情報に対する変更内容を要約します。

新規情報本書には、以下の新規情報が記載されています。

v 以前の制限値である 65520 シリンダーを超えるサイズのボリュームをサポートするため、新機能として拡張アドレス・ボリューム (EAV) が追加されました。拡張アドレス・ボリュームは、定義上 65521 シリンダー以上です。詳細については、 53ページの『拡張アドレス・ボリューム』を参照してください。

v VSAM レコード・レベル共用 (RLS) に新機能の複数のロック構造が適用されるようになりました。複数の 2 次 DFSMS VSAM RLS カップリング・ファシリティーのロック構造を定義することができます。 詳しくは、 256ページの『VSAM

レコード・レベル共用の複数のロック構造』を参照してください。

v 全体的な PDSE キャッシング統計を表示する新しいパラメーター HSPSTATS および VSTOR が DISPLAY SMS,PDSE および DISPLAY SMS,PDSE1 コマンドに追加されました。詳細については、 564ページの『PDSE アドレス・スペースのチューニング』を参照してください。

削除された情報当版では以下の情報が削除されました。

v 67ページの『第 5 章 データ・セットの保護』では、VSAM データ・セットに対するパスワード保護およびパスワード処理が削除され、VSAM データ・セットに対するパスワード保護へのすべての参照は削除されました。

SC88-9114-05 z/OS バージョン 1 リリース 9 の要約本書には、以前に「z/OS DFSMS データ・セットの使用法」、SC88-9114-04 で記載されていた情報が含まれています。

以下の節で、その情報に対する変更内容を要約します。

© Copyright IBM Corp. 1987, 2008 xix

Page 22: DFSMS データ・セットの使用法

新規情報本書には、以下の新規情報が記載されています。

v VSAM システム管理バッファリング (SMB) に、ISMF を利用してデータ・クラスに既存の SMBVSP キーワード値を指定する新しい方法が追加されました。 この新しい値をデータ・クラスに指定することで、ストレージ量をより簡単に変更することができるようになります。 SMB では、多数のデータ・セットに対し直接最適化 (DO) 処理を行う際にストレージが使用されます。詳しくは、 191ページの『システム管理バッファリングの調整』を参照してください。

v SMB が VSAM データ・セットに対し選択したアクセス・バイアスを示すメッセージ IEC161I が新規に追加されました。 詳しくは、 191ページの『システム管理バッファリングの調整』を参照してください。

v DB2® の BSAM の CPU 時間を削減する新しいオプション FIXED = USER がDCBE に追加されました。 詳しくは、 473ページの『DASD およびテープに関するパフォーマンス』を参照してください。

v BSAM および QSAM の両方のパフォーマンスを改善するために MULTACC および MULTSDN が強化されました。詳しくは、 473ページの『DASD およびテープに関するパフォーマンス』を参照してください。

SC88-9114-04 z/OS バージョン 1 リリース 8 の要約本書には、以前に「z/OS DFSMS データ・セットの使用法」、SC88-9114-03 で記載されていた情報が含まれています。

以下の節で、その情報に対する変更内容を要約します。

新規情報本書には、以下の新規情報が記載されています。v ページ・スペースの 4 GB サイズ制限は解除されました。有効なページ・スペースの最大サイズについては、 143ページの『ページ・スペースの定義』を参照してください。

v PDSE の処理パフォーマンスおよびキャパシティーを改善するために、新しい初期化パラメーターが追加されました。詳細については、 564ページの『PDSE アドレス・スペースのチューニング』を参照してください。

変更情報本書で下記の情報が変更されました。v SYS1.PARMLIB メンバー IGDSMSxx の BLOCKTOKENSIZE パラメーターのデフォルト値が、 REQUIRE から NOREQUIRE に変更されました。詳しくは、484ページの『ラージ・フォーマット・データ・セットの処理』を参照してください。

削除情報v ページ・スペースの 4 GB サイズ制限は削除されました。

v JOBCAT および STEPCAT の DD ステートメントは z/OS V1R7 で使用不可になりました。これらへの参照は削除されました。

xx z/OS V1R10 DFSMS データ・セットの使用法

Page 23: DFSMS データ・セットの使用法

SC88-9114-03 z/OS バージョン 1 リリース 7 の要約本書には、以前に「z/OS DFSMS データ・セットの使用法」、SC88-9114-02 で記載されていた情報が含まれています。

以下の節で、その情報に対する変更内容を要約します。

新規情報本書には、以下の新規情報が記載されています。v ラージ・フォーマットの順次データ・セット。詳しくは、 484ページの『ラージ・フォーマット・データ・セットの処理』を参照してください。

v 基本フォーマットのデータ・セット (ラージ・フォーマットでも拡張フォーマットでもない順次データ・セット)。

v VSAM エクステント制約解放。詳しくは、 86ページの『データ・セット・サイズ』および 128ページの『VSAM エクステントの使用』を参照してください。

v データ・バッファーに対する VSAM RLS の 64 ビット・アドレッシング。詳しくは、 260ページの『64 ビット・アドレス可能なデータ・バッファーの使用』を参照してください。

v IHAEXLST マッピング・マクロに関する情報が、 631ページの『DCB 出口リスト』に追加されました。

v VSAM RLS OPEN を可能にする方法に関する情報が、 264ページの『RLS アクセス・ルール』に追加され、索引レコード・チェックに関する情報が、 271ページの『索引トラップ』に追加されました。

変更情報本書で下記の情報が変更されました。v シスプレックス環境での PDSE に対するボリューム割り当て上の考慮事項。詳細については、 555ページの『シスプレックス環境での PDSE 用ボリュームの選択』を参照してください。

v ISAM に関する情報が変更されて、ISAM はサポートされないこと、およびプログラムとデータ・セットは VSAM に変換するか、VSAM への ISAM インターフェースを使用する必要があることが記載されました。詳しくは、 6ページの『索引順次アクセス方式』、 681ページの『付録 D. 索引順次アクセス方式の使用』、および 719ページの『付録 E. ISAM プログラムの VSAM データ・セットとの併用』を参照してください。

v IEBCOPY を使って PDSE と PDS データ・セット間のコピーを行うことに関する推奨事項が、 534ページの『PDSE またはメンバーの別のデータ・セットへのコピー』に追加されました。

削除情報ISAM データ・セットに関する情報が、当版からほとんど削除されました。

変更の要約 xxi

Page 24: DFSMS データ・セットの使用法

xxii z/OS V1R10 DFSMS データ・セットの使用法

Page 25: DFSMS データ・セットの使用法

第 1 部 すべてのデータ・セット第 1 章 データ・セットの処理 . . . . . . . . 3データの保管および管理 . . . . . . . . . . 3システム管理データ・セット . . . . . . . . 4分散ファイル・マネージャー . . . . . . . . 4

アクセス方式 . . . . . . . . . . . . . . 4基本直接アクセス方式 . . . . . . . . . . 5基本区分アクセス方式 . . . . . . . . . . 5基本順次アクセス方式 . . . . . . . . . . 6仮想域内データ (DIV) . . . . . . . . . . 6索引順次アクセス方式 . . . . . . . . . . 6オブジェクト・アクセス方式 . . . . . . . . 6待機順次アクセス方式 . . . . . . . . . . 7仮想記憶アクセス方式 . . . . . . . . . . 7z/OS UNIX ファイルへのアクセス . . . . . . 8アクセス方式の選択 . . . . . . . . . . . 8

直接アクセス記憶装置 (DASD) ボリューム . . . . 9DASD ラベル . . . . . . . . . . . . . 9トラックのフォーマット . . . . . . . . . 9トラック・オーバーフロー . . . . . . . . 11VSAM レコード・アドレッシング . . . . . . 11非 VSAM アクセス方式を使用した実アドレスおよび相対アドレッシング . . . . . . . . . 12実アドレス . . . . . . . . . . . . 12相対アドレス . . . . . . . . . . . . 12

磁気テープ・ボリューム . . . . . . . . . . 14磁気テープ・ラベルの使用 . . . . . . . . 14ファイル・シーケンス番号の指定 . . . . . . 14

9999 より大きいファイル・シーケンス番号を使用したテープ・データ・セットの作成例 . . 15任意のファイル・シーケンス番号を使用したテープ・データ・セットの作成例 . . . . . . 16

ラベルなしテープの識別 . . . . . . . . . 17テープ・マークの使用 . . . . . . . . . . 17

データ管理マクロ . . . . . . . . . . . . 18データ・セット処理 . . . . . . . . . . . 19データ・セットの割り振り . . . . . . . . 19アクセス方式サービス・プログラム . . . . 19ALLOCATE コマンド . . . . . . . . . 19JCL . . . . . . . . . . . . . . . 19

プログラムを使用したデータ・セットの処理 . . 19アクセス方式の使用 . . . . . . . . . . 20アドレッシング・モードの使用 . . . . . . . 21

VSAM アドレッシング・モード . . . . . 21非 VSAM アドレッシング・モード . . . . 21

Hiperspace および Hiperbatch の使用 . . . . . 21VSAM データ・セットの処理 . . . . . . . 21PDS、PDSE、および UNIX ディレクトリーの処理 . . . . . . . . . . . . . . . . 22順次データ・セットおよび PDSE と PDS のメンバーの処理 . . . . . . . . . . . . . 23

BSAM 処理 . . . . . . . . . . . . 23

QSAM 処理 . . . . . . . . . . . . 24アクセス方式を使用した UNIX ファイルの処理 24EXCP、EXCPVR、および XDAP マクロの処理 25

分散データ管理 (DDM) 属性 . . . . . . . . 25一時データ・セットの仮想入出力 . . . . . . . 26データ・セット名 . . . . . . . . . . . . 27カタログおよびボリューム目録 . . . . . . . . 28

VTOC . . . . . . . . . . . . . . . 28カタログ . . . . . . . . . . . . . . 28データ・セット名およびメタデータ . . . . . 29データ・セット名のセキュリティー . . . . . 30

第 2 章 ストレージ管理サブシステムの使用 . . . 31自動クラス選択ルーチンの使用 . . . . . . . . 33データ・セットの割り振り . . . . . . . . . 35

JCL を使用したデータ・セットの割り振り . . . 35HFS データ・セットの割り振り . . . . . 36システム管理データ・セットの割り振り . . . 36非システム管理データ・セットの割り振り . . 37

アクセス方式サービス・プログラムのALLOCATE コマンドを使用したシステム管理データ・セットの割り振り . . . . . . . . . 38クラス指定を使用したデータ・セットの割り振り . . . . . . . . . . . . . . . 38クラス指定を使用した VSAM データ・セットの割り振り . . . . . . . . . . . . 38システム管理非 VSAM データ・セットの割り振り . . . . . . . . . . . . . . . 38PDSE の割り振り . . . . . . . . . . 39新規非システム管理データ・セットの割り振り 39

TSO ALLOCATE コマンドを使用したデータ・セットの割り振り . . . . . . . . . . . . 39動的割り振りを使用したデータ・セットの割り振り . . . . . . . . . . . . . . . . 40

第 3 章 直接アクセス・ボリュームでのスペースの割り振り . . . . . . . . . . . . . . . 41スペース所要量の指定 . . . . . . . . . . . 41ブロック . . . . . . . . . . . . . . 41平均レコード長 . . . . . . . . . . . . 42トラックまたはシリンダー . . . . . . . . 43絶対トラック . . . . . . . . . . . . . 43その他のスペース割り振りオプション . . . . 43

最大データ・セット・サイズ . . . . . . . . 431 つのボリューム上での最大サイズ . . . . . 43ボリュームの最大数 . . . . . . . . . . 44最大 VSAM データ・セット・サイズ. . . . . 44

最小データ・セット・サイズ . . . . . . . . 44保証スペース属性を指定しない 1 次および 2 次のスペース割り振り . . . . . . . . . . . . 45マルチボリューム VSAM データ・セット . . . 45

© Copyright IBM Corp. 1987, 2008 1

Page 26: DFSMS データ・セットの使用法

マルチボリューム非 VSAM データ・セット . . 46拡張フォーマット・データ・セット . . . . . 46

保証スペース属性を指定したデータ・セットの割り振り . . . . . . . . . . . . . . . . . 47

DISP=NEW または MOD を指定した保証スペース . . . . . . . . . . . . . . . . 47VSAM の場合の保証スペース . . . . . . . 47DISP=OLD または SHR を指定した保証スペース 47拡張フォーマット・データ・セットを指定した保証スペース . . . . . . . . . . . . . 48保証スペースの例 . . . . . . . . . . . 48

スペース制約軽減属性を指定したデータ・セットの割り振り . . . . . . . . . . . . . . . 49別の DASD ボリュームへの拡張 . . . . . . . 50データ・セットを定義するときの動的ボリューム・カウントの例 . . . . . . . . . . . 50既存のデータ・セットを割り振るときの動的ボリューム・カウントの例 . . . . . . . . . . 51

順次データ・セットについてのマルチボリューム考慮事項 . . . . . . . . . . . . . . . . 51拡張アドレス・ボリューム . . . . . . . . . 53スペース割り振りに関する追加情報 . . . . . . 55

第 4 章 データ・セットのバックアップとリカバリー . . . . . . . . . . . . . . . . . 57バックアップとリカバリー用の REPRO の使用 . . 58EXPORT と IMPORT を使用した VSAM データ・セットのバックアップとリカバリー . . . . . . 60エクスポートされたデータ・セットの構造 . . . 61EXPORT と IMPORT コマンド . . . . . . . 61

バックアップとリカバリー用のプログラムの書き込み . . . . . . . . . . . . . . . . . 61バックアップとリカバリー用の並行コピーの使用 . . 62リカバリー後のデータ・セットの更新 . . . . . 62リカバリー中でのカタログと VSAM データ・セット情報の同期 . . . . . . . . . . . . . . 62異常終了の処理 . . . . . . . . . . . . 63不適切にクローズされたデータ・セットを処理するための VERIFY の使用 . . . . . . . . 63不適切にクローズされた VSAM データ・セットによるエラーからのリカバリー . . . . . 64カタログでの VERIFY の使用 . . . . . . 65

CICS VSAM Recovery . . . . . . . . . . . 65

第 5 章 データ・セットの保護. . . . . . . . 67z/OS セキュリティー・サーバー (RACF) . . . . 67

VSAM データ・セットに対する RACF 保護 . . 67VSAM データ・セットに対する総称プロファイルと個別プロファイル . . . . . . . . . . 68非 VSAM データ・セットに対する RACF 保護 68データ・セット名の隠蔽 . . . . . . . . . 69

データ・セット・パスワード保護 . . . . . . . 70パスワードの割り当て . . . . . . . . . . 71データ・セットを定義するときの保護 . . . . 71誤ったパスワードの処理 . . . . . . . . . 71

PASSWORD データ・セット内でのレコードの入力 . . . . . . . . . . . . . . . . 71

ユーザー・セキュリティー検査ルーチン . . . . . 72残存データの消去 . . . . . . . . . . . . 72

DASD データの消去 . . . . . . . . . . 72データのシステム消去 . . . . . . . . . 73RAMAC 仮想アレイ . . . . . . . . . 73

テープ・データの消去 . . . . . . . . . . 74許可プログラム機能とアクセス方式サービス・プログラム . . . . . . . . . . . . . . . . 74アクセス方式サービス・プログラム暗号オプション 76データの暗号化と復号 . . . . . . . . . . 76

VSAM データ・セットの暗号化 . . . . . 78データ暗号鍵 . . . . . . . . . . . . 792 次鍵暗号鍵 . . . . . . . . . . . . 79

ICSF に関する REPRO ENCIPHER およびDECIPHER. . . . . . . . . . . . . . 80

2 z/OS V1R10 DFSMS データ・セットの使用法

||

Page 27: DFSMS データ・セットの使用法

第 1 章 データ・セットの処理

この章では以下のトピックを扱います。

トピック 該当ページ

データの保管および管理 3

アクセス方式 4

直接アクセス記憶装置 (DASD) ボリューム 9

磁気テープ・ボリューム 14

データ管理マクロ 18

データ・セット処理 19

分散データ管理 (DDM) 属性 25

一時データ・セットの仮想入出力 26

データ・セット名 27

カタログおよびボリューム目録 28

データ・セット は、論理的に関連したデータの集合であり、ソース・プログラム、マクロのライブラリー、または処理プログラムで使用されるデータ・レコードのファイルである場合があります。データ・レコードは、処理プログラムによって使用される情報の基本単位です。編成されたデータ・セットのボリュームにデータを入れることによって、データを保管および処理することができます。データ・セットの内容を印刷したり、内容を端末に表示したりできます。

例外: z/OS UNIX ファイルは、レコード単位ではなくバイト単位であるため、標準的データ・セットとは異なります。

データの保管および管理データは、直接アクセス記憶装置 (DASD) または磁気テープ・ボリュームなどの 2

次ストレージ・デバイスに保管できます。用語 DASD は、ディスク、またはコンピューターがデータを保管する大容量ストレージ・メディアに適用されます。ボリューム は 2 次ストレージの標準的な装置です。 DASD にはあらゆるタイプのデータ・セットを保管できますが、磁気テープには順次データ・セットしか保管できません。マウント可能なテープ・ボリュームは、自動化テープ・ライブラリーに常駐することができます。磁気テープ・ボリュームについては、「z/OS DFSMS Using

Magnetic Tapes」を参照してください。順次データ・セットは、スプール、UNIX ファイル、TSO/E 端末、ユニット・レコード装置、仮想入出力 I/O (VIO)、またはダミー・データ・セットとの間でやり取りすることもできます。

DASD ボリューム上のデータの各ブロックは、別個のロケーションおよび固有のアドレスを持っているので、どのレコードも広範囲の検索を行わなくとも見付けることができます。レコードの保管および検索を直接、または順次方式で行うことができます。 DASD ボリュームは、データおよび実行可能プログラム (オペレーティング・システム自体を含む) の保管用、および一時的作業用ストレージに使用しま

© Copyright IBM Corp. 1987, 2008 3

Page 28: DFSMS データ・セットの使用法

す。1 つの DASD ボリュームは、多くの異なるデータ・セットに使用でき、ボリューム上のスペースは再割り振りまたは再使用できます。

データ管理は、ご使用のシステムが使用するすべての情報 (プログラムを含む) を編成し、識別し、保管し、カタログに入れ、検索するオペレーティング・システムの部分です。データ管理では、以下のメインタスクを行います。v DASD ボリューム上のスペースを取っておく (割り振る)。v カタログ式データ・セットを名前によって自動的に検索する。v 磁気テープ・ボリュームをドライブにマウントする。v アプリケーション・プログラムとメディア間の論理接続を確立する。v データへのアクセスを制御する。v アプリケーション・プログラムとメディア間でデータを転送する。

システム管理データ・セットストレージ管理サブシステム (SMS) は、ストレージの管理を自動化する稼働環境です。ストレージ管理は、割り振り時に提供された値を使用して、たとえば、データ・セットをどのボリュームに入れ、それにいくつのトラック数を割り振るかを決定します。ストレージ管理は、自動化テープ・ライブラリーに常駐するマウント可能ボリューム上のテープ・データ・セットも管理します。SMS を使用すると、ユーザーはデータ・セットをより簡単に割り振ることができます。

SMS を通じて割り振られるデータ・セットは、システム管理データ・セットまたはSMS 管理データ・セットと呼ばれます。システム管理データ・セットの割り振りについての情報は、 31ページの『第 2 章 ストレージ管理サブシステムの使用』を参照してください。ユーザーがストレージ管理者である場合は、 SMS の使用についての情報は「z/OS DFSMS Storage Administration Reference」も参照してください。

分散ファイル・マネージャー分散ファイル・マネージャー (DFM) ターゲット・サーバーを使用すると、DFM ソース・サーバーを使用してプロセッサー上で稼働しているアプリケーションは、特定のタイプの SMS 管理データ・セットを作成またはアクセスすることができます。これらのアプリケーションは、DFM ターゲット・サーバーを使用して、DFSMS を稼働している System/390® プロセッサー上の特定のタイプの非 SMS 管理データ・セットにアクセスすることもできます。 サポートされるデータ・セット・タイプの詳細、およびそれらをリモート・アクセス用に使用できるようにする考慮事項の説明については、「z/OS DFSMS DFM Guide and Reference」を参照してください。また、 25ページの『分散データ管理 (DDM) 属性』も参照してください。

アクセス方式アクセス方式 は、データを保管および検索するのに使用される技法を定義します。アクセス方式には、データを編成するための独自のデータ・セット構造、データ・セットを定義および処理するためのマクロ、およびデータ・セットを処理するためのユーティリティー・プログラムがあります。

アクセス方式は、主にデータ・セット編成によって識別されます。たとえば、順次データ・セットでは基本順次アクセス方式 (BSAM) または待機順次アクセス方式

データ・セットの処理

4 z/OS V1R10 DFSMS データ・セットの使用法

Page 29: DFSMS データ・セットの使用法

(QSAM) を使用してください。ただし、ある編成で識別されるアクセス方式が、他の方法で編成されたデータ・セットの処理に使用できる場合があります。たとえば、BSAM を使用して作成された順次データ・セット (拡張フォーマット・データ・セットではない) は、基本直接アクセス方式 (BDAM) によって処理できます。またはその逆の処理が可能です。もう 1 つの例として UNIX ファイルがあります。UNIX ファイルは、BSAM、QSAM、基本区分アクセス方式 (BPAM)、または仮想記憶アクセス方式 (VSAM) を使用して処理することができます。

基本直接アクセス方式BDAM は、レコードをプログラムが指示する任意の順序で配置し、レコードを実アドレスまたは相対アドレスによって検索します。レコードの正確なロケーションがわからない場合は、データ・セット内の、レコードの検索を開始するポイントを指定できます。このように編成されたデータ・セットは、直接データ・セットと呼ばれます。

必要に応じて、BDAM ではハードウェア・キーを使用します。ハードウェア・キーは、仮想順次アクセス方式 (VSAM) におけるオプションのソフトウェア・キーほど効果的ではありません。

関連資料:

v 9ページの『トラックのフォーマット』

v 669ページの『付録 C. 直接データ・セットの処理』

基本区分アクセス方式基本区分アクセス方式 (BPAM) は、DASD 上でレコードを区分データ・セット(PDS) または拡張区分データ・セット (PDSE) のメンバーとして配置します。BPAM を使用して、UNIX ディレクトリーとそのファイルを PDS であるかのように表示することができます。BSAM または QSAM を使用して PDS、PDSE、または UNIX の各メンバーを順次方式で表示することができます。 PDS または PDSE

には、メンバー名をデータ・セット内のロケーションに関連付けるディレクトリーが含まれています。PDS、PDSE、または UNIX ディレクトリーを使用して、個々のメンバーを検索します。プログラム・ライブラリー (ロード・モジュールおよびプログラム・オブジェクト) の場合、ディレクトリーには、メンバーをロードし、再バインドするのに必要なプログラム属性が含まれています。 UNIX ファイルはプログラム・オブジェクトを含むことができますが、プログラム管理では、BPAM を使用して UNIX ファイルにはアクセスしません。

以下では、PDS、PDSE、および UNIX ファイルのいくつかの特性について説明します。

区分データ・セットPDS は、任意のタイプの順次レコードを持つことができます。

拡張区分データ・セットPDSE は、PDS とは異なる内部記憶域フォーマットを持っており、これにより PDSE の使用可能度特性が改善されています。PDSE はほとんどの PDS の代わりに使用することができますが、 PDSE は特定のシステム・データ・セットには使用できません。

データ・セットの処理

第 1 章 データ・セットの処理 5

Page 30: DFSMS データ・セットの使用法

z/OS UNIX ファイルUNIX ファイルはバイト・ストリームであり、レコードを含んでいません。BPAM は、UNIX ファイル内のバイトをレコードに変換します。BPAM を使用して UNIX ファイルを読み取ることはできますが、UNIX ファイルに書き込むことはできません。BPAM アクセスは BSAM アクセスに類似しています。

基本順次アクセス方式BSAM は、レコードを入力された順に順次配置します。この編成を持つデータ・セットは、順次データ・セットです。ユーザーは、他のレコードを持つレコードをブロックに編成します。これは基本アクセスです。BSAM を以下のデータ・タイプと併用することができます。

v 基本フォーマットの順次データ・セット (z/OS 1.7 より前には、順次データ・セット またはもっと正確に言うと 非拡張フォーマットの順次データ・セット として知られていました)

v ラージ・フォーマットの順次データ・セット

v 拡張フォーマット・データ・セット

v z/OS UNIX ファイル

仮想域内データ (DIV)仮想域内データ (DIV) マクロは、VSAM 線形データ・セットにアクセスすることができます。詳しくは、「z/OS MVS プログラミング:アセンブラー・サービス ガイド」を参照してください。 また、ウィンドウ・サービスを使用して、その資料に記載された線形データ・セットにもアクセス可能です。

索引順次アクセス方式ISAM は、基本索引順次アクセス方式 (BISAM) および待機索引順次アクセス方式(QISAM) の 2 つのアクセス方式を指します。ISAM が処理するデータ・セットは、索引順次データ・セットと呼ばれます。 z/OS V1R7 で始まりますが、索引順次 (ISAM) データ・セットは作成、コピー、オープン、変換、またはダンプができなくなります。削除またはリネームは可能です。z/OS の V1R7 よりも前のリリースを使用して ISAM データ・セットを VSAM データ・セットに変換できます。

重要: ISAM は使用しないでください。すべての索引順次データ・セットを VSAM

データ・セットに変換する必要があります。 681ページの『付録 D. 索引順次アクセス方式の使用』を参照してください。

オブジェクト・アクセス方式オブジェクト・アクセス方式 (OAM) は、レコード境界または他の内部方向のない非常に大規模な、名前付きバイト・ストリーム (オブジェクト) を処理します。これらのオブジェクトは、DB2 データベース内、または光ストレージ・ボリュームまたはテープ・ストレージ・ボリューム上に記録することができます。OAM は SMS

ポリシーを使用して、これらのオブジェクトに対する情報ライフ・サイクル管理を行います。OAM については、「z/OS DFSMS OAM Application Programmer’s

Reference」および「z/OS DFSMS OAM Planning, Installation, and Storage

Administration Guide for Object Support」を参照してください。

データ・セットの処理

6 z/OS V1R10 DFSMS データ・セットの使用法

|

|

|

|

|

|

|

|

Page 31: DFSMS データ・セットの使用法

待機順次アクセス方式QSAM は、順次データ・セットを形成するために入力された順にレコードを順次配置します。これは、BSAM が作成するデータ・セットと同じです。システムはレコードを他のレコードと共に編成します。 QSAM は、レコードの順番に基づくレコードの必要性を予期します。パフォーマンスを改善するために、QSAM は、これらのレコードが要求される前にレコードをストレージに読み込みます。これは、待機アクセスと呼ばれます。 QSAM を以下のデータ・タイプと併用することができます。

v 順次データ・セット

v 基本フォーマットの順次データ・セット (z/OS 1.7 より前には、順次データ・セット またはもっと正確に言うと 非拡張フォーマットの順次データ・セット として知られていました)

v ラージ・フォーマットの順次データ・セット

v 拡張フォーマット・データ・セット

v z/OS UNIX ファイル

仮想記憶アクセス方式VSAM は、レコードを索引キー、相対レコード番号、または相対バイト・アドレス別に配置します。 VSAM は、DASD 上の固定長または可変長レコードの直接処理または順次処理に使用されます。 VSAM によって編成されたデータは、検索を容易にするためにカタログ化され、5 つのタイプのデータ・セットの 1 つで保管されます。

v 入力順データ・セット (ESDS)。レコードを入力された順に含みます。レコードはデータ・セットの末尾に追加され、アクセス可能です。

v キー順データ・セット (KSDS)。レコードを昇順の照合シーケンスで含みます。レコードは、キーと呼ばれるフィールドによって、または相対バイト・アドレスによってアクセスできます。

v 線形データ・セット (LDS)。レコード境界がないデータを含みます。線形データ・セットには、他の VSAM データ・セットが含む制御情報を含んでいません。線形データ・セットは、カタログ内でカタログ化する必要があります。

v 相対レコード・データ・セット (RRDS)。レコードを相対レコード番号の順に含み、レコードはこの番号でのみアクセスできます。相対レコード・データ・セットには 2 つのタイプがあります。

– 固定長 RRDS: レコードは、固定長である必要があります。

– 可変長 RRDS: レコードの長さが変化することがあります。

本書を通じて、用語 RRDS は、区別する必要がない限り、両方のタイプの相対レコード・データ・セットを指します。

v z/OS UNIX ファイル。UNIX ファイルは、VSAM 入力順データ・セット (ESDS)

であるかのようにアクセスすることができます。UNIX ファイルは実際には入力順データ・セットとして保管されていませんが、システムはそのようなデータ・セットの特性をシミュレートしようとします。 UNIX ファイルを識別またはアクセスするには、それに至るパスを指定します。

VSAM データ・セットのどのタイプも拡張フォーマットにすることができます。拡張フォーマット・データ・セットは、拡張されないデータ・セットとは異なる内部

データ・セットの処理

第 1 章 データ・セットの処理 7

Page 32: DFSMS データ・セットの使用法

記憶域フォーマットを持ちます。このストレージ・フォーマットにより、拡張フォーマット・データ・セットに追加の使用可能度特性が与えられ、多くの場合、ストライピングによりパフォーマンスが改善されます。拡張フォーマット・キー順データ・セットを圧縮フォーマットになるように選択することができます。拡張フォーマット・データ・セットは、SMS により管理される必要があります。特定のシステム・データ・セットには、拡張フォーマット・データ・セットを使用することはできません。

要件: BISAM または QISAM は使用しないでください。代わりに VSAM を使用します。

z/OS UNIX ファイルへのアクセスプログラムは、UNIX ファイル内の情報には z/OS UNIX システム・サービス(z/OS UNIX) 呼び出し (open(pathname)、read(file descriptor)、およびwrite(file descriptor) など) を使用してアクセスできます。プログラムは、UNIX ファイル内の情報に BSAM、BPAM、QSAM、および VSAM アクセス方式を使用してアクセスすることもできます。BSAM または QSAM を使用すると、UNIX ファイルは単一ボリューム順次データ・セットとしてシミュレートされます。 VSAM を使用すると、UNIX ファイルは ESDS としてシミュレートされます。BPAM を使用すると、UNIX ディレクトリーとそのファイルは区分データ・セット・ディレクトリーとそのメンバーとしてシミュレートされます。

下記のタイプの UNIX ファイルと上記のアクセス方式を併用することができます。v 通常のファイル (ネットワーク・ファイル・システム (NFS)、一時ファイル・システム (TFS)、HFS、または zSeries® ファイル・システム (zFS) を使用してアクセスされるファイルを含む)

v 文字特殊ファイルv 先入れ先出し法 (FIFO) 特殊ファイルv シンボリック・リンク

制約事項: 下記のタイプの UNIX ファイルと上記のアクセス方式を併用することはできません。v UNIX ディレクトリー (BPAM を使用した間接的なアクセスを除く)

v 外部リンク

ファイルは他のシステムに常駐できます。アクセス方式を使用するユーザーは、NFS を使用してファイルにアクセスすることができます。

アクセス方式の選択データ・セット用のアクセス方式を選択する際、データ・セットの編成、マクロを使用して指定する必要があるもの、および装置タイプを考慮してください。

v VSAM データ・セット、PDSE、PDS、拡張フォーマット・データ・セット、直接データ・セット、および UNIX ファイルは、DASD ボリュームに保管する必要があります。

v 順次データ・セットは DASD またはテープ・ボリュームに入れることができるか、ユニット・レコード装置または TSO/E 端末から読み取るか、それに書き込むことができます。それらはスプール・データ・セットである場合があります。

データ・セットの処理

8 z/OS V1R10 DFSMS データ・セットの使用法

Page 33: DFSMS データ・セットの使用法

SYSOUT という名前のスプール・データ・セットは、ネットワークを通じて送信できます。順次データ・セットは、ダミー・データ・セットにすることもできます。

さらに、行いたい処理のタイプ (順次または直接) に応じてデータ編成を選択する必要があります。たとえば、RRDS またはキー順データ・セットは、直接アクセスのみ、または直接アクセスと順次アクセスの両方を使用するアプリケーション用に最適です。順次データ・セットまたは VSAM 入力順データ・セットは、バッチ処理アプリケーションおよび順次アクセス用に最適です。

制約事項: VSAM データ・セットは、非 VSAM アクセス方式を使用して処理することはできません。ただし、線形データ・セットにアクセスするには、DIV マクロを使用できます。VSAM を使用して UNIX ファイル以外の非 VSAM データ・セットを処理することはできません。

行モードで TSO/E 端末に対して読み書きを行うための BSAM および QSAM の使用については、「z/OS TSO/E コマンド解説書」を参照してください。

直接アクセス記憶装置 (DASD) ボリュームDASD ボリュームは、物理的外観、容量、および速度が異なっていますが、データ記録、データ・チェック、データ・フォーマット、およびプログラミングは似ています。各ボリュームの記録面は、多くの同心円トラックに分割されています。トラックの数およびそれらの容量は、装置によって異なります。

DASD ラベルオペレーティング・システムは、さまざまなグループのラベルを使用して、DASD

ボリュームおよびそれらに含まれるデータ・セットを識別します。アプリケーション・プログラムは通常、これらのラベルを直接使用することはありません。 DASD

ボリュームは、標準ラベルを使用する必要があります。標準ラベルには、ボリューム・ラベル、各データ・セット用のデータ・セット・ラベル、およびオプションのユーザー・ラベルが含まれます。シリンダー 0 のトラック 0 に保管されているボリューム・ラベルは、各 DASD ボリュームを示します。

ユーティリティー・プログラムは、各 DASD ボリュームがシステム上で使用される前にボリュームを初期設定します。初期設定プログラムは、ボリューム・ラベルを生成し、ボリューム目録 (VTOC) を作成します。VTOC は、データ・セット・ラベルを含む構造です。

直接アクセス・ラベルについては、 661ページの『付録 A. 直接アクセス・ラベルの使用』を参照してください。

トラックのフォーマット情報は、すべての DASD ボリューム上に標準フォーマットで記録されます。このフォーマットは、カウント・キー・データ (CKD) または拡張カウント・キー・データ(ECKD™) と呼ばれます。

各トラックには、レコード 0 (トラック記述子レコードまたはキャパシティー・レコードとも呼ばれます) およびデータ・レコードが含まれています。これまで、

データ・セットの処理

第 1 章 データ・セットの処理 9

Page 34: DFSMS データ・セットの使用法

S/390® のハードウェア・マニュアルおよびソフトウェア・マニュアルでは、DASD

ボリューム上に書き込まれるデータの単位を指すのに矛盾する用語を使用してきました。 ハードウェア・マニュアルではそれらをレコード と呼びます。ソフトウェア・マニュアルではそれらをブロック と呼び、「レコード」という用語は他のものに使用します。本書の DASD のセクションでは両方の用語を適宜に使用しています。ソフトウェアのレコードについては、 85ページの『第 6 章 VSAM データ・セットの編成』および 341ページの『第 20 章 非 VSAM データ・セット用のレコード・フォーマットの選択』で説明しています。

これらのデータ・フォーマットについて、下記のうち 1 つ以上が当てはまります。

v 各 VSAM 制御インターバルは、1 つ以上の隣接するブロックから構成されます。制御インターバルは、制御域にグループ化されます。

v 各非 VSAM ブロックには、レコードの一部または 1 つ以上のレコードが含まれます。これらのプログラミング・インターフェースの例としては、BSAM、BDAM、および EXCP があります。

v 各 VSAM レコードは、複数の制御インターバルまたは制御インターバルの全部または一部を占めます。各非 VSAM レコードは、複数のブロックまたはブロックの全部または一部を占めます。例としては QSAM があります。

v アプリケーション・プログラムは、バイト・ストリームをレコードの中でグループ化されるものとして見なす可能性があります。アプリケーション・プログラムはブロックを調べません。このようなプログラムの例としては、UNIX ファイルおよび OAM オブジェクトがあります。

レコードをブロックにグループ化する処理をブロック化 と呼びます。ブロックからのレコードの抽出は、非ブロック化 と呼びます。ブロック化または非ブロック化は、アプリケーション・プログラムまたはオペレーティング・システムによって行われる場合があります。z/OS UNIX では、ブロッキングはプログラム実行の中断を意味します。

特定の条件下では、BDAM はレコード・ゼロのデータ域を使用して、トラック上の最終ユーザー・レコードに続く空のバイト数に関する情報を入れます。これは、トラック・ディスクリプター・レコード と呼ばれます。

11ページの図 1 は、2 つの異なるデータ・フォーマットである、カウント・データおよびカウント・キー・データを示しています。特定のデータ・セットについてそれらのうちどちらか一方だけを使用できます。例外は、PDSE ではない PDS です。ディレクトリー・ブロックは、カウント・キー・データ・フォーマットになっており、メンバー・ブロックは通常、カウント・データ・フォーマットになっています。

データ・セットの処理

10 z/OS V1R10 DFSMS データ・セットの使用法

Page 35: DFSMS データ・セットの使用法

カウント・データ・フォーマット: レコードは、キーなしでフォーマット設定されます。キーの長さは 0 です。カウント域には、シリンダー別のブロック、ヘッド、およびレコード番号のロケーション、ならびにそのデータ長を示す 8 バイトが含まれます。

カウント・キー・データ・フォーマット: ブロックは、ハードウェア・キーを使用して書き込まれます。キー域 (1 から 255 バイト) には、データ・レコード (部品番号、アカウント番号、シーケンス番号、またはその他の ID など) を示すレコード・キーが含まれます。

データ・セットでは、BDAM、BSAM、EXCP、および PDS ディレクトリーのみがブロックとハードウェア・キーを併用します。データ・セット以外では、VTOC およびボリューム・ラベルがハードウェア・キーを含みます。

補足事項: ハードウェア・キーの使用は、ソフトウェア・キー (これは、VSAM が使用します) の使用ほど効果的でありません。

トラック・オーバーフローオペレーティング・システムは、トラック・オーバーフロー・フィーチャーをサポートしなくなりました。オペレーティング・システムは、トラック・オーバーフロー・フィーチャーに対する要求をすべて無視します。

VSAM レコード・アドレッシングVSAM レコードは、それらのキー、レコード番号、またはデータ・セット内での相対バイト・アドレスによって識別します。 91ページの『VSAM データ・セット・タイプの選択』を参照してください。

図 1. DASD ボリューム・トラックのフォーマット

データ・セットの処理

第 1 章 データ・セットの処理 11

Page 36: DFSMS データ・セットの使用法

非 VSAM アクセス方式を使用した実アドレスおよび相対アドレッシング

特定のアクセス方式では、データに非順次でアクセスできます。ブロックのロケーションを識別するのにアドレスを使用することができます。実アドレスと相対アドレスの 2 つのタイプのアドレスを使用して、DASD ボリューム上でデータを保管および検索します。 BSAM DCB を含んだ複数のボリューム・データ・セット (拡張フォーマット・データ・セットを除く) を順次処理するときには、現行のボリュームのレコードのみを参照することができます。

実アドレスシステムが直接アクセス・ボリューム上のブロックの実アドレスをプログラムに戻すときは、 MBBCCHHR の形式になっています。ここで、文字は次の値を表しています。

M 相対エクステント番号を指定する 1 バイトの 2 進数。各エクステントは、データ・セットに割り振られる連続トラックのセットです。

BBCCHH ブロックについてセル (ビン)、シリンダー、およびヘッドの番号を指定する 3

つの 2 バイトの 2 進数 (ブロックのトラック・アドレス)。シリンダー番号およびヘッド番号は、各ブロックのカウント域に記録されます。すべての DASD では、ビン番号 (BB) がゼロである必要があります。

R トラック上の相対ブロック番号を指定する 1 バイトの 2 進数。ブロック番号は、カウント域でも記録されます。

プログラムがデータ・セット内に実アドレスを保管しており、それらのアドレスを参照する場合、データ・セットは、移動不能であるとして扱う必要があります。移動不能なデータ・セットは、システム管理ボリューム上に常駐することはできません。

実アドレスを別のデータ・セットに保管する場合、1 次データ・セットの移動またはマイグレーションが行われると、実アドレスは無効になります。DSORG の中で移動不能な属性を含んだデータ・セットにマークを付けることができますが、このマーク付けにより、そのデータ・セットは SMS 管理の対象外となります。

相対アドレスBDAM、BSAM、および BPAM は、オプションとして相対アドレスを使用してデータ・セット内の各ブロックを識別します。

BSAM および BPAM 相対アドレスは、現行ボリューム上のデータ・セットに相対しています。BDAM 相対アドレスは、データ・セットに相対しており、全ボリュームにまたがります。

BDAM 相対ブロック・アドレス。相対ブロック・アドレスは、データ・セットの最初のブロックから始めて、ブロックの位置を示す 3 バイトの 2 進数です。ブロックの不連続セットの割り振りは、番号に影響を及ぼしません。データ・セットの最初のブロックの相対ブロック・アドレスは、常に 0 です。

BDAM、BSAM、および BPAM 相対トラック・アドレス。BSAM を使用すると、基本またはラージ・フォーマットのデータ・セットで相対トラック・アドレスを使用できます。BPAM を使用すると、PDS で相対トラック・アドレスを使用できま

データ・セットの処理

12 z/OS V1R10 DFSMS データ・セットの使用法

Page 37: DFSMS データ・セットの使用法

す。この相対トラック・アドレスには、以下の形式の TTR または TTTR があります。

TT またはTTT

符号なしの 2 バイトまたは 3 バイトの 2 進数で、データ・セットに割り振られた先頭トラックを起点として、アクセス対象のトラック位置を指定。このトラック位置は、BDAM 使用時は常に 2 バイトであり、BSAM と BPAM 使用時はDCBE マクロ上の BLOCKTOKENSIZE=LARGE が無指定の場合に 2 バイトです。DCBE マクロ上の BLOCKTOKENSIZE=LARGE を指定すると、BSAM とBPAM 使用時は 3 バイトです。先頭トラックに対する値は 0 です。連続していないトラックの集まりが割り振られている場合、相対トラック番号に影響はありません。

R トラック TT または TTT 上の先頭ブロックを起点として、アクセス対象のブロック番号を指定する 1 バイトの 2 進数。トラック上のデータの最初のブロックのR 値は 1 です。

IBM 3380 モデル K などの一部の装置では、データ・セットは 32 767 を超えるトラックを含むことができます。したがって、アセンブラーのハーフワード命令の結果として、無効データが処理される可能性があります。

拡張フォーマット・データ・セットの相対ブロック・アドレス。 拡張フォーマット・データ・セットの場合、ブロック・ロケーター・トークン (BLT) にはアドレッシング能力が備わっています。 BLT は、それが相対トラック・レコード(TTR) であるかのように、透過的に使用することができます。この NOTE マクロは 4 バイトの値を戻します。DCBE マクロ上の BLOCKTOKENSIZE=LARGE が無指定の場合、高位 3 バイトは BLT 値であり、4 バイト目はゼロです。DCBE マクロ上のBLOCKTOKENSIZE=LARGE を指定すると、4 バイト目が BLT 値となります。プログラムは、NOTE マクロからの値を POINT マクロへの入力として使用します。POINT マクロは、BSAM を通じての順次データ・セット内の位置決めを示します。BLT は、本質的には、データ・セットの各論理ボリューム内の相対ブロック番号(RBN) です (ここで、最初のブロックの RBN は 1 です)。圧縮フォーマット・データ・セットでは、相対ブロック番号は、実際の圧縮されたブロックではなく、圧縮解除されたシミュレート・ブロックを表します。

マルチストライプ付きデータは、ユーザーには単一の論理ボリュームのように見えます。したがって、マルチストライプ付きデータ・セットでは、RBN はデータ・セットの先頭に相対しており、すべてのストライプを取り込みます。

PDSE の相対トラック・アドレス。PDSE では、相対トラック・アドレス (TTR)

は、実際のトラックおよびレコードのロケーションを示していません。そうではなく、TTR はデータ・セット内のレコードの位置を定義するトークンです。PDSE メンバーおよびブロックの TTR の説明については、 520ページの『相対トラック・アドレス (TTR)』を参照してください。この 3 バイトまたは 4 バイトの値は、DCBE

マクロ上の BLOCKTOKENSIZE=LARGE を指定しているかどうかで決まります。

UNIX ファイルの相対トラック・アドレス。UNIX ファイルでは、相対トラック・アドレス (TTR) は、実際のトラックおよびレコードのロケーションを示していません。そうではなく、TTR は、UNIX メンバーへの BPAM 論理接続またはファイル内のレコードの位置を定義するトークンです。この 3 バイトまたは 4 バイトの値は、DCBE マクロ上の BLOCKTOKENSIZE=LARGE を指定しているかどうかで決まります。

データ・セットの処理

第 1 章 データ・セットの処理 13

Page 38: DFSMS データ・セットの使用法

磁気テープ・ボリュームこのセクションでは、磁気テープ・ラベルの使用法、および磁気テープ・ボリュームに保管されるデータ・セットのファイル・シーケンス番号の指定方法について説明します。

磁気テープ・デバイス上のデータ・セットは順次に編成する必要があるので、スペースを割り振る手順は、DASD 上のスペースの割り振り手順とは異なります。所定の磁気テープ・ボリューム上に保管されるすべてのデータ・セットは、同じ密度で記録する必要があります。磁気テープ・ボリューム・ラベルおよびテープ処理については、「z/OS DFSMS Using Magnetic Tapes」を参照してください。

関連資料: 標準外ラベル処理ルーチンについては、「z/OS DFSMS Installation

Exits」を参照してください。

磁気テープ・ラベルの使用オペレーティング・システムは、さまざまなグループのラベルを使用して、磁気テープ・ボリュームおよびそれらに含まれるデータ・セットを識別します。アプリケーション・プログラムは通常、これらのラベルを直接使用することはありません。磁気テープ・ボリュームには、標準ラベルまたは標準外ラベルが付いているか、あるいはラベルが付いていない場合があります。DASD ボリュームは、標準ラベルを使用する必要があります。標準ラベルには、ボリューム・ラベル、各データ・セット用のデータ・セット・ラベル、およびオプションのユーザー・ラベルが含まれます。シリンダー 0 のトラック 0 に保管されているボリューム・ラベルは、各DASD ボリュームを示します。

国際標準化機構 (ISO) および米国規格協会 (ANSI) の磁気テープ・ラベルは、IBM

標準ラベルに類似しています。 2 つのコンピューターが異なるメーカーの製品であったとしても、ASCII により、磁気テープ上のデータをあるコンピューターから別のコンピューターに転送することができます。 IBM 標準ラベルは、拡張 2 進化10 進数交換コード (EBCDIC) でコード化されます。 ISO/ANSI ラベルは、情報交換用米国標準コード (ASCII) でコード化されます。

ファイル・シーケンス番号の指定磁気テープ・ボリューム上に新規データ・セットを入れるとき、データ・セットがリールまたはカートリッジ上の最初のデータ・セットでない限り、ファイル・シーケンス番号を指定する必要があります。下記のテープの場合、テープ・ボリューム上のデータ・セットのファイル・シーケンス番号の最大値は 65 535 です。

v 標準ラベル (SL) テープ

v 標準ユーザー・ラベル (SUL) テープ

v 先行テープ・マーク (LTM) テープ

v ラベルなし (NL) テープ

v ラベル迂回処理 (BLP) テープ

制約事項: ISO/ANSI (AL) ラベル付きテープには、9999 より大きいファイル・シーケンス番号を指定することはできません。

データ・セットの処理

14 z/OS V1R10 DFSMS データ・セットの使用法

Page 39: DFSMS データ・セットの使用法

関連資料: ファイル・シーケンス番号の使用法の詳細については、「z/OS DFSMS

Using Magnetic Tapes」を参照してください。

以下のいずれかの方法でファイル・シーケンス番号を指定することができます。

v DD ステートメント上の LABEL キーワードの最初の値として、またはDYNALLOC (動的割り振り用のマクロ) を使用してファイル・シーケンス番号をコード化する。

v 適切なファイル・シーケンス番号およびボリューム通し番号を使用して各データ・セットをカタログする。 カタログによりファイル・シーケンス番号が提供されるため、OPEN マクロを実行してください。

DD ステートメントまたは動的割り振りを使用してファイル・シーケンス番号を指定しない場合は、OPEN マクロはカタログのファイル・シーケンス番号を使用します。

v RDJFCB マクロを使用すると、ジョブ・ファイル制御ブロック (JFCB) の読み取り、JFCB の中にファイル・シーケンス番号の設定、および新規データ・セットまたはカタログされていないデータ・セットに対する OPEN, TYPE=J マクロの実行が可能となります。最大ファイル・シーケンス番号は 65 535 です。この方法では、ファイル・シーケンス番号の他のソースが指定変更されます。

関連資料: OPEN マクロの詳細については、「z/OS DFSMS Macro Instructions for

Data Sets」を参照してください。RDJFCB マクロと OPEN, TYPE=J マクロの詳細については、「z/OS DFSMSdfp Advanced Services」を参照してください。IEHPROGM の詳細については、「z/OS DFSMSdfp Utilities」を参照してください。

9999 より大きいファイル・シーケンス番号を使用したテープ・データ・セットの作成例次の例は、OPEN,TYPE=J および RDJFCB マクロを使用してファイル・シーケンス番号 10 011 を用いたカタログ式テープ・データ・セットを作成する方法について示したものです。ファイル・シーケンス番号は JFCB の中に保管されます。JCL ステートメントの中で、LABEL=(1,labeltype) パラメーターを指定します。ここで、labeltype は SL や NL などの磁気テープ・ラベル・タイプです。この例では、前のファイルが指定のテープ上あるいは JFCB または JFCB エクステンションの中に指定されているボリューム上に存在する場合は、1 から 65 535 までの任意のファイル・シーケンス番号を使用しても有効です。システムは、データ・セットの割り振りを解除するときに、カタログの中にデータ・セット用の項目を作成します。

例:

//* STEP05//* Create a tape data set with a file sequence number of 10 011.//* Update the file sequence number (FSN) in JFCB using OPEN TYPE=J macro.//*--------------------------------------------------------------------//STEP05 EXEC ASMHCLG//C.SYSIN DD *

. . .L 6,=F’10011’ CREATE FSN 10011RDJFCB (DCBAD) READ JFCBSTCM 6,B’0011’,JFCBFLSQ STORE NEW FSN IN JFCBOPEN (DCBAD,(OUTPUT)),TYPE=J CREATE FILEPUT DCBAD,RECORD WRITE RECORDCLOSE DCBAD CLOSE FILE. . .

データ・セットの処理

第 1 章 データ・セットの処理 15

|

|

Page 40: DFSMS データ・セットの使用法

DCBAD DCB DDNAME=DD1,DSORG=PS,EXLST=LSTA,MACRF=PM,LRECL=80,RECFM=FBLSTA DS 0F RJFCB EXIT LIST

DC X’87’ CODE FOR JFCBDC AL3(JFCBAREA) POINTER TO JFCB AREA

JFCBAREA DS XL176 JFCB AREAIEFJFCBN DEFINE THE JFCB FIELDS

RECORD DC CL80’RECORD10011’ RECORD AREAEND

//* JCL FOR ALLOCATING TAPE DATA SET//DD1 DD DSN=DATASET1,UNIT=TAPE,VOL=SER=TAPE01,DISP=(NEW,CATLG),// LABEL=(1,SL)

結果: 出力には、ファイル・シーケンス番号 10 011 を使用した新規テープ・データ・セットに関する情報が示されます。

IEC205I DD1,OCEFS005,G.STEP05,FILESEQ=10011, COMPLETE VOLUME LIST,DSN=DS10011,VOLS=TAPE01,TOTALBLOCKS=1

任意のファイル・シーケンス番号を使用したテープ・データ・セットの作成例次の例は、OPEN マクロを使用して 1 から 10 010 までのファイル・シーケンス番号を用いたいくつかのテープ・データ・セットを作成する方法について示したものです。JCL ステートメントの中で、 LABEL=(fsn,labeltype) パラメーターを指定します。ここで、fsn はファイル・シーケンス番号、labeltype は SL や NL などの磁気テープ・ラベル・タイプです。

例:

//* STEP06//* Create files 1 through 10 010 on a single volume.//*--------------------------------------------------------------//STEP06 EXEC ASMHCLG//C.SYSIN DD *

. . .L 6,=F’10010’ CREATE 10 010 FILESLA 5,1 START AT FILE 1 AND DS1RDJFCB (DCBAD) READ JFCBMVC JFCBAREA(44),=CL44’DS’ DSNAME IS ’DSfsn’ WHERE

* fsn IS FSN 1 TO 10 010* -------------------------------------------------------------* This loop creates file sequence numbers from 1 to 10 010.* -------------------------------------------------------------LOOP EQU *

STCM 5,B'0011’,JFCBAREA+68 STORE NEW FSN IN JFCBCVD 5,WORKAREA UPDATE DSNAMEUNPK JFCBAREA+2(5),WORKAREA(8) LOAD JFCBOI JFCBAREA+6,X’F0’ SET DSfsnMVC RECORD+6(5),JFCBAREA+2 MOVE FSN INTO RECORD

* RECORD FORMAT IS ’RECORDfsn’OPEN (DCBAD, (OUTPUT)),TYPE=J CREATE FILE NUMBERPUT DCBAD,RECORD WRITE RECORD

CLOSE (DCBAD,LEAVE) CLOSE FILE NUMBERCONTIN EQU *

RDJFCB (DCBAD) READ JFCBSR 5,5ICM 5,B’0011’,JFCBAREA+68 GET CURRENT FSNLA 5,1(5) INCREMENT FSNBCT 6,LOOP CONTINUE PROCESSING UNTIL DONE. . .

* DEFINITIONSDS 0D

SAVE DC 18F’0’DCBAD DCB DDNAME=DD1,DSORG=PS,EXLST=LSTA,MACRF=PM,BLKSIZE=80,RECFM=F

データ・セットの処理

16 z/OS V1R10 DFSMS データ・セットの使用法

Page 41: DFSMS データ・セットの使用法

LSTA DS 0F RJFCB EXIT LISTDC X’87’DC AL3(JFCBAREA)

JFCBAREA DC 50F’0’ JFCB AREARECORD DC CL80’RECORD’ RECORD AREA

DS 0DWORKAREA DC 2F’0’ WORK AREA

END/** JCL FOR ALLOCATING TAPE DATA SET

結果: この抜粋出力には、ファイル・シーケンス番号 9999 を使用したテープ・データ・セットに関する情報が示されます。

IEC205I DD1,OCEFS001,G.STEP06,FILESEQ=09999, COMPLETE VOLUME LIST,DSN=DS09999,VOLS=TAPE01,TOTALBLOCKS=1

ラベルなしテープの識別データ・セットをラベルなしテープ・ボリュームに保管する場合は、システムは各ボリュームを識別するのにボリューム通し番号を必要とします。データ・セットが自動テープ・ライブラリーの中にある場合は、システムは、各カートリッジの外側にあるバーコードにエンコードされているボリューム通し番号を使用します。データ・セットが自動テープ・ライブラリーの中にない場合は、データ・セットを含むのに十分なボリューム通し番号を指定することをお勧めします。ボリューム通し番号をまったく指定しない場合、または十分なボリューム通し番号を指定しない場合は、システムまたはテープ管理システムが、認識できない各ボリュームに通し番号を割り当てます。システムが通し番号を割り当てる場合、通し番号は Lxxxyy の形式を取ります。ここで、xxx はデータ・セットのシーケンス番号で、 yy はデータ・セットのボリューム・シーケンス番号です。

ラベルなしボリュームに常駐するデータ・セットをカタログ登録するかまたは渡す場合は、必要なボリュームにボリューム通し番号を指定してください。ボリューム通し番号を指定することによって、複数のボリューム上に常駐するデータ・セットが重複するボリューム通し番号を用いてカタログ登録されたり、渡されたりすることがなくなります。そのようなデータ・セットを検索すると、予期できないエラーが生じる可能性があります。

テープ・マークの使用各データ・セットおよびデータ・セット・ラベル・グループに続けてテープ・マークを付ける必要があります。テープ・マークは、データ・セット内に存在することはできません。プログラムが標準ラベル付き、またはラベルなしのテープにデータを書き込むと、システムは自動的にラベルおよびテープ・マークを読み書きします。標準ラベル・ボリュームの最後のトレーラー・ラベル・グループの次に、2 つのテープ・マークが付きます。ラベルなしのボリュームでは、2 つのテープ・マークは、最後のデータ・セットの後に出力されます。

プログラムが標準外ラベル・テープにデータを書き込む場合、システムは、ラベルおよびテープ・マークを処理し、テープの位置を決めるためのルーチンを提供する必要があります。システムにデータ・セットを検索させたい場合は、標準外ラベルを作成するインストール・ルーチンがテープ・マークを書き込む必要があります。それ以外の場合、インストール・ルーチンがテープ・ボリュームの位置決めを管理するので、標準外ラベルの後にテープ・マークを付ける必要はありません。

データ・セットの処理

第 1 章 データ・セットの処理 17

Page 42: DFSMS データ・セットの使用法

データ管理マクロマクロを使用して、上述のアクセス方式によってサポートされるすべてのデータ・セット・タイプを処理することができます。マクロは、データ・セットの割り振り、入出力、バッファリング技法、およびデータ・セキュリティーを制御します。データ管理マクロについては、「z/OS DFSMS Macro Instructions for Data Sets」を参照してください。システム・プログラミング・マクロについては、「z/OS

DFSMSdfp Advanced Services」を参照してください。

表 1 には、データ管理アクセス方式の要約が記載されています。

表 1. データ管理アクセス方式

データ・セット編成 基本 待機 VSAM

直接 BDAM

ESDS VSAM

KSDS VSAM

LDS VSAM、DIV1

区分2 BPAM、BSAM3 QSAM

RRDS4 VSAM

順次5 BSAM QSAM

z/OS UNIX ファイル6 BSAM7 QSAM7 VSAM8

注:

1. 線形データ・セットにアクセスするのに使用される仮想域内データ (DIV) マクロは、「z/OS MVS プログラミング:アセンブラー・サービス ガイド」に説明されています。

2. PDS および PDSE は両方とも区分編成データ・セットです。

3. BSAM および QSAM は、ディレクトリー項目の中でユーザー・データを作成または変更するのには使用できません。

4. 固定長および可変長 RRDS を参照します。

5. 順次データ・セットおよび拡張フォーマット・データ・セットはどちらも順次編成データ・セットです。

6. UNIX ファイルは、z/OS UNIX ファイル・システムのいずれのタイプ (例えば、HFS、NFS、TFS、zFS など) でも構いません。

7. BSAM または QSAM を使用して UNIX ファイルにアクセスするとき、ファイルは単一ボリューム順次データ・セットとしてシミュレートされます。

8. VSAM を使用して UNIX ファイルにアクセスするとき、ファイルは ESDS としてシミュレートされます。

データ・セットは、PDSE プログラム・ライブラリーとして編成することもできます。PDSE プログラム・ライブラリーは、BSAM、QSAM、またはプログラム管理バインダーを使用してアクセスすることができます。 PDSE ライブラリーに書き込まれた最初のメンバーが、ライブラリーのタイプがプログラムまたはデータのどちらであるかを決定します。

データ・セットの処理

18 z/OS V1R10 DFSMS データ・セットの使用法

Page 43: DFSMS データ・セットの使用法

データ・セット処理データ・セットを処理するには、まずデータ・セットを割り振り (データ・セットへのリンクを確立し)、次に選択したアクセス方式用のマクロを使用してデータにアクセスします。 UNIX ファイルへのアクセスについては、 24ページの『アクセス方式を使用した UNIX ファイルの処理』を参照してください。

データ・セットの割り振り割り振りは、次の 2 つのことのどちらかまたは両方を意味します。

v ディスク上に新規データ・セット用のスペースを取っておく (作成する)。

v ジョブ・ステップとデータ・セット間の論理リンクを確立する。

関連資料: 動的割り振りについては、「z/OS MVS Programming: Authorized

Assembler Services Guide」を参照してください。

データ・セットを割り振るのに以下の方式のどれかを使用することができます。

アクセス方式サービス・プログラムアクセス方式サービス・プログラムと呼ばれる多機能サービス・プログラムを使用して、データ・セットの定義およびカタログの設定ができます。下記のコマンドは、すべてのデータ・セットで使用します。

表 2. アクセス方式サービス・プログラムのコマンド

コマンド 説明

ALLOCATE 新規データ・セットを割り振る

ALTER データ・セットの属性を変更する

DEFINE NONVSAM データ・セットをカタログする

DELETE データ・セットを削除する

LISTCAT カタログ項目をリストする

PRINT データ・セットを印刷する

ALLOCATE コマンドALLOCATE コマンドは、アクセス方式サービス・プログラムまたは TSO/E のどちらかを使用して発行し、 VSAM データ・セットまたは非 VSAM データ・セットを定義することができます。

JCLすべてのデータ・セットは、JCL を使用して直接定義できます。

関連資料: アクセス方式サービス・プログラムのコマンドについては、「z/OS

DFSMS Access Method Services for Catalogs」を参照してください。 TSO コマンドについては、「z/OS TSO/E コマンド解説書」を参照してください。 JCL の使用法については、「z/OS MVS JCL 解説書」および「z/OS MVS JCL ユーザーズ・ガイド」を参照してください。

プログラムを使用したデータ・セットの処理プログラムは、次の順序でデータ・セットを処理します。

データ・セットの処理

第 1 章 データ・セットの処理 19

Page 44: DFSMS データ・セットの使用法

1. データ・セットを割り振り、プログラムとデータ・セットの間で論理リンクを確立します。この割り振りは、JCL または TSO ALLOCATE コマンドを使用してプログラムの外部で行うか、または動的割り振りを使用してプログラムの内部で行うことができます。

2. データ・セットをオープンし、DDNAME を使用して識別します。

3. アクセス方式を使用して読み取りおよび書き込みを行います。

4. データ・セットをクローズします。

5. データ・セットの割り振りを解除します。これを行うには、次の 3 つの方法があります。v 非 VSAM データ・セットのみの場合は、データ・セットをクローズするときに FREE=CLOSE を指定します。 (VSAM データ・セットの場合は、FREE=CLOSE パラメーターは無視されます。)

v ご使用のプログラムは、動的割り振り解除を呼び出すことができます。v ステップ終了処理中に、オペレーティング・システムは残りの割り振られたデータ・セットを自動的に割り振り解除します。

アクセス方式の使用本書で説明するすべてのアクセス方式により、以下のことを行うことができます。

v 異なるシステム、単一システム内の異なるジョブ、タスク内の複数のアクセス方式制御ブロック (ACB) またはデータ制御ブロック (DCB)、またはアドレス・スペース内の異なるサブタスクの間でデータ・セットを共用する。VSAM データ・セットの共用については、 221ページの『第 12 章 VSAM データ・セットの共用』を参照してください。非 VSAM データ・セットの共用については、 435ページの『第 23 章 非 VSAM データ・セットの共用』を参照してください。

v VSAM データ・セットの間でバッファーおよび制御ブロックを共用する。 239ページの『第 13 章 VSAM データ・セット間でのリソースの共用』を参照してください。

v 論理エラーと物理エラーを分析し、データ終了処理を実行するためのユーザー出口ルーチンを提供する。 613ページの『第 31 章 非 VSAM ユーザー作成出口ルーチンの使用』および 279ページの『第 16 章 VSAM ユーザー作成出口ルーチンのコーディング』を参照してください。

v データ・セットをバックアップし、リカバリーする。 57ページの『第 4 章 データ・セットのバックアップとリカバリー』を参照してください。

v データのセキュリティーおよび保全性を保守する。 67ページの『第 5 章 データ・セットの保護』を参照してください。

BSAM、QSAM、BPAM、および VSAM では、UNIX ファイルに保管されているレコード指向データとバイト・ストリーム指向データとの間の変換を行います。

非 VSAM アクセス方式では、以下のことを行うこともできます。v 非 VSAM データを ASCII から EBCDIC に、またはその逆に変換する。v テープ・ボリュームを自動的に位置付けたり、位置変更する。v DASD および磁気テープ上のデータ・セットのユーザー・ラベルを処理する。

データ・セットの処理

20 z/OS V1R10 DFSMS データ・セットの使用法

Page 45: DFSMS データ・セットの使用法

アドレッシング・モードの使用24 ビットおよび 31 ビットのアクセス方式インターフェースは、2 GB のバーを超える実アドレスをサポートします。24 ビットまたは 31 ビットのアドレッシング・モードを使用するとき、VSAM プログラムと非 VSAM プログラムに異なる規則が適用されます。

VSAM アドレッシング・モードVSAM プログラムには、24 ビットまたは 31 ビットのアドレッシング・モードを使用することができます。 24 ビットまたは 31 ビットのアドレッシング・モードのどのアクセス方式にも、OPEN および CLOSE マクロを発行することができます。 VSAM により、16 MB を超える仮想記憶域でバッファー、ユーザー出口、共用リソース・プール、および一部の制御ブロックを作成することができます。16

MB を超えるこれらの区域にアクセスするには、プログラムが 31 ビット・アドレッシング・モードで稼働している必要があります。 305ページの『第 17 章 VSAM

での 31 ビット・アドレッシング・モードの使用』を参照してください。

非 VSAM アドレッシング・モード大部分の BSAM、BPAM、QSAM、および BDAM マクロは、24 ビットまたは 31

ビットのアドレッシング・モードで実行することができます。マクロを 24 ビット・モードで実行する場合は、マクロが参照するデータは 16MB 境界より下に常駐している必要があります。

BSAM、BPAM、QSAM、および BDAM アクセス方式では、マクロが 31 ビット・モードで実行されている場合は 16MB 境界を超える仮想記憶域で、特定のデータ域、バッファー、特定のユーザー出口、および一部の制御ブロックを作成することができます。z/OS DFSMS Macro Instructions for Data Setsを参照してください。

Hiperspace™ および Hiperbatch の使用Hiperbatch により、QSAM または VSAM データ・セットにアクセスするバッチ・ジョブ・ストリームの実行時間を大幅に低減することができます。Hiperspace は、ローカル共用リソース (LSR) を使用する VSAM アプリケーションのパフォーマンスを改善します。バッチ LSR により、アプリケーションを変更しなくとも、非共用リソースを使用する VSAM アプリケーション用の Hiperspace の利点を使用できます。 477ページの『Hiperbatch の使用』および 240ページの『LSR でのHiperspace バッファーの使用』を参照してください。

VSAM データ・セットの処理VSAM マクロ命令には次の 2 つのタイプがあります。

v 制御ブロック・マクロ。データ・セットを処理するために VSAM が必要とする情報の制御ブロックを生成します。

v 要求マクロ。論理レコードを検索、更新、削除、または挿入します。

VSAM には、次の 2 つの主な役割があります。

v カタログ管理。VSAM は、カタログ内のデータ・セットおよび直接アクセス記憶スペースに関する広範囲の情報を保持します。カタログでの特定のデータ・セットに関する情報の集合は、そのデータ・セットの特性を定義します。各 VSAM

データ・セットをカタログ内で定義する必要があります。VSAM データ・セット

データ・セットの処理

第 1 章 データ・セットの処理 21

Page 46: DFSMS データ・セットの使用法

を定義してからでないと、たとえば、レコードを VSAM データ・セットにロードできません。カタログ管理については、「z/OS DFSMS Managing Catalogs」を参照してください。

v レコード管理。VSAM を使用して、レコードをキー順、入力順、線形、または相対レコードの 4 つのタイプのデータ・セットに編成できます。これらのタイプのデータ・セットの間の主な違いは、レコードが保管およびアクセスされる方法です。

制約事項: VSAM データ・セットは、JCL ステートメント内では連結できません。

PDS、PDSE、および UNIX ディレクトリーの処理PDS、PDSE、および UNIX ディレクトリーの処理には、以下のガイドラインが適用されます。

v BPAM を使用して、PDS、PDSE、または UNIX ファイルのディレクトリーを処理します。

v 各 PDS または PDSE は、1 つの直接アクセス・ボリューム上にある必要があります。ただし、同じまたは異なるボリューム上にある複数の入力データ・セットを連結することができます。

v PDSE は、データ・ライブラリーまたはプログラム・ライブラリーとして使用することができますが、両方として使用することはできません。ライブラリー内に入れられた最初のメンバーがライブラリー・タイプを決定します。

v BLDL、FIND、または STOW マクロを指定せずに PDS および PDSE メンバーを追加または検索するのに、BSAM または QSAM マクロを使用することができます。DCB マクロ内の DSORG=PS パラメーター、および JCL DD ステートメントの DDNAME パラメーターをデータ・セットとメンバー名を下記のように指定して、コーディングします。

//ddname DD DSN=LIBNAME(MEMNAME),...

v BSAM または QSAM マクロを使用して、UNIX ファイルを追加または検索することができます。OPEN および CLOSE マクロは、データ・セットの位置決めおよびディレクトリーの保守を扱います。DCB マクロ内の DSORG=PS パラメーター、および JCL DD ステートメントの DDNAME パラメーターを完全パスとファイル名を下記のように指定して、コーディングします。

//ddname DD PATH=’/dir1/dir2/file’, ...

次に BPAM を使用して、ファイルを PDS または PDSE のメンバーであるかのように読み取ることができます。

v PDS を作成するとき、SPACE パラメーターはデータ・セットおよびそのディレクトリーのサイズを定義するので、システムはデータ・セット・スペースを割り振ることができます。PDS の場合、SPACE パラメーターはディレクトリーを事前フォーマットします。PDSE 用の SPACE の指定は、PDS の場合の指定とは異なります。 525ページの『PDSE 用のスペースの割り振り』を参照してください。

v STOW マクロを使用して、PDS または PDSE ディレクトリー内のメンバー名または別名の追加、削除、変更、または置換、あるいは PDSE ディレクトリーの消去を行うことができます。また、 STOW マクロを使用して、PDSE のすべてのメンバーを削除することもできます。ただし、STOW マクロを使用して PDS の

データ・セットの処理

22 z/OS V1R10 DFSMS データ・セットの使用法

Page 47: DFSMS データ・セットの使用法

すべてのメンバーを削除することはできません。プログラム・ライブラリーの場合、ディレクトリー内のメンバー名または別名を追加または置換するのに STOW

マクロを使用することはできません。

v メンバーのリストを BLDL に渡すことにより、PDS、PDSE、または UNIX ディレクトリーの複数のメンバーを読み取ることができます。次に、FIND マクロを使用して、メンバーを処理する前にメンバーを探し出します。

v DCBE をコーディングし、BPAM 用に 31 ビット・アドレッシングを使用することができます。

v PDS、PDSE、メンバー、および UNIX ファイルは、順次データ・ストライプを使用することはできません。 489ページの『第 26 章 区分データ・セット(PDS) の処理』および 515ページの『第 27 章 拡張区分データ・セット (PDSE)

の処理』を参照してください。また、DCB (BPAM) および DCBE マクロのコーディングについては、「z/OS DFSMS Macro Instructions for Data Sets」を参照してください。

順次データ・セットおよび PDSE と PDS のメンバーの処理順次データ・セットあるいは PDS または PDSE のメンバーを処理するには、BSAM または QSAM を使用することができます。 BSAM および QSAM マクロを発行するときは、31 ビット・アドレッシング・モードでも構いません。 BSAM

および QSAM マクロでは、データ域は 16MB 境界を超えることができ、QSAM

では OPEN が 16MB 境界を超えるバッファーを取得することを要求することができます。これにより、より大量のデータを転送することができます。

BSAM 処理BSAM を使用して順次データ・セットおよび PDS または PDSE のメンバーを処理するときは、次の規則が適用されます。

v BSAM は、PDSE プログラム・ライブラリーのメンバーを読み取ることはできますが、メンバーを書き込むことはできません。

v アプリケーション・プログラムは、それ自体の入出力レコードをブロック化および非ブロック化する必要があります。BSAM は、データ・ブロックの読み取りおよび書き込みのみを行います。

v アプリケーション・プログラムは、それ自体の入出力バッファーを管理する必要があります。アプリケーション・プログラムは、READ マクロを使用して BSAM

にバッファー・アドレスを与え、それ自体の出力バッファーを埋めてから、WRITE マクロを発行する必要があります。

v アプリケーション・プログラムは、発行される READ および WRITE マクロごとに CHECK マクロを発行することにより、それ自体の入出力操作を同期する必要があります。

v BSAM により、NOTE および POINT マクロを使用して位置変更することによって、ブロックを非順次方式で処理することができます。

v BSAM を使用して、直接アクセス記憶装置レコード・キーを読み書きできます。PDSE および拡張フォーマット・データ・セットは例外です。

v BSAM は、PDS または PDSE のメンバーが追加または削除されるときに、ディレクトリーを自動的に更新します。

データ・セットの処理

第 1 章 データ・セットの処理 23

Page 48: DFSMS データ・セットの使用法

QSAM 処理QSAM を使用して順次データ・セットおよび PDS または PDSE のメンバーを処理するときは、次の規則が適用されます。

v QSAM は、キー付きのブロックを除くすべてのレコード・フォーマットを処理します。

v QSAM は、レコードを自動的にブロック化および非ブロック化します。

v QSAM は、入出力バッファリングのすべての面を自動的に管理します。GET マクロは、入力バッファーから次の順次論理レコードを検索します。 PUT マクロは、次の順次論理レコードを出力バッファーに入れます。

v QSAM には、移動、位置指定、およびデータの 3 つの送信モードがあります。これらの 3 つのモードにより、バッファーを管理し、データを移動する上でより大きな柔軟性が得られます。

アクセス方式を使用した UNIX ファイルの処理UNIX ファイル・システムの例としては、zSeries ファイル・システム (zFS)、階層ファイル・システム (HFS)、ネットワーク・ファイル・システム (NFS)、および一時ファイル・システム (TFS) があります。z/OS UNIX システム・サービスを使用して、UNIX ファイルをアクセスできます。詳しくは、を参照してください。 z/OS

UNIX System Services ユーザーズ・ガイド.

プログラムは、z/OS UNIX システム呼び出しを使用して、または標準の z/OS アクセス方式およびマクロ命令を使用して UNIX ファイル内の情報にアクセスすることができます。データ・ファイルを識別およびアクセスするには、それに至るパスを指定します。

UNIX ファイルにアクセスするには、BSAM または QSAM (DCB DSORG=PS)、BPAM (DSORG=PO)、あるいは VSAM (ESDS としてシミュレートされます) を使用して、JCL データ定義 (DD) ステートメント、SVC 99、または TSO

ALLOCATE コマンドで PATH=pathname を指定することによって行います。

BSAM、QSAM、BPAM、および VSAM は、下記のタイプの UNIX ファイルをサポートします。v 通常ファイルv 文字特殊ファイルv 先入れ先出し法 (FIFO) 特殊ファイルv ハード・リンクまたはソフト・リンクv 名前付きパイプ

BPAM では、UNIX ディレクトリーへの読み取り専用アクセスが許可されます。

BSAM、QSAM、および VSAM は、次のタイプの UNIX ファイルはサポートしていません。v ディレクトリー (ディレクトリーの直接の読み取りをサポートしない BPAM を除く)

v 外部リンク

データ・セットの処理

24 z/OS V1R10 DFSMS データ・セットの使用法

Page 49: DFSMS データ・セットの使用法

データは、共用 DASD を使用しなくても、ユーザー・プログラムが稼働しているシステム以外のシステムに常駐することができます。他のシステムは、z/OS でも非z/OS でも構いません。NFS はデータを移送します。

システムは UNIX ファイルをバイト・ストリームの中に保管するので、UNIX ファイルは、順次データ・セット、区分データ・セット、または ESDS のすべての特性をシミュレートすることはできません。特定のマクロおよびサービスは、UNIX ファイルを処理するときに非互換性または制約事項を持ちます。以下に例を示します。

v データ・セット・ラベルおよび装置制御ブロック (UCB) は、UNIX ファイルには存在しません。情報について DSCB または UCB に依存するサービスは、これらのファイルを処理できない場合があります。

v VSAM 線形データ・セット以外の、従来の MVS™ データ・セットでは、システムはレコード境界を保持します。 UNIX ファイルなどのバイト・ストリーム・ファイルでは、これは当てはまりません。

関連資料: 下記のトピックの詳細については、以下を参照してください。

v 567ページの『第 28 章 z/OS UNIX ファイルの処理』

v 93ページの『UNIX ファイルへのシミュレートされた VSAM アクセス』

v BSAM、QSAM、BPAM、および EXCP の DCB マクロと DCBE マクロのコーディングについては、「z/OS DFSMS Macro Instructions for Data Sets」を参照してください。

EXCP、EXCPVR、および XDAP マクロの処理特定のアクセス方式を使用せずにほとんどのデータ編成でもデータ・セットを処理している間に入出力装置を直接制御することが可能です。 EXCP (チャネル実行プログラム)、EXCPVR、および XDAP マクロが使用するシステム機能は、入出力要求のスケジューリングとキューイング、チャネルと装置の有効な使用、データ保護、割り込みプロシージャー、エラー認識、および再試行を備えています。EXCP、EXCPVR、および XDAP マクロについては、「z/OS DFSMSdfp Advanced

Services」を参照してください。

指針: データ・アクセスに EXCP および XDAP マクロを使用しないでください。これらのマクロを使用して、PDSE、拡張フォーマット・データ・セット、VSAM

データ・セット、UNIX ファイル、ダミー・データ・セット、 TSO/E 端末、スプール・データ・セット、または OAM オブジェクトを処理することはできません。EXCP、EXCPVR、および XDAP を使用するには、チャネル・プログラム、エラー・リカバリー、および物理データ・フォーマットについての詳細な知識を必要とします。データ・アクセスには、EXCP および XDAP マクロではなく BSAM、QSAM、BPAM、または VSAM を使用してください。

分散データ管理 (DDM) 属性分散ファイル・マネージャーは、システム・アプリケーション体系 (SAA) 分散データ管理 (DDM) の z/OS インプリメンテーションです。 分散ファイル・マネージャーを使用すると、非 z/OS システム上で実行されるプログラムが z/OS システム上に保管されるデータ・セットにアクセスするのを容易にします。分散ファイル・マネージャーにより、順次データ・セットと VSAM データ・セットおよび PDSE メ

データ・セットの処理

第 1 章 データ・セットの処理 25

Page 50: DFSMS データ・セットの使用法

ンバーへのレコードおよびストリームのリモート・アクセスを使用することができます。これらのデータ・セットおよびメンバーに関連する DDM 属性は、データ・セットおよびメンバーが移動またはコピーされるときに伝達することができます。

分散ファイル・マネージャーは、DDM 属性を生成し、それをデータ・セットに関連付けます。 DDM 属性は、ファイル・サイズ・クラスおよび最終アクセス日付などの、データ・セットの特性を記述したものです。エンド・ユーザーは、ISMF データ・セット・リスト・パネルおよび IDCAMS DCOLLECT コマンドを使用して、特定のデータ・セットが関連する DDM 属性を持つかどうかを判別することができます。

分散ファイル・マネージャーは、データ・セットをそれらの関連付けられた属性と一緒に処理する機能も提供します。DFSMShsm™ がそのデータ移動プログラムとして DFSMSdss™ を使用していない限り、あるデータ・セットに関連付けられたDDM 属性をそのデータ・セットと一緒に伝達できません。 DDM ファイル属性については、「z/OS DFSMS DFM Guide and Reference」を参照してください。

一時データ・セットの仮想入出力一時データ・セットは、仮想入出力 (VIO) と呼ばれる機能によって処理できます。VIO が指定されているデータ・セットは、外部ページ記憶域にあります。ただし、アクセス方式にとっては、データ・セットは実際の直接アクセス記憶装置に常駐しているように見えます。VIO データ・セットは非 VSAM データ・セットである必要があります。つまり、このデータ・セットは順次、区分、または直接データ・セットであることができますが、PDSE または拡張フォーマットであることはできません。 VIO は実装置をシミュレートし、次の利点を提供します。

v 一時 DASD データ・セットに関する通常の入出力装置割り振りおよびデータ管理オーバーヘッドの一部の除去。

v 直接アクセス記憶装置スペースの使用が一般的により効率的になります。

VIO データ・セットは、アプリケーション・プログラムにとって 1 つの非共用仮想(シミュレートされた) 直接アクセス記憶装置ボリュームを占めているように見えます。このシミュレートされたボリュームは、トラックおよびシリンダーの数を除き、実際の直接アクセス記憶装置ボリュームに似ています。 VIO データ・セットは、最大 65 535 のトラックを占めることができます (シミュレートされている装置がそのように多くのトラックを持っていない場合でも)。

VIO データ・セットは、シミュレートされた装置上で常に単一エクステント (区域)

を占めます。エクステントのサイズは、1 次スペースの量に 2 次スペースの量の15 倍を加えたものに等しくなります (VIO データ・サイズ = 1 次スペース + (15

× 2 次スペース))。JCL 内の最大可能 VIO データ・セットを指定する簡単な方法は、 SPACE=(TRK,65535) です。この限度はそれより低く設定することができます。SPACE パラメーターで ALX (全エクステント) または MXIG (最大隣接エクステント) を指定すると、シミュレートされた装置で許可される最大エクステントが65 535 トラックより少なくなることがあります。

システムのアカウンティング機能が値を示さない限り、必要なスペースの量を過大に評価することについてのパフォーマンスまたはリソースのペナルティーはありません。

データ・セットの処理

26 z/OS V1R10 DFSMS データ・セットの使用法

Page 51: DFSMS データ・セットの使用法

VIO データ・セットにゼロ・スペースを割り振らないでください。VIO データ・セットにスペースを割り振りそこなうと、読み取りまたは書き込み時に予測できない結果が生じることになります。

VIO データ・セットでの ALX または MXIG の影響の要約を次に示します。

シミュレートされた IBM 装置 シリンダー数

3380 885

3390 1113

9345 1440

データ・セット名新規データ・セットを割り振るとき (またはオペレーティング・システムがそれを行うとき)、データ・セットに固有の名前を付ける必要があります。通常、データ・セット名は JCL 内の dsname 値です。

データ・セットの命名には次の規則が適用されます。

v JCL DD ステートメント内のデータ・セット名が引用符によって区切られている場合、JCL 処理はこのステートメントに構文検査を実行することができず、SMS

は SMS によるデータ・セット名の構文解析に基づいて入力を拒否します。引用符で囲まれたデータ・セットは SMS 管理できないため、SMS はその名前をカタログすることを許可しません。

v IDCAMS は、無効なデータ・セット名の指定を許可しません。

v 動的割り振りサービスを呼び出したり、SVC 26 を直接呼び出すときに、無効なデータ・セット名を作成する可能性があります。データ・セットをカタログに追加するために CATALOG ルーチンが呼び出されるとき、元の名前が JCL になっていたか、あるいは引用符が名前を区切っているかどうかを判別する方法がありません。データ・セット名の構文検査オプションがオフになっていない限り、カタログ・コンポーネントはデータ・セット名の構文の妥当性を検査し、構文が無効であれば要求は失敗します。「z/OS DFSMS Managing Catalogs」にあるMODIFY CATALOG コマンドの DSNCHECK パラメーターの説明を参照してください。

データ・セット名は、1 個の名前セグメントまたは一連の 22 個までの結合された名前セグメントで構成することができます。各名前セグメントは、修飾のレベルを表します。たとえば、データ・セット名 DEPT58.SMITH.DATA3 は、3 つの名前セグメントから構成されます。左にある最初の名前は上位修飾子と呼ばれ、最後の名前は下位修飾子と呼ばれます。

各名前 セグメント (修飾子) は 1 から 8 文字で、そのうち先頭は英字 (A から Z)

または国別文字 (# @ $) でなければなりません。残りの 7 文字は、英字、数字 (0

から 9)、国別文字、またはハイフン (-) のいずれかです。名前セグメントはピリオド (.) によって分離されます。

データ・セット名は、すべての名前セグメントおよびピリオドを含めて、44 文字を超えてはなりません。

データ・セットの処理

第 1 章 データ・セットの処理 27

Page 52: DFSMS データ・セットの使用法

VSAM データ・セットの命名の例は、 120ページの『クラスターの命名』および139ページの『代替索引の命名』を参照してください。

制約事項: 8 文字より長い名前セグメントを使用すると、予測できない結果が生じることがあります。

世代別データ・セットの名前では、下位修飾子 GxxxxVyy のみを使用してください。ここで、xxxx および yy は数です。同じベース名を持つ世代別データ・グループが存在しない場合にのみ、非世代別データ・セットの下位修飾子として GxxxxVyy

を含んだデータ・セットを定義してください。ただし、世代別データ・セットを他のタイプの非 VSAM データ・セットと混同するのを避けるため、IBM は、GxxxxVyy 修飾子を世代別データ・セットにだけ制限することをお勧めします。

たとえば、以下の名前は無効なデータ・セット名です。

v 8 文字より長い名前 (HLQ.ABCDEFGHI.XYZ)

v 連続する 2 つのピリオドを含む名前 (HLQ..ABC)

v 末尾がピリオドで終わる名前 (HLQ.ABC.)

v 先頭が英字または国別文字でないセグメントを含む名前 (HLQ.123.XYZ)

カタログおよびボリューム目録DFSMS は、データ・セットのストレージおよび配置を管理するのに各 DASD 上のカタログおよびボリューム目録 (VTOC) を使用します。

VTOCVTOC は、そのボリューム上に常駐するデータ・セットを、各データ・セットのロケーションおよびサイズに関する情報、ならびに他のデータ・セット属性とともにリストします。VTOC 構造については、「z/OS DFSMSdfp Advanced Services」を参照してください。(アプリケーション・プログラマーは、通常は VTOC の内容を知っている必要はありません。) また、661 ページの『付録 A. 直接アクセス・ラベルの使用』も参照してください。

カタログカタログは、データ・セット属性を記述し、データ・セットがあるボリュームを示します。データ・セットは、カタログ化、非カタログ化、または再カタログ化できます。すべてのシステム管理 DASD データ・セットは、カタログ内で自動的にカタログ化されます。磁気テープ上のデータ・セットのカタログ化は必要ありませんが、通常はそれによってユーザー・ジョブが単純化されます。すべてのデータ・セットは、カタログ内でカタログ化できます。

すべてのタイプのデータ・セットは、次のものを使用してカタログ化できます。v ジョブ制御言語 (DISP パラメーター)

v アクセス方式サービス・プログラム (ALLOCATE または DEFINE コマンド)

v TSO ALLOCATE コマンドv 動的割り振り (SVC 99) または DYNALLOC マクロ

データ・セットの処理

28 z/OS V1R10 DFSMS データ・セットの使用法

Page 53: DFSMS データ・セットの使用法

非 VSAM データ・セットも、カタログ管理マクロ (CATALOG および CAMLST)

を使用してカタログ化できます。既存のデータ・セットは、アクセス方式サービス・プログラムの DEFINE RECATALOG コマンドを使用してカタログ化できます。

アクセス方式サービス・プログラムは、データ・セット名用の別名を設定し、ユーザー・カタログをマスター・カタログに接続するために使用されます。カタログ管理マクロの使用法については、「z/OS DFSMS Managing Catalogs」を参照してください。

データ・セット名およびメタデータz/OS は、データ・セットの名前およびそのメタデータにアクセスできるようにするアプリケーション・プログラミング・インターフェース (API)、ユーティリティー、および保守援助プログラムを提供します。メタデータ は、データに関する情報です。

データ・セット名にアクセスする API には、以下のものが含まれています。

OBTAIN マクロ VTOC からの 1 つ以上のデータ・セット制御ブロック (DSCB) を読み取ります。

CVAF マクロ VTOC および VTOC 索引を読み取ります。このようなマクロは CVAFDIR、CVAFDSM、CVAFFILT、CVAFSEQ、および CVAFTST です。

RDJFCB マクロ RDJFCB マクロを使用して、データ・セットの名前および VSAM データ・セットのボリューム通し番号を確認することができます。また、OPEN

TYPE=J マクロ で RDJFCB を使用して、 VTOC

を読み取ることもできます。RDJFCB マクロを使用する場合は、ACB および VSAM 出口リストを使用できない可能性があるので、DCB および DCB

用の出口リストを使用してください。

OPEN TYPE=J マクロ VTOC のオープンと読み取りに使用することができます。 このマクロは、ジョブ・ファイル制御ブロック (JFCB) を提供します。ジョブ・ファイル制御ブロックは DD ステートメントの中の情報を表します。VSAM は、OPEN TYPE=J マクロをサポートしません。

LOCATE マクロ カタログの情報を見付けて抽出します。

カタログ検索インターフェースカタログの情報を見付けて抽出します。詳しくは、を参照してください。 z/OS DFSMS Managing

Catalogs.

関連資料: これらのマクロの詳細については、「z/OS DFSMSdfp Advanced

Services」を参照してください。

ユーティリティーおよび保守援助プログラムには、以下のものが含まれています。

データ・セットの処理

第 1 章 データ・セットの処理 29

|

|

Page 54: DFSMS データ・セットの使用法

ISPF フルスクリーン・エディターおよびダイアログ・マネージャー。これは、標準スクリーン・パネルおよびアプリケーション・プログラマーと端末ユーザーとの間の対話式ダイアログを生成します。詳しくは、を参照してください。 z/OS ISPF ユーザーズ・ガイド 第 1 巻.

ISMF ストレージ管理機能にアクセスできるようにするDFSMS の対話式インターフェースです。詳しくは、を参照してください。 z/OS DFSMS 対話式記憶管理機能 (ISMF) の使用法.

IEHLIST ユーティリティー PDS または PDSE のディレクトリーの中の項目、あるいは索引なし VTOC または索引付き VTOC

の中の項目をリストします。詳しくは、を参照してください。 z/OS DFSMSdfp Utilities.

SPZAP 保守援助プログラム DASD 上のデータ・セットを編集します。SPZAP

を使用して、オペレーティング・システムの現行レベルに達するようにプログラムに修正を施すこともできます。 SPZAP はデータ・セットを変更できるので、リソース・アクセス管理機能 (RACF®) または同等のセキュリティー製品を使用して、変更したくないデータ・セットを保護してください。(RACF は z/OS Security Server のコンポーネントの1 つです。) 詳しくは、を参照してください。 z/OS

MVS 診断: ツールと保守援助プログラム.

データ・セット名のセキュリティー許可されていないユーザーが、まだ知らないデータ・セット名にアクセスできないようにすることができます。この機能は、RACF 名前隠蔽機能 と呼ばれます。 ユーザーの要求に完全修飾データ・セット名が含まれている場合は、ISPF 3.4 またはカタログ検索インターフェース (CSI) を使用してデータ・セットにアクセスしない限り、システムは名前を隠しません。(ISPF 3.4 および CSI は、完全修飾データ・セット名を総称名のように扱います。)名前隠蔽機能が効力をもつ場合は、 29ページの『データ・セット名およびメタデータ』にリストされているプログラムを使用して保護データ・セットの名前にアクセスすることはできません。詳しくは、 69ページの『データ・セット名の隠蔽』を参照してください。

データ・セットの処理

30 z/OS V1R10 DFSMS データ・セットの使用法

Page 55: DFSMS データ・セットの使用法

第 2 章 ストレージ管理サブシステムの使用

この章では以下のトピックを扱います。

トピック 該当ページ

自動クラス選択ルーチンの使用 33

データ・セットの割り振り 35

SMS を使用するためにデータ・セットを割り振るか定義するとき、データ・セット・クラス、ストレージ・クラス、および管理クラスを使用して、データ・セット要件を指定します。ストレージ管理者は、データ・セットに使用するクラスを判別するために自動クラス選択 (ACS) ルーチンをセットアップしてあるので、通常は、これらのクラスを指定する必要はありません。

クラスについて以下に説明します。

v データ・クラスは、データ・セットが割り振られるときに SMS がデータ・セットに割り当てるデータ・セット割り振りおよびスペース属性の名前付きリストです。データ・クラスは、非システム管理データ・セットと一緒にも使用することができます。

v ストレージ・クラスは、データ・セット用のパフォーマンスおよびアベイラビリティー要件を識別するために SMS が使用するデータ・セット・サービス・プログラムまたはパフォーマンス目標の名前付きリストです。オブジェクト・アクセス方式 (OAM) は、ストレージ・クラスを使用して、オブジェクト・ストレージ階層内のオブジェクトの配置を制御します。各データ・セットがストレージ・クラスを持つのは、データ・セットが SMS 管理されている場合のみです。

v 管理クラスは、データ・セット内の割り振られているが、未使用のスペースの保存、マイグレーション、バックアップ、および解放のためのアクションを制御するために DFSMShsm が使用する管理属性の名前付きリストです。OAM は、オブジェクト・ストレージ階層内のオブジェクトの保存、バックアップ、およびクラス遷移のためのアクションを制御するために管理クラスを使用します。DFSMSrmm™ は、テープ・データ・セットに割り当てられた管理クラス名を使用して、データ・セットを管理するために使用する必要がある方針を識別することができます。 非システム管理テープ・データ・セットの場合は、DFSMSrmm は管理クラス ACS ルーチンを呼び出します。「z/OS DFSMSrmm Implementation

and Customization Guide」を参照してください。

ストレージ管理者は、SMS 構成内の各クラスの属性を定義します。SMS 構成は、データ・セットを管理するために SMS が使用する定義、ACS ルーチン、および他のシステムの完全セットです。定義は、共通の特性に従ってデータ・セットをグループ化します。新規データ・セットを割り振るときに、ACS ルーチンはこれらの特性を割り当てます。情報は SMS 構成に含まれているので、使用可能なハードウェアをよく知った上で使用するときに SMS はデータ・セットを最も効率的に管理します。 SMS クラスの使用ならびにデータ・セットおよびボリュームの管理については、「z/OS DFSMS Storage Administration Reference」を参照してください。

© Copyright IBM Corp. 1987, 2008 31

Page 56: DFSMS データ・セットの使用法

ストレージ管理サブシステム (SMS) は、テープ・ライブラリーにあるネイティブ・ボリューム上、および仮想テープ・サーバー (VTS) にある論理ボリューム上のテープ・データ・セットを管理することができます。 DFSMSrmm は、仮想テープ・サーバーに入っているスタック・ボリュームについていくつかのサービスを提供します。「z/OS DFSMSrmm Implementation and Customization Guide」を参照してください。

SMS の使用についてのいくつかの要件を下記に挙げます。

v 拡張フォーマット・データ・セットおよび圧縮フォーマット・データ・セットは、システム管理される必要があります。

v SMS 管理される新規データ・セットを割り振るときは、SMS がアクティブでなければなりません。

v ストレージ管理者は、分散ファイル・マネージャー (DFM) を使用して作成されたデータ・セットに ACS ルーチンが使用されることを知っておく必要があります。これらのデータ・セットは、システム管理される必要があります。ストレージ・クラス ACS ルーチンがストレージ・クラスを割り当てない場合、分散ファイル・マネージャーは作成されたばかりのデータ・セットを削除します。これは、分散ファイル・マネージャーが非システム管理データ・セットを作成しないためです。ただし、分散ファイル・マネージャーは、非システム管理データ・セットにはアクセスします。

表 3 は、システム管理データ・セットおよび非システム管理データ・セットと一緒に使用することができる機能およびプロダクトをリストしています。詳しくは、z/OS DFSMS Storage Administration Referenceを参照してください。

表 3. 非システム管理データ・セットおよびシステム管理データ・セットのデータ・セット・アクティビティー

アクティビティー割り振り 非システム管理データ システム管理データ

データ配置 JCL、ストレージ・プール ACS、ストレージ・グループ

割り振り制御 ソフトウェア・ユーザー・インストール・システム出口

ACS

割り振り許可、定義 RACF3、JCL、IDCAMS、TSO/E、DYNALLOC

RACF3、データ・クラス、JCL、IDCAMS、TSO/E、DYNALLOC

アクセス

アクセス許可 RACF3 RACF3

読み取り/書き込みパフォーマンス、可用性

手動配置、JCL、DFSMSdss1、DFSMShsm2

管理およびストレージ・クラス

UNIX バイト・ストリームへのアクセス方式アクセス

利用不能 JCL (PATH=)

スペース管理

バックアップ DFSMShsm2、DFSMSdss1、ユーティリティー

管理クラス

有効期限 JCL 管理クラス

未使用スペースの解放 DFSMSdss1、JCL 管理クラス、JCL

ストレージ管理サブシステムの使用

32 z/OS V1R10 DFSMS データ・セットの使用法

Page 57: DFSMS データ・セットの使用法

表 3. 非システム管理データ・セットおよびシステム管理データ・セットのデータ・セット・アクティビティー (続き)

アクティビティー割り振り 非システム管理データ システム管理データ

削除 DFSMShsm2、JCL、ユーティリティー

管理クラス、JCL

マイグレーション DFSMShsm2 データおよび管理クラス、JCL

注:

1. DFSMSdss: DASD 装置上のボリューム間でデータを移動 (ダンプ、復元、コピー、および移動) し、スペースを管理し、データ・セットまたはボリュームを SMS 制御に変換します。 DFSMSdss の使用については、「z/OS DFSMSdss Storage Administration Guide」を参照してください。

2. DFSMShsm: スペースを管理し、データをマイグレーションし、SMS クラスおよびグループを通じてデータのバックアップをとります。DFSMShsm の使用については、「z/OS

DFSMShsm Managing Your Own Data」を参照してください。

3. RACF: データ・セットへのアクセスおよびシステム・ファシリティーの使用を制御します。

以下のタイプのデータ・セットはシステム管理できません。

v すでにカタログ化されたデータ・セットと同じ名前を持つデータ・セット

v カタログに入っていない DASD データ・セット

v チェックポイント機能によって設定されている場合を除く移動不能データ・セット (DSORG は xxU です)

v 絶対トラック割り振り (DD ステートメント上の SPACE パラメーターの ABSTR

値) を持つデータ・セット

v テープ・データ・セット

v スプール・データ・セット

直接データ・セット (BDAM) はシステム管理できますが、プログラムが OPTCD=A

を使用する場合は、プログラムはデータ・セットがディスク上のどこにあるかに依存することになる場合があります。たとえば、プログラムはデータ・セット内のシリンダー番号およびヘッド番号を記録することがあります。そのようなデータ・セットはマイグレーションまたは移動しないでください。自動マイグレーションを妨げる管理クラスを指定することができます。

システム管理されたテープ・ライブラリー内のテープ・ボリュームは、システム管理ストレージ・クラスとして管理することができます。

自動クラス選択ルーチンの使用ACS ルーチンは、データ・セットがシステム管理されるかどうか、およびどのクラスが使用されるかを決定します。

ストレージ・クラスおよび管理クラスは、システム管理データ・セットと一緒にのみ使用することができます。データ・クラスは、システム管理または非システム管理されているデータ・セットの場合と、DASD またはテープ・ボリューム上のデータ・セットの場合に使用することができます。SMS は、テープ・ライブラリー内の

ストレージ管理サブシステムの使用

第 2 章 ストレージ管理サブシステムの使用 33

Page 58: DFSMS データ・セットの使用法

物理ボリューム上、および仮想テープ・サーバー (VTS) 内の論理ボリューム上のテープ・データ・セットを管理することができます。 DFSMSrmm は、仮想テープ・サーバーに入っているスタック・ボリューム用のいくつかのサービスを提供します(「z/OS DFSMSrmm Implementation and Customization Guide」を参照してください)。ストレージ管理者は、ご使用のシステムが使用するデータ・クラス、ストレージ・クラス、および管理クラスを定義します。ストレージ管理者は、クラスをいつ使用するかを含む、各名前付きクラスの説明を提供します。

推奨: ストレージ管理者は、分散ファイル管理を使用するリモート・アプリケーションによって割り振られるデータ・セットがシステム管理されるようにするためにストレージ・クラス ACS ルーチンをコーディングする必要があります。

データ・クラスを使用すると、通常必要とされるデータ・セット属性をすべて指定することなしにデータ・セットを容易に割り振ることができます。ストレージ管理者は、標準のデータ・セット属性を定義し、データ・セットを割り振るときに使うデータ・クラスを作成するのにそれらを使用することができます。たとえば、名前の末尾が LIST および OUTLIST のデータ・セットは、類似した割り振り属性を持つので、ストレージ管理者はそれらのデータ・セットのデータ・クラスを定義する場合があります。データ・セット名が LIST または OUTLIST で終わる場合、このデータ・クラスを割り当てるのに ACS ルーチンを使用することができます。

データ・クラスは、DD ステートメント、DYNALLOC マクロ、TSO またはIDCAMS ALLOCATE コマンド、あるいは DEFINE CLUSTER コマンドで指定することにより、明示的に要求することができます。データ・クラスを暗黙的に要求するには、データ・クラスを指定せずに、ストレージ管理者によって定義されたデータ・クラスを ACS ルーチンが割り当てるようにさせます。どちらの方法が使用される場合であっても、下記のことを知っている必要があります。v データ・セット特性v このデータ・セットがどのように見えるかを記述するデータ・クラスv ACS ルーチンがこのデータ・クラスを自動的に選択するかどうかv データ・クラス属性を指定変更するためにどの特性を JCL でコーディングするか

割り当てられたデータ・クラスで指定された属性は、DD ステートメント、あるいは ALLOCATE または DEFINE CLUSTER コマンドで値を指定することによって指定変更することができます。SMS クラス・パラメーターを使用して割り当てることができる属性についての情報、およびデータ・セットを定義する例は、「z/OS

DFSMS Access Method Services for Catalogs」(ALLOCATE および DEFINE

CLUSTER コマンドのセクション) を参照してください。

通常必要とされるデータ・セット属性をすべて指定することなしにデータ・セットを割り振る別の方法は、既存のデータ・セットにならってデータ・セットを作成することです。これは、JCL キーワード LIKE または REFDD を使用して、新規データ・セットについて DD ステートメント内の既存のデータ・セットを参照することにより行うことができます。「z/OS MVS JCL 解説書」および「z/OS MVS JCL ユーザーズ・ガイド」を参照してください。

ストレージ管理サブシステムの使用

34 z/OS V1R10 DFSMS データ・セットの使用法

Page 59: DFSMS データ・セットの使用法

データ・セットの割り振り

割り振りには、次の 2 つの関連した意味があります。

1. 新規データ・セット用の DASD スペースを取っておく。

2. プログラムを新規または既存のデータ・セットあるいは装置に接続する。

プログラムは、その後 DD 名を使用して OPEN マクロを発行したり、アクセス方式を使用してデータの読み取りまたは書き込みを行うことができます。

「作成」がデータ・セットへのデータ書き込みの意味を包含することがよくありますが、本書では「作成」という用語をよく使用して、第一の意味である「割り振り」を表します。

DASD 上で新規データ・セットを割り振るには、以下の方式のどれかを使用することができます。

v JCL DD ステートメント。「z/OS MVS JCL 解説書」を参照してください。

v アクセス方式サービス・プログラムの ALLOCATE コマンドまたは DEFINE コマンド。構文およびさらに多くの例については、「z/OS DFSMS Access Method

Services for Catalogs」を参照してください。

v TSO ALLOCATE コマンド。構文およびさらに多くの例については、「z/OS

TSO/E コマンド解説書」を参照してください。

v SVC 99 パラメーター・リストを使用した DYNALLOC マクロ。「z/OS MVS

Programming: Authorized Assembler Services Guide」を参照してください。

新規データ・セットをシステム管理させるための方法は 2 つあります。

v SMS パラメーター STORCLAS を明示的に指定する。MGMTCLAS およびDATACLAS も指定することができます。

v ACS ルーチンがデータ・セットに SMS クラスを割り当てるようにさせます。

非システム管理データ・セットを割り振るには、DATACLAS パラメーターを指定することができます。MGMTCLAS および STORCLAS パラメーターは指定しないでください。

JCL を使用したデータ・セットの割り振りJCL を使用して新規データ・セットを割り振るには、DISP=(NEW,CATLG,DELETE)

と指定してください。アプリケーション・プログラムが正常に完了する場合は、データ・セットはカタログ化されていますが、アプリケーション・プログラムが失敗する場合は、データ・セットが削除されます。 KEEP の後処理を使用する場合であっても、すべてのシステム管理データ・セットは自動的にカタログ化されます。

既存のデータ・セットを更新するには、OLD、MOD、または SHR の DISP 値を指定します。データを失う恐れがあるので、他の何らかの方法の逐次化がない限り、順次データ・セットの更新時に DISP=SHR を使用しないでください。

アクセス中にデータ・セットを共用するには、SHR の DISP 値を指定してください。NEW、OLD、または MOD の DISP 値を指定する場合、データ・セットは共用できません。

ストレージ管理サブシステムの使用

第 2 章 ストレージ管理サブシステムの使用 35

Page 60: DFSMS データ・セットの使用法

補足事項: SMS がアクティブであり、新規データ・セットが SMS の管理できるタイプである場合、ACS ルーチンはストレージ・クラスをどのデータ・セットにも割り当てることができるので、データ・セットが JCL 上でのみシステム管理に基づくかどうか判別するのは不可能です。

HFS データ・セットの割り振りHFS データ・セットが割り振られるのは、DSNTYPE 値が HFS であり、SPACE パラメーターが JCL またはデータ・クラス内のディレクトリー・ブロックの数を指定する場合です。HFS データ・セットについてディレクトリー・ブロックの数を指定する必要がありますが、この値は割り振りに影響を及ぼしません。

関連資料: 詳しくは、 569ページの『HFS データ・セットの使用』を参照してください。

システム管理データ・セットの割り振りストレージ管理者によって定義された ACS ルーチンを使用して、SMS のもとで新規データ・セットを割り振るのは、SMS を使用しない場合より容易です。SMS を使用する場合、DD ステートメントで UNIT、VOL=SER、SPACE、または DCB パラメーターを指定する必要はありません。この割り振りが成功するには、ACS ルーチンは、アプリケーションが必要とするスペースおよびデータ・セット属性を定義するデータ・クラスを選択する必要があります。

JCL DD ステートメントでデータ・クラス、ストレージ・クラス、および管理クラスの名前を要求することができます。ただし、ほとんどの場合、ACS ルーチンがデータ・セット用に必要なクラスを選択します。

PDSE の割り振り。DSNTYPE パラメーターは、データ・セットが PDSE またはPDS として割り振られるかどうかを判別します。LIBRARY の DSNTYPE は、データ・セットが PDSE であるようにします。DSNTYPE パラメーターは、JCL DD ステートメント、データ・クラス、またはシステム・デフォルト内で指定するか、既存の PDSE を参照する JCL LIKE キーワードを使用することによって指定することができます。

SPACE パラメーターが DD ステートメント内で省略される場合、これはデータ・クラスによって提供される必要があります。デフォルトのストレージ・クラスおよびデータ・クラスに必要なデータ・セット属性が入っている場合は、DD ステートメント内の STORCLAS および DATACLAS を省略することができます。PDSE

は、アクセス方式サービス・プログラムを使用して割り振ることもできます。

PDSE は、最初に割り振られるとき、プログラム・ライブラリーでもデータ・ライブラリーでもありません。バインダーまたは IEBCOPY によって書き込まれる最初のメンバーがプログラム・オブジェクトである場合、ライブラリーはプログラム・ライブラリーになり、最後のメンバーが削除されるまでそのままになります。書き込まれる最初のメンバーがプログラム・オブジェクトでない場合、PDSE がデータ・ライブラリーになります。プログラム・オブジェクトおよびその他のタイプのデータは、同じ PDSE ライブラリー内に混在することはできません。

拡張フォーマット・データ・セットの割り振り。拡張フォーマット・データ・セットはシステム管理されている必要があります。拡張フォーマットを要求するためのメカニズムは、SMS データ・クラスの DSNTYPE=EXT パラメーターおよびサブパ

ストレージ管理サブシステムの使用

36 z/OS V1R10 DFSMS データ・セットの使用法

Page 61: DFSMS データ・セットの使用法

ラメーター R (必須) または P (好ましい) を通じて行われます。ストレージ管理者は、データ・セットが拡張されるように R を指定することができます。次に、VSAM データ・セットの場合、ストレージ管理者は拡張アドレッシング機能属性をY に設定して拡張アドレッシング機能を要求することができます。

圧縮フォーマットでの拡張フォーマット・データ・セットの割り振りを要求したい場合は、データ・クラス定義内で EXTENDED の DSNTYPE に加えて、COMPACTION=YES を指定する必要があります。圧縮データ・セットは、データ・クラスを通じてだけでなく、DD ステートメントの LIKE キーワードを使用して作成することができます。

ラージ・フォーマット・データ・セットの割り振り。 ラージ・フォーマット・データ・セットは順次データ・セットであり、ボリューム当たり 65 535 トラック (4369

シリンダー) を超えて拡張することができます。ラージ・フォーマット・データ・セットは、システム管理対象でも、そうでなくても構いません。 DD ステートメント上での DSNTYPE=LARGE パラメーター、動的割り振り (SVC 99)、TSO/E

ALLOCATE、またはアクセス方式サービス・プログラムの ALLOCATE コマンドを使用して、ラージ・フォーマット・データ・セットを割り振ることができます。SMS データ・クラスでは、 DSNTYPE 値の LARGE を指定することもできます。この条件として、そのデータ・セットが別の DSNTYPE を指定していない場合、または PS または PSU 以外の DSORG 値を指定していない場合です。

基本フォーマット・データ・セットの割り振り。 基本フォーマット・データ・セットは、拡張フォーマットまたはラージ・フォーマットのいずれとしても指定されていない順次データ・セットです。基本フォーマット・データ・セットには、ボリューム当たり 65 535 トラック (4369 シリンダー) のサイズ上の制限があります。基本フォーマット・データ・セットは、システム管理対象でも、そうでなくても構いません。 DD ステートメント上での DSNTYPE=BASIC パラメーター、動的割り振り (SVC 99)、TSO/E ALLOCATE あるいはアクセス方式サービス・プログラムのALLOCATE コマンド、またはデータ・クラスを使用して、基本フォーマット・データ・セットを割り振ることができます。これらのどのソースでも DSNTYPE 値が無指定の場合、そのデフォルトは BASIC となります。

注: データ・クラスには DSNTYPE を BASIC として指定できません。このため、DSNTYPE をブランクにしてデフォルト値としての BASIC にします。

VSAM データ・セットの割り振り。JCL を使用した VSAM データ・セットの割り振りについては、 309ページの『第 18 章 VSAM 用のジョブ制御言語の使用』を参照してください。

非システム管理データ・セットの割り振りご使用のシステムで SMS が稼働している場合は、データ・クラスを、テープ・データ・セットなどの非システム管理データ・セットと一緒に使用することができます。データ・クラスで定義される DCB 情報は、デフォルトとして使用されます。データ・クラスを使用しない場合、JCL 内、またはプログラム内に、LRECL とRECFM などの DCB 情報、および DSORG を提供する必要があります。ご使用のシステムで SMS が稼働していない場合は、データ・クラスを使用することはできません。

ストレージ管理サブシステムの使用

第 2 章 ストレージ管理サブシステムの使用 37

Page 62: DFSMS データ・セットの使用法

アクセス方式サービス・プログラムの ALLOCATE コマンドを使用したシステム管理データ・セットの割り振り

次のセクションの例は、アクセス方式サービス・プログラムの ALLOCATE コマンドを使用してジョブ・ステップに新規データ・セットを割り振る方法を示しています。「z/OS DFSMS Access Method Services for Catalogs」(ALLOCATE のセクション) を参照してください。

クラス指定を使用したデータ・セットの割り振り次の例では、SMS クラスを使用して新規データ・セットを割り振るのにALLOCATE コマンドが使用されます。SMS はアクティブである必要があります。データ・セットは VSAM または非 VSAM にすることができます。

//ALLOC JOB ...//STEP1 EXEC PGM=IDCAMS,DYNAMNBR=1//SYSPRINT DD SYSOUT=A//SYSIN DD *

ALLOC -DSNAME(ALX.ALLOCATE.EXAMP1) -NEW CATALOG -DATACLAS(STANDARD) -STORCLAS(FAST) -MGMTCLAS(VSAM)

/*

以下にコマンド・パラメーターを示します。v DSNAME は、割り振られているデータ・セットの名前が

ALX.ALLOCATE.EXAMP1 であることを指定します。v NEW は、割り振られているデータ・セットが新規であることを指定します。

クラス指定を使用した VSAM データ・セットの割り振り次の例では、ALLOCATE コマンドを使用して新規 VSAM データ・セットを割り振ります。データ・クラスは割り当てられておらず、デフォルト・データ・クラスを通じて割り当てられた属性は、明示的に指定されたパラメーターによって指定変更されます。

//ALLOC JOB ...//STEP1 EXEC PGM=IDCAMS,DYNAMNBR=1//SYSPRINT DD SYSOUT=A//SYSIN DD *

ALLOC -DSNAME(ALX.ALLOCATE.EXAMP2) -NEW CATALOG -SPACE(10,2) -AVBLOCK(80) -AVGREC(K) -LRECL(80) -RECORG(ES) -STORCLAS(FAST) -MGMTCLAS(VSAM)

/*

システム管理非 VSAM データ・セットの割り振り次の例では、ALLOCATE コマンドを使用して、非 VSAM データ・セットを割り振ります。ALLOCATE は、DEFINE NONVSAM とは違い、非 VSAM データ・セット用のSMS クラスを指定することができます。

ストレージ管理サブシステムの使用

38 z/OS V1R10 DFSMS データ・セットの使用法

Page 63: DFSMS データ・セットの使用法

//ALLOC JOB ...//STEP1 EXEC PGM=IDCAMS//SYSPRINT DD SYSOUT=A//SYSABEND DD SYSOUT=A//SYSIN DD *

ALLOC -DSNAME(NONVSAM.EXAMPLE) -NEW -DATACLAS(PS000000) -MGMTCLAS(S1P01M01) -STORCLAS(S1P01S01)

/*

PDSE の割り振り次の例は、PDSE を作成するために DSNTYPE キーワードと一緒に使用されるALLOCATE コマンドを示しています。DSNTYPE(LIBRARY) は、割り振られているデータ・セットが PDSE であることを示しています。

//ALLOC EXEC PGM=IDCAMS,DYNAMNBR=1//SYSPRINT DD SYSOUT=A//SYSIN DD *

ALLOC -DSNAME(XMP.ALLOCATE.EXAMPLE1) -NEW -STORCLAS(SC06) -MGMTCLAS(MC06) -DSNTYPE(LIBRARY)

/*

新規非システム管理データ・セットの割り振り次の例では、ALLOCATE コマンドを使用して新規データ・セットを割り振ります。

//ALLOC JOB ...//STEP1 EXEC PGM=IDCAMS,DYNAMNBR=1//SYSPRINT DD SYSOUT=A//SYSIN DD *

ALLOC -DSNAME(XMP.ALLOCATE.EXAMP3) -NEW CATALOG -SPACE(10,5) TRACKS -BLKSIZE(1000) -LRECL(100) -DSORG(PS) -UNIT(3380) -VOL(338002) -RECFM(F,B)

/*

TSO ALLOCATE コマンドを使用したデータ・セットの割り振り次の例では、トラック内で割り振られたスペースを使用して新規順次データ・セットを割り振ります。

ALLOC DA(EX1.DATA) DSORG(PS) SPACE(2,0) TRACKS LRECL(80) RECFM(F,B) NEW

新規データ・セット名: GOLD.EX1.DATA

トラック数: 2

論理レコード長: 80

ブロック・サイズ: システムによって決定されるレコード・フォーマット: 固定ブロック

ストレージ管理サブシステムの使用

第 2 章 ストレージ管理サブシステムの使用 39

Page 64: DFSMS データ・セットの使用法

ユーザー ID の GOLD を明示的修飾子として指定する必要はありません。BLKSIZE

パラメーターは省略されるので、システムはスペース使用量を最適化するブロック・サイズを決定します。

次の例では、論理レコード長が 80、ブロック・サイズが 8000 の新規 VSAM 入力順データ・セットを 2 つのトラックに割り振ります。VSAM データ・セットを割り振るには、ALLOCATE コマンド上で RECORG キーワードを指定します。RECORG は、DSORG および RECFM と同時に指定することはできません。キー順データ・セットを割り振るには、KEYLEN パラメーターも指定する必要があります。RECORG では、必要なデータ・セットのタイプを指定します。

ALLOC DA(EX2.DATA) RECORG(ES) SPACE(2,0) TRACKS LRECL(80)BLKSIZE(8192) NEW

ES ― 入力順データ・セットKS ― キー順データ・セットLS ― 線形データ・セットRR ― 相対レコード・データ・セット

動的割り振りを使用したデータ・セットの割り振りDYNALLOC マクロを使用してデータ・セットを割り振る例については、「z/OS

MVS Programming: Authorized Assembler Services Guide」を参照してください。SVC

99 パラメーター・リストを持つ DYNALLOC マクロを使用して VSAM データ・セットを割り振るには、テキスト・ユニット 800B - RECORG を指定してください。

ストレージ管理サブシステムの使用

40 z/OS V1R10 DFSMS データ・セットの使用法

Page 65: DFSMS データ・セットの使用法

第 3 章 直接アクセス・ボリュームでのスペースの割り振り

この章では以下のトピックを扱います。

トピック 該当ページ

スペース所要量の指定 41

最大データ・セット・サイズ 43

保証スペース属性を指定しない 1 次および 2 次のスペース割り振り 45

保証スペース属性を指定したデータ・セットの割り振り 47

スペース制約軽減属性を指定したデータ・セットの割り振り 49

別の DASD ボリュームへの拡張 50

順次データ・セットについてのマルチボリューム考慮事項 51

スペース割り振りに関する追加情報 55

スペース所要量の指定ブロック、レコード、トラック、またはシリンダーで必要なスペースの量を指定することができます。 DASD データ・セットを作成するとき、必要なスペースの量をSPACE パラメーターを使用して明示的に指定することも、データ・クラスで使用可能な情報を使用してスペースの量を暗黙的に指定することもできます。割り振り時に SMS が非アクティブの場合は、データ・クラスは使用されません。

データ・セットが SMS 管理されていない場合であっても、SMS がアクティブであれば、システムはデータ・クラスを使用することができます。システム管理データ・セットの場合、システムはボリュームを選択します。したがって、データ・セットを定義するときにボリュームを指定する必要はありません。

スペース要求を平均レコード長によって指定する場合は、スペース割り振りは装置タイプとは独立しています。装置独立性は、システム管理ストレージにとって特に重要です。

ブロック必要なスペースの量がブロック数で表される場合、データ・セット内のブロックの数および平均長さを、次の例のように指定する必要があります。

// DD SPACE=(300,(5000,100)), ...

300 = average block length in bytes5000 = primary quantity (number of blocks)100 = secondary quantity, to be allocated if the primary

quantity is not enough (in blocks)

この情報から、オペレーティング・システムは、必要なトラック数を見積もって、割り振ります。

© Copyright IBM Corp. 1987, 2008 41

Page 66: DFSMS データ・セットの使用法

システムは、スペースの計算のためにのみこのブロック長の値を使用します。この値は、BLKSIZE 値と同じである必要はありません。データ・セットが拡張フォーマットである場合は、システムは、スペースの計算時に 32 をこの値に追加します。

推奨: 順次データ・セットおよび区分データ・セットの場合、システムにブロック・サイズを計算させることにし、スペースを平均ブロック長によって要求しないことをお勧めします。386 ページの『システム決定ブロック・サイズ』を参照してください。

実際のデータの平均ブロック長がここでコーディングされた値に一致しない場合、システムが割り振るスペースがはるかに少なすぎるか、多すぎることがあります。

平均レコード長必要なスペースの量が平均レコード長で表される場合、データ・セット内のレコードの数および平均長さを指定する必要があります。要求のスケールを変更するには、AVGREC キーワードを使用します。AVGREC が指定される場合、SPACE の最初のサブパラメーターが平均レコード長になります。システムは、SPACE キーワードについて指定された 1 次および 2 次の数量にスケール値を適用します。AVGREC キーワードについて可能な値は、次のとおりです。

U ― 1 のスケールを使用しますK ― 1024 のスケールを使用しますM ― 1048576 のスケールを使用します

AVGREC キーワードが指定される場合、SPACE キーワード内の 1 次および 2 次の数量にスケールを乗算し、新しい値がスペース割り振りに使用されます。たとえば、次の要求により、1 次および 2 次の数量に 1024 が乗算されます。

// DD SPACE=(80,(20,2)),AVGREC=K, ...

80 = 平均レコード長 (バイト数)80 * 20 * 1024 = 1.6 MB = 1 次スペース80 * 2 * 1024 = 160 KB = 1 次スペースが十分でない場合に割り振られる、

2 次スペース

この情報から、オペレーティング・システムは、次のブロック長の 1 つを示されている順に使用して、必要なトラック数を見積もって割り振ります。

1. データ・セットが PDSE の場合は、4096。

2. DD ステートメント上の BLKSIZE パラメーターまたは DD 上の DCB パラメーターの BLKSIZE サブパラメーター。

3. システムはブロック・サイズを決定しました (有効な場合)。

4. 4096 のデフォルト値。

拡張フォーマット・データ・セットの場合、オペレーティング・システムは上記のブロック・サイズより 32 だけ大きい値を使用します。要求されるブロック数を決定するため、1 次および 2 次スペースはブロック長によって除算されます。オペレーティング・システムは、装置の 1 トラックにブロック長のブロックをいくつ書き込めるかを決定します。次に、ブロック内の 1 次および 2 次スペースがトラック当たりのブロック数によって除算され、下記の例に示すようにトラック値が求められます。これらの例では、ブロック長を 23200 と想定しています。ブロック長23200 の 2 つのブロックを 3380 装置上に書き込むことができます。

直接アクセス・ボリュームでのスペースの割り振り

42 z/OS V1R10 DFSMS データ・セットの使用法

Page 67: DFSMS データ・セットの使用法

(1.6MB / 23200) / 2 = 36 = 1 次スペース (トラック数)(160KB / 23200) / 2 = 4 = 2 次スペース (トラック数)

これまでの計算では、システムはそれが圧縮フォーマット・データ・セットであるかどうかは考慮しません。つまり、計算は、システムが計算した実際のブロック・サイズを使ってではなく、ユーザーによって認識された圧縮されていないブロック・サイズを使用して行われます。

トラックまたはシリンダー次の例は、トラックまたはシリンダー内で必要なスペースの量を示しています。

// DD SPACE=(TRK,(100,5)), ...// DD SPACE=(CYL,(3,1)), ...

絶対トラックデータ・セットが実際のトラック・アドレスの形式 (MBBCCHHR または CCHHR など)

でのロケーション依存情報を含んでいる場合、スペースをトラック数および開始アドレスで要求することができます。この例では、相対トラック 15 (シリンダー 1、トラック 0) で開始する 500 のトラックが要求されます。

// DD SPACE=(ABSTR,(500,15)),UNIT=3380, ...

制約事項: 絶対トラックによってスペースを要求するデータ・セットはシステム管理される資格がなく、スペース管理プロダクトおよびストレージ管理者によって行われる DASD スペース管理を妨げます。絶対トラック割り振りを使用しないようにしてください。

その他のスペース割り振りオプションDD ステートメントは、スペース所要量を指定する上での柔軟性を提供します。オプション情報については、「z/OS MVS JCL 解説書」を参照してください。

最大データ・セット・サイズこのセクションでは、下記のデータ・セットの最大量について説明します。

v 1 つのボリューム上での最大サイズ

v ボリュームの最大数

v VSAM データ・セットの最大サイズ

1 つのボリューム上での最大サイズ多くのタイプのデータ・セットでは、どの 1 つのボリューム上でも割り振られる総トラック数が 65 535 までに制限されており、それより大きいトラック数が必要とされる場合、データ・セットを作成しようとするこの試みは失敗します。

1 つのボリューム上で割り振られる総トラック数が 65 535 に制限されていないデータ・セットは、次のとおりです。v ラージ・フォーマット順次v 拡張フォーマット順次v UNIX ファイルv PDSE

直接アクセス・ボリュームでのスペースの割り振り

第 3 章 直接アクセス・ボリュームでのスペースの割り振り 43

Page 68: DFSMS データ・セットの使用法

v VSAM

仮想入出力 (VIO) データ・セットが SMS 管理される場合、VIO 最大サイズは、Storage Group VIO Maxsize パラメーターで定義されているように、2 000 000 KB

です。

ボリュームの最大数PDS および PDSE データ・セットは、1 つのボリュームに制限されています。他のすべての DASD データ・セットは、59 のボリュームに制限されています。VIO シミュレート装置上のデータ・セットは、65 535 のトラックに制限され、かつ 1 つのボリュームに制限されています。テープ・データ・セットは 255 のボリュームに制限されています。

マルチボリュームの直接 (BDAM) データ・セットは、全ボリュームを通して 255

エクステントまで制限されます。このシステムでは、データ・セット作成時にはこの制限は強制されませんが、 BDAM を使ってデータ・セットをオープンする時にはこの制限が強制されます。

最大 VSAM データ・セット・サイズSMS データ・クラス定義で拡張アドレッシング機能が指定されていない限り、VSAM データ・セットは、全ボリュームを通じて 4 GB に制限されています。システム要件は、1 つのデータ・セットに使用できるボリューム数を 59 に制限しています。

拡張アドレッシング機能を使用すると、VSAM データ・セットのサイズ制限は以下のいずれかで決まります。

v 制御インターバル・サイズ x 4 GB

v ボリューム・サイズ x 59

制御インターバル・サイズが 4 KB の場合、最大のデータ・セット・サイズは 16

TB となります。一方、制御インターバル・サイズが 32 KB の場合、最大のデータ・セット・サイズは 128 TB となります。4 KB の制御インターバル・サイズは、パフォーマンス上の理由により多くのアプリケーションでよく使用されます。4

GB を超えて大きくなる拡張フォーマット・データ・セットに対して、処理時間の増加は予想されません。拡張アドレッシング機能を使用するには、VSAM データ・セットは以下である必要があります。

v SMS 管理対象

v 拡張フォーマットとして定義

最小データ・セット・サイズデータが入ったどのタイプの順次データ・セットの最小サイズも 1 トラックです。このサイズは約 56 000 バイトです。スペースが何もないデータ・セットを作成することができます。このようなデータ・セットを作成する目的は、DD ステートメント上に LIKE パラメーターを指定したデータ・セット属性に対して、1 つのモデルとして機能させる場合です。もう 1 つの目的は、このデータ・セットにデータが入る前に読み取りを可能にする場合です。例えば、SPACE=(CYL,(0,5)) のように指定した 2 次スペース量をこのデータ・セットに指定する場合があります。

直接アクセス・ボリュームでのスペースの割り振り

44 z/OS V1R10 DFSMS データ・セットの使用法

Page 69: DFSMS データ・セットの使用法

保証スペース属性を指定しない 1 次および 2 次のスペース割り振りストレージ・クラスで保証スペース属性を指定しない場合、非システム管理データ・セットでもシステム管理データ・セットでも、次のようにスペースが割り振られます。新規データ・セットを割り振り、SPACE=(TRK,(2,4)) を指定する場合、そのデータ・セットに最初 2 つのトラックが割り振られます。データ・セットに各レコードが書き込まれ、これらの 2 つのトラックを使い果たすと、システムはさらに4 つのトラックを自動的に取得します。これらの 4 つのトラックが使用されると、さらに 4 つのトラックが取得されます。データ・セットのタイプについてのエクステント限度に達するまで、同じシーケンスが続きます。

v 順次データ・セットは、各ボリュームで 16 のエクステントを持つことができます。

v 拡張フォーマット順次データ・セットは、ボリューム当たり 123 のエクステントを持つことができます。

v PDS は 16 のエクステントを持つことができます。

v 直接データ・セットは各ボリュームに 16 のエクステントを持つことができます。

v 非システム管理対象の VSAM データ・セットは、コンポーネントにつき最大255 のエクステントを持つことができます。システム管理対象の VSAM データ・セットは、関連するデータ・クラスにエクステント制約除去が指定されている場合、この制約を除去できます。

v 非システム管理対象の VSAM データ・セットは、ストライプにつき最大 255 のエクステントを持つことができます。 システム管理対象の VSAM データ・セットは、関連するデータ・クラスにエクステント制約除去が指定されている場合、この制約を除去できます。

v PDSE は 123 のエクステントを持つことができます。

v HFS データ・セットは各ボリュームに 123 のエクステントを持つことができます。

マルチボリューム・データ・セットにも単一ボリューム・データ・セットと同じようにスペースを割り振ることができます。DASD スペースは本来、最初のボリュームにのみ割り振られます (例外は、ストライピング拡張フォーマット・データ・セットおよび保証スペース・データ・セットです)。スペースの 1 次割り振りがいっぱいになると、2 次ストレージ量 (指定されている場合) でスペースが割り振られます。他のボリュームでもエクステントを割り振ることができます。 VIO スペース割り振りは、他のデータ・セットとは異なる方法で処理されます。 26 ページの『一時データ・セットの仮想入出力』を参照してください。

マルチボリューム VSAM データ・セット拡張機能をともなわないマルチボリューム VSAM データ・セットが次のボリュームに拡張するとき、そのボリュームに割り振られた初期スペースは 1 次量です。拡張フォーマットをともなうマルチボリューム VSAM データ・セットが次のボリュームに拡張する場合、データ・クラス・オプション、追加ボリューム量の現行値はそのボリュームに割り振られた初期スペースが 1 次量または 2 次量のどちらであるかを指定します。デフォルトは 1 次量です。そのボリュームに割り振られた初期スペースを使い果たすと、2 次量でスペースが割り振られます。以上のコメント

直接アクセス・ボリュームでのスペースの割り振り

第 3 章 直接アクセス・ボリュームでのスペースの割り振り 45

|

|

|

|

|

|

|

Page 70: DFSMS データ・セットの使用法

は、ストライピング VSAM データには関係ありません。ストライピング・フォーマットでの VSAM データについては、 85 ページの『第 6 章 VSAM データ・セットの編成』を参照してください。

マルチボリューム非 VSAM データ・セットマルチボリューム非 VSAM の非拡張フォーマット・データ・セットが次のボリュームに拡張するとき、そのボリュームに割り振られた初期スペースは 2 次量です。

拡張フォーマット・データ・セットストライピング拡張フォーマット・データ・セット用のスペースが割り振られると、システムは 1 次量をボリューム間で分割します。それが均等に分割されない場合、システムは量の端数を切り上げます。拡張フォーマット・データ・セットの場合、ボリューム上の 1 次スペースがいっぱいになると、システムはそのボリューム上でスペースを割り振ります。その量は、2 次量をストライプ数で除算したものです。2 次量が割り切れない場合は、システムはその量の端数を切り上げます。

拡張フォーマットで割り振られたデータ・セットは、DASD に書き込むときにエラー検出が改善されるだけでなく入出力サブシステムへのより効率的で機能的に完全なインターフェースを使用できるという利点が追加されました。

表 4 は、拡張フォーマット順次データ・セットのストライプが拡張フォーマットVSAM データ・セットのストライプとどのように異なっているかを示したものです。

表 4. 順次データ・セットのストライプと VSAM データ・セットのストライプとの相違

順次拡張フォーマット・ストライピング VSAM 拡張フォーマット・ストライピング

データ・セットは最大 59 のストライプを持つことができます。

データ・セットは最大 16 のストライプを持つことができます。

各ストライプは 1 つのボリューム上に常駐する必要があり、別のボリュームに拡張することはできません。

各ストライプは、1 つ以上のボリューム上に常駐することができます。追加のスペースを獲得できるように VSAM 用のストライプの数を増やす上での利点はありません。ストライプを新規ボリュームに拡張するときに、システムは、データ・クラスの中の Additional Volume Amount (追加ボリューム量) に従って割り振られた最初のスペースの量を取得します。このスペースは1 次スペースまたは 2 次スペースから得られたものです。デフォルト値は 1 次スペース量です。

システムは、あるトラックを埋めた後で、後続のブロックを次のストライプの中のトラック上に書き込みます。

システムは、制御インターバル (CI) を書き込んだ後で、次の CI を次のストライプの中のトラック上に書き込みます。 CI は複数のストライプにまたがることはできません。

BSAM および QSAM アクセス方式を使用することができます。

VSAM アクセス方式を使用することができます。

直接アクセス・ボリュームでのスペースの割り振り

46 z/OS V1R10 DFSMS データ・セットの使用法

|

|

|

Page 71: DFSMS データ・セットの使用法

保証スペース属性を指定したデータ・セットの割り振り1 つのステップまたは個別のステップでスペースを割り振って保証スペース・データ・セットをロードすることができます。

DISP=NEW または MOD を指定した保証スペースDISP=NEW または DISP=MOD をコーディングするとき、ストレージ・クラスで保証スペース属性を指定したシステム管理マルチボリューム (非拡張フォーマット) データ・セットにスペースが割り振られます。

1. 初期には、1 次スペースはすべてのボリュームに事前割り振りされています。

2. 最初のボリューム上の 1 次量が使い果たされると、ボリュームにスペースがなくなるかデータ・セットがそのエクステント限界に達するまで、最初のボリューム上で 2 次量が割り振られます。

3. その後、次のボリューム上の事前割り振りされた 1 次スペースが使用されます。

4. 次のボリューム上の 1 次スペースが使い果たされると、2 次量が割り振られます。

5. ボリュームにスペースがなくなるか、データ・セットのエクステント限度に達するまで、2 次量が引き続き割り振られます。

後続のボリュームはすべて、同じ順序で割り振りが行われます。

VSAM の場合の保証スペース非ストライプ VSAM データ・セットの場合は、以下に示すように、ストレージ・クラスで保証スペース属性を指定したシステム管理マルチボリューム・データ・セットにスペースが割り振られます。

v 初期には、1 次スペースはすべてのボリュームに事前割り振りされています。

v 最初のボリューム上の 1 次量が使い果たされると、ボリュームにスペースがなくなるかデータ・セットがそのエクステント限界に達するまで、最初のボリューム上で 2 次量が割り振られます。

v その後、次のボリューム上の事前割り振りされた 1 次スペースが使用されます。

v 次のボリューム上の 1 次スペースが使い果たされると、2 次量が割り振られます。

v ボリュームにスペースがなくなるか、データ・セットのエクステント限度に達するまで、2 次量が引き続き割り振られます。非 EA データ・セットの場合は、この拡張が失敗すれば、システムは、1 次量の分だけ新規ボリュームへの拡張を試みます。

後続のボリュームはすべて、同じ順序で割り振りが行われます。

DISP=OLD または SHR を指定した保証スペースDISP=OLD または DISP=SHR をコーディングするとき、ストレージ・クラスで保証スペース属性を指定したシステム管理マルチボリューム (非拡張フォーマット) データ・セットにスペースが割り振られます。

直接アクセス・ボリュームでのスペースの割り振り

第 3 章 直接アクセス・ボリュームでのスペースの割り振り 47

Page 72: DFSMS データ・セットの使用法

1. 初期には、DISP=NEW をコーディングしたときに、システムはすべてのボリューム上に 1 次スペースを事前割り振りしました。

2. 各ボリューム上の割り振られたスペースが使い果たされると、システムは次のボリュームに切り替えます。以前に DISP=NEW または DISP=MOD をコーディングしたときにデータを拡張したので、一部のボリュームにはすでに 2 次スペース割り振りがある場合があります。システムはそれらの 2 次割り振りを使用します。

3. その後、次のボリューム上の既存のスペースが使用されます。

4. システムは、新規スペースを最後のボリューム上でのみ割り振ろうとします。そのボリューム上では、ボリュームにスペースがなくなるか、データ・セットのエクステント限度に達するまで、2 次量が引き続き割り振られます。

システムはこのように働くので、非 SMS ボリューム上での非保証事前割り振りスペースに似ています。

拡張フォーマット・データ・セットを指定した保証スペースマルチボリューム拡張フォーマット順次データ・セットについて保証スペースが指定されると、1 次スペースはすべてのボリューム上に事前割り振りされます。データはデータ・ストライピングを使用して拡張フォーマット・データ・セットに書き込まれる (論理的に連続したトラックまたは CI は円形にデータ・セットに書き込まれる) ので、全ボリューム上の事前割り振りされた 1 次スペースが使い果たされるまで、2 次スペースは割り振られません。ボリュームが 16 を超える保証スペースを持つストライピング VSAM データ・セットの場合、最初の 16 のボリュームのみが事前割り振りスペースを持ちます。指定された 2 次量はボリューム数で除算され、端数を切り上げて各ボリュームに割り振られます。

VSAM ストライピング・データの事前割り振りスペースの量は 16 のボリュームに制限されます。

保証スペースの例次の例では、100 MB の 1 次スペースを 5 つのボリュームのそれぞれに割り振ります。

//DD1 DD DSN=ENG.MULTIFILE,DISP=(,KEEP),STORCLAS=GS,// SPACE=(1,(100,25)),AVGREC=M,UNIT=(3380,5)

1. 最初のボリュームの 100 MB が使用されてしまうと、2 次スペース の 25 MB

のエクステントがエクステント限度に達するか、そのボリュームがいっぱいになるまで、同じボリュームに割り振られます。ユーザーは最初の DISP 値を省略したので、システムは DISP=NEW を想定します。

2. さらにスペースが必要な場合、2 番目のボリュームで 100 MB の事前割り振り1 次スペースが使用されます。次に、同じボリュームに 2 次スペースがさらに割り振られます。

3. 各ボリュームで同じプロセスが繰り返されます。

直接アクセス・ボリュームでのスペースの割り振り

48 z/OS V1R10 DFSMS データ・セットの使用法

Page 73: DFSMS データ・セットの使用法

スペース制約軽減属性を指定したデータ・セットの割り振り割り振り失敗を削減するために、3 つのデータ・クラス属性が新規ボリュームへのデータ・セットの割り振りおよび拡張に影響を与えることができます。スペースの不足により失敗したかもしれない割り振りが成功する可能性があります。

これら 3 つの属性を以下に示します。v スペース制約軽減 (値は YES または NO)

v スペース削減上限 % (0 から 99%)

v 動的ボリューム・カウント (1 から 59 またはブランク)

スペースが通常の手段では取得できなくなるまで、新規ボリュームへの割り振りおよび拡張は通常どおり進行します。

システムは、次の 2 つの場合にスペース制約軽減を実行します。すなわち、新規データ・セットが割り振られる場合とデータ・セットが新規ボリュームに拡張される場合です。 EOV 処理時に、スペース制約軽減により、VSAM データ・セットの 1

次または 2 次割り振り量、あるいは非 VSAM データ・セットの 2 次割り振り量に影響を及ぼします。 CREATE 処理時に、非 VSAM データ・セットと VSAM データ・セットの両方の 1 次量が削減される可能性があります。

例外: データ・セットが同じボリューム上で拡張される場合は、システムはスペース制約軽減を使用しません。

スペース制約軽減 (要求されている場合) は、失敗する割り振りについて指定されているボリューム・カウントに応じて、1 つまたは 2 つの方法で行われます。

1. ボリューム・カウントが 1 より大きい場合、SMS は、要求された 1 次割り振りを、指定されたボリューム・カウントを超えない複数のボリュームに広げることにより、割り振りを満たそうとします。

2. 方法 1 が失敗した場合またはボリューム・カウントが 1 の場合は、SMS は、REDUCE SPACE UP TO パラメーターで指定されたパーセントによって、要求された 1 次スペース、または拡張用の 2 次スペースを変更します。

方法 1 および 2 のどちらかまたは両方が成功しない場合、割り振りは前と同様に失敗します。

推奨: スペースが削減されないように、ユーザーはこのパラメーターのデータ・クラスに 0% を指定することができます。

SMS は、同時に保持できるエクステントは 5 つまでという限度を除去します。(例えば、順次データ・セットは最大 16 のエクステントを持つことができます。) この変更が行われない場合は、システムは、最大 5 のエクステントを用いて 1 次または 2 次スペース要求を満たそうとします。多量のスペースを要求する場合またはスペースがフラグメント化される場合は、システムは 5 より多いエクステントを必要とする可能性があります。

制約事項: VSAM マルチストライプ・データ・セットおよび非 VSAM マルチストライプ・データ・セットでは、スペース制約軽減をサポートしません。ただし、単一ストライピング VSAM データ・セットおよび単一ストライピング非 VSAM データ・セットでは、スペース制約軽減を使用します。

直接アクセス・ボリュームでのスペースの割り振り

第 3 章 直接アクセス・ボリュームでのスペースの割り振り 49

Page 74: DFSMS データ・セットの使用法

別の DASD ボリュームへの拡張下記の条件がすべて存在する場合は、システムは別の DASD ボリュームに拡張しようとします。

v 現行ボリュームで 2 次スペース量が使用可能でないか、データ・セットがそのタイプのデータ・セットについてエクステント限度に達したか、アプリケーション・プログラムが FEOV マクロを発行した。

v ボリューム・カウントにまだ達していない。システム管理データ・セットの場合、ボリューム・カウントは、データ・セットが作成されたときに決定され(DISP=NEW)、ボリューム・カウント (VOL=(,,,nn))、 VOL パラメーターを指定してコーディングされたボリューム数、およびユニット・カウント(UNIT=(xxxx,nn)) のうち最も大きいものです。

システム管理データ・セットまたは非システム管理データ・セットの場合、ボリューム・カウントはデータ・クラスから取ることができます。ボリューム・カウントは、 IDCAMS ADDVOL コマンドを使用してデータ・セットを作成した後に大きくすることができます。

v システム管理データ・セットについて動的ボリューム・カウントに達していない。データ・クラスにスペース制約軽減属性および動的ボリューム・カウント属性を定義することができます。スペース制約軽減 =YES の場合、SMS について動的ボリューム・カウントを 1 から 59 に指定して別のボリュームにデータ・セットを自動的に拡張することができます。詳しくは、を参照してください。 z/OS

DFSMS Storage Administration Reference.

v 2 次割り振り量が使用可能である。データ・セットがシステム管理されていない場合であっても、データ・セットが作成されたときに、これはデータ・クラスから取ることができます。データ・セットが DISP=NEW または IDCAMS DEFINE

を指定して作成されたとき、そのデータ・セットについて 2 次量はデータ・クラスを永続的に指定変更します。非 VSAM データ・セットの場合、上記の 2 つのソースの 2 次量は、NEW 以外の DISP を指定して一時的に指定変更することができます。

注: マルチボリューム・データ・セットが現行ボリューム上での拡張が不可能となり、新規ボリュームに拡張された場合、以前に割り振られたすべてのボリュームはその後の拡張用には選択されません。

データ・セットを定義するときの動的ボリューム・カウントの例以下の例は、データ・クラスからのボリューム・カウント属性あるいはJCL、TSO、または IDCAMS コマンドからのボリューム・カウント情報の使用例です。動的ボリューム・カウントを使用すると、1 次ボリュームの数は必要に応じて増えることになります。動的ボリューム・カウントを使用しても、候補ボリュームをカタログに追加することにはなりません。

1. 例 1:

Volume count: 6Dynamic volume count: 0Required volumes: 1Volumes in catalog: 1 primary, 5 candidates

2. 例 2:

直接アクセス・ボリュームでのスペースの割り振り

50 z/OS V1R10 DFSMS データ・セットの使用法

Page 75: DFSMS データ・セットの使用法

Volume count: 6Dynamic volume count: 12Required volumes: 1Volumes in catalog: 1 primary, 5 candidates

3. 例 3:

Volume Count: 6Dynamic volume count: 12Required volumes: 7Volumes in catalog: 7 primary, 0 candidates

4. 例 4:

Volume count: 6Dynamic volume count: 12Required volumes: 13Volumes in catalog: None; request fails

例 2 では、カタログに含まれている候補ボリュームは 5 つだけですが、データ・セットは 11 の候補ボリューム (1 次ボリュームを含む) に拡張することができます。

既存のデータ・セットを割り振るときの動的ボリューム・カウントの例

以下の例では、特定のボリュームのリストや非特定ボリュームのカウントは割り振りに戻されます。また、例 7 の割り振りは、合計ボリューム・カウントが限度の59 ボリュームを超えるので、失敗します。

1. 例 5: VSAM KSDS

Specific volume count: 2Nonspecific volume count: 4Cluster dynamic volume count: 20Specific volumes returned to allocation: 2Nonspecific volumes returned to allocation: 18Total count of volumes returned to allocation: 20

2. 例 6: VSAM パス

Specific volume count (base cluster): 5Nonspecific volume count (base cluster): 1Specific and total volume count (alternate index): 1Base cluster dynamic volume count: 20Specific volumes returned to allocation: 6Nonspecific volumes returned to allocation: 15Total count of volumes returned to allocation: 21

3. 例 7: アップグレード・セット内の代替索引

Specific and total volume count (base cluster): 5Specific and total volume count (first alternate index): 1Specific and total volume count (second alternate index): 1Base cluster dynamic volume count: 59Specific volumes returned to allocation: 7Nonspecific volumes returned to allocation: 54Total count of volumes returned to allocation: 61

順次データ・セットについてのマルチボリューム考慮事項マルチボリュームの作業をするときは以下のことを考慮してください。OPEN のEXTEND または OUTINX オプションを使用する場合、または DD ステートメントで DISP=MOD を指定して OPEN の OUTPUT または OUTIN オプションを使用する場合、プログラムは順次データ・セットを拡張しています。 SMS 管理されてい

直接アクセス・ボリュームでのスペースの割り振り

第 3 章 直接アクセス・ボリュームでのスペースの割り振り 51

Page 76: DFSMS データ・セットの使用法

ないマルチボリューム順次データ・セットを再書き込みすることを計画しており、後でデータ・セットを拡張する可能性がある場合、データ・セットを削除して再割り振りする必要があります。これにより、下記の項目 2 で説明する問題が回避され、希望のボリュームにシステムが拡張されます。

1. 順次データ・セットに書き込む際、EOV は、各ボリュームを終了すると最後のボリューム・ビットをオフにし、CLOSE は、現行のボリュームで DSCB 内の最後のボリューム・ビットをオンにします。必ずしもデータ・セットに割り振られた最後のボリュームではなく、データを含む最後のボリュームを識別します。また、後のボリューム上の DSCB も、以前の書き込みまたは保証スペースのいずれかにより、このビットをオンにさせることができます。

2. DISP=MOD、OPEN EXTEND、または OUTINX オプションを指定した書き込みは、システム管理データ・セットと非システム管理データ・セットで異なる働きをします。システム管理ボリュームでは、 OPEN は次のアルゴリズムを使用して書き込み開始点を決定します。どのボリュームで書き込みを終了する場合でも、OPEN はそのボリュームを見つけて再開することができます。最初のボリュームから開始して、OPEN は最後のボリューム・ビットを検索します。最初の新規ブロックは、直前の最後のブロックの直後に書き込まれます。古い最後のブロックが短かった場合は、それより大きくなりません。これは、特に SMS ボリュームについて言えます。

非 SMS ボリュームで DISP=MOD、OPEN EXTEND、または OUTINX オプションを指定して書き込む場合、 OPEN は、次のアルゴリズムを使用して書き込み開始点を決定します。最初に JFCB 内の最後のボリュームまたはその拡張を見て、DSCB の最後のボリューム・ビットが ON になっているか調べます。ON

でない場合は、 OPEN は最初のボリュームから順に他のボリュームを検索します。つまり、最後のボリュームとそれより前のボリュームがどちらも最後のボリューム・ビットが ON になっている場合、追加したデータは、順次読み取り時に到達できないことになります。

SMS のみであるストライピング・データ・セットの場合、最後のボリューム・ビットは、少し異なる働きをしますが、他の SMS データ・セットの場合と同じ効果を持ちます。最後のボリュームがデータ・セットの最後のレコードを含まない場合であっても、そのボリューム上のビットは ON です。 OPEN は、DS1LSTAR フィールドを使用して、最後のレコードを含むボリュームを計算します。

3. 部分解放では、CLOSE が未使用スペースを解放するのは、ストライプ・カウントが 2 以上のストライピング・データ・セットの場合を除き、現行ボリューム上に限られます。先の書き込みからのデータ、または保証スペースによるデータのいずれかを含む可能性のあるそれ以降のボリューム上のスペースは解放しません。システム管理データ・セットの場合、このことは、それ以降でのDISP=MOD の使用には影響しませんが、それは、それ以降のボリューム上のスペースが保証スペース割り振りによってそこに存在することを意味します。

直接アクセス・ボリュームでのスペースの割り振り

52 z/OS V1R10 DFSMS データ・セットの使用法

Page 77: DFSMS データ・セットの使用法

拡張アドレス・ボリューム拡張アドレス・ボリュームとは、65,520 シリンダーを超えるボリュームのことです。拡張アドレス・ボリュームは、ECKD ボリューム上のトラックのアドレス指定方法を変更することで、ボリュームあたりのアドレッシング可能な DASD ストレージ量を 65,520 シリンダー以上に増やします

トラック・アドレスとは、ボリューム内の各トラックを特定する 32 ビットの数値です。アドレスは、16 進法の CCCCcccH 形式です。

v CCCC は、シリンダー番号の下位の 16 ビットです。

v ccc は、シリンダー番号の上位の 12 ビットです。

v H は、4 ビットのトラック番号です。

シリンダー番号の下位 16 ビットと上位 12 ビットの組み合わせは、28 ビットのシリンダー番号を表します。トラック・アドレスを操作する際、IBM では TRKADDR

マクロの使用をお勧めします。詳しくは、「z/OS DFSMSdfp Advanced Services」を参照してください。

拡張アドレス・ボリュームにおいて、拡張アドレッシング・スペース (EAS) とは、アドレスが 65,536 と同じかそれ以上のシリンダーを指します。EAS のシリンダーでは、ccc の部分はゼロ以外になります。これらのシリンダー・アドレスは、28 ビットのシリンダー番号で表されます。

シリンダー内のトラックのアドレスが 65,536 以下の場合、旧プログラムとの互換性のため、ccc の部分は 16 進数の 000 となります。これらのシリンダーのアドレスは、16 ビットのシリンダー番号で表されます。これが拡張アドレス・ボリューム上の基本アドレッシング・スペースです。

マルチシリンダー・ユニットは、ディスク・スペースの固定されたユニットで、シリンダーより大きいものです。現在、EAV では、マルチシリンダー・ユニットは21 シリンダーであり、各マルチシリンダー・ユニット内の 1 番目のシリンダーの数は 21 の倍数です。

シリンダー管理スペースとは、マルチシリンダー・ユニットによってのみ管理されるボリューム上のスペースのことです。シリンダー管理スペースは、シリンダー・アドレス 65,520 から始まります。各データ・セットはマルチシリンダー・ユニットの整数倍を占有します。シリンダー管理スペースをターゲットとしたスペース要求は、次のマルチシリンダー・ユニットに切り上げられます。シリンダー管理スペースは、EAV ボリューム上にのみ存在します。

トラック管理スペースとは、トラックとシリンダーで管理されたボリューム上のスペースのことです。トラック管理スペースは、シリンダー・アドレス 65,519 で終わります。各データ・セットはトラックの整数倍を占有します。トラック管理スペースは、すべてのボリューム上にも存在します。

拡張アドレス・ボリュームでは、システムおよびストレージ・グループのブレークポイント値 (BPV) がディスク・スペース要求をシリンダー管理スペースまたはトラック管理スペースへ導きます。ブレークポイント値はシリンダー単位で表されます。ディスク・スペース要求のサイズがブレークポイント値またはそれ以上の場合、システムはそのエクステントについてはシリンダー管理スペースの使用を選択

直接アクセス・ボリュームでのスペースの割り振り

第 3 章 直接アクセス・ボリュームでのスペースの割り振り 53

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 78: DFSMS データ・セットの使用法

します。この規則は、シリンダー管理スペースに適格なデータ・セット向けの 1 次または 2 次スペースに対する各要求に適用されます。シリンダー管理スペースが不足した場合、システムはトラック管理スペースを使用するか両方のタイプのスペースを使用します。ディスク・スペース要求のサイズがブレークポイント値より小さい場合、システムはトラック管理スペースの使用を選択します。スペースが不足した場合、システムはシリンダー管理スペースを使用するか両方のタイプのスペースを使用します。

EAS に適格なデータ・セットは大部分の VSAM データ・セット (SMS および非SMS の両方) であり、zFS データ・セットも含まれます。次のタイプのデータ・セットは EAS に適格ではありません。

v ページ・データ・セット

v カタログ・データ・セット (基本カタログ構造 (BCS) と VSAM ボリューム・データ・セット (VVDS) の両方)

v 組み込みまたはキー範囲属性をともなう VSAM データ・セット。これらは作成することはできませんが、前の物理的なマイグレーションまたはコピーから継承されていることがあります。

v 非 VSAM データ・セット

非ストライプ VSAM では互換性のある制御域 (CA) に、ストライピング VSAM

では最小割り振りユニット (MAU) に割り振られた VSAM データ・セットのみ、シリンダー管理スペースに常駐または拡張できます。互換性のある CA またはMAU のサイズは、シリンダー管理スペースの値のマルチシリンダー・ユニットに均等に分割されるものです。

次の CA サイズと MAU は 21 シリンダー (315 トラック) のマルチシリンダー・ユニットに均等に分割されるため、互換性があります。

v トラック 1、3、5、7、9、15

システムは互換性のある CA または MAU が選択された、あらゆるタイプのボリューム上におけるすべての新規の割り振りを確実にします。

EAV および非 EAV ボリュームの混合した SMS ストレージ・グループがサポートされています。ボリューム候補リストを作成する際は、SMS では次の設定を行います。

v データ・セットのタイプに基づくボリューム

v スペース要求のサイズ

v マルチシリンダー・ユニットのサイズ

v ユーザーの定義したブレークポイント値

v ボリューム上の両方の管理スペースからのフリー・スペース統計

通常、VSAM データ・セット割り振り要求が BPV と同じかそれ以上の場合、SMS

は EAV ボリュームを設定します。非 VSAM 割り振り要求および BPV より小さい VSAM 割り振り要求の場合、EAV ボリュームに設定はありません。

拡張アドレス・ボリュームの VTOC および INDEX 構造について詳しくは、「z/OS

DFSMSdfp Advanced Services」を参照してください。

直接アクセス・ボリュームでのスペースの割り振り

54 z/OS V1R10 DFSMS データ・セットの使用法

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 79: DFSMS データ・セットの使用法

EAV のセットアップおよび使用方法に関する情報は、「z/OS DFSMS 新機能の使用」を参照してください。

スペース割り振りに関する追加情報データ・セットが必要とする DASD トラック数を知りたい場合は、該当する装置の資料を参照してください。システム管理データ・セットのスペース割り振りについては、「z/OS DFSMS Storage Administration Reference」を参照してください。PDS/PDSE スペース割り振りについては、 493ページの『PDS 用のスペースの割り振り』および 525ページの『PDSE 用のスペースの割り振り』を参照してください。

直接アクセス・ボリュームでのスペースの割り振り

第 3 章 直接アクセス・ボリュームでのスペースの割り振り 55

|

|

Page 80: DFSMS データ・セットの使用法

56 z/OS V1R10 DFSMS データ・セットの使用法

Page 81: DFSMS データ・セットの使用法

第 4 章 データ・セットのバックアップとリカバリー

この章では以下のトピックを扱います。

トピック 該当ページ

バックアップとリカバリー用の REPRO の使用 58

EXPORT と IMPORT を使用した VSAM データ・セットのバックアップとリカバリー

60

バックアップとリカバリー用のプログラムの書き込み 61

バックアップとリカバリー用の並行コピーの使用 62

リカバリー後のデータ・セットの更新 62

リカバリー中でのカタログと VSAM データ・セット情報の同期 62

データ・セットについてバックアップおよびリカバリー手順を確立して、破棄または損傷されたデータ・セットをそのバックアップ・コピーで置き換えられるようにすることが重要です。一般に、データ管理者ユーザーがバックアップ用の自動手順をセットアップするので、それをご自身でなさることを心配する必要はありません。SMS は、管理クラスによってこの自動化を容易にします。

VSAM および非 VSAM データ・セットをバックアップおよびリカバリーする方法はいくつかあります。

v データ機能記憶管理サブシステム Hierarchical Storage Manager (DFSMShsm) を使用する。 DFSMShsm を使用できるのは、システムに DSS および DFSMShsm

がインストールされており、データ・セットがカタログ内でカタログ化されている場合のみです。 DFSMShsm のバックアップとリカバリーの使用については、「z/OS DFSMShsm Managing Your Own Data」を参照してください。

v アクセス方式サービス・プログラムの REPRO コマンドを使用する。

v データ機能記憶管理サブシステム Data Set Services (DFSMSdss) の DUMP および RESTORE コマンドを使用する。 DSS を使用できるのは、それがシステムにインストールされており、データ・セットがカタログ内でカタログ化されている場合です。アンカタログ・データ・セットについては、DSS はフル・ボリューム、および物理または論理データ・セット・ダンプ機能を提供しています。圧縮拡張フォーマット・データ・セットの場合、DFSMShsm は、DFSMSdss をデータ移動プログラムとして使用して圧縮データ・セットを処理します。 DFSMSdss を論理ダンプ/復元用に VSAM 圧縮データ・セットと一緒に使用するときは、ターゲット・データ・セット割り振りは、ソース・データ・セット割り振りと整合性を保つ必要があります。 DFSMShsm の場合、マイグレーションまたはバックアップあるいはその両方が行われる VSAM 拡張フォーマット・データ・セットは、拡張フォーマット・データ・セットとしてリコールまたはリカバリーあるいはその両方が行われるだけです。 DFSMSdss の使用については、「 z/OS DFSMS

Storage Administration Reference」を参照してください。

v バックアップとリカバリー用に独自のプログラムを書き込む。

© Copyright IBM Corp. 1987, 2008 57

Page 82: DFSMS データ・セットの使用法

v VSAM データ・セットの場合は、アクセス方式サービス・プログラムのEXPORT と IMPORT コマンドを使用する。

v PDS の場合は、IEBCOPY ユーティリティーを使用する。

v 並行コピーを使用して即時コピーをとる。並行コピーを使用することができるのは、並行コピー機能をサポートする IBM ストレージ管理に接続された DASD にデータ・セットが常駐する場合です。

これらのバックアップとリカバリーの方法にはそれぞれの利点があります。バックアップしたい特定のデータについて最良の方法を判断する必要があります。DFSMShsm、DSS、または ISMF を使用してデータ・セットをアーカイブ、バックアップ、およびリカバリーする要件と処理については、「z/OS DFSMShsm Managing

Your Own Data」を参照してください。これには、災害時リカバリーについての情報も記載されています。

バックアップとリカバリー用の REPRO の使用REPRO コマンドを使用して、バックアップ用の重複するデータ・セットを作成します。 REPRO の使用については、 137ページの『データ・セットのコピーおよびマージ』を参照してください。

バックアップとリカバリー用に REPRO を使用することには、次の利点があります。

v バックアップ・コピーがアクセス可能である。REPRO を使用することによって取得したバックアップ・コピーが処理用にアクセス可能です。これは、VSAM データ・セットまたは順次データ・セットにすることができます。

v データ・セットのタイプを変更できる。REPRO を使用することによって取得したバックアップ・コピーが、オリジナル・データ・セットのタイプと異なるタイプにすることができます。たとえば、VSAM キー順データ・セットのバックアップをとるのに、それを VSAM 入力順データ・セットにコピーすることもできます。圧縮 VSAM キー順データ・セットは、REPRO を使用して VSAM 入力順データ・セットにコピーすることはできません。圧縮キー順データ・セットのデータ・コンポーネントは、それだけではアクセスできません。

v キー順データ・セットまたは可変長 RRDS が再編成されます。 バックアップにREPRO を使用すると、キー順データ・セットまたは可変長 RRDS 用の索引の再編成および再作成が行われます。データ・レコードは、昇順キー順で物理的に再配列され、フリー・スペース数量が復元されます。(制御インターバルと制御域分割によってレコードが物理的に乱れてしまうことがあります。) キー順データ・セットが再編成されるとき、相対バイト・アドレス (RBA) を使用する絶対参照は無効になります。

RLS を使用してデータ・セットにアクセスしている場合は、 253ページの『第 14

章 VSAM レコード・レベル共用の使用』を参照してください。

REPRO は、バックアップ・コピーを作成してデータ・セット・リカバリーに使用するためのいくつかのオプションを提供します。以下は、 REPRO を使用するための方法の例です。

1. REPRO を使用して、データ・セットを異なる名前を持つデータ・セットにコピーする。

データ・セットのバックアップとリカバリー

58 z/OS V1R10 DFSMS データ・セットの使用法

Page 83: DFSMS データ・セットの使用法

オリジナル・コピーの参照名を変更するか、オリジナルを削除してコピーを名前変更します。

2. 別のカタログ上でバックアップ・コピーを作成してから、そのバックアップ・コピーを使用してオリジナルを置き換える。

v 別のカタログ上でデータ・セットを定義し、REPRO を使用してオリジナル・データ・セットを、定義しておいた新規データ・セットにコピーします。

v オリジナルをバックアップ・コピーで置き換えたいときは、バックアップ・コピーをそれがコピーされたカタログの中に残しておくことができます。そこで、バックアップ・コピーを含むカタログの名前を反映するように JCL ステートメントを変更してください。

3. 再使用不可 VSAM データ・セットのコピーを同じカタログ上に作成してから、オリジナル・データ・セットを削除し、新規データ・セットを定義し、バックアップ・コピーを新規に定義されたデータ・セットにロードする。

v バックアップ・コピーを作成するには、データ・セットを定義し、REPRO を使用してオリジナル・データ・セットを新規に定義されたデータ・セットにコピーします。バックアップ・データ・セットをオリジナル・データ・セットと同じカタログ上で定義する場合またはデータ・セットが SMS 管理されている場合、バックアップ・データ・セットは異なる名前を持つ必要があります。

v データ・セットをリカバリーするには、オリジナル・データ・セットがまだ存在する場合は、 DELETE コマンドを使用してそれを削除します。次に、DEFINE コマンドを使用してデータ・セットを再定義してから、REPRO コマンドによるバックアップ・コピーで復元します。

4. 再使用可能 VSAM データ・セットのコピーを作成してから、バックアップ・コピーをオリジナル・データ・セットにロードする。REPRO を使用しているときは、REUSE 属性により、同じ VSAM 再使用可能ターゲット・データ・セットに繰り返しバックアップを行うことができます。

v バックアップ・コピーを作成するには、データ・セットを定義し、REPRO を使用してオリジナル再使用可能データ・セットを新規に定義したデータ・セットにコピーします。

v データ・セットをリカバリーするには、バックアップ・コピーをオリジナル再使用可能データ・セットにロードします。

5. データ・セットのバックアップ・コピーを作成してから、バックアップ・コピーを損傷したデータ・セットとマージする。REPRO を使用するときは、REPLACE

パラメーターによって、バックアップ・コピーを損傷したデータ・セットにマージすることができます。 REPLACE パラメーターは入力順データ・セットと一緒に使用することはできません。これは、レコードが常に、入力順データ・セットの末尾に追加されるためです。

v バックアップ・コピーを作成するには、データ・セットを定義し、REPRO を使用してオリジナル・データ・セットを新規に定義されたデータ・セットにコピーします。

v データ・セットをリカバリーするには、REPRO コマンドを REPLACE パラメーターと一緒に使用して、バックアップ・コピーを破棄されたデータ・セットとマージします。キー順データ・セットでは、キーがターゲット・レコードのキーに一致する各ソース・レコードがターゲットを置き換えます。それ以外では、ソース・レコードがターゲット・クラスター内の適切な場所に挿入されま

データ・セットのバックアップとリカバリー

第 4 章 データ・セットのバックアップとリカバリー 59

Page 84: DFSMS データ・セットの使用法

す。固定長または可変長 RRDS では、相対レコード番号がターゲット・データ・セット内のデータ・レコードを識別する各ソース・レコードが、ターゲット・データ・セットを置き換えます。それ以外では、ソース・レコードが、その相対レコード番号が識別する空のスロットに挿入されます。データ・セットの一部のみが損傷したときは、データ・セットの損傷した部分にあるレコードのみを置き換えることができます。REPRO コマンドにより、コピーを開始するロケーションおよびコピーを終了するロケーションを指定することができます。

6. キー順データ・セットの索引または可変長 RRDS が損傷された状態になる場合は、この手順に従って索引を作成し直し、データ・セットをリカバリーする。これは、圧縮されたキー順データ・セットには適用されません。圧縮されたキー順データ・セットのデータ・コンポーネントのみを REPRO するのは不可能です。

v REPRO を使用して、データ・コンポーネントをコピーします。データをソートします。

v REPRO を REPLACE パラメーターと一緒に使用して、クラスターをコピーして、索引を作成し直します。

制約事項:

1. 参照するカタログをすべてシステム・マスター・カタログに接続する必要があります。

EXPORT と IMPORT を使用した VSAM データ・セットのバックアップとリカバリー

バックアップとリカバリーに EXPORT/IMPORT を使用することには、次の利点があります。

v キー順データ・セットまたは可変長 RRDS が再編成されます。 バックアップにEXPORT を使用すると、キー順データ・セットまたは可変長 RRDS について索引の再編成および再作成が行われます。データ・レコードは、昇順キー順で物理的に再配列され、フリー・スペース数量のバランスをとります。 (制御インターバルと制御域分割によってレコードが物理的に乱れてしまうことがあります。)

キー順データ・セットが再編成されるとき、 RBA を使用する絶対参照は無効になります。

v 再定義が容易です。大部分のカタログ情報は、データ・セットと共にエクスポートされるので、コピーをインポートする前にデータ・セットを定義する必要はありません。IMPORT コマンドはオリジナル・コピーを削除し、新規オブジェクトを定義し、エクスポートされたコピーからのデータを新規に定義されたデータ・セットにコピーします。

v 属性を変更または追加することができます。リカバリーのためにデータ・セットを IMPORT するとき、OBJECTS パラメーターを指定して、データ・セット用の新規または変更された属性を示すことができます。データ・セットをインポートすることにより、データ・セットの名前、キー範囲、データ・セットが常駐するボリューム、および SMS クラスを変更することができます。RLS を使用してデータ・セットにアクセスすることについての情報は、 253ページの『第 14 章VSAM レコード・レベル共用の使用』を参照してください。

データ・セットのバックアップとリカバリー

60 z/OS V1R10 DFSMS データ・セットの使用法

Page 85: DFSMS データ・セットの使用法

エクスポートされたデータ・セットの構造エクスポートされたデータ・セットは、データ・セットのアンロードされたコピーです。バックアップ・コピーは、順次データ・セットにしかなることができません。

大部分のカタログ情報は、データ・セットと共にエクスポートされるので、再定義の問題が楽になります。バックアップ・コピーには、そのコピーを IMPORT するときに VSAM クラスター、または代替索引を再定義するのに必要な情報がすべて含まれています。

EXPORT と IMPORT コマンドバックアップのためにデータ・セットのコピーをエクスポートするとき、TEMPORARY 属性を指定します。データ・セットをエクスポートするということは、データ・セットがオリジナル・システムから削除されないことを意味します。

入力順次または線形データ・セットの基本クラスターは、制御インターバル・モードで CIMODE パラメーターを指定してエクスポートすることができます。線形データ・セットに CIMODE が強制されると、 RECORDMODE 指定は指定変更されます。

バックアップ・コピーが EXPORT コマンドを使用して作成された VSAM クラスター全体を置き換えるには、IMPORT コマンドを使用します。IMPORT コマンドはバックアップ・コピーを使用してクラスターの内容とカタログ情報を置き換えます。

エクスポートされたデータ・セットを保護するために、INHIBITSOURCE またはINHIBITTARGET パラメーターを指定することができます。これらのパラメーターを使用すると、ソースまたはターゲット・データ・セットが検索以外の操作のためにアクセスできないことになります。

INTOEMPTY パラメーターを指定する場合、IMPORT は分散データ管理 (DDM) 属性を伝達しません。分散ファイル・マネージャー (DFM) は、インポートされたデータ・セットが最初にアクセスされるときに DDM 属性を再設定します。

圧縮されたデータは移植可能とは見なされません。ユーザーが INTOEMPTY パラメーターを指定する場合、IMPORT は拡張フォーマットまたは圧縮情報を伝達しません。

バックアップとリカバリー用のプログラムの書き込みバックアップとリカバリー用に独自のプログラムを作成する方法は 2 通りあります。

v 定期的にデータ・セットを順次処理する場合、通常の処理の副産物としてバックアップ・コピーを容易に作成することができます。バックアップ・コピーは、REPRO によって作成されたものと同様に使用できます。

v データ・セットをバックアップするために独自のプログラムを書き込むことができます。可能である場合はいつでも、このプログラムを通常の処理プロシージャーに組み込む必要があります。

データ・セットのバックアップとリカバリー

第 4 章 データ・セットのバックアップとリカバリー 61

Page 86: DFSMS データ・セットの使用法

VSAM では、JRNAD ユーザー出口ルーチンは、独自のバックアップ・プログラムを書き込む 1 つの方法です。 更新のためにレコードを要求するとき、VSAM

は JRNAD 出口ルーチンを呼び出して、更新しようとするレコードをコピーし、別のデータ・セットに書き込みます。VSAM を戻すと、VSAM は要求された更新を完了します。何か障害が起きても、バックアップ・コピーがあります。 286

ページの『トランザクションをジャーナル記録するための JRNAD 出口ルーチン』を参照してください。

バックアップとリカバリー用の並行コピーの使用並行コピーは、データの即時コピーと見えるものをとります。コピーは、バックアップ・コピー (テープなど)、またはあるセットの DASD ボリュームから別のものへのデータベースの複製用とすることができます。並行コピーは、バックアップまたはコピーが非常に短い逐次化でのみ行われるようにすることで、非データベース環境にも利点をもたらします。

バックアップに並行コピーを使用することには、以下の利点があります。

v 中断がほとんどまたはまったくない。

v 論理的に一貫性がある。

v データを使用してアプリケーションを書き留める必要がない。

v データがアプリケーションによってどのように使用されているかとは無関係に実行される。

v どの種類の DSS ダンプまたはコピー操作にも役立つ。

v 制御データ・セットのバックアップ中に DFSMShsm を使用できないということをなくす。

DFSMShsm は、並行コピーを使用して、独自の制御データおよびジャーナルをコピーすることができます。

オフピーク時間中に並行コピーを (コピーまたはバックアップのように) 実行すると、システム・スループットが改善されます。

関連資料: 並行コピーの使用については、「z/OS DFSMSdss Storage Administration

Guide」を参照してください。

リカバリー後のデータ・セットの更新損傷したデータ・セットをそのバックアップ・コピーで置き換えた後、復元されたデータ・セットを更新することができます。復元されたデータ・セットを更新するには、それがバックアップされた時刻とアクセス不能になった時刻との間にオリジナルを更新したジョブを再実行します。

リカバリー中でのカタログと VSAM データ・セット情報の同期VSAM データ・セットの物理および論理記述はそのカタログ項目に含まれるので、VSAM はデータ・セットにアクセスするのに最新のカタログ項目を必要とします。データ・セットまたはカタログが損傷する場合、リカバリー手順はデータ・セットとカタログ項目状況の両方を突き合わせる必要があります。データ・セットを再ロ

データ・セットのバックアップとリカバリー

62 z/OS V1R10 DFSMS データ・セットの使用法

Page 87: DFSMS データ・セットの使用法

ードすることによるリカバリーは、この問題を自動的に処理します。データ・セットが再ロードされるときに新規カタログ項目が作成されます。

ユーザー・カタログ内のデータ・セットのバックアップをとると、カタログへの損傷からリカバリーすることができます。項目が失われたデータ・セットのバックアップ・コピーをインポートすることができるか、項目を再定義してバックアップ・コピーを再ロードすることができます。

カタログのバックアップおよびリカバリーについては、「z/OS DFSMS Managing

Catalogs」および「z/OS DFSMShsm Managing Your Own Data」を参照してください。

異常終了の処理ユーザー・プログラムが VSAM データ・セットをクローズする場合、システムはデータ・セットのデータ終わり情報を使用して、そのカタログ化された情報を更新します。ユーザー・プログラムがデータ・セットをクローズする前にシステム障害が起きる場合は、そのカタログ化された情報は更新されず、未書き込みバッファー内のレコードはデータ・セットに書き込まれません。

コンポーネントが更新処理のためにオープンしている間にエラーが起きる場合は、不適切にクローズすることがあります (出力用オープン標識はオンのまま)。OPEN

時、 VSAM は、出力用オープン標識オンを検出すると暗黙的に VERIFY コマンドを発行し、VERIFY コマンドが正常に行われるかどうかを示す通知メッセージを出します。

VSAM データ・セットの最終 CLOSE が正常に完了したときに、VSAM は出力用オープン標識をオフにします。 ただし、データ・セットが入力のためにオープンされる場合、 VSAM は出力用オープン標識をオンのままにします。これは、出力時OPEN の後の正常な CLOSE で、出力用オープン標識をオフにさせます。正常にクローズされなかったデータ・セットを使用する前に、データ・セット内のデータの状況を判別してください。カタログ内の出力用オープン標識をオフにしても、データ・セットのエラーがなくなるわけではありません。

不適切にクローズされたデータ・セットを処理するための VERIFYの使用

特定のタイプのオープンされた VSAM データ・セットで VSAM VERIFY マクロ呼び出しを使用して、VSAM 制御ブロック内のフィールドが正確であることを確認することができます。 VERIFY マクロはデータ・セット内のデータを変更しません。VERIFY は、欠落または重複するレコードを訂正することも、索引構造内の損傷を修復することもしません。制御ブロック・フィールドの検証により、不適切にクローズされたデータ・セットのリカバリー処理を必要に応じて行うことができます。

また、IDCAMS VERIFY コマンドを使用して VSAM データ・セットを検証することもできます。このコマンドを発行すると、IDCAMS は出力のために VSAM データ・セットをオープンし、VSAM VERIFY マクロ呼び出しを出してから、データ・セットをクローズします。 IDCAMS VERIFY コマンドと VSAM OPEN による検証は同じです。どちらも検証されたデータ・セット内のデータを変更しません。

データ・セットのバックアップとリカバリー

第 4 章 データ・セットのバックアップとリカバリー 63

Page 88: DFSMS データ・セットの使用法

出力のためにオープンされた VSAM データ・セットが正常にクローズされるとき、VSAM 制御ブロック内の検証済み情報からカタログが更新されます。

更新される実際の VSAM 制御ブロック・フィールドは、検証されるデータ・セットのタイプに依存します。更新できる VSAM 制御ブロック・フィールドには、データ・セット用の「高使用 RBA/CI」、「高キー RBA/CI」、「索引レベルの数」、および「最初のシーケンス・セット・レコードの RBA/CI」が含まれます。

VERIFY コマンドは、更新処理用にオープンされたコンポーネントがシステム障害で不適切にクローズされたら、使用する必要があります。クラスター、代替索引、入力順データ・セット、およびカタログを検証することができます。代替索引のパスおよび線形データ・セットは検証することができません。基本クラスターを通じて直接定義されたパスは検証することができます。VSAM RLS が使用されているとき、VERIFY マクロは機能を実行しません。VSAM RLS は、共用環境でデータ・セット情報を保持する責任を負います。

キー順クラスターまたは代替索引のデータおよび索引コンポーネントは検証できるとはいえ、2 つのコンポーネントのタイム・スタンプは、個別の検証により異なっているので、さらに OPEN エラーが発生する可能性があります。したがって、クラスターまたは代替索引の名前を VERIFY コマンドのターゲットとして使用してください。システムを通じて共用される VSAM クラスターをオープンするたびにVERIFY コマンドを発行する必要があります。共用されるクラスターと VERIFY の併用については、 231ページの『システム間共用』を参照してください。

不適切にクローズされた VSAM データ・セットによるエラーからのリカバリー時には、データ・セットは正しくクローズされているのに、エラーが発生することがあります。最も起こりそうなエラーは、カタログ内の正しくない高い RBA です。そのほかの考えられるエラーは、 DASD への書き込むが不十分であるか、重複するデータが存在することです。これらのエラーを避ける 1 つの方法は、同時直接挿入を行うことです。もう一つの方法は、異常終了ユーザー出口を使用することで、そこではデータ・セットを正しくクローズするために CLOSE (おそらく、TYPE=T パラメーターを指定して) を発行します。

書き込み操作が不完全ではないかと思われる場合は、IMPORT または REPRO コマンドを発行して、データの古いコピーを入手します。中間の更新または挿入は失われます。IMPORT を使用するには、エクスポートされたバージョンのデータ・セットが使用可能でなければなりません。REPRO についてバックアップ・コピーを使用します。

最も起こりそうにないエラーである、キー順データ・セット内の重複するデータは、制御インターバルまたは制御域分割時の障害から発生することがあります。分割の数を削減するためには、制御インターバルおよび制御域の両方についてフリー・スペースを指定します。索引が更新される前に障害が発生した場合は、挿入は失われ、重複は存在せず、データ・セットは使用可能です。

索引を更新してから更新済みの制御インターバルを 2 次ストレージに書き込むまでの間に障害が発生した場合は、一部のデータの重複が発生します。ただし、アドレスによる処理を使用することにより両方のバージョンのデータにアクセスすることができます。現行のバージョンを希望する場合は、 REPRO を使用して、一時デー

データ・セットのバックアップとリカバリー

64 z/OS V1R10 DFSMS データ・セットの使用法

Page 89: DFSMS データ・セットの使用法

タ・セットにコピーし、新規のキー順データ・セットに再度コピーし直します。エクスポートされたコピーのデータがある場合は、 IMPORT コマンドを使用して、重複するデータのない再編成されたデータ・セットを取得します。

索引が複製され、索引制御インターバル用の書き込み操作間でエラーが発生したが、出力は影響を受けなかった場合は、両方のバージョンのデータを検索することができます。制御域分割用の一連の操作は、制御インターバル分割用のそれと似ています。データをリカバリーするには、 REPRO または IMPORT コマンドを、前述の段落で説明した障害の場合と同様に使用します。

ジャーナル出口 (JRNAD) を使用して、制御インターバルと制御域分割および影響を受けた RBA 範囲を判別します。

カタログでの VERIFY の使用VSAM OPEN は、カタログのオープン時に VERIFY を呼び出します。

VERIFY を使用して、ロード・モード障害後にキー順データ・セット、あるいは固定長または可変長 RRDS を訂正することはできません。RECOVERY 属性を指定して定義された入力順データ・セットは、作成 (ロード) モード障害後に検証することができますが、空のデータ・セットまたは線形データ・セットに対して VERIFY を実行することはできません。どちらを行おうとしても、VSAM 論理エラーが発生します。暗黙の VERIFY コマンドを発行する VSAM については、 158ページの『データ・セットのオープン』を参照してください。

CICS® VSAM RecoveryIBM CICS VSAM Recovery (CICSVR) は、脱落または損傷した VSAM データ・セットのリカバリーを行います。 CICSVR は、VSAM データの可用性および保全性が重要な場合の編成を対象としています。 CICSVR は、自動完全リカバリー、順方向リカバリー、およびバックアウト機能、ならびにバッチ・アプリケーション用のロギングを提供します。

CICSVR を使用して実行できるいくつかのタスクを以下に示します。

v 完全リカバリーを実行して、CICS およびバッチ・アプリケーションによって更新された脱落または損傷した VSAM データ・セットの復元およびリカバリーを行う。

v バッチ・アプリケーション用のロギングを行う。

v VSAM データ・セット・グループをリカバリーする。

v オープン時バックアップ (BWO) VSAM データ・セットを処理する。

v ISPF ダイアログ・インターフェースを使用してリカバリー・ジョブの作成およびサブミットを自動化する。

v Change Accumulation (変更累積) を使用して、ログ・レコードを統合し、VSAM

データ・セットのリカバリーに必要な時間を削減する。

v Selective Forward Recovery (選択順方向リカバリー) を使用して、VSAM データ・セットのリカバリー時に VSAM データ・セットに適用されるログ・レコードを制御する。

データ・セットのバックアップとリカバリー

第 4 章 データ・セットのバックアップとリカバリー 65

Page 90: DFSMS データ・セットの使用法

関連資料: 詳しくは、「IBM CICS VSAM Recovery Implementation Guide」を参照してください。

データ・セットのバックアップとリカバリー

66 z/OS V1R10 DFSMS データ・セットの使用法

Page 91: DFSMS データ・セットの使用法

第 5 章 データ・セットの保護

給与計算データ、販売予測データ、および特別なセキュリティー上の注意を必要とする他のすべてのデータ・セットへの無許可アクセスを防ぐことができます。データ・セット内の機密データは、リソース・アクセス管理機能 (RACF ) またはパスワードを使用して保護することができます。

この章では以下のトピックを扱います。

トピック 該当ページ

データ・セット・パスワード保護 70

ユーザー・セキュリティー検査ルーチン 72

残存データの消去 72

許可プログラム機能とアクセス方式サービス・プログラム 74

アクセス方式サービス・プログラム暗号オプション 76

z/OS セキュリティー・サーバー (RACF)z/OS セキュリティー・サーバーは、セキュリティーを管理するために IBM が推奨する基本ツールです。 セキュリティー・サーバーは、しばしばリソース・アクセス管理機能 (RACF) と呼ばれます。 MVS 環境では、RACF を使用して、データにアクセスしてシステム機能を使用するためのユーザーの権限を識別および検査することができます。 RACF 保護は、カタログおよび個々の VSAM データ・セットに適用されます。

システムは、SMS 管理データ・セットに対するパスワード保護を無視します。 70

ページの『データ・セット・パスワード保護』を参照してください。

個別プロファイルまたは総称プロファイルがデータ・セットを保護しない場合、パスワード保護が効力を持ちます。

関連資料: RACF の詳細については、「z/OS Security Server RACF セキュリティー管理者のガイド」を参照してください。

VSAM データ・セットに対する RACF 保護VSAM データ・セットを含むカタログのデータ・セットが RACF 保護されるためには、このカタログが RACF 保護されている必要はありません。

ユーザー・セキュリティー検査ルーチン (USVR) が存在しても、RACF 定義されたデータ・セットに対しては呼び出されません。

RACF 保護されたカタログから任意のタイプの RACF 保護された項目を削除する場合、カタログまたは項目が削除されるためには変更レベルの許可が必要です。この操作のためには、カタログ自身に対する変更許可では不十分です。

© Copyright IBM Corp. 1987, 2008 67

Page 92: DFSMS データ・セットの使用法

注: OPEN を発行するプログラムが監視プログラム状態または保護キー 0 にある場合、VSAM OPEN ルーチンは、RACF セキュリティー検査を迂回します。

VSAM データ・セットに対する総称プロファイルと個別プロファイル

カタログ化されたクラスターの場合、クラスター全体、またはそのコンポーネントへのアクセスを検査するには、総称プロファイルが使用されます。個々のコンポーネントに対する個別プロファイルが存在する場合もありますが、クラスター内のコンポーネントを保護するにはクラスターのプロファイル (総称または個別) のみが使用されます。

データ・セット定義操作時に自動データ・セット保護 (ADSP) 処理が定義するプロファイルは、クラスター・プロファイルのみです。

個別プロファイルによって保護されたデータ・セットが、RACF がインストールされていないシステムに移動された場合、そのデータ・セットにアクセスするための権限はユーザーに与えられません。

非 VSAM データ・セットに対する RACF 保護データ・セットは RACF に自動的または明示的に定義することができます。 自動データ・セット保護属性を持つ場合、または DD ステートメントにPROTECT=YES または SECMODEL=(,) をコーディングする場合、DASD データ・セットに対してスペースが割り振られると、自動定義が発生します。SECMODEL=(,) によって、データ・セットに対する個別プロファイルを作成する際に RACF が使用する必要があるモデル・プロファイルの名前を指定することができます。 RACF へのデータ・セットの明示的な定義は、RACF コマンド言語を使用して行います。

マルチボリューム・データ・セット。マルチボリューム非 VSAM DASD およびテープ・データ・セットを保護するには、データ・セットの各ボリュームを同じボリューム・セットの一部として RACF に定義する必要があります。

v RACF 保護データ・セットが出力用にオープンされ、新規ボリュームに拡張されると、新規ボリュームは同じボリューム・セットの一部として RACF に自動的に定義されます。

v マルチボリューム物理順次データ・セットが出力用にオープンされ、データ・セットのボリュームがすべて RACF に定義されている場合、後続の各ボリュームが同じボリューム・セットの一部として RACF 保護されている必要があるか、データ・セットがボリューム上にまだ存在している必要はないかのどちらかです。

v スペースが割り振られるとき、システムは、拡張順次データ・セットの全ボリュームを RACF に自動的に定義します。

v RACF 保護マルチボリューム・テープ・データ・セットが出力用にオープンされるとき、各後続ボリュームが同じボリューム・セットの一部として RACF 保護されている必要があるか、テープ・ボリュームがまだ RACF に定義されている必要がないかのどちらかです。

v オープンされた最初のボリュームが RACF 保護されていない場合、後続のボリュームが RACF 保護されていることはありえません。 マルチボリューム・デー

データ・セットの保護

68 z/OS V1R10 DFSMS データ・セットの使用法

Page 93: DFSMS データ・セットの使用法

タ・セットが入力用にオープンされている (または非物理順次データ・セットが出力用にオープンされている) 場合、後続ボリュームがアクセスされるときに、そのような整合性検査は行われません。

テープ・データ・セット。 RACF を使用して、ラベルなし (NL)、IBM 標準ラベル(SL)、ISO/ANSI 標準ラベル (AL) が付いたテープ・ボリューム、またはラベル迂回処理 (BLP) で参照されるテープ・ボリュームに対するアクセス制御を提供することができます。

テープ・データ・セットの RACF 保護は、ボリュームに基づいて、またはデータ・セットに基づいて提供されます。 テープ・ボリュームは、RACF コマンド言語を使用することによって明示的に、または自動的に RACF に定義されます。 データ・セットが OUTPUT、OUTIN、または OUTINX 用にオープンされており、RACF テープ・データ・セット保護がアクティブであるときはいつも、またはデータ・セットがシーケンス中の最初のファイルであるときは、テープ・データ・セットがRACF に定義されます。テープ・ボリュームが RACF 保護されている場合は、そのボリューム上の全データ・セットは RACF 保護されています。

データ・セットが RACF に定義され、かつパスワード保護されている場合、データ・セットへのアクセスは RACF を通じてのみ許可されます。 テープ・ボリュームが RACF に定義され、かつテープ・ボリューム上のデータ・セットがパスワード保護されている場合、データ・セットへのアクセスは、RACF を通じてのみ許可されます。 テープ・ボリューム保護は、RACF コマンド SETROPTS

CLASSACT(TAPEVOL) を発行することによって活動化されます。 テープ・データ・セット名保護は、RACF コマンド SETROPTS CLASSACT(TAPEDSN) を発行することによって活動化されます。データ・セット・パスワード保護は迂回されます。システム管理 DASD データ・セットの場合、システムはデータ・セット・パスワード保護を無視します。

RACF のもとで実行される ISO/ANSI バージョン 3 およびバージョン 4 のインストール・システム出口は、ISO/ANSI ボリューム・ラベル処理時に制御を受け取ります。 制御は、RACHECK プリプロセスおよびポストプロセス・インストール・システム出口に移ります。アクセス可能性コードが A から Z の英字である場合、ISO/ANSI インストール・システム出口に渡された同じ IECIEPRM 出口パラメーター・リストが RACF インストール・システム出口に渡されます。

関連資料: これらの出口の詳細については、「z/OS DFSMS Installation Exits」を参照してください。

注: ISO/ANSI バージョン 4 テープでは、特殊文字 !*″%&’()+,-./:;<=>?_ および数字0 から 9 も使用できます。

データ・セット名の隠蔽会社の情報を確実に保護するために、セキュリティー管理者は、重要な情報を含むデータ・セットに対して RACF 名前隠蔽機能を使用可能にすることができます。名前隠蔽機能が効力をもっているときは、該当のデータ・セットにアクセスするための READ (読み取り) 権限を少なくとも持っていない限り、データ・セット名を取得することはできません。 VTOC 用の RACF FACILITY クラスSTGADMIN.IFG.READVTOC.volser にアクセスできる場合は、ボリューム上のすべ

データ・セットの保護

第 5 章 データ・セットの保護 69

Page 94: DFSMS データ・セットの使用法

てのデータ・セット (RACF READ 権限を持っていないデータ・セットを含む) を確認することができます。VTOC 上のボリュームに関するSTGADMIN.IFG.READVTOC.volser にアクセスできない場合は、特定の READ アクセス権限を持つデータ・セットのみを表示することができます。

制約事項: カタログ・サーチ・インターフェース (CSI) は、総称名のような、完全修飾データ・セット名を処理します。ゆえに、名前の隠蔽がアクティブな状態で完全修飾データ・セット名を要求するため CSI を利用した場合、少なくともそのデータ・セットへの READ アクセスがなければ、データ・セット名は隠蔽されています。

名前の隠蔽は次のいずれかが真のときのみに機能します:

v データ・セットが総称プロファイルでプロテクトされている。

v ユーザーが DS 名 (データ・セット名) と一致する DATASET クラスに MODEL

プロファイルを作成した。

v ユーザーが DS 名と一致する、MIGRAT の volser がある DATASET クラスに個別プロファイルを作成した (これには ADDSD の NOSET オプションが必要です)。

ユーザーのテープのデータ・セットの場合、名前の隠蔽は次のいずれかが真のときのみに機能します:

v TAPEVOL クラスは、定義済みの TAPEVOL プロファイルがあるときにアクティブである。

v SETR TAPEDSN は、DATASET プロファイル (または SETR

PROTECTALL(FAIL)) があるときにアクティブである;

その他の場合、データ・セットは保護されません。誰でも LISTCAT を通してデータ・セットの読み取り、書き込み、またはリスト作成ができます。

CVAF マクロおよび DADSM OBTAIN マクロはどちらも、次のような呼び出し側プログラムには名前隠蔽機能を提供しません: APF 許可されているもの、監視プログラム状態で実行中のもの、または名前隠蔽機能がアクティブなときにキーがゼロのもの。名前隠蔽の環境では、これらの許可プログラムは、CVAF 要求に対してはCVAF パラメーター・リスト (CVPL) の cv4nmhid フラグを立てるか、またはDADSM OBTAIN シーク要求に対しては OBTAIN パラメーター・リスト の バイト 2 ビット 3 (マスク X’10’) をオンにすることで、名前隠蔽を要求することができます。

関連資料: データ・セット名の名前隠蔽機能および RACF 保護の詳細については、「z/OS DFSMS 新機能の使用」および「z/OS Security Server RACF セキュリティー管理者のガイド」を参照してください。

データ・セット・パスワード保護非 VSAM データ・セットにはデータ・セット・パスワードを定義できますが、VSAM データ・セットには定義できません。すべてのシステム管理データ・セット(新規および既存) についてパスワードが無視されます。ただし、システム管理データ・セットに対してはパスワードを定義できます。

データ・セットの保護

70 z/OS V1R10 DFSMS データ・セットの使用法

|

|

|

|

Page 95: DFSMS データ・セットの使用法

IBM は、データ・セットにはパスワードを使用しないことをお勧めします。 データ・セット・パスワードによって提供されるセキュリティーは、RACF によって提供されるセキュリティーほど良好ではありません。「z/OS DFSMSdfp Advanced

Services」を参照してください。

システムは、システム管理データ・セットに対するパスワード保護を無視します。

パスワードの割り当て非 VSAM データ・セットにパスワードを割り当てるには、PROTECT マクロまたは IEHPROGM PROTECT コマンドを使用します。「z/OS DFSMSdfp Advanced

Services」および「z/OS DFSMSdfp Utilities」を参照してください。

データ・セットを定義するときの保護非 VSAM データ・セットをカタログ内で定義するとき、データ・セットはそのカタログ項目内ではパスワードで保護されません。

データ・セットには 2 つのレベルの保護オプションが使用可能です。これらのオプションは、DD ステートメントの LABEL フィールドでパラメーター PASSWORD

または NOPWREAD を使用して指定します。「z/OS MVS JCL 解説書」を参照してください。

v パスワード保護 (PASSWORD パラメーターによって指定されます) は、正しいパスワードがシステム・オペレーターによって、または TSO/E ジョブの場合はTSO/E ユーザーによって入力されるまで、すべてのタイプの処理に対してデータ・セットを使用不能にします。

v 非パスワード読み取り保護 (NOPWREAD パラメーターによって指定されます)

は、パスワードがなくてもデータ・セットを入力用に使用可能にしますが、出力または削除操作用にはパスワードを入力するよう要求します。

システムは、データ・セット・セキュリティー標識を、「z/OS DFSMS Using

Magnetic Tapes」に示されているような標準ヘッダー・ラベル 1 内で、またはデータ・セット制御ブロック (DSCB) 内で設定します。磁気テープ用にセキュリティー保護を要求した後、保護データ・セットを上書きしない限り、JCL を使用してそれを除去することはできません。

誤ったパスワードの処理パスワードがオープンまたは EOV ルーチンによって要求されているときに誤ったパスワードが 2 回入力されると、システムは ABEND 913 を発行します。SCRATCH または RENAME 要求の場合は、戻りコードが与えられます。

PASSWORD データ・セット内でのレコードの入力JCL でパスワード保護を要求することに加えて、PASSWORD という名前のデータ・セット内の各保護データ・セットごとに少なくとも 1 つのレコードを入力する必要があります。 PASSWORD データ・セットは、システム常駐ボリューム上で作成する必要があります。システム常駐ボリュームには、オペレーティング・システムの中核が含まれています。システム・プログラマーは、パスワードの知識なしでの読み取りと書き込みの両方を防ぐために PASSWORD データ・セット自体についてのパスワード保護も要求する必要があります。

データ・セットの保護

第 5 章 データ・セットの保護 71

Page 96: DFSMS データ・セットの使用法

直接アクセス記憶装置上のデータ・セットの場合は、そのパスワードをPASSWORD データ・セットに入力するときにデータ・セットを保護のもとに置きます。PROTECT マクロまたは IEHPROGM ユーティリティー・プログラムを使用して PASSWORD データ・セット内の項目を追加、変更、または削除します。これらの方法のいずれかを使用するとき、システムはデータ・セットの DSCB を更新して、その保護状況を反映します。したがって、直接アクセス記憶装置上でデータ・セット用のセキュリティー保護を追加、変更、または除去するたびに JCL を使用する必要はありません。PROTECT マクロを含む PASSWORD データ・セットの保守については、「z/OS DFSMSdfp Advanced Services」を参照してください。IEHPROGM ユーティリティーについては、「z/OS DFSMSdfp Utilities」を参照してください。

ユーザー・セキュリティー検査ルーチンVSAM では、ユーザーの権限を検査するプログラムを指定することによってデータを保護することができます。 302ページの『ユーザー・セキュリティー検査ルーチン』は、特定要件を説明しています。この追加の保護を使用するには、DEFINE または ALTER コマンドの AUTHORIZATION パラメーターで許可ルーチンの名前を指定します。

残存データの消去メディア・スペースを解放するときに、データを消去することができます。

DASD データの消去DASD データ・セットを削除するか、スペースの部分を解放するとき、システムは新規データ・セットの割り振りのためのスペースを使用可能にします。新規データ・セットの作成者が前のデータ・セット内の残存データを読み取ることができる方法があります。削除したデータをほかの人が読み取ることができないようにするため、それを削除する前にデータを上書きするプログラムを実行します。スクラッチ時消去機能を使用して、データ・セット作成時またはスペース解放時のどちらかでシステムにデータを消去 (上書き) させることができます。システム消去は、新規データを書き込むプログラムより迅速に行われます。システム消去が失敗する場合は、削除またはスペース解放が失敗します。

スクラッチ時消去機能の目的は、解放されたトラック上のデータをどのようなホスト・ソフトウェアであろうと何も読み取れないことを保証することです。たとえ、その装置に構成ミスがあって、別ソフトウェアを搭載した別コンピューターに接続されていてもです。ただし、消去後にそのトラック上の旧データに引き続き以下のリスクが見られる場合、その内容を検討する必要があります。

v このオペレーティング・システムでは、その操作完了後も DASD サブシステムの中で非同期に操作を続行している可能性があります。この場合に、この IBM

サブシステムの電源がオン状態である限り、そのデータ検索用にソフトウェアが発行可能なコマンドなど存在しません。しかし、電源障害が発生し、このサブシステム内部のバッテリーにも障害があり、実際の消去が未完了の場合、このサブシステムが再度オンラインになった後でそのデータをソフトウェアを使って再検索可能となる場合があります。

データ・セットの保護

72 z/OS V1R10 DFSMS データ・セットの使用法

Page 97: DFSMS データ・セットの使用法

v この DASD サブシステムが非同期消去を完了した後でも、このサブシステム内の DASD に誰かが物理的なアクセスを行った場合、その人はディスクの内容をリカバリー可能な場合があります。

そのデータを完全に消去して、それによってお客様の企業が機密情報を漏えいせずにそのディスクを廃棄可能にしたい場合は、このセクションはお客様には適用できません。そうしたい場合は、ICKDSF の TRKFMT コマンドの ERASEDATA とCYCLES パラメーターの使用を検討してください。Device Support Facilities User’s

Guide and Referenceを参照してください。

RACF を使ってシステムに機密データを消去させるには、システム・プログラマーは RACF SETROPTS コマンドを使って消去機能を開始することができます。 この機能は、DASD スペースが解放されるときにそれの消去を制御します。データ・セットを削除するか、データ・セットの一部を解放するときに、スペース解放が起こります。SETROPTS はスペースを消去するために以下の方法のいずれかを選択します。

v システムは解放されたスペースをすべて消去する。

v システムは、セキュリティー・レベルが特定のレベル以上のデータ・セットでのみスペースを消去する。

v システムは、RACF データ・セット・プロファイルが ERASE オプションを指定している場合のみデータ・セット内のスペースを消去する。

v システムはスペースを消去しない。

ERASE オプションが RACF プロファイル内で設定されている場合、アクセス方式サービス・プログラム・コマンド内で NOERASE を指定することによってオプションを指定変更することはできません。

データのシステム消去DASD データ消去が有効であり、次の項目のどれかを使用する場合、システムはデータ・セット域全体を上書きします。v データ定義 (DD) ステートメントの JCL DISP パラメーター内の DELETE サブパラメーター

v TSO DELETE コマンド (非 VSAM オブジェクトの場合)

v SCRATCH マクロv IEHPROGM ユーティリティー・プログラム用の SCRATCH 制御ステートメントv アクセス方式サービス・プログラム DELETE コマンド

順次、区分、PDSE、または VSAM 拡張フォーマット・データ・セットでは、DASD データ消去が有効な場合、次のどれかを使用すると、システムは解放された区域も上書きします。

v プログラムが書き込む DD ステートメント内の JCL SPACE パラメーターのRLSE サブパラメーター

v 管理クラスでの部分解放オプション

v PARTREL マクロ

RAMAC® 仮想アレイRAMAC 仮想アレイでは、IXFP の DDSR オプションは、スクラッチ時消去機能とほとんど同じことを行います。 ストレージ管理者は DDSR を使用してディスク・

データ・セットの保護

第 5 章 データ・セットの保護 73

Page 98: DFSMS データ・セットの使用法

スペースをより効率的に管理します。 ERASE オプションを要求しない場合であっても、DDSR には解放されたトラックを通常は消去するという副次作用があります。他のタイプのディスクでは、DDSR はスクラッチ時消去機能より高速です。ただし、スクラッチ時消去がない場合、DDSR はセキュア度が下がります。消去は、データ・セット削除またはスペース解放の前には完了しないことがあります。消去が成功した後、データは圧縮された形でディスク上に物理的に残っていますが、いかなるソフトウェアによってもアクセス不能です。

DDSR がアクティブである RAMAC 仮想アレイ上でスクラッチ時消去を要求する場合、システムは消去を最適化するので、それは他の種類のディスク上よりもはるかに速く行われます。 消去は、データ・セット削除またはスペース解放の前に完了することが保証されています。成功した消去の後、データはいかなるソフトウェアによってもアクセスできません。

テープ・データの消去テープ・ボリューム上の残存データが読み取れないようにしたい場合、ボリュームを上書きするなんらかの方法をインプリメントすることができます。DFSMSrmm ユーザーは、ボリュームをスクラッチ時に使用するために解放できる前に消去しなければならないデータ・セットを識別するために、名前マスクを使用してセキュリティー・クラスを DFSMSrmm PARMLIB メンバーである EDGRMMxx の中に定義することができます。 DFSMSrmm がデータ・セットのセキュリティー・クラスを消去する必要があると判断する場合、DFSMSrmm は、データ・セットを含むボリュームについて ERASE と INIT の解放アクションを設定します。 ボリューム上のすべてのデータ・セットが有効期限切れになったとき、DFSMSrmm は、これらのアクションが確認されるまでボリュームを保持します。

残存データの上書きを自動化するには、通常の EDGINERS ジョブをスケジュールして、消去アクションが保留されているボリュームを処理します。DFSMSrmm は、処理するボリュームを選択し、オペレーターに各ボリュームをマウントするよう促します。 正しいボリュームがマウントされたことを確認した後、DFSMSrmm は、ハードウェア・セキュリティー消去機能 (サポートされている場合) を使用して、消去時にチャネルを他のアクティビティーに解放します。

ハードウェア・セキュリティー消去機能が使用可能でない場合、DFSMSrmm は、ボリュームを X'FF' のビット・パターンを使用して上書きします。 ボリュームを消去しているとき、DFSMSrmm は、それらを再初期化して正しいボリューム・ラベルが書き込まれるようにし、ボリュームは単一の操作で再使用する準備ができています。

許可プログラム機能とアクセス方式サービス・プログラム許可プログラム機能 (APF) は、機密のシステム・サービスおよびリソースの使用を許可システムおよびユーザー・プログラムに制限しています。プログラム許可については、「z/OS MVS Programming: Authorized Assembler Services Guide」を参照してください。

すべてのアクセス方式サービス・プログラム・ロード・モジュールは、SYS1.LINKLIB に含まれ、ルート・セグメント・ロード・モジュール (IDCAMS)

は、SETCODE AC(1) 属性を指定してリンク・エディットされています。

データ・セットの保護

74 z/OS V1R10 DFSMS データ・セットの使用法

Page 99: DFSMS データ・セットの使用法

APF 許可は、ジョブ・ステップのレベルで設定されます。 APF 許可ジョブ・ステップの実行中に、ロード要求が非許可ライブラリーからロードされる場合、そのタスクは異常終了します。アクセス方式サービス・プログラムの処理中に、ロード要求が非許可ライブラリーからロードされないようにしておくのは、ご使用のシステムの責任です。

以下の状況の場合、アクセス方式サービス・プログラムに対する APF 許可が無効になることがあります。

v アクセス方式サービス・プログラム・モジュールが非許可ライブラリーからロードされた。

v アクセス方式サービス・プログラムの処理中に、ユーザー・セキュリティー検査ルーチン (USVR) が、非許可ライブラリーからロードされた。

v アクセス方式サービス・プログラムの処理中に、例外処理の出口ルーチンが、非許可ライブラリーからロードされた。

v アクセス方式サービス・プログラムの処理中に、ユーザー提供の特殊なグラフィックス・テーブルが、非許可ライブラリーからロードされた。

APF 許可はジョブ・ステップ・タスクのレベルで設定されるので、非許可のアプリケーション・プログラムまたは端末モニター・プログラム (TMP) によって呼び出された場合、アクセス方式サービス・プログラムは許可されません。

システム・プログラマーは、APF 許可が TSO/E の下で実行するために必要なアクセス方式サービス・プログラムのコマンドの名前を許可コマンド・リストに入力しておく必要があります。

APF 許可プログラムから呼び出されるよう予定されているプログラムは、APF 許可とリンクまたはバインドしてはなりません。誰かがルーチンを JCL を通じて直接呼び出すことがあったとしても、それは予定されていない環境で APF 許可を使って稼働していることになります。APF 許可プログラムによって呼び出されるよう予定しているプログラムは、APF 許可ライブラリーでなければなりません。

以下の制限付きアクセス方式サービス・プログラム機能は、非許可状態では要求できません。

DEFINE ― RECATALOG パラメーターを指定する場合

DELETE ― RECOVERY パラメーターを指定する場合

EXPORT ― エクスポートされるオブジェクトがカタログである場合

IMPORT ― インポートされるオブジェクトがカタログである場合

PRINT ― 印刷されるオブジェクトがカタログである場合

REPRO ― カタログをコピーするか、カタログのアンロード / 再ロードを使用する場合

VERIFY ― カタログを検査する場合

データ・セットの保護

第 5 章 データ・セットの保護 75

Page 100: DFSMS データ・セットの使用法

上記の機能が要求され、アクセス方式サービス・プログラムがアプリケーション・プログラムまたは TSO/E 端末モニター・プログラムから呼び出される場合、呼び出し側プログラムを許可しておく必要があります。

TSO/E および ISPF の許可については、「z/OS DFSMS Storage Administration

Reference」を参照してください。

アクセス方式サービス・プログラム暗号オプションRACF などの機能を使用することによってオンライン・データに対してセキュリティーを提供できますが、これらの機能はオフラインでの保管時にはデータを保護しません。オフラインで保管された機密データは誤用される可能性があります。

暗号化技法が適切なものである場合、暗号化はオフライン・データを保護する効果的な手段です。暗号化機能は、アクセス方式サービス・プログラムの REPRO

ENCIPHER コマンドを使用することによって使用可能です。 REPRO DECIPHER

コマンドを使用してデータを正しい鍵を用いて復号するまで、データは保護されたままになります。

REPRO ENCIPHER コマンドを使用するときに、暗号鍵を管理するためにプログラム式暗号機能または統合暗号化サービス機能 (ICSF) のどちらを使用するかを指定することができます。この指定は、どちらの暗号機能を開始タスクとして実行するかに応じて決まります。 REPRO ENCIPHER および REPRO DECIPHER を使用して、機密データの簡単な暗号化と復号を行うことができます。 REPRO DECIPHER

オプションを使用してデータを正しい鍵を用いて復号するまで、データは保護されたままになります。暗号ハードウェアおよび RACF も備わっている場合は、これらの REPRO コマンドを ICSF と併用して、より複雑な暗号化と復号を行うことができます。

関連資料: REPRO コマンドを使用したデータの暗号化と復号については、「z/OS

DFSMS Access Method Services for Catalogs」を参照してください。 ICSF の使用法については、「z/OS Cryptographic Services 統合暗号化サービス機能 (ICSF) 概説」を参照してください。

データの暗号化と復号次の 3 つのタイプのオフライン環境では、機密データの暗号化はデータ・セキュリティーを強化します。

v データ・セットが別のご使用のシステムに移送される (この場合、移送中およびデータ・セットが他のロケーションに保管されている間、データ・セキュリティーが必要とされます)。

v データ・セットが永続ストレージ・ロケーションで長期間保管される。

v データ・セットが、通常使用されるサイトでオフラインで保管される。

REPRO コマンドを使用して、プレーン・テキスト (暗号化されていない) データ・セットを暗号化形式の別のデータ・セットにコピーすることができます。暗号化は、データを暗号テキストと呼ばれる判読不能な形式に変換します。続いて、暗号化データ・セットをオフラインで保管するか、または暗号化データ・セットをリモート・ロケーションに送ることができます。必要に応じて、暗号化データ・セットをオンラインに戻すことができます。また、REPRO コマンドを使用して、暗号化デ

データ・セットの保護

76 z/OS V1R10 DFSMS データ・セットの使用法

Page 101: DFSMS データ・セットの使用法

ータ・セットをプレーン・テキスト (復号された) 形式で別のデータ・セットにコピーすることにより暗号テキストからプレーン・テキストをリカバリーすることができます。

暗号化および復号は、鍵と呼ばれる 8 バイトの 2 進値に基づいています。 REPRO

DECIPHER オプションを使用すると、データが暗号化されたシステム上でデータを復号するか、あるいはデータの復号に必要な鍵を持つ別のシステム上でデータを復号することができます。

復号操作用の入力データ・セットは、REPRO によって生成されたデータ・セットの暗号化コピーでなければなりません。暗号化操作用の出力データ・セットは、VSAM 入力順、線形、または順次データ・セットにすることができます。暗号化と復号操作の両方のターゲット (出力) データ・セットは、空でなければなりません。ターゲット・データ・セットが再使用可能属性を指定して定義された VSAM データ・セットである場合、REPRO の REUSE パラメーターを使用して、それを空の状態にリセットします。

REPRO ENCIPHER と REPRO DECIPHER の両方について、入力データ・セット(INDATASET) がシステム管理されている場合、出力データ・セット(OUTDATASET) はシステム管理されても、システム管理されなくてもよく、かつカタログ化される必要があります。

REPRO ENCIPHER パラメーターは、REPRO がデータ・セットの暗号化コピーを生成することを示しています。 INFILE または INDATASET パラメーターは、プレーン・テキスト (暗号化されていない) ソース・データ・セットを識別し、割り振ります。

REPRO DECIPHER パラメーターは、REPRO がデータ・セットの復号されたコピーを生成することを示しています。OUTFILE または OUTDATASET パラメーターは、プレーン・テキスト・データを入れるためのターゲット・データ・セットを識別し、割り振ります。

78ページの図 2 は、REPRO の ENCIPHER および DECIPHER 操作に必要な入出力データ・セットのグラフィック表記です。

データ・セットの保護

第 5 章 データ・セットの保護 77

Page 102: DFSMS データ・セットの使用法

データ・セットを暗号化するとき、使用可能な区切り文字パラメーターのいずれかを、暗号化されるデータ・セットに該当する REPRO コマンド (SKIP、COUNT、FROMADDRESS、FROMKEY、FROMNUMBER、TOADDRESS、TOKEY、TONUMBER) と一緒に指定します。ただし、データ・セットの復号時には区切り文字パラメーターを指定することはできません。 DECIPHER が REPRO 区切り文字パラメーターと一緒に指定される場合、REPRO コマンドはメッセージを出して終了します。

REPRO コマンドがデータ・セットをコピーおよび暗号化するとき、暗号化データ・レコードの前にクリア・ヘッダー・データの 1 つ以上のレコードを入れます。暗号化データに先行するヘッダー・データには、暗号化データの復号に必要な情報が入っています。たとえば、次の情報があります。

v ヘッダー・レコードの数

v 1 単位として暗号化されるレコードの数

v 鍵検査データ

v 暗号化データ暗号鍵

補足事項: 暗号化操作用の出力データ・セットが圧縮フォーマット・データ・セットである場合、スペースはほとんどまたはまったく節約されません。入力データ・セットが圧縮フォーマットになっていて、かつ圧縮される場合、出力用のスペースを節約します。

VSAM データ・セットの暗号化VSAM 相対レコード・データ・セット (RRDS) が暗号化されるとき、出力データ・セットのレコード・サイズは、RRDS のレコード・サイズより少なくとも 4 バイト大きくなければなりません。(出力レコードの前に相対レコード番号を付けるには、追加の 4 バイトが必要です。) 出力 VSAM 入力順データ・セットのレコード・サイズは、DEFINE CLUSTER コマンドの RECORDSIZE パラメーターを使用して指定します。出力順次データ・セットのレコード・サイズは、出力データ・セットのDD ステートメント内の DCB LRECL パラメーターを使用して指定します。暗号化された RRDS がターゲットとしての RRDS を使用して復号される場合、オリジナ

図 2. REPRO 暗号化および復号操作

データ・セットの保護

78 z/OS V1R10 DFSMS データ・セットの使用法

Page 103: DFSMS データ・セットの使用法

ル・データ・セット内の空のスロットはすべて再設定されます。線形データ・セットが暗号化される場合、入力データ・セットと出力データ・セットの両方が線形データ・セットである必要があります。

制約事項: 代替索引を、REPRO ENCIPHER 操作の出力である VSAM 入力順データ・セットに重ねて作成してはなりません。

データ暗号鍵データ暗号化規格 (DES) を使用してデータを暗号化または復号するために、プレーン・テキスト・データ暗号鍵を使用します。 REPRO により、プレーン・テキスト・データ暗号鍵として 8 バイト値を指定することができます。データ暗号鍵を指定しない場合、REPRO は、プレーン・テキスト・データ暗号鍵として使用する 8

バイト値を提供します。 REPRO DECIPHER オプションを使用すると、データが暗号化されたシステム上でデータを復号するか、あるいはこの機能およびデータを復号するために必要なキーを持つ別のシステム上でデータを復号することができます。同じ鍵が与えられていると、暗号化と復号は逆の操作です。

REPRO コマンドを使用して ENCIPHER または DECIPHER で独自のプレーン・テキスト・データ暗号鍵を提供する場合、SYSPRINT でそのコマンドがリストされるときにその鍵を公開してしまう危険があります。この公開を避けるには、REPRO をデータ暗号鍵データ・セットに送信し、プレーン・テキスト・データ暗号鍵を取得します。

2 次鍵暗号鍵データを復号したい場合、そのデータを暗号化したデータ暗号鍵を提供する必要があります。ただし、セキュリティー対策として、データ暗号鍵を偽装形式で提供することができます。データ・セットを暗号化するとき、鍵暗号鍵の名前を提供します。REPRO コマンドは、提供された名前によって示される鍵暗号鍵を使用して、データ暗号鍵を偽装します。データ・セットを復号するとき、プレーン・テキスト・データ暗号鍵ではなく、ファイル・キーの名前および偽装されたデータ暗号鍵を提供します。このようにして、実際のプレーン・テキスト・データ暗号鍵は暴露されません。

プログラム式暗号機能または ICSF を使用して、2 次鍵暗号鍵をインストールすることができます。プログラム式暗号機能を使用する場合は、プログラム式暗号機能の鍵生成ユーティリティーを使用して鍵ペアをセットアップします。

ICSF を使用する場合は、鍵生成ユーティリティー・プログラム (KGUP) を使用して暗号化システムと復号システムの両方で鍵ペアをセットアップします。

鍵生成ユーティリティーは、ユーザーが要求する鍵暗号鍵を生成し、鍵を暗号化形式で暗号鍵データ・セット (CKDS) に保管します。鍵生成ユーティリティーは、各2 次鍵の外部名および 2 次鍵のプレーン・テキスト形式をリストします。2 次暗号鍵が、鍵が生成されたシステム以外のシステムで使用される場合は、同じプレーン・テキスト鍵暗号鍵を定義するためにこのユーティリティーを他方のシステムでも実行する必要があります。プレーン・テキスト鍵暗号鍵は、異なる鍵名を使用して他方のシステムの CKDS の中に定義することができます。独自の秘密鍵を管理したい場合は、データ暗号鍵を暗号化するのに鍵暗号鍵は使用されません。秘密データ暗号鍵のセキュア性を確保するのはお客様の責任です。

データ・セットの保護

第 5 章 データ・セットの保護 79

Page 104: DFSMS データ・セットの使用法

関連資料: KGUP を使用した鍵のセットアップの詳細については、「z/OS

Cryptographic Services ICSF Administrator’s Guide」を参照してください。

ICSF に関する REPRO ENCIPHER および DECIPHERREPRO コマンドの ENCIPHER および DECIPHER 機能を使用することを計画する際は、次の要件を承知しておく必要があります。

v ICSF オプションに関するデータ・セットに対して COMPAT(YES) をコーディングします。このオプションにより、REPRO は ICSF に関するプログラム式暗号機能マクロを呼び出すことができます。

v PCF から ICSF に移行する場合は、プログラム式暗号機能 CKDS を ICSF フォーマットに変換します。新規 ICSF ユーザーは、この変換を行う必要はありません。

v ICSF を使用する場合は、REPRO コマンドを実行する前に ICSF を開始する必要があります。プログラム式暗号機能を使用する場合は、REPRO コマンドを実行する前にプログラム式暗号機能を開始する必要があります。

データ・セットの保護

80 z/OS V1R10 DFSMS データ・セットの使用法

Page 105: DFSMS データ・セットの使用法

第 2 部 データ・セットと UNIX ファイルへの VSAM アクセス第 6 章 VSAM データ・セットの編成 . . . . . 85VSAM データ・フォーマット . . . . . . . . 85データ・セット・サイズ . . . . . . . . . 86制御インターバル . . . . . . . . . . . 86制御情報フィールド . . . . . . . . . . 86圧縮制御情報フィールド . . . . . . . . . 89制御域 . . . . . . . . . . . . . . . 89スパン・レコード . . . . . . . . . . . 89

VSAM データ・セット・タイプの選択 . . . . . 91入力順データ・セット . . . . . . . . . . 92UNIX ファイルへのシミュレートされた VSAMアクセス . . . . . . . . . . . . . . 93

UNIX ファイルのレコード処理 . . . . . . 94UNIX ファイルに関する制約事項 . . . . . 94UNIX ファイル用のサービスとユーティリティー . . . . . . . . . . . . . . . 95

キー順データ・セット . . . . . . . . . . 95フリー・スペース . . . . . . . . . . 96キーおよびスペースを増やす場合の考慮事項 97CI での論理レコードの挿入 . . . . . . . 98基本索引 . . . . . . . . . . . . . 98キー圧縮 . . . . . . . . . . . . . 99制御インターバル分割 . . . . . . . . . 99

線形データ・セット . . . . . . . . . . 99固定長相対レコード・データ・セット . . . . 99可変長相対レコード・データ・セット . . . . 100VSAM データ・セット・タイプの要約 . . . . 101

拡張フォーマット VSAM データ・セット . . . . 102拡張フォーマット・データ・セットの定義に関する制約事項 . . . . . . . . . . . . . 103VSAM データ・ストライピング . . . . . . 104データ・ストライピングの場合のレイヤー概念 . . . . . . . . . . . . . . . 106データ・ストライピングの場合の他の考慮事項 . . . . . . . . . . . . . . . 106

圧縮データ . . . . . . . . . . . . . 108VSAM データ・セット内のレコードへのアクセス 109入力順データ・セットへのアクセス . . . . . 110キー順データ・セットへのアクセス . . . . . 110キー順アクセス . . . . . . . . . . . 110キー直接アクセス . . . . . . . . . . 110スキップ順次アクセス . . . . . . . . 111アドレス・アクセス . . . . . . . . . 111

線形データ・セットへのアクセス . . . . . . 111固定長相対レコード・データ・セットへのアクセス . . . . . . . . . . . . . . . . 112キー順アクセス . . . . . . . . . . . 112スキップ順次アクセス . . . . . . . . 112キー直接アクセス . . . . . . . . . . 112

可変長相対レコード・データ・セットへのアクセス . . . . . . . . . . . . . . . . 112

キー順アクセス . . . . . . . . . . . 112スキップ順次アクセス . . . . . . . . 112キー直接アクセス . . . . . . . . . . 112

代替索引を通じてのレコードへのアクセス . . . . 112キー順データ・セットの場合の代替索引構造 . . 113入力順データ・セットの場合の代替索引構造 . . 115代替索引のビルド . . . . . . . . . . . 116代替索引の自動アップグレード . . . . . . 116

データ圧縮 . . . . . . . . . . . . . . 116

第 7 章 VSAM データ・セットの定義 . . . . . 119データおよび索引コンポーネントに対するクラスター名の使用 . . . . . . . . . . . . . . 120アクセス方式サービス・プログラムを使用したデータ・セットの定義 . . . . . . . . . . . . 120クラスターの命名 . . . . . . . . . . . 120重複データ・セット名 . . . . . . . . 121一時データ・セット名 . . . . . . . . 122

クラスター情報の指定 . . . . . . . . . 122アクセス方式サービス・プログラム・パラメーターの使用 . . . . . . . . . . . . . . 123記述的パラメーター . . . . . . . . . 123パフォーマンス・パラメーター . . . . . 124セキュリティーおよび保全性パラメーター 125

VSAM データ・セット用のスペースの割り振り 125部分リリース . . . . . . . . . . . 126小さいデータ・セット . . . . . . . . 127複数のシリンダー・データ・セット . . . . 127線形データ・セット . . . . . . . . . 128VSAM エクステントの使用. . . . . . . 128VSAM エクステント統合 . . . . . . . 129

KSDS のデータ・コンポーネント用のスペースの計算 . . . . . . . . . . . . . . . 130索引コンポーネント用のスペースの計算 . . . 130ALTER を使用したコンポーネント属性の変更 131ALTER を使用したデータ・セットの名前変更 131

JCL を使用したデータ・セットの定義 . . . . . 131VSAM データ・セットのロード . . . . . . . 132

REPRO を使用した VSAM データ・セットのコピー . . . . . . . . . . . . . . . 132プログラムを使用したデータ・セットのロード 134作業ファイルとしての VSAM データ・セットの再使用 . . . . . . . . . . . . . . . 136

データ・セットのコピーおよびマージ . . . . . 137代替索引の定義 . . . . . . . . . . . . . 138代替索引の命名 . . . . . . . . . . . . 139代替索引情報の指定 . . . . . . . . . . 139代替索引用の記述情報の指定 . . . . . . 140非固有キーを持つ代替索引の場合のRECORDSIZE の指定 . . . . . . . . . 140

代替索引のビルド . . . . . . . . . . . 141

© Copyright IBM Corp. 1987, 2008 81

Page 106: DFSMS データ・セットの使用法

代替索引の維持 . . . . . . . . . . . . 141代替索引のバックアップ . . . . . . . . 142

パスの定義 . . . . . . . . . . . . . 142ページ・スペースの定義 . . . . . . . . . . 143カタログおよびデータ・セット内の問題の検査 . . 144カタログ項目のリスト . . . . . . . . . 144データ・セットの内容の印刷 . . . . . . . 145

データ・セットの削除 . . . . . . . . . . 146

第 8 章 VSAM データ・セットの定義と操作: 例 147VSAM データ・セットを定義する例. . . . . . 148一時 VSAM データ・セットの定義の例 . . . . 150例 1: ALLOCATE を使用しての一時 VSAM データ・セットの定義 . . . . . . . . . . 150例 2: デフォルト・パラメーター値を使用しての一時データ・セットの作成 . . . . . . . . 151

代替索引とパスの定義の例 . . . . . . . . . 151JCL ステートメント . . . . . . . . . . 151コマンド . . . . . . . . . . . . . . 152

第 9 章 VSAM データ・セットの処理 . . . . . 155アクセス方式制御ブロックの作成 . . . . . . . 156出口リストの作成 . . . . . . . . . . . . 157データ・セットのオープン . . . . . . . . . 158要求パラメーター・リストの作成 . . . . . . . 159制御ブロックの内容の操作 . . . . . . . . . 161制御ブロックの生成 . . . . . . . . . . 161ACB、EXLST、および RPL フィールドの内容のテスト . . . . . . . . . . . . . . . 161ACB、EXLST、または RPL の内容の変更 . . . 162ACB、EXLST、および RPL フィールドの内容の表示 . . . . . . . . . . . . . . . 162

データ・セットへのアクセスの要求 . . . . . . 163レコードの挿入と追加 . . . . . . . . . 163入力順データ・セットへの挿入 . . . . . 163キー順データ・セットへの挿入 . . . . . 163固定長相対レコード・データ・セットへの挿入 . . . . . . . . . . . . . . . 165可変長相対レコード・データ・セットへの挿入 . . . . . . . . . . . . . . . 165線形データ・セットへの挿入 . . . . . . 165

レコードの検索 . . . . . . . . . . . . 166順次検索 . . . . . . . . . . . . . 166位置決め用の POINT マクロ . . . . . . 167直接検索 . . . . . . . . . . . . . 167

レコードの更新 . . . . . . . . . . . . 168レコード長の変更 . . . . . . . . . . 168キー順データ・セットのデータ・コンポーネントの処理 . . . . . . . . . . . . 168

レコードの削除 . . . . . . . . . . . . 169バッファー書き込みの据え置きおよび強制 . . . 169データ・バッファーの保存および位置決め . . . 169多重ストリングの処理 . . . . . . . . . 170並行要求をする . . . . . . . . . . . . 171パスを使用してのレコードへのアクセス . . . 172非同期要求をする . . . . . . . . . . . 173

非同期モードの指定 . . . . . . . . . 173非同期要求の完了の検査 . . . . . . . . 173

要求の終了 . . . . . . . . . . . . . 173データ・セットのクローズ . . . . . . . . . 174SRB またはクロスメモリー・モードでの操作. . . 175プログラムでの VSAM マクロの使用 . . . . . 176

第 10 章 VSAM パフォーマンスの最適化 . . . 179制御インターバル・サイズの最適化 . . . . . . 179制御インターバル・サイズの制限 . . . . . . 180物理ブロック・サイズとトラック容量 . . . 181トラック割り振り対シリンダー割り振り . . 181

データ制御インターバル・サイズ . . . . . . 181索引制御インターバル・サイズ . . . . . . 182VSAM は制御インターバル・サイズをどのように調整するか . . . . . . . . . . . . 183

制御域サイズの最適化 . . . . . . . . . . 183大きい制御域サイズの利点 . . . . . . . . 184大きい制御域サイズの欠点 . . . . . . . . 185

フリー・スペース分散の最適化 . . . . . . . 185フリー・スペースの最適パーセンテージの選択 187データ・セットをロードするときのフリー・スペース指定の変更 . . . . . . . . . . . . 188

非共用リソース用の入出力バッファー・スペースの決定 . . . . . . . . . . . . . . . . 189

16 MB を超えるバッファーの入手 . . . . . 190仮想記憶域制約解放 . . . . . . . . . 190記憶域使用率を低下させるための動的割り振りオプション . . . . . . . . . . . 190

システム管理バッファリングの調整 . . . . . 191処理方法 . . . . . . . . . . . . . 192内部処理技法 . . . . . . . . . . . 195ガイドラインおよび制約事項の処理 . . . . 195SMB の使用に関する一般的な考慮事項 . . . 197

並行データ・セット位置決め用のバッファーの割り振り . . . . . . . . . . . . . . . 198直接アクセス用のバッファーの割り振り . . . 198直接アクセス用のデータ・バッファー . . . 198直接アクセス用の索引バッファー . . . . . 198直接アクセス用のバッファー割り振りの例 199

順次アクセス用のバッファーの割り振り . . . 201パス用のバッファーの割り振り . . . . . . 202バッファーの獲得 . . . . . . . . . . . 202

索引オプションの使用 . . . . . . . . . . 203索引セット・レコード用の仮想記憶域の増加 . . 204制御域分割の回避 . . . . . . . . . . . 204別個のボリュームでの索引およびデータのプット 204

診断情報の入手 . . . . . . . . . . . . . 205大容量記憶システムからのマイグレーション . . . 205Hiperbatch の使用 . . . . . . . . . . . . 205

第 11 章 制御インターバルの処理 . . . . . . 207制御インターバルへのアクセス . . . . . . . 208制御情報の構造 . . . . . . . . . . . . . 209

CIDF - 制御インターバル定義フィールド . . . 211RDF - レコード定義フィールド . . . . . . 211

82 z/OS V1R10 DFSMS データ・セットの使用法

Page 107: DFSMS データ・セットの使用法

非スパン・キー順、入力順、および可変長相対レコード・データ・セット用の制御フィールド値 . . . . . . . . . . . . . . 213スパン・キー順および入力順データ・セット用の制御フィールド値 . . . . . . . . 215固定長相対レコード・データ・セット用の制御フィールド値 . . . . . . . . . . . 216

ユーザー・バッファー方式 . . . . . . . . . 216改良制御インターバル・アクセス . . . . . . . 217改良制御インターバル・アクセス用のオブジェクトのオープン . . . . . . . . . . . . 217改良制御インターバル・アクセスを使用してのデータ・セットの処理 . . . . . . . . . . 217実記憶域での制御ブロックおよびバッファーの固定 . . . . . . . . . . . . . . . . 218

共通制御ブロック (CBIC) オプション . . . . . 218

第 12 章 VSAM データ・セットの共用 . . . . 221サブタスク共用 . . . . . . . . . . . . . 222単一の制御ブロック構造の作成 . . . . . . 222排他制御競合の解決 . . . . . . . . . . 223共用リソースの排他制御でのデッドロックの防止 225データ・セット名共用 . . . . . . . . 225一貫性のある処理オプション . . . . . . 226共用サブタスク . . . . . . . . . . . 227

領域間共用 . . . . . . . . . . . . . . 227クロス領域共用オプション . . . . . . . . 227クロス領域共用中の読み取り保全性 . . . . . 229索引バッファーの無効化 . . . . . . . . 230データ・バッファーの無効化 . . . . . . 230

クロス領域共用中の書き込み保全性 . . . . . 230システム間共用 . . . . . . . . . . . . . 231制御ブロック更新機能 (CBUF) . . . . . . . 232

CBUF 処理の考慮事項 . . . . . . . . . 233共用データ・セット用のチェックポイント . . . 235

データ共用の技法 . . . . . . . . . . . . 235領域間共用 . . . . . . . . . . . . . 235システム間共用 . . . . . . . . . . . . 237VSAM 共用情報へのユーザー・アクセス . . . 238

第 13 章 VSAM データ・セット間でのリソースの共用 . . . . . . . . . . . . . . . . 239リソース・プールのプロビジョン . . . . . . . 239リソース・プールのビルド: BLDVRP . . . . 240

LSR での Hiperspace バッファーの使用 . . 240仮想リソース・プールのサイズの決定 . . . 241非オープン・データ・セットに関する情報の表示 . . . . . . . . . . . . . . 243バッファー・プールに関する統計の表示 . . 243

リソース・プールへのデータ・セットの接続:OPEN . . . . . . . . . . . . . . . 244DLVRP マクロを使用してのリソース・プールの削除 . . . . . . . . . . . . . . . 244

共用リソース用の入出力バッファーの管理 . . . . 246書き出し要求の据え置き . . . . . . . . . 246

トランザクション ID による据え置き要求の関連付け . . . . . . . . . . . . . . . 247書き込みが据え置かれたバッファーの書き込み:WRTBFR . . . . . . . . . . . . . . 247物理エラー分析ルーチンへの出口の処理 . . 249共用リソースでの JRNAD 出口の使用 . . . 249

共用リソースでの制御インターバルへのアクセス 249バッファー・プール内での RBA の位置決め:SCHBFR . . . . . . . . . . . . . 249出力用のバッファーのマーク付け: MRKBFR 250

共用リソース用の制約事項およびガイドライン . . 251

第 14 章 VSAM レコード・レベル共用の使用 253VSAM データ・セットへのアクセスの制御 . . . 253DFSMStvs および VSAM レコード・レベル共用を使用したデータ・セットへのアクセス . . . . . 253レコード・レベル共用 CF キャッシング . . . 255VSAM レコード・レベル共用の複数のロック構造 . . . . . . . . . . . . . . . . 256VSAM RLS と CICS の併用 . . . . . . . 257リカバリー可能データ・セットとリカバリー不能データ・セット . . . . . . . . . 259VSAM リカバリー可能データ・セット用のCICS トランザクション・リカバリー . . . 260

VSAM RLS の CICS 以外での使用 . . . . . 26064 ビット・アドレス可能なデータ・バッファーの使用 . . . . . . . . . . . . . . . 260

64 ビットのデータ・バッファーに対するデータ・クラスの設定 . . . . . . . . . . 261VSAM RLS データ・バッファーに対するIGDSMSxx PARMLIB 値の設定 . . . . . 261

リカバリー可能データ・セットの読み取り共用 262KSDS CI および CA 分割にまたがる読み取り共用保全性 . . . . . . . . . . . . . . 263リカバリー不能データ・セットの読み取りおよび書き込み共用 . . . . . . . . . . . . 263VSAM データ・セットへの非 RLS アクセスの使用 . . . . . . . . . . . . . . . 264RLS アクセス・ルール . . . . . . . . . 264RLS アクセスと非 RLS アクセスの比較 . . . 265共用オプション . . . . . . . . . . . 265ロック . . . . . . . . . . . . . . 265RLS によって使用されない VSAM オプション . . . . . . . . . . . . . . . 267

VSAM RLS 実行モードの要求. . . . . . . 268VSAM RLS 読み取り保全性オプションの使用 268

VSAM RLS と ESDS の併用 . . . . . . . . 270読み取り保全性の指定 . . . . . . . . . . 270ロック要求のタイムアウト値の指定 . . . . . . 271索引トラップ . . . . . . . . . . . . . 271

第 15 章 構造エラーについての VSAM キー順データ・セット・クラスターの検査 . . . . . . 273EXAMINE コマンド . . . . . . . . . . . 273データ・セットのタイプ . . . . . . . . . 273EXAMINE のユーザー . . . . . . . . . 273

第 2 部 データ・セットと UNIX ファイルへの VSAM アクセス 83

|||

Page 108: DFSMS データ・セットの使用法

EXAMINE の実行方法 . . . . . . . . . . 274INDEXTEST、DATATEST、または両方のテストを実行する決定 . . . . . . . . . . . . 274重大な INDEXTEST エラーでの DATATEST のスキップ . . . . . . . . . . . . . . 275ユーザー・カタログの検査 . . . . . . . . 275メッセージ階層の理解 . . . . . . . . . 275メッセージ印刷出力の制御 . . . . . . . . 276

EXAMINE 実行からの出力の例 . . . . . . . 276エラー・フリー・データ・セットの INDEXTESTおよび DATATEST テスト . . . . . . . . 276構造エラーを持つデータ・セットの INDEXTESTおよび DATATEST テスト . . . . . . . . 277複写キー・エラーを持つデータ・セットのINDEXTEST および DATATEST テスト . . . 278

第 16 章 VSAM ユーザー作成出口ルーチンのコーディング . . . . . . . . . . . . . . . 279出口ルーチンのコーディングについてのガイドライン . . . . . . . . . . . . . . . . . 279プログラミングに関するガイドライン . . . . . 280複数の要求パラメーター・リストまたはデータ・セット . . . . . . . . . . . . . . . 281メインプログラムに戻る . . . . . . . . . 281

バッチ指定変更用の IGW8PNRU ルーチン . . . 282レジスターの内容 . . . . . . . . . . . 283プログラミングの考慮事項 . . . . . . . . 283

データ終わりを処理するための EODAD 出口ルーチン . . . . . . . . . . . . . . . . 284レジスターの内容 . . . . . . . . . . . 284プログラミングの考慮事項 . . . . . . . . 284

EXCEPTIONEXIT 出口ルーチン . . . . . . . 285レジスターの内容 . . . . . . . . . . . 285プログラミングの考慮事項 . . . . . . . . 285

トランザクションをジャーナル記録するためのJRNAD 出口ルーチン. . . . . . . . . . . 286レジスターの内容 . . . . . . . . . . . 286プログラミングの考慮事項 . . . . . . . . 287トランザクションのジャーナル記録 . . . . 287RBA 変更 . . . . . . . . . . . . 287制御インターバル分割 . . . . . . . . 288パラメーター・リスト . . . . . . . . 290

論理エラーを分析するための LERAD 出口ルーチン 294レジスターの内容 . . . . . . . . . . . 294プログラミングの考慮事項 . . . . . . . . 294

RLSWAIT 出口ルーチン . . . . . . . . . . 295レジスターの内容 . . . . . . . . . . . 295要求環境 . . . . . . . . . . . . . . 296

物理エラーを分析するための SYNAD 出口ルーチン . . . . . . . . . . . . . . . . . 296レジスターの内容 . . . . . . . . . . . 296プログラミングの考慮事項 . . . . . . . . 297SYNAD ユーザー作成出口ルーチンの例 . . . 298

ユーザー処理用の UPAD 出口ルーチン. . . . . 299レジスターの内容 . . . . . . . . . . . 300プログラミングの考慮事項 . . . . . . . . 301

ユーザー・セキュリティー検査ルーチン . . . . 302

第 17 章 VSAM での 31 ビット・アドレッシング・モードの使用 . . . . . . . . . . . . 305VSAM のオプション . . . . . . . . . . . 305

第 18 章 VSAM 用のジョブ制御言語の使用 . . . 309JCL ステートメントとキーワードの使用 . . . . 309データ・セット名 . . . . . . . . . . . 309後処理 . . . . . . . . . . . . . . . 309

JCL での VSAM データ・セットの作成 . . . . 310一時 VSAM データ・セット . . . . . . . 313データ・セット名 . . . . . . . . . . 313割り振り . . . . . . . . . . . . . 313一時 VSAM データ・セットの制約事項 . . 313

JCL を使用して VSAM データ・セットを割り振る例 . . . . . . . . . . . . . . . 315例 1: キー順データ・セットの割り振り . . 315例 2: キーワードを使用してのシステム管理キー順データ・セットの割り振り . . . . . 316例 3: キーワード・デフォルトを使用してのVSAM データ・セットの割り振り . . . . 316例 4: 一時 VSAM データ・セットの割り振り 317例 5: すべてのデフォルトを取る一時 VSAMデータ・セットの割り振り . . . . . . . 317

既存の VSAM データ・セットの検索 . . . . . 318マイグレーションの考慮事項 . . . . . . . 318VSAM データ・セットを処理するために使用されるキーワード . . . . . . . . . . . . 318

第 19 章 キー順データ・セットの索引の処理 . . 321キー順データ・セットへのアクセス . . . . . . 321

GETIX および PUTIX を使用しての索引へのアクセス . . . . . . . . . . . . . . . 321索引コンポーネントのみへのアクセス . . . . 322基本索引 . . . . . . . . . . . . . . 322索引レベル . . . . . . . . . . . . . 323VSAM 索引トラップ . . . . . . . . . . 325

索引レコードのフォーマット . . . . . . . . 325ヘッダー部分 . . . . . . . . . . . . 326フリー制御インターバル項目部分 . . . . . . 328索引項目部分 . . . . . . . . . . . . 328

キー圧縮 . . . . . . . . . . . . . . . 329制御インターバル分割に続く索引更新 . . . . 332スパン・レコード用の索引項目 . . . . . . 333

84 z/OS V1R10 DFSMS データ・セットの使用法

Page 109: DFSMS データ・セットの使用法

第 6 章 VSAM データ・セットの編成

この章では以下のトピックを扱います。

トピック 該当ページ

VSAM データ・フォーマット 85

VSAM データ・ストライピング 104

VSAM データ・セット・タイプの選択 91

拡張フォーマット VSAM データ・セット 102

VSAM データ・セット内のレコードへのアクセス 109

代替索引を通じてのレコードへのアクセス 112

データ圧縮 116

VSAM データ・フォーマットすべての VSAM データ・セット (線形データ・セットを除く) でのデータの編成は、論理レコードとも呼ばれるレコードに配列されます。論理レコードは、VSAM

レコード管理機能から要求されるかそれに与えられるユーザー・レコードです。

VSAM データ・セットの論理レコードは、非 VSAM データ・セット内の論理レコードとは異なる方法で保管されます。VSAM は、レコードを制御インターバル内に保管します。制御インターバルは、データ・レコードおよびレコードを記述する制御情報を保管するために VSAM が使用する直接アクセス記憶装置の連続域です。直接アクセス記憶装置からレコードが検索されるたびに、レコードが入っている制御インターバル全体が仮想記憶内の VSAM 入出力バッファーに書き込まれます。必要なレコードが、VSAM バッファーからユーザー定義のバッファーまたは作業域に転送されます。図 3 は、直接アクセス記憶装置から論理レコードが検索される方法を示しています。

図 3. VSAM 論理レコード検索

© Copyright IBM Corp. 1987, 2008 85

Page 110: DFSMS データ・セットの使用法

データ・セット・サイズVSAM データ・セットの最大サイズは 4 GB (4 294 967 295 バイト) です。ただし、EXT (拡張フォーマット) の DSNTYPE を指定するデータ・クラスを使用し、拡張アドレッシング機能 (これもデータ・クラスにあります) が Y (yes) に設定されている場合は、その限りでありません。VSAM データ・セットは、ボリューム当たり 123 エクステントに拡張できます。ボリューム当たり 123 エクステントの制約以外に、 VSAM データ・セットのエクステント数に関する別の制約があり、以下のとおりです。

v 非 SMS 管理対象の場合、コンポーネント当たり最大 255 エクステントまでです。

v SMS 管理対象の場合、以下の条件を満足している必要があります。

– ストライピングされておらず、かつ、データ・クラスでエクステント制約除去パラメーターが無指定の場合、コンポーネント当たり最大 255 エクステントまでです。

– ストライピングされており、かつ、データ・クラスでエクステント制約除去パラメーターが無指定の場合、ストライプ当たり最大 255 エクステントまでです。

– データ・クラスでエクステント制約除去パラメーターが Y の値に設定されている場合、エクステント数はそのデータ・セットに対するボリューム数により制約されます。

適切な場合、VSAM はデータ・セットを拡張しようとします。 . データ・セットの拡張を試みるたびに、最大 5 のエクステントが生じる可能性があります。

関連資料: VSAM データ・セットのスペース割り振りについては、 125ページの『VSAM データ・セット用のスペースの割り振り』を参照してください。

制御インターバル制御インターバルのサイズは、VSAM データ・セットによって異なりますが、特定のデータ・セットのデータ部分内の制御インターバルは、同じ長さでなければなりません。アクセス方式サービス・プログラム DEFINE コマンドを使用して、VSAM

にデータ・セット用の制御インターバルのサイズを選択させるか、特定の制御インターバル・サイズを要求します。最良の制御インターバル・サイズの選択については、 179ページの『制御インターバル・サイズの最適化』を参照してください。

制御インターバルは、次のものから構成されます。v 論理レコードv フリー・スペースv 制御情報フィールド

線形データ・セットでは、制御インターバル・バイトはすべてデータ・バイトです。組み込み制御情報はありません。

制御情報フィールド87ページの図 4 では、2 つのタイプのフィールドから構成される制御情報が記載されています。それは、1 つの制御インターバル定義フィールド (CIDF)、および 1

VSAM データ・セットの編成

86 z/OS V1R10 DFSMS データ・セットの使用法

Page 111: DFSMS データ・セットの使用法

つ以上のレコード定義フィールド (RDF) です。

CIDF は 4 バイトの長さで、フリー・スペースの量およびロケーションが入っています。RDF は 3 バイトの長さで、レコードの長さおよび同一長さの隣接レコードの数を記述します。

複数の隣接レコードが同じ長さの場合、このグループには 2 つの RDF のみが使用されます。一方の RDF は各レコードの長さを示し、もう一方は同じ長さの連続レコードの数を示します。図 5 は、同じ長さおよび異なる長さのレコード用の RDF

を示します。

図 4. 制御インターバル・フォーマット

VSAM データ・セットの編成

第 6 章 VSAM データ・セットの編成 87

Page 112: DFSMS データ・セットの使用法

レコードが最大レコード長を超える場合、エラー・メッセージが生成されます。入力順またはキー順データ・セット、あるいは可変長 RRDS 内のレコードが最大レコード長より小さい場合、VSAM は、実際のレコード長を RDF に保管することによりディスク・スペースを節約します。ただし、固定長 RRDS では、レコードの長さは変化しません。RDF はレコード・スロットの長さを反映しており、調整できません。

図 5. 制御インターバルのレコード定義フィールド

VSAM データ・セットの編成

88 z/OS V1R10 DFSMS データ・セットの使用法

Page 113: DFSMS データ・セットの使用法

圧縮制御情報フィールド拡張フォーマット・キー順データ・セット内の圧縮データ・レコードは、非圧縮データ・レコードと異なるフォーマットを持ちます。このフォーマットには、内部圧縮情報が入っているレコード接頭部が含まれます。レコードがスパン・レコードである場合、レコードの各セグメントには、セグメントを記述するためのレコード接頭部に似た情報を持つセグメント接頭部が含まれます。非スパン・レコードの場合のレコード接頭部の長さは 3 バイトで、スパン・レコードの場合の長さは 5 バイトです。

保管レコード・フォーマットは、VSAM GET 要求の結果としてユーザーが見るデータに影響を及ぼしません。そのほか、レコードを圧縮フォーマットのデータ・セットに入れるのに特別な処理は必要ありません。

レコード接頭部が存在していても、キー順データ・セットの定義またはキー順データ・セット内のレコードへのアクセスに影響を及ぼしうる、いくつかの矛盾が生じることはありません。VSAM データ・セットが圧縮フォーマットになっている場合は、使用可能なデータを取得するには、VSAM を使用して各レコードを抽出および拡張する必要があります。圧縮データ・セットを処理するために VSAM 以外の方式が使用されており、その方式がレコード接頭部を認識しない場合、結果は予測不能であり、データが失われることがあります。 108ページの『圧縮データ』を参照してください。

制御域VSAM データ・セット内の制御インターバルは、制御域と呼ばれる、直接アクセス記憶装置の固定長連続区域にグループ化されます。VSAM データ・セットは、実際には 1 つ以上の制御域から構成されます。制御域内の制御インターバルの数は、VSAM によって固定されています。

制御域の最大サイズは 1 つのシリンダーであり、最小サイズは DASD ストレージの 1 つのトラックです。データ・セットに割り振られるスペースの量を指定するとき、制御域サイズを暗黙的に定義します。システムは、すべてのボリューム・タイプのすべての新しい割り振りに、必ず 1、3、5、7、9、または 15 トラックの拡張アドレス・ボリューム互換 CA が選択されるようにします。代替索引の定義については、 138ページの『代替索引の定義』を参照してください。CA サイズの最適化に関しては、 183ページの『制御域サイズの最適化』を参照してください。

スパン・レコード時には、レコードが、特定のデータ・セットに使用される制御インターバル・サイズより大きいことがあります。VSAM では、データ・セットを定義するときにスパン・レコードを指定できるので、そのようなレコードを分割したり、再フォーマットする必要はありません。SPANNED パラメーターによって、制御インターバル境界を超えて拡張したり、スパンしたりできます。

スパン・レコードは、データ・レコードの長さがかなり異なるとき、または平均レコード長が CI サイズと比べて大きいとき、データ・セットによって必要とされるDASD スペースの量を削減する場合があります。次の図は、スペースをより効率的に使用するためのスパン・レコードの使用を示しています。

VSAM データ・セットの編成

第 6 章 VSAM データ・セットの編成 89

|

|

|

|

|

|

|

Page 114: DFSMS データ・セットの使用法

図 6 では、各制御インターバルは 10 240 バイトの長さです。

図 6 では、制御インターバル 1 は 2000 バイトのレコードを含んでいます。制御インターバル 2 は 10 000 バイトのレコードを含んでいます。制御インターバル 3 は2000 バイトのレコードを含んでいます。全部合わせると、これら 3 つのレコードは 30 720 バイトのストレージを使用します。

図 7 には、図 6 と同じスペース所要量を持つデータ・セットが含まれますが、これにはスパン・レコードが使えます。

制御インターバル・サイズは 4096 バイトに削減されます。保管されるレコードが制御インターバル・サイズより大きい場合、レコードは制御インターバル間でスパンされます。図 7 では、制御インターバル 1 は 2000 バイトのレコードを含んでいます。制御インターバル 2、3、および 4 を合わせて 1 つの 10 000 バイト・レコードを含みます。制御インターバル 5 は 2000 バイト・レコードを含んでいます。制御インターバル・サイズを変更し、スパン・レコードを許可することにより、3

つのレコードを 20 480 バイトに保管することができ、ストレージ必要量は 10 240

バイト削減されます。

以下の規則を忘れないでください。

v スパン・レコードは、常に制御インターバル境界で開始され、単一の制御域内で複数の制御インターバルを埋めます。

v スパン・レコードを持つ圧縮データ・セットの場合、レコード接頭部の長さは 5

バイトです。追加の 5 バイトがあるのでキー・オフセットにキー長を加えたもの(つまり、相対キー位置) は CI サイズから 15 を引いたものに以下でなければなりません。

図 6. 非スパン・レコードを持つデータ・セット

図 7. スパン・レコードを持つデータ・セット

VSAM データ・セットの編成

90 z/OS V1R10 DFSMS データ・セットの使用法

Page 115: DFSMS データ・セットの使用法

v キー順データ・セットの場合、スパン・レコードのキー・フィールド全体は最初の制御インターバルに入っていなければなりません。

v スパン・レコードの最後のセグメントを含む制御インターバルは、未使用スペースも含むことがあります。未使用スペースは、スパン・レコードを拡張するためにのみ使用してください。これは、他のレコードの全部または一部を含むことはできません。

v スパン・レコードは、キー順データ・セットおよび入力順データ・セットと一緒にのみ使用することができます。

v 制御インターバルをスパンするには、データ・セットを定義するときにSPANNED パラメーターを指定する必要があります。VSAM は、制御インターバル長およびレコード長に応じて、レコードがスパンか非スパンのどちらであるかを決定します。スパン / 非スパンは、データ・クラスで指定することもできます。

v 位置指定モード (RPL での OPTCD=LOC) は、スパン・レコード用の有効な処理モードではありません。位置指定モードが使用されない場合は、ゼロ以外の戻りコードが発行されます

VSAM データ・セット・タイプの選択VSAM は、いくつかのデータ・セット・タイプをサポートします。入力順(ESDS)、キー順 (KSDS)、線形 (LDS)、固定長、および可変長相対レコード(RRDS)。データ・セット・タイプを選択する前に、以下の質問を考慮してください。v レコードに、順次、ランダム、または両方の方法でアクセスする必要がありますか?

v レコードはすべて同じ長さですか?

v レコード長が変化しますか?

v レコードをどのような頻度で移動する必要がありますか?

v レコードをどのような頻度で削除する必要がありますか?

v スパン・レコードが必要ですか?

v レコードの内容別にデータを順番に保持したいですか?

v 代替索引によってデータにアクセスしたいですか?

v アクセス方式サービス・プログラム・ユーティリティーを IBM DB2 クラスターと一緒に使用したいですか?

入力順データ・セットは、次の種類のアプリケーションの場合に最良です。

v 順次アクセスのみを必要とするアプリケーション。順次アクセスの場合、入力順データ・セットまたは可変長 RRDS を使用した方がよいです。それらは可変長レコードをサポートしており、レコードが追加されるにつれて拡張することができるからです。

v 既存の入力順データ・セットを使用する必要があるオンライン・アプリケーション。オンライン・アプリケーションで入力順データ・セットを使用したい場合は、バッチ・プログラムによってデータ・セットを順次ロードし、相対バイト・アドレス (RBA) によってデータ・セットに直接アクセスします。

キー順データ・セットは、次の種類のアプリケーションの場合に最良です。

v 各レコードがキー・フィールドを持つ必要があるアプリケーション。

VSAM データ・セットの編成

第 6 章 VSAM データ・セットの編成 91

Page 116: DFSMS データ・セットの使用法

v 直接および順次アクセスの両方を必要とするアプリケーション。

v RBA の使用をサポートしない高水準言語を使用するアプリケーション。

v オンライン・アプリケーションは、通常キー順データ・セットを使用します。

v 代替索引によってデータにアクセスしたい。

v 直接アクセスを使用する固定長 RRDS に対するキー順データ・セットの利点は、プログラミングが容易なことです。

v 圧縮データを必要とする。

線形データ・セットは、まれにしか使用されませんが、次の種類のアプリケーションの場合に最良です。

v 線形データ・セットにデータを保管する特殊なアプリケーション

v 仮想域内データ (DIV)

相対レコード・データ・セットは、次の種類のアプリケーションの場合に最良です。

v 直接アクセスのみを必要とするアプリケーション。

v レコードと相対レコード番号の間に 1 対 1 の対応があるアプリケーション。たとえば、レコードに数字キーを、値 1 から始めて順次割り当てることができます。そうすれば、RRDS に順次とキーによって直接の両方でアクセスできます。

v 固定長 RRDS は、キー順データ・セットまたは可変長 RRDS ほどストレージを使用せず、レコードを検索する速度も通常速くなります。

v レコード長が変化する場合は、可変長 RRDS を使用します。

v COBOL アプリケーションには可変長 RRDS を使用できます。

入力順データ・セット入力順データ・セットは、順次 (非 VSAM) データ・セットに似ています。スパンまたは非スパンにすることができるレコードを含みます。図 8 が示すように、レコードは、論理レコード内のキー・フィールドによってではなく、データ・セットへの入力順に並んでいます。

レコードは、データ・セットの末尾のみに追加されます。既存のレコードは削除できません。レコードを削除したい場合は、そのレコードに非アクティブとしてフラグを立てる必要があります。VSAM に関する限り、レコードは削除されません。レコードは更新できますが、長くすることはできません。入力順データ・セット内のレコードの長さを変更するには、データ・セットの末尾に (新規レコードとして) 保管するか、非アクティブとしてフラグを立てたか、もはや不要になった同じ長さのレコードの代わりに保管する必要があります。

R5

R1 R2 R3

R4

図 8. 入力順データ・セット

VSAM データ・セットの編成

92 z/OS V1R10 DFSMS データ・セットの使用法

Page 117: DFSMS データ・セットの使用法

レコードがロードまたは追加されると、VSAM はその相対バイト・アドレス (RBA)

を示します。RBA は、データ・セットの先頭からの論理レコードの相対位置です。データ・セットの最初のレコードの RBA は 0 です。2 番目以降のレコードに対する RBA の値は、ファイルがスパンされているかどうか、ならびにファイルについて手動または自動で選択された制御インターバル・サイズによって決まります。一般に、固定長レコードおよび既知の制御インターバル・サイズの場合を除き、各レコードの RBA を予測することは不可能です。VSAM ファイルの内部フォーマットのさらに詳しい説明については、 85ページの『VSAM データ・フォーマット』を参照してください。

これらの RBA を追跡するために代替索引をビルドします。入力順データ・セットには索引コンポーネントが含まれていませんが、代替索引を指定できます。138ページの『代替索引の定義』を参照してください。図 9 は、 92ページの図 8

で示されたデータ・セットについてレコード長および対応する RBA を示しています。

表 5 では、入力順データ・セットを処理するための操作およびアクセスのタイプをリストします。

表 5. 入力順データ・セットの処理

操作 順次アクセス 直接アクセス

データ・セットのロード

あり なし

レコードの追加 レコードを追加するには、最後のレコードの後のスペースが使用されます

なし

レコードの検索 あり (入力シーケンスに戻されます) あり (RBA によって)

レコードの更新 あり、ただしレコード長は変更できません あり (RBA によって)、ただしレコード長は変更できません

レコードの削除 レコードは削除できませんが、そのスペースを同じ長さのレコードに再利用できます

レコードは削除できませんが、そのスペースを同じ長さのレコードに再利用できます

UNIX ファイルへのシミュレートされた VSAM アクセスJCL DD ステートメント、SVC 99、または TSO ALLOCATE コマンドでPATH=pathname を指定することによって UNIX ファイル (ESDS としてシミュレートされています) へのシミュレートされた VSAM アクセスを行うことができます。 MVS アクセス方式を使用してのアクセスについての情報は、24 ページの『アクセス方式を使用した UNIX ファイルの処理』を参照してください。

図 9. 入力順データ・セットの RBA の例

VSAM データ・セットの編成

第 6 章 VSAM データ・セットの編成 93

Page 118: DFSMS データ・セットの使用法

シミュレートされた VSAM を使用するとき、アプリケーション・プログラムはUNIX ファイルを ESDS とみなします。

実際には UNIX ファイルを ESDS として保管するわけではないので、システムはESDS のすべての特性をシミュレートできるわけではありません。 特定のマクロおよびサービスは、UNIX ファイルを処理するときに非互換性または制約事項を持ちます。

関連資料: VSAM インターフェースおよび UNIX ファイルについては、 567ページの『第 28 章 z/OS UNIX ファイルの処理』および「z/OS DFSMS Macro

Instructions for Data Sets」を参照してください。

UNIX ファイルのレコード処理レコード境界はバイナリー・ファイル内では保持されません。テキスト・ファイルは、EBCDIC であると想定されます。位置変更機能 (POINT、CLOSE TYPE=T、GET DIRECT など) は、FIFO または文字特殊ファイルの場合は許可されません。

あるファイルをバイナリー・ファイルとしてアクセス時は、可能な最大レコードとして各レコード長が RPL に戻されますが、最終レコードは例外となることがあります。最終レコード長は、直前の GET または READ マクロの後に残存しているものすべてです。

ファイルがテキスト・ファイルとしてアクセスされるときには、ファイルの中のレコードがゼロ・バイトであれば (テキスト区切り文字の後にテキスト区切り文字が続く場合)、戻されるレコードは 1 個のブランクとなります。レコードがバッファーの長さより長い場合は、GET (ACB の場合) に対してエラーの戻りコードが生じます。

UNIX ファイルに関する制約事項以下の VSAM 制約事項が UNIX ファイルに関連しています。

v ESDS のみがシミュレートされます。

v 複数の読み取りプロセス、およびもちろん FIFO の場合の読み取りプロセスと書き込みプロセスを除き、ファイル共用またはバッファー共用はサポートされません。

v STRNO > 1 はサポートされません。

v チェーン RPL はサポートされません。

v 共用リソースはサポートされません。

v 更新および逆方向処理はサポートされません。

v FIFO と文字特殊ファイルの場合の直接処理または POINT はサポートされません。

v UNIX ファイル用のカタログ・サポートはありません。そのファイルが入ったデータ・セットをカタログしても構いません。

v 代替索引はサポートされません。

v JRNAD、UPAD、または EXCEPTION 出口用のサポートはありません。

v クロスメモリー・サポートはありません。

v ERASE、VERIFY、および SHOWCAT はサポートされません。

VSAM データ・セットの編成

94 z/OS V1R10 DFSMS データ・セットの使用法

Page 119: DFSMS データ・セットの使用法

v 特定の SHOWCB 要求はダミー値を戻します。

v 可変長バイナリー・レコードは、バイト・ストリームへの変換中にレコード境界を保存しません。読み取り中、最後のものを除く各レコードは、最大長と想定されます。

v 最大レコード・サイズを指定するには、JCL DD ステートメント、SVC 99、または TSO ALLOCATE でLRECL キーワードをコーディングします。指定されない場合、デフォルトは 32 767 です。

v 同期 PUT または非同期 PUT に関連した CHECK から戻った場合、書き込まれたデータが出力装置に同期化されたことは保証されません。データ同期を保証するには、ENDREQ、CLOSE、または CLOSE TYPE=T を使用します。

v CI (制御インターバル) アクセス (MACRF=CNV) はありません。

UNIX ファイル用のサービスとユーティリティー次のサービスとユーティリティーが UNIX ファイルをサポートします。

v アクセス方式サービス・プログラム (IDCAMS) REPRO ― DD 名による REPRO

がサポートされており、QSAM を使用します。

v IDCAMS PRINT ― DD 名による PRINT がサポートされており、QSAM を使用します。 ’RBA OF RECORD’ を表示する代わりに、PRINT は ’RECORD

NUMBER’ を表示します。

v DEVTYPE マクロ ― DEVTYPE は、UNIX ファイルに関連した情報を提供します。 DD ステートメントに PATH を指定した場合は、DEVTYPE が戻りコードの 0、UCBTYP のシミュレート値である X’00000103’、および最大ブロック・サイズの 32 760 を戻します。

次のサービスとユーティリティーは UNIX ファイルをサポートしていません。 特に表記されていない限り、これらのサービスとユーティリティーは、UNIX ファイル用に発行されるときはエラーまたは予測不能な値を戻します。

v IDCAMS ― ALTER、DEFINE、DELETE、DIAGNOSE、EXAMINE、EXPORT、IMPORT、LISTCAT、および VERIFY

v OBTAIN、SCRATCH、RENAME、TRKCALC、および PARTREL マクロ

上記のマクロには DSCB または UCB が必要です。z/OS UNIX ファイルにはDSCB または有効な UCB がありません。

ガイドライン: ISPF ブラウズ/編集は UNIX ファイルをサポートしていませんが、OBROWSE コマンドは使用することができます。

キー順データ・セットキー順データ・セットでは、論理レコードは、キーと呼ばれるフィールドにより昇順照合シーケンスでデータ・セット内に置かれます。図 10 は、キーに、従業員番号や送り状番号など、データ・セット内でのレコードの照合位置を決定する固有値が含まれていることを示します。

VSAM データ・セットの編成

第 6 章 VSAM データ・セットの編成 95

Page 120: DFSMS データ・セットの使用法

キーは各レコード内の同じ位置になければならず、キー・データは連続していなければならず、各レコードのキーは固有でなければなりません。それが指定された後、キーの値は変更できませんが、レコード全体は消去または削除することができます。圧縮データ・セットの場合、キー自体およびキーの前のデータは圧縮されません。

新規レコードがデータ・セットに追加されるとき、図 11 に示されるように、キーによる照合シーケンスで挿入されます。

表 6 では、キー順データ・セットを処理するための操作およびアクセスのタイプをリストします。

表 6. キー順データ・セットの処理

操作 順次アクセス直接またはスキップ順次アクセス

データ・セットのロード あり なし

レコードの追加 あり (レコードはキー順で書き込まなければなりません)

あり (レコードはキーによってランダムに追加されます)

レコードの検索 あり (レコードはキー順で戻されます)

あり (キーによって)

レコードの更新 あり あり

レコードの削除 あり あり

フリー・スペースキー順データ・セットが定義されるとき、レコードを挿入または長くすることができるようにするため未使用スペースをデータ・セット中に散在させることができます。未使用スペースは、フリー・スペースと呼ばれます。新規レコードを制御イン

図 10. キー順データ・セットのレコード

図 11. キー順データ・セットへのレコードの挿入

VSAM データ・セットの編成

96 z/OS V1R10 DFSMS データ・セットの使用法

Page 121: DFSMS データ・セットの使用法

ターバル (CI) に追加するか、既存のレコードを長くすると、後続レコードは次のフリー・スペースに移動し、新規または長くされたレコードに場所を空けます。逆に、レコードが削除または短くされるとき、放棄されたスペースは、後で使用するためにフリー・スペースとしてレクラメーション処理されます。データ・セットを定義するときは、FREESPACE パラメーターを使用して、データ・セットが初期にロードされるときに、各 CI の何パーセントをフリー・スペースとして取っておくかを指定します。

各 CA 内で、空き CI を使用することによりフリー・スペースを予約します。CA

にフリー・スペースがある場合は、追加のレコードを挿入したり、既存のレコードを長くしたいときに制御域を分割するのを避けるのが容易になります。データ・セットを定義するときに、FREESPACE パラメーターを使用して、制御域の何パーセントをフリー・スペースとして取っておくか指定します。

CI および CA フリー・スペースの最適量の指定については、 185ページの『フリー・スペース分散の最適化』を参照してください。

キーおよびスペースを増やす場合の考慮事項KSDS および VRRDS 用の VSAM 基本索引の構造は、単一の CA 内の各 CI にポインターを提供するために、索引の最下位レベルであるシーケンス・セットに単一索引レコードを作成するようにビルドされています。各項目には、その制御インターバル内に含むことができる一番高いキーを表す圧縮値が含まれています。その制御域内で一番高いキーを持つレコードを含む制御インターバル用に保管された値は、その制御域に含めることができる一番高いレコード・キー値を表します。単一制御インターバルからレコードがすべて削除されると、現行の高キー値は、シーケンス・セット・レコード内の制御インターバルの項目にもはや関連付けられていません。それは「フリー」制御インターバルとなり、そこにはその制御域用のキーの範囲内の任意のキーを含むレコードを挿入することができます。これは、CI レクラメーション処理と呼ばれます。

ただし、それが制御域内の最後の空の制御インターバルであるときは、これが適用されません。その場合、その制御インターバル用の高キー値は保持され、その制御域に挿入できる任意のレコードについて一番高いキーになります。制御域には、制御インターバル用に提供されるレクラメーション処理機能に匹敵する機能はありません。制御域をレクラメーション処理しないことの通常の結果として時折観察されることは、データ・セットのサイズが増え続けることです。これにより、アプリケーションが昇順のキーを使用してレコードを継続的に追加することになり、その後、別のまたは同じアプリケーションが、何らかのタイプの処理を行った後、古いレコードを削除します。削除処理中、その CA と関連付けられた高キー値が保持され、その高キーの範囲内に入るレコードのみが、その制御域に挿入される資格を持ちます。

レコード・キーは、常に高くなりつつあるので、追加のレコードをこれらの空の制御域に挿入する資格はありません。その結果、スペースの大部分が空の制御インターバルで占められたデータ・セットが発生します。そのような状態が検出されるとき、ユーザーがこのスペースをレクラメーション処理するために持つ唯一のオプションは、データ・セットを再ビルドすることです。これには、データ・セットの論理コピーに続いて、古いデータ・セットの削除および論理コピーからの再ロード操作が必要になります。

VSAM データ・セットの編成

第 6 章 VSAM データ・セットの編成 97

Page 122: DFSMS データ・セットの使用法

詳しくは、「z/OS DFSMS Managing Catalogs」を参照してください。

CI での論理レコードの挿入図 12 は、KSDS または可変長 RRDS 内で論理レコードを挿入または削除するために CI フリー・スペースがどのように使用されるかを示しています。

2 つの論理レコードが 図 12 で示される最初の制御インターバルに保管されます。各論理レコードは、キー (11 および 14) を持ちます。2 番目の制御インターバルは、論理レコードに 12 のキーを挿入すると何が起こるかを示しています。

1. 論理レコード 12 が CI 内の正しい照合シーケンスに挿入されています。

2. CI 定義フィールド (CIDF) は、使用可能なフリー・スペースの縮小を示すために更新されます。

3. 対応するレコード定義フィールド (RDF) が、新規レコードの長さを記述するための該当するロケーションに挿入されます。

レコードが削除されるときは、手順が逆に行われ、論理レコードによって占められるスペースおよび対応する RDF がフリー・スペースとして取り戻されます。

基本索引キー順データ・セットには、キー値をデータ・セット内の論理レコードの相対ロケーションに関連付ける基本索引が常にあります。基本索引、または単に索引は、次のものを見つけ出す際に 2 つの用途があります。v レコードを挿入する際の照合位置v 検索用のレコード

初期にデータ・セットをロードするとき、レコードはキー順で VSAM に提示しなければなりません。データ・セットにレコードがロードされるにつれ、キー順データ・セット用の索引が VSAM によって自動的に作成されます。

データ制御インターバルが論理レコード、フリー・スペース、および制御情報で完全にロードされると、VSAM は索引内に項目を作成します。項目は、データ制御インターバル内の最高可能キーとその制御インターバルの先頭へのポインターから構成されます。

図 12. CI への論理レコードの挿入

VSAM データ・セットの編成

98 z/OS V1R10 DFSMS データ・セットの使用法

Page 123: DFSMS データ・セットの使用法

キー圧縮索引項目内のキーは、VSAM によって圧縮フォーマットで保管されます。キーを圧縮すると、キーの前後から、それを隣接キーから区別するために必要でないバイトが除去されます。圧縮は、索引項目でのキーのサイズを減らすことにより索引を小さくするのに役立ちます。VSAM は、キー順データ・セット内でキー圧縮を行います。これは、データ・セットが圧縮フォーマットになっているかどうかとは独立しています。

制御インターバル分割データ・セットが最初にロードされるとき、データ・レコードのキー順およびそれらの物理的順序は同じです。ただし、データ・レコードが挿入されるときに、制御インターバル分割が起こることがあり、制御インターバルがキー順と異なる物理順序を持つようになります。

線形データ・セット線形データ・セットは、制御インターバル・サイズが 4096 バイトの増分で 4096

バイトから 32 768 バイトである VSAM データ・セットです。線形データ・セットは、組み込み制御情報は持ちません。線形データ・セットはすべて、データ・バイトです。

線形データ・セットは、特定の制約事項付きで、入力順データ・セットとして処理されます。線形データ・セットは、制御情報 (CIDF および RDF) を含んでいないので、それが個々のレコードを含んでいるかのようにアクセスすることはできません。以下の手法を使用して線形データ・セットにアクセス可能です。

v VSAM

v 制御インターバル・サイズが 4096 バイトの場合は、DIV。

v 制御インターバル・サイズが 4096 バイトの場合は、ウィンドウ・サービス。

関連資料: 仮想域内データ (DIV) の使用法については、「z/OS MVS プログラミング:アセンブラー・サービス ガイド」を参照してください。

固定長相対レコード・データ・セット固定長 RRDS は、いくつかの固定長スロットから構成されます。固定長 RRDS はNUMBERED および平均および最大長が同じである RECORDSIZE を使用して定義されます。

各スロットには、固有な相対レコード番号があり、スロットは昇順相対レコード番号によって順序付けられます。各レコードはスロットを占め、そのスロットの相対レコード番号によって保管および検索されます。データ・レコードの位置は固定されており、その相対レコード番号は変更できません。固定長 RRDS は、基本索引または代替索引を持つことはできません。

スロットはデータを含んでいるか、空であることができるので、固定長 RRDS 内の他のデータ・レコードの位置に影響を及ぼすことなく、データ・レコードを挿入または削除することができます。レコード定義フィールド (RDF) は、スロットが占められているか、空であるのかを示します。データ・セット全体は固定長スロットに分割されるので、フリー・スペースは 固定長 RRDS 内では提供されません。

VSAM データ・セットの編成

第 6 章 VSAM データ・セットの編成 99

Page 124: DFSMS データ・セットの使用法

固定長 RRDS では、各制御インターバルには、同じ数のスロットが含まれています。スロットの数は、制御インターバル・サイズおよびレコード長によって決定されます。図 13 は、少数のレコードを追加した後の固定長 RRDS の構造を示しています。各スロットは、相対レコード番号および RDF を持ちます。表 7 は、RRDS

処理に使用可能なアクセス・オプションを示しています。

表 7 は、固定長 RRDS を処理するための操作およびアクセスのタイプをリストします。

表 7. RRDS 処理

操作 順次アクセス直接またはスキップ順次アクセス

データ・セットのロード あり あり

レコードの追加 あり (空のスロットが使用されます)

あり (空のスロットが使用されます)

レコードの検索 あり あり (相対レコード番号によって)

レコードの更新 あり あり

レコードの削除 あり (削除されたレコードによって譲られたスロットを再利用できます)

あり (削除されたレコードによって譲られたスロットを再利用できます)

可変長相対レコード・データ・セット可変長 RRDS (VRRDS) は、固定長 RRDS と似ていますが、可変長レコードを含んでいる点だけが異なります。各レコードは、固有の相対レコード番号を持ち、昇順相対レコード番号順序で配置されます。各レコードは、その相対レコード番号を使用して保管および検索されます。固定長 RRDS とは異なり、可変長 RRDS にはス

図 13. 固定長相対レコード・データ・セット

VSAM データ・セットの編成

100 z/OS V1R10 DFSMS データ・セットの使用法

Page 125: DFSMS データ・セットの使用法

ロットがありません。レコードの相対レコード番号は変更できません。そのレコードが消去されるときは、新規レコードに相対レコード番号を再利用することができます。

可変長 RRDS は昇順の相対レコード番号順序で順次ロードする必要があります。可変長 RRDS を定義するためには、NUMBERED および RECORDSIZE を指定します。RECORDSIZE 内の平均レコード長および最大レコード長は異なっている必要があります。

フリー・スペースを使用して、可変長 RRDS レコードを挿入したり、長くしたりします。レコードが削除または短くされるとき、譲られたスペースは、後で使用するためにフリー・スペースとしてレクラメーション処理されます。データ・セットを定義するときは、FREESPACE パラメーターを使用して、データ・セットが初期にロードされるときに、各制御インターバルおよび制御域の何パーセントをフリー・スペースとして取っておくかを指定します。 98ページの『CI での論理レコードの挿入』は、論理レコードを挿入および削除するためにフリー・スペースがどのように使用されるかを示します。

可変長 RRDS は、スパン・レコードおよび代替索引を持つことはできません。VRRDS は RRDS として処理される KSDS なので、基本索引が作成されます。

可変長 RRDS のパフォーマンスは、キー順データ・セットと類似しており、固定長RRDS の場合より遅くなります。表 8 は、キー順データ・セットおよび直接またはスキップ順次アクセスの場合に使用可能な操作を示しています。

表 8. 可変長 RRDS 処理

操作 順次アクセス直接またはスキップ順次アクセス

データ・セットのロード あり、昇順相対レコード番号順序

なし

レコードの追加 あり あり (フリー・スペースが使用されます)

レコードの検索 あり あり (相対レコード番号によって)

レコードの更新 あり あり

レコードの削除 あり (フリー・スペースがレクラメーション処理されます)

あり (フリー・スペースがレクラメーション処理されます)

VSAM データ・セット・タイプの要約表 9 は、各データ・セット・フォーマットが提供するものを要約しています。

表 9. ESDS、KSDS、固定長 RRDS、可変長 RRDS、および線形データ・セットの比較

ESDS KSDS 固定長 RRDS 可変長 RRDS 線形データ・セット

レコードは入力順になっています

レコードはキー・フィールドによる照合シーケンスになっています

レコードは相対レコード番号順になっています

レコードは相対レコード番号順になっています

レコード・レベルでの処理はありません

RBA によって直接アクセス

キーまたは RBA によって直接アクセス

相対レコード番号によって直接アクセス

相対レコード番号によって直接アクセス

仮想域内データ (DIV)

を使用してのアクセス

VSAM データ・セットの編成

第 6 章 VSAM データ・セットの編成 101

Page 126: DFSMS データ・セットの使用法

表 9. ESDS、KSDS、固定長 RRDS、可変長 RRDS、および線形データ・セットの比較 (続き)

ESDS KSDS 固定長 RRDS 可変長 RRDS 線形データ・セット

代替索引が許可されます1

代替索引が許可されます

代替索引が許可されません

代替索引が許可されません

代替索引が許可されません

レコードの RBA は変更できません

レコードの RBA は変更できます

レコードの相対レコード番号は変更できません

レコードの相対レコード番号は変更できません

レコード・レベルでの処理はありません

データ・セットの末尾のスペースは、レコードの追加に使用されます

フリー・スペースは、レコードを挿入したり、長くしたりするのに使用されます

データ・セット内の空スロットは、レコードの追加に使用されます

フリー・スペースは、レコードを挿入したり、長くしたりするのに使用されます

レコード・レベルでの処理はありません

レコードは削除できないが、そのスペースを同じ長さのレコードに再利用できます 1

削除または短縮されたレコードによって解放されたスペースがフリー・スペースになります

削除されたレコードによって解放されたスロットを再利用できます

削除または短縮されたレコードによって解放されたスペースがフリー・スペースになります

レコード・レベルでの処理はありません

スパン・レコードが許可されます

スパン・レコードが許可されます

スパン・レコードはありません

スパン・レコードはありません

スパン・レコードはありません

拡張フォーマットが許可されます1

拡張フォーマットまたは圧縮が許可されます

拡張フォーマットが許可されます

拡張フォーマットが許可されます

拡張フォーマットが許可されます

注:

1. HFS データ・セットの場合はサポートされません。

拡張フォーマット VSAM データ・セットVSAM 拡張フォーマット・データ・セットは、以下のオプション属性の任意の組み合わせが可能です。

v データ・ストライピング。これはストライピング・データ・セットと呼ばれます。

v データ圧縮。これは圧縮フォーマット・データ・セットと呼ばれます。

v 拡張アドレッシング機能 (extended addressability)。

例えば、あるデータ・セットが、拡張アドレッシング機能を使用して、ストライピングされ、圧縮されたフォーマットのデータ・セットでも構いません。ストライピングすると、順次アクセス時間を短縮できます。圧縮すると、ディスク・スペースを削減できます。拡張アドレッシング機能を使用して、データ・セットの最大サイズを大きくすることができます。

VSAM データ・セットは、次の拡張機能に適格になるためにも拡張フォーマットでなければなりません。v 部分スペース解放 (PARTREL)

v 候補ボリューム・スペースv システム管理バッファー方式 (SMB)

VSAM 用の拡張フォーマット・データ・セットは、キー順データ・セット、入力順データ・セット、可変長または固定長相対レコード・データ・セット、および線形データ・セットの場合に割り振ることができます。

VSAM データ・セットの編成

102 z/OS V1R10 DFSMS データ・セットの使用法

Page 127: DFSMS データ・セットの使用法

特定のタイプのキー順データ・セットは除外されます。次のデータ・セットは、拡張フォーマットを持つことができません。v カタログv 他のシステム・データ・セットv 一時データ・セット

注: 各ページ・スペースの最大ページ・スロット数は 16M です。サイズにかかわらず、ページ・スペースには、それらが SMS 管理ボリュームにあるか非 SMS

管理ボリュームにあるかについての、拡張フォーマットおよび拡張アドレス可能属性が割り当てられています。

データ・セットが拡張フォーマットとして割り振られるときは、データ・セットおよび索引は拡張フォーマットです。拡張フォーマット・クラスターに関連した代替索引も拡張フォーマットです。

データ・セットが拡張フォーマット・データ・セットとして割り振られる場合は、32 バイト (x’20’) が各物理ブロックに追加されます。その結果、制御インターバル・サイズが計算されるか明示的に指定されるときに、この物理ブロック・オーバーヘッドは、データ・セットに実際に必要とされるスペース量を増やすことがあります。図 14 は、示されているとおりのスペースのパーセントの増加を示しています。他の制御インターバルでは、必要とされるスペースが増えることにはなりません。

拡張フォーマット・データ・セットの定義に関する制約事項拡張フォーマット・データ・セットの定義には、次の制約事項が適用されます。

v 拡張フォーマット・データ・セットでは、索引にデータを組み込んだり (IMBED

パラメーター)、データをキー範囲に分割したり (KEYRANGES パラメーター) できません。

v 拡張フォーマット・データ・セットは、SMS により管理される必要があります。下記の内容は、VSAM データ・セットに対して拡張フォーマットを要求するためのメカニズムです。

– DSNTYPE の値が EXT およびそのサブパラメーター R または P (各々、R

は必須、P は優先を表す) のデータ・クラスを使用。

- 3390 直接アクセス装置

制御インターバル・サイズ  必要となる追加スペース512 2.1%1536 4.5%18432 12.5%

- 3380 直接アクセス装置

制御インターバル・サイズ  必要となる追加スペース512 2.2%1024 3.2%

図 14. 制御インターバル・サイズ

VSAM データ・セットの編成

第 6 章 VSAM データ・セットの編成 103

|

|

|

|

Page 128: DFSMS データ・セットの使用法

– DD ステートメント上で DSNTYPE=EXTREQ (拡張フォーマットが必須) または DSNTYPE=EXTPREF (拡張フォーマットを優先) を指定。

– DD ステートメント上で LIKE= パラメーターを指定して、既存の拡張フォーマット・データ・セットを参照。

注: 各ページ・スペースの最大ページ・スロット数は 16M です。サイズにかかわらず、ページ・スペースには、それらが SMS 管理ボリュームにあるか非SMS 管理ボリュームにあるかについての、拡張フォーマットおよび拡張アドレス可能属性が割り当てられています。

v 改良制御インターバル (ICI) 処理のオープンは、拡張フォーマット・データ・セット用には許可されていません。

VSAM データ・ストライピングストライピング・データを使用するには、データ・セットは拡張フォーマットになっていなければなりません。ストライピング・データの場合、すべての VSAM データ・セット編成がサポートされています。v キー順データ・セット (KSDS)

v 入力順データ・セット (ESDS)

v 相対レコード・データ・セット (RRDS)

v 可変長相対レコード・データ・セット (VRRDS)

v 線形データ・セット (LDS)

ストライピング・データ・セットは、順次アクセス方式または VSAM 用の CI の場合のように、複数の装置にわたるトラックを持っています。このフォーマットにより、複数のトラックまたは CI 内のレコードに対する単一のアプリケーション要求を、複数のボリュームへの並行入出力要求によって満たすことができます。その結果、アプリケーションへの単一の入出力パスより高い率でのデータ転送を達成することにより、順次データ・アクセスのパフォーマンスが改善されます。単一のアプリケーション要求を満たすための複数の装置への入出力のスケジューリングは、入出力パケットと呼ばれます。

VSAM データ・ストライピングは、複数のストライプを使用して定義されるデータ・セットにのみ適用されます。1 つのストライピングを使用してリストされるデータ・セットは、拡張フォーマットになっており、ストライピング・データ・セットであるとは見なされません。

図 15 は、ストライピング VSAM データ・セット用の複数のボリューム上での 1

次および 2 次のスペース割り振りを示しています。

VSAM データ・セットの編成

104 z/OS V1R10 DFSMS データ・セットの使用法

|

|

|

|

Page 129: DFSMS データ・セットの使用法

図 16 は、4 ストライプ VSAM データ・セット用の複数のボリューム上の制御域内の CI の例を示しています。

図 15. ストライピング・データ・セットの場合の 1 次および 2 次スペース割り振り

図 16. 制御域内の制御インターバル

VSAM データ・セットの編成

第 6 章 VSAM データ・セットの編成 105

Page 130: DFSMS データ・セットの使用法

データ・ストライピングの場合のレイヤー概念レイヤーは、ストライピングされたデータに一般的に関連した概念です。ストライピングされた環境でのレイヤーは、ストライピングの合計数を構成するボリュームの関係として定義されます。つまり、入出力パケットの一部として関係するボリュームのことです。この入出力パケットを構成する、ストライプ・カウントの最大値までのボリュームが変化すると、これは別のレイヤーを構成します。ストライピング・データに関しては、この入出力パケットを構成するボリュームは、データがストライピングされていない場合のマルチボリュームに対立するものとしての、単一ボリューム・データ・セットと同じコンテキストで見る必要があります。データ・セットが 2 番目のレイヤーに拡張すると、これはマルチボリューム非ストライプ・データ・セットと類似したものになります。もう一度言いますが、ストライピングの定義は、1 より大きいストライピング・カウントです。順次アクセス方式 (SAM)

は、マルチレイヤーの概念をサポートしていません。 VSAM はマルチレイヤーをサポートしています。図 17 は、4 ストライプ・データ・セットを持つレイヤーの概念の例です。

データ・ストライピングの場合の他の考慮事項データ・ストライピングを使用するには、スペース割り振り、制御域サイズ、および処理も考慮する必要があります。

ストライピング VSAM データ・セットの場合のスペース割り振り: ストライピング拡張フォーマット・データ・セットについて説明された一般規則は、ストライピング VSAM データ・セットに適用されます。システムがストライピング拡張フォーマット・データ・セット用にスペースを割り振るとき、システムは 1 次量をボリュームの間で分割します。1 次量が割り切れない場合は、システムはその量の端数を切り上げます。拡張フォーマット・データ・セットの場合、ボリューム上の 1 次スペースがいっぱいになると、システムはそのボリューム上でスペースを割り振ります。その量は、2 次量をストライプ数で除算したものです。2 次量が均等に分割

図 17. レイヤー (4 ストライプ・データ・セット)

VSAM データ・セットの編成

106 z/OS V1R10 DFSMS データ・セットの使用法

|

|

|

|

|

|

|

|

Page 131: DFSMS データ・セットの使用法

されない場合は、システムは量の端数を切り上げます。1 つ以上の拡張アドレス・ボリュームが選択されている場合は、システムは、各ストライプごとにスペースの追加切り上げを実行しなければならない場合があります。この状態は、そのストライプの要求スペース量の、次のマルチシリンダー単位への切り上げを引き起こす可能性がある、シリンダー管理スペースが選択されている場合に発生することがあります。残りのストライプのスペース量は、すべてのストライプに同じ量のスペースが含まれるように調整されます。これは、システムが各ストライプへ正確な量を割り当てようとして失敗した場合にのみ起こります。

いくつかの追加の考慮事項は、VSAM 用の制御域 (CA) に適用されます。すべての割り振りは、CA 境界に丸める必要があります。ストライプの数は、制御域のサイズに影響を及ぼし、ストライプ・カウントと CA 要件を満たすために必要な割り振り数量がいくつか食い違うことになります。CA サイズの考慮事項に関する以下のセクションでは、これをさらに詳しく説明します。

データ・セット拡張はすべて、ストライピング・データ・セット拡張について説明されたとおりです。基本的に、システムは 2 次量をストライプ・カウントで除算し、結果を各ストライプに割り振ります。これは、関連したストレージ・クラス(SC) から保証スペース属性を指定したデータ・セットを含むすべての場合と、新規レイヤーへの拡張で発生します。

制約事項: ボリューム高頻度使用 RBA 統計は、マルチストライプ VSAM データ・セットには適用されません。高頻度使用 RBA は、この値がすべてのストライプに対して同じであるため、最初のストライプ用のボリューム上で保持されます。

ゼロの 2 次割り振り数量: 非ストライプ VSAM データ・セットにゼロの 2 次割り振り数量を指定すると、拡張は、1 次スペース量を使用して、新規ボリュームで割り振りを発生させます。この機能は、複数のボリュームにデータを広げるのにも使用することができます。ストライピング VSAM データ・セットの場合、拡張はストライピング別に発生し、ゼロの 2 次スペース量が指定されているときは 1 次スペース量を使用して、同じボリュームまたは新規ボリューム上で発生することができます。

増加したエクステント数: ストライピング VSAM データ・セットは、データ・コンポーネント内のストライピング当たり 255 エクステントを持つことができます。データ・コンポーネントのみがストライピングされます。ストライピング VSAM

データ・セットの索引コンポーネントの限度は、ストライピングに関係なく 255 エクステントです。ストライピング VSAM データ・セットは最大 16 のストライプを持つことができるので、ストライピング・データ・コンポーネントは最大 4080

のエクステントを持つことができます。

z/OS V1R7 から始まりますが、ストライプ当たり 255 エクステント制約は除去されます。これを可能にするには、データ・クラスのエクステント制約除去パラメーターを Y (yes) に設定します。デフォルト値は N (no) です。これにより 255 エクステントの制約が強制されます。V1R7 以前のシステムとデータ・セットを共用する可能性がある場合は、この制約を強制的に実施する必要があります。

割り振りの制約事項: ストライピング・データ・セットの場合、スペース制約軽減属性は考慮されません。データ・ストライピングの意図された目的は、次のとおりです。

VSAM データ・セットの編成

第 6 章 VSAM データ・セットの編成 107

|

|

|

|

|

|

|

|

Page 132: DFSMS データ・セットの使用法

v ボリュームを通じてデータを広げる (ストライピングされたデータ用の基本インプリメンテーション技法)。

v >5 エクステント緩和 (指定とは無関係に、VSAM ストライピング・データ用のすべての割り振りについてあります)。

制御域サイズの計算: ストライピング VSAM データ用の制御域 (CA) サイズは、ストライプ・カウントの係数です。VSAM ストライピング・データ・セットは、最大 16 のカウントまでストライピングできます。割り振りの最小サイズは、単一トラックです。最大 CA サイズは、シリンダーです。従来、最大 CA サイズは、3390 の形状に基づき、15 トラックのはずでした。ストライピング VSAM データ・セットについてそれが変更され、最大 CA サイズは最大ストライプ・カウント(16) を受け入れなければならないようになり、最大 CA は 16 トラックになりました。

必要とされる割り振り数量は、ユーザー指定の量とストライプ・カウントの両方になりました。例として、TRACKS(1 1) のスペースの指定を取ると次の結果が出ます。

v 非ストライプの従来の VSAM の場合、制御域サイズが 1 トラックだと、1 次および 2 次割り振り数量は 1 トラックになります。

v ストライプ・カウント = 最大 =16 のストライピング・データ・セットの場合、制御域サイズは 16 トラックで、1 次および 2 次数量は 16 トラックになります。

CA をそれより大きくすると、CA 内の制御インターバル (CI) の数が大きくなり、索引を含むデータ・セット編成(KSDS および VRRDS)内の索引の項目の数が大きくなり、最終結果は索引 CI サイズを大きくしなければならなくなります。

ストライピング・データ・セットの場合の処理の考慮事項: 拡張フォーマットのデータ・セットに関連した基本制約事項は、ストライピング・データ・セットにも適用されます。

そのほかに、VSAM ストライピング・データ・セットは、次のものをサポートしていません。v RLS アクセスv 改良 CI アクセス

代替索引の場合、データも索引もストライピングされません。

圧縮データ圧縮を使用するには、データ・セットは拡張フォーマットになっていなければなりません。拡張フォーマット・キー順データ・セットしか圧縮することができません。圧縮データ・レコードは、圧縮データを保持しないデータ・セット内の論理レコードとはフォーマットが少し異なっています。これにより、データ・セットの定義またはデータ・セット内のレコードへのアクセスに影響を及ぼしうる、いくつかの矛盾が発生します。

v 非スパン・データ・セットの場合の最大レコード長は、圧縮データを含まないデータ・セットの最大レコード長より 3 バイト少なくなります (この長さはCISIZE-10 です)。

VSAM データ・セットの編成

108 z/OS V1R10 DFSMS データ・セットの使用法

Page 133: DFSMS データ・セットの使用法

v 別のレコードの相対バイト・アドレス (RBA)、またはバッファー内の次のレコードのアドレスは、現行のレコードの長さまたは VSAM に提供されるレコードの長さを使用して決定することはできません。

v 保管されたレコードの長さは、長さの変更を指定しなくてもレコードを更新するときに変更されることがあります。

v キーおよびキーの前のデータは圧縮されません。大きなキー長および RKP データ長を持つデータ・セットは、圧縮用のよい候補でない場合があります。

v 基本クラスターのデータ・コンポーネントのみが、圧縮に適格です。代替索引は、圧縮に適格でありません。

v グローバル共用リソース (GSR) オプションは、圧縮データ・セット用に許可されません。

これらの矛盾のほかに、データ・セットは割り振り時に圧縮を許可するには、特定の要件を満たす必要があります。

v データ・セットの 1 次割り振りは、少なくとも 5 MB、2 次割り振りが指定されない場合は 8 MB である必要があります。

v 指定される最大レコード長は、少なくともキー・オフセットとキー長と 40 バイトを加えたものである必要があります。

v 圧縮データ・セットは、SMS 管理される必要があります。VSAM データ・セット用の圧縮を要求するメカニズムは、SMS データ・クラス COMPACTION=Y パラメーターを通じてです。

スパン・レコード・データ・セットでは、キー・オフセットとキー長を加えたものが制御インターバル・サイズから 15 を引いたもの以下である必要があります。キーに関するこれらの指定は、代替キーおよび基本キーに適用されます。

圧縮データ・セットは、VERIFY および VERIFY REFRESH 処理を除き、制御インターバル (CI) 処理を使用してはアクセスできず、改良制御インターバル (ICI) 処理用にオープンすることはできません。圧縮データ・セットは、データ・クラスを使用するだけでなく、LIKE キーワードを使用して作成することができます。

VSAM データ・セット内のレコードへのアクセスアドレス順次およびアドレス直接アクセスは、次のタイプのデータ・セットに使用できます。v 入力順データ・セットv キー順データ・セット

キー順次、キー直接、およびスキップ順次アクセスは、次のタイプのデータ・セットに使用できます。v キー順データ・セットv 固定長 RRDS

v 可変長 RRDS

すべてのタイプの VSAM データ・セットは、線形を含めて、制御インターバル・アクセスによってアクセスできますが、これは非常に特定のアプリケーションにだけ使用されます。CI モード処理は、圧縮データ・セットにアクセスするときは、許可されません。データ・セットは、VERIFY および VERIFY REFRESH 処理を許可

VSAM データ・セットの編成

第 6 章 VSAM データ・セットの編成 109

Page 134: DFSMS データ・セットの使用法

するためにのみ CI モード処理用にオープンできます。制御インターバル・アクセスについては、 207ページの『第 11 章 制御インターバルの処理』に説明があります。

入力順データ・セットへのアクセス入力順データ・セットは、アドレスによって順次または直接にアクセスされます。アドレス順次処理を使用して、昇順相対バイト・アドレス (RBA) シーケンスでレコードを処理するとき、VSAM は保管されたシーケンスでレコードを自動的に検索します。

入力順データ・セットからレコードに直接アクセスするには、レコード用の RBA

を検索引数として提供する必要があります。RBA の取得については、 92ページの『入力順データ・セット』を参照してください。

スキップ順次処理は、入力順データ・セットの場合はサポートされていません。

キー順データ・セットへのアクセスキー順データ・セットのレコードにアクセスする最も効果的な方法は、関連付けられた基本索引を使用してキーによって行うことです。

キー順アクセス順次アクセスは、キー順データ・セットをロードしたり、既存のデータ・セット内のレコードを検索、更新、追加、および削除するのに使用されます。アクセスのモードとして順次を指定するとき、VSAM は索引を使用して、キーによって昇順または降順でデータ・レコードにアクセスします。レコードを検索するとき、VSAM はシーケンス内の次の論理レコードを自動的に入手するので、キー値を指定する必要はありません。

順次処理は、データ・セット内のどこからでも開始できます。位置決めはいつでも必要とされるわけではありません (たとえば、データ・セットの最初の使用は最初のレコードから開始します) が、位置決めは次の方法のいずれかを使用して指定するのが最良です。

v POINT マクロを使用する。

v 注釈ストリング位置決め (NSP) を使用して直接要求を発行し、要求パラメーター・リストを MODCB マクロで『直接』から『順次』または『スキップ順次』に変更する。

v MODCB を使用して、要求パラメーター・リストを最後のレコード (LRD)、逆方向 (BWD)、および直接 NSP に変更してから、RPL を SEQ、BWD、およびSEQ に変更する。

順次アクセスによって、索引を 2 回以上検索するのを避けることができます。複数のデータ・レコードに昇順キー順序でアクセスするには、順次の方が直接より速くなります。

キー直接アクセス直接アクセスは、レコードを検索、更新、削除、および追加するために使用されます。直接処理が使用されるとき、VSAM は索引を最高レベルの索引セット・レコードから、アクセスされる各レコード用のシーケンス・セットへと検索します。ラン

VSAM データ・セットの編成

110 z/OS V1R10 DFSMS データ・セットの使用法

Page 135: DFSMS データ・セットの使用法

ダム・キーを使用した単一レコードの検索は、直接処理を使用した場合より通常速く行われます。処理される各レコードごとにキー値を提供する必要があります。

検索処理の場合は、全キーまたは総称キーを提供します。総称キーは、全キーの高位部分です。たとえば、全キー値とは無関係に、キーが総称キー AB で開始するすべてのレコードを検索することができます。直接アクセスによって、レコードの総数の小さなパーセントを処理するためにデータ・セット全体を順次検索するのを避けることができます。

スキップ順次アクセススキップ順次アクセスは、レコードを検索、更新、削除、および追加するために使用されます。アクセスの方式としてスキップ順次が指定されている場合、VSAM は選択されたレコードを検索しますが、キー値の昇順に行います。スキップ順次処理によって、データ・セットまたはレコードを次の非効率的な方法で検索するのを避けることができます。

v レコードの総数の小さなパーセントを処理するためにデータ・セット全体を順次検索する

v 希望のレコードを直接検索する。これによって、各レコードごとに基本索引が最上位から最下位レベルへと検索することができます。

アドレス・アクセスキー順データ・セットにアクセスするもう一つの方法は、論理レコードの RBA を検索引数として使用する、アドレス・アクセスです。キー順データを処理するためにアドレス・アクセスを使用する場合、制御インターバル分割が発生するかレコードが追加、削除、またはサイズ変更されるときに、RBA が変化する可能性があることに注意する必要があります。圧縮データ・セットを使う場合、圧縮レコードのRBA は予測不能です。したがって、アドレスによるアクセスは、通常の使用ではお勧めできません。

線形データ・セットへのアクセス線形データ・セットのアクセスには、VSAM、DIV マクロ、またはウィンドウ・サービスを使用できます。

線形データ・セットをアクセスするためのウィンドウ・サービスの下記一群の機能は、「 z/OS MVS プログラミング:アセンブラー・サービス ガイド」および「z/OS MVS プログラミング: アセンブラー・サービス 解説書 ABE-HSP」に記載があります。

v CSRIDAC -- データ・オブジェクトに対する要求または終了アクセス

v CSRVIEW -- オブジェクトの表示

v CSREVW -- オブジェクトの表示とその順次アクセス

v CSRREFR -- オブジェクトの最新表示

v CSRSCOT -- スクロール域でのオブジェクト変更内容の保存

v CSRSAVE -- 永続オブジェクトに対して行われた変更の保存

関連資料: 仮想域内データ (DIV) の使用法については、「z/OS MVS プログラミング:アセンブラー・サービス ガイド」を参照してください。

VSAM データ・セットの編成

第 6 章 VSAM データ・セットの編成 111

Page 136: DFSMS データ・セットの使用法

固定長相対レコード・データ・セットへのアクセス固定長 RRDS 用の検索引数としては、常に相対レコード番号が使用されます。

キー順アクセス固定長 RRDS の順次処理は、入力順データ・セットの順次処理と同じです。空スロットは、VSAM によって自動的にスキップされます。

スキップ順次アクセススキップ順次処理は直接要求と同様に処理されますが、VSAM が索引したばかりのレコードに対するポインターを保持する点だけが異なります。後続レコードを検索するときに、検索は、データ・セットの先頭からではなく、ポインターから開始されます。レコードは昇順に検索されなければなりません。

キー直接アクセス固定長 RRDS は、相対レコード番号をキーとして提供することによって直接処理できます。VSAM は、相対レコード番号を RBA に変換し、要求されたレコードを含む制御インターバルを判別します。空としてフラグが立てられているスロット内のレコードが要求される場合、該当レコードなし条件が戻されます。RBA 値を使用して、固定長 RRDS 内のレコードを要求することはできません。

可変長相対レコード・データ・セットへのアクセス可変長 RRDS 用の検索引数としては、相対レコード番号が使用されます。

キー順アクセス可変長 RRDS の順次処理は、入力順データ・セットの場合と同じです。検索の際、存在しない相対レコード番号はスキップされます。挿入する際、相対レコード番号が提供されない場合、VSAM は、次の使用可能な相対レコード番号を使用します。

スキップ順次アクセススキップ順次処理は、可変長 RRDS レコードを検索、更新、削除、および追加するために使用されます。レコードは昇順に検索されなければなりません。

キー直接アクセス可変長 RRDS は、相対レコード番号をキーとして提供することによって直接処理できます。レコードを特定の相対レコード位置に保管したい場合は、直接処理を使用して、希望する相対レコード番号を割り当てます。VSAM は、相対レコード番号を使用して、要求されたレコードを含む制御インターバルを見つけます。RBA 値を使用して、可変長 RRDS 内のレコードを要求することはできません。

代替索引を通じてのレコードへのアクセスアクセス方式サービス・プログラムを使用して、基本クラスターと呼ばれる、キー順または入力順データ・セットを通しての 1 つ以上の代替索引を定義およびビルドすることができます。代替索引では、複数のキーを使用することによってレコードにアクセスすることができます。代替索引は、キー順データ・セットの基本索引と同じ方法でレコードにアクセスします。代替索引では、異なるアプリケーションについて同じ情報の複数のコピーを保管する必要はありません。代替索引は、基本ク

VSAM データ・セットの編成

112 z/OS V1R10 DFSMS データ・セットの使用法

Page 137: DFSMS データ・セットの使用法

ラスター内のすべてのレコードからビルドされます。ただし、基本クラスター内の特定レコードのみから代替索引をビルドすることは不可能です。

固有である必要がある基本キーとは異なり、代替索引のキーは、基本クラスター内の複数のレコードを参照することができます。複数のレコードをポイントする代替キー値は、非固有です。代替キーが 1 つのレコードのみをポイントしている場合は、そのポインターは固有です。

制約事項: 代替索引データ・レコードに関連付けられた非固有ポインターの最大数は、32 767 を超えることはできません。

代替索引は、線形データ・セット、RRDS、または再使用可能データ・セット(REUSE 属性を指定して定義されたデータ・セット) の場合はサポートされません。代替索引の定義およびビルドについては、 138ページの『代替索引の定義』を参照してください。

代替索引は、キー順データ・セットです。これは、索引コンポーネントとデータ・コンポーネントから構成されます。データ・コンポーネント内のレコードには、代替キーと、基本クラスター内のデータへの 1 つ以上のポインターが含まれます。入力順基本クラスターの場合、ポインターは RBA 値です。キー順基本クラスターの場合は、ポインターは基本キー値です。

代替索引のデータ・コンポーネント内の各レコードは、可変長であり、ヘッダー・データ、代替キー、および基本データ・レコードへの少なくとも 1 つのポインターを含んでいます。ヘッダー・データは固定長であり、次の情報を提供します。v 代替索引データ・レコードが基本キーまたは RBA ポインターのどちらを含んでいるか

v 代替索引データ・レコードが固有または非固有キーのどちらを含んでいるかv 各ポインターの長さv 代替キーの長さv ポインターの数

キー順データ・セットの場合の代替索引構造114ページの図 18 は、非固有キーがキー順データ・セットに接続されている代替索引の構造を示しています。この例では、営業員名は代替キーです。カスタマー番号は基本キーです。

VSAM データ・セットの編成

第 6 章 VSAM データ・セットの編成 113

Page 138: DFSMS データ・セットの使用法

BEN の代替キーを指定してレコードにアクセスすることを要求する場合、VSAM

は次のことを行います。

1. VSAM は、代替索引の索引コンポーネントをスキャンし、BEN より大きいか等しい値を探します。

2. 項目 FRED は、VSAM を代替索引内のデータ制御インターバルにポイントします。

3. VSAM は、代替索引データ制御インターバルをスキャンして、検索引数に一致する項目を探します。

4. 見つかったとき、項目 BEN は関連付けられたキー 21 を持ちます。キー 21

は、VSAM を基本クラスターの索引コンポーネントにポイントします。

5. VSAM は、索引コンポーネントをスキャンして、検索引数 21 より大きいか等しい項目を探します。

6. 検索項目 38 は、VSAM を基本クラスター内のデータ制御インターバルにポイントします。21 のキーを持つレコードは、アプリケーション・プログラムに渡されます。

RBA は常にフルワード・バイナリー整数として書き込まれます。

図 18. キー順データ・セットの場合の代替索引構造

VSAM データ・セットの編成

114 z/OS V1R10 DFSMS データ・セットの使用法

Page 139: DFSMS データ・セットの使用法

入力順データ・セットの場合の代替索引構造図 19 は、入力順データ・セットに接続された代替索引の構造を示しています。この例では、営業員名は代替キーです。

BEN の代替キーを指定してレコードにアクセスすることを要求する場合、VSAM

は次のことを行います。

1. VSAM は、代替索引の索引コンポーネントをスキャンし、BEN より大きいか等しい値を探します。

2. 項目 FRED は、VSAM を代替索引内のデータ制御インターバルにポイントします。

3. VSAM は、代替索引データ制御インターバルをスキャンして、検索引数に一致する項目を探します。

4. 見つかったとき、項目 BEN は関連付けられたポインター 400 を持ち、これは基本クラスター内の RBA をポイントしています。

5. VSAM は、基本クラスターからの X'400' の RBA を使ってレコードを検索します。

図 19. 入力順データ・セットの場合の代替索引構造

VSAM データ・セットの編成

第 6 章 VSAM データ・セットの編成 115

Page 140: DFSMS データ・セットの使用法

代替索引のビルド代替索引をビルドするとき、代替キーは、固定長と各レコード内での固定位置を持つ、基本データ・セットのレコード内の任意のフィールドにすることができます。代替キー・フィールドは、スパン・レコードの最初のセグメントでなければなりません。代替キーのデータ・コンポーネント内のキーは圧縮されません。キー全体は、代替索引データ・レコード内で表されます。

指定された代替キーへの検索は、この代替キーを含むすべての基本クラスター・レコードを読み取ります。たとえば、 114ページの図 18 および 115ページの図 19

は、1 人の営業員が何人かのカスタマーを持つことを示しています。キー順データ・セットの場合、いくつかの基本キー・ポインター (カスタマー番号) が代替索引データ・レコード内にあります。基本データ・セット内の代替キー (営業員の名前)

の各オカレンスごとに 1 つずつあります。入力順データ・セットの場合、いくつかの RBA ポインターが代替索引データ・レコード内にあります。基本データ・セット内の代替キー (営業員の名前) の各オカレンスごとに 1 つずつあります。ポインターは到着時刻によって配列されています。

基本クラスターを代替索引を通じてアクセスできるようにする前に、パスを定義しておく必要があります。パスによって、特定の代替索引を通じて基本データにアクセスする方法が提供されます。パスを定義するには、アクセス方式サービス・プログラム・コマンド DEFINE PATH を使用します。

代替索引の定義については、 138ページの『代替索引の定義』を参照してください。パスの定義については、 142ページの『パスの定義』を参照してください。

代替索引の自動アップグレードVSAM は、基本 VSAM クラスターに対して定義されているすべての代替索引のアップグレードを完了するのに必要なリソースの数を判別します。リソースの数が不十分な場合は、要求は失敗し、アプリケーションは失敗した要求を再試行することができます。

データ圧縮データを圧縮するかどうか決定するには、次のガイドラインと規則を考慮してください。

v 既存のデータ・セットが 4 ギガバイトの VSAM サイズ限界に近づいているとき、または容量の制約があるときは、圧縮します

v SMS 管理されるデータのみが圧縮に適格です

v データ・セットは拡張フォーマット・キー順データ・セットでなければなりません

v 制御インターバル・アクセスは許可されません

v 圧縮は、位置指定モード (OPTCD=LOC) で処理されるときは、過大な量のストレージを必要とする場合があります。

v GSR オプションは、圧縮データ・セット用に許可されません。

VSAM データ・セットの編成

116 z/OS V1R10 DFSMS データ・セットの使用法

Page 141: DFSMS データ・セットの使用法

アプリケーションを圧縮処理に変換できるのは、アプリケーションが、データの構造またはタイプに基づいて大幅に圧縮可能となりうるデータを使用している場合です。1 つの考慮事項は、データ・レコードの長さである場合があります。

v レコードが制御インターバルのサイズと比べて大きくなることがあります。

v データのランダム構造のために、制御インターバル・サイズを小さくした方が好ましいことがあります。

v 圧縮データ・レコードがなく、より小さな制御インターバル・サイズが使用されるとき、レコードの長さはスパン・データ・セットを必要とすることがあります。圧縮を使用しないとき、スパン・データ・セット内に置かれたレコードが制御インターバルをスパンする可能性は少なくなります。その結果、レコードをGET または PUT するために必要とされる入出力の量が減るため、VSAM がデータを処理するときのパフォーマンスは改善されます。

DFSMSdss、REPRO、および圧縮フォーマットのデータを持つデータ・セットについて DASD への直接入出力を行う他の物理データ・コピー/移動プログラム以外のプログラムは、データ保全性を損なう可能性があります。 これらのプログラムは、圧縮データの拡張を許可するために VSAM キー・アクセスを使用してデータにアクセスする場合は変更する必要があります。

VSAM データ・セットの編成

第 6 章 VSAM データ・セットの編成 117

Page 142: DFSMS データ・セットの使用法

118 z/OS V1R10 DFSMS データ・セットの使用法

Page 143: DFSMS データ・セットの使用法

第 7 章 VSAM データ・セットの定義

この章では以下のトピックを扱います。

トピック 該当ページ

データおよび索引コンポーネントに対するクラスター名の使用 120

アクセス方式サービス・プログラムを使用したデータ・セットの定義 120

JCL を使用したデータ・セットの定義 131

VSAM データ・セットのロード 132

データ・セットのコピーおよびマージ 137

代替索引の定義 138

ページ・スペースの定義 143

カタログおよびデータ・セット内の問題の検査 144

データ・セットの削除 146

この章では、VSAM データ・セットを定義する方法を説明します。 他の章では、例および関連情報を提供します。

v VSAM データ・セットを定義する例は、 147ページの『第 8 章 VSAM データ・セットの定義と操作: 例』を参照してください。

v VSAM データ・セットの定義例については、「z/OS DFSMS Access Method

Services for Catalogs」を参照してください。

v RLS を使用したデータ・セットの定義については、 265ページの『ロック』を参照してください。

VSAM データ・セットは、アクセス方式サービス・プログラム・コマンドまたはJCL 動的割り振りのどちらかを使用して定義されます。以下に、VSAM データ・セットの定義の要約を記載します。

1. VSAM データ・セットはカタログ化しなければなりません。新規カタログを使用したい場合は、アクセス方式サービス・プログラム・コマンドを使用して、カタログを作成します。カタログを定義する手順は、「z/OS DFSMS Managing

Catalogs」に説明があります。

2. TSO ALLOCATE コマンド、アクセス方式サービス・プログラム ALLOCATE

または DEFINE CLUSTER コマンド、動的割り振り、または JCL を使用して、カタログ内で VSAM データ・セットを定義します。動的割り振りまたは JCL

を使用して VSAM データ・セットを定義できるようにする前に、ご使用のシステムで SMS をシステムにしておく必要があります。動的割り振りおよび JCL

は、アクセス方式サービス・プログラムと一緒に使用できる DEFINE オプションの大部分をサポートしていません。

3. アクセス方式サービス・プログラム REPRO コマンドまたは独自のロード・プログラムを使用してデータ・セットをロードします。

© Copyright IBM Corp. 1987, 2008 119

Page 144: DFSMS データ・セットの使用法

4. オプションにより、代替索引を定義し、それらを基本クラスターに関連付けます。これを行うには、アクセス方式サービス・プログラム DEFINE

ALTERNATEINDEX、DEFINE PATH、および BLDINDEX コマンドを使用します。

これらのステップのいずれかの後、アクセス方式サービス・プログラム LISTCAT

および PRINT コマンドを使用して、定義、ロード、または処理されたものを検査します。 LISTCAT および PRINT コマンドは、問題を識別および訂正するのに便利です。

データおよび索引コンポーネントに対するクラスター名の使用キー順データ・セットの場合、クラスターはデータ・コンポーネントと索引コンポーネントの組み合わせです。クラスターは、索引およびデータ・コンポーネントを独自の名前を持つ単一のコンポーネントとして扱う方法を提供します。各コンポーネントに名前を付けることもできます。固定長 RRDS、入力順データ・セット、および線形データ・セットは、索引コンポーネントを持たないクラスターと見なされます。整合性を持たせるため、これらのデータ・セットを処理するには通常、クラスター名が使用されます。

アクセス方式サービス・プログラムを使用したデータ・セットの定義VSAM データ・セットは、DEFINE CLUSTER コマンドまたは ALLOCATE コマンドを使用して定義できます。クラスターが定義されるとき、VSAM は次のカタログ項目を使用してクラスターを記述します。v クラスター項目は、クラスターを単一のコンポーネントとして記述します。v データ項目は、クラスターのデータ・コンポーネントを記述します。v キー順データ・セットの場合、索引項目はクラスターの索引コンポーネントを記述します。

クラスターの属性はすべて、カタログに記録されます。カタログに保管されている情報は、データ・セットを管理して、VSAM クラスターまたは個々のコンポーネントにアクセスするために必要な詳細を提供します。

DEFINE CLUSTER を使用する場合、データおよび索引コンポーネントの属性は、クラスターの属性から個別に指定することができます。

v 属性が、データおよび索引コンポーネントではなくクラスターについて指定されている場合、クラスターの属性 (パスワードおよび USVR セキュリティー属性を除く) は、コンポーネントに適用されます。

v データまたは索引コンポーネントに適用される属性がクラスターとコンポーネントの両方に適用される場合、コンポーネントの指定はクラスターの指定を指定変更します。

ALLOCATE を使用する場合、属性はクラスター・レベルでのみ指定できます。

クラスターの命名クラスターを定義するとき、クラスター用の名前を指定します。通常、クラスター名は JCL で dsname として与えられます。8 つを超える文字を含むクラスター名は、ピリオドによって区切る必要があります。ピリオド間では 1 から 8 文字を指

VSAM データ・セットの定義

120 z/OS V1R10 DFSMS データ・セットの使用法

Page 145: DFSMS データ・セットの使用法

定できます。単一のセグメントを持つ名前は、非修飾名として呼び出されます。 2

つ以上のセグメントを持つ名前は、修飾名と呼ばれます。修飾名の各セグメントは、修飾子と呼ばれます。

オプションにより、クラスターのコンポーネントの名前を付けることができます。入力順クラスターまたは線形データ・セットのデータ・コンポーネント、またはキー順クラスターのデータおよび索引コンポーネントに名前を付けると、コンポーネントを個別に処理しやすくなります。

VSAM データ・セットまたは代替索引を定義するときにデータまたは索引コンポーネント名を明示的に指定しない場合、VSAM は名前を生成します。また、ユーザー・カタログを定義するとき、VSAM はユーザー・カタログ用の索引名のみを生成します (ユーザー・カタログの名前はデータ・コンポーネント名でもあります)。VSAM は、次のフォーマットを使用して、システム管理および非システム管理の両方のデータ・セット用の名前を生成します。

1. 名前の最後の修飾子が CLUSTER である場合は、最後の修飾子を、データ・コンポーネントの場合は DATA で、索引コンポーネントの場合は INDEX で置き換えます。

クラスター名 = SALES.REGION2.CLUSTER生成されたデータ名 = SALES.REGION2.DATA生成された索引名 = SALES.REGION2.INDEX

2. あるいは、クラスター名が 38 文字より小か等しい場合は、データ・コンポーネントの場合はクラスター名の末尾に .DATA を、索引コンポーネントの場合は.INDEX を付加します。

クラスター名 = DEPT64.ASSET.INFO生成されたデータ名 = DEPT64.ASSET.INFO.DATA生成された索引名 = DEPT64.ASSET.INFO.INDEX

3. あるいは、クラスター名が 39 から 42 文字の場合は、データ・コンポーネントの場合はクラスター名の末尾に .D を、索引コンポーネントの場合は .I を付加します。

クラスター名 = DEPTABCD.RESOURCE.REGION66.DATA1234.STUFF生成されたデータ名 = DEPTABCD.RESOURCE.REGION66.DATA1234.STUFF.D生成された索引名 = DEPTABCD.RESOURCE.REGION66.DATA1234.STUFF.I

4. あるいは、名前が 42 文字より長く、最後の修飾子が CLUSTER でない場合は、クラスターの最初の (N-1) 修飾子、代替索引、または最初の 4 つの修飾子までのユーザー・カタログ名を使用し、5 つの修飾子の名前を生成するのに必要なだけ 8 文字の修飾子を付加します。

クラスター名 = DIV012.GROUP16.DEPT98.DAILYLOG.DEC1988.BACK生成されたデータ名 = DIV012.GROUP16.DEPT98.DAILYLOG.TY7RESNO生成された索引名 = DIV012.GROUP16.DEPT98.DAILYLOG.YIIQHNTR

名前が生成された後、VSAM はカタログを検索し、名前が固有であることを確認します。重複する名前が検出される場合、VSAM は、固有な名前が生成されるまで、4 で概説されたフォーマットを使用して新規の名前を生成し続けます。

重複データ・セット名VSAM は、2 つのオブジェクトを同じカタログ内で同じ名前でカタログ化しないようにします。また、VSAM は、オブジェクトの名前を変更して、その新規の名前が同じカタログ内の別のオブジェクトの名前と重複することもないようにします。ただし、VSAM は異なるカタログ間での名前の重複は防げません。複数のカタログが

VSAM データ・セットの定義

第 7 章 VSAM データ・セットの定義 121

Page 146: DFSMS データ・セットの使用法

ある場合、あるカタログ内のデータ・セット名が別のカタログ内で重複することがないようにする必要があります。マルチレベル別名機能は、データ・セット名をただ一つのカタログに割り当てます。ただし、検索された別名レベルの数が変更される場合、重複するデータ・セット名が発生する恐れがあります。別名検索レベルの数が変更される場合、レベルが元に戻されるまで、前の名前をマルチレベル別名機能を使用して見つけ出すことはできません。「z/OS DFSMS Managing Catalogs」を参照してください。

「z/OS DFSMS Access Method Services for Catalogs」では、定義する予定のカタログ項目を入れるためにシステムに使用可能なカタログのいずれかが選択される順序が説明されています。オブジェクトを定義するときに、システムが選択するカタログは、そのオブジェクトを入れたいカタログであることを確認する必要があります。

ユーザー・カタログがシステムにインポートされるときに、データ・セット名の重複は防げません。インポートされたカタログが、システム内の別のカタログですでに存在する項目名を含んでいるか判別する検査は行われません。

一時データ・セット名アクセス方式サービス・プログラム ALLOCATE または TSO ALLOCATE コマンドを使用して、一時システム管理 VSAM データ・セットを定義できます。一時システム管理データ・セットは、JCL を通じて直接割り振ることもできます。

一時 VSAM データ・セットでは、データ・セット名を指定する必要はありません。データ・セット名を指定する場合は、& または && で始めなければなりません。

DSNAME(&CLUSTER)

ALLOCATE コマンドを使用して一時システム管理 VSAM データ・セットを定義することについての情報は、 150ページの『一時 VSAM データ・セットの定義の例』を参照してください。一時データ・セットの使用に関する制約事項についての情報は、 313ページの『一時 VSAM データ・セット』を参照してください。

クラスター情報の指定クラスターを定義するときは、特定の記述的、パフォーマンス、セキュリティー、および保全性の情報を直接指定できます。他のソースはユーザーが省略する情報を提供するか、ユーザーがそれを提供することをシステムが許可しません。

ストレージ管理サブシステム (SMS) がアクティブであり、システム管理クラスターを定義している場合、データ・クラス、管理クラス、およびストレージ・クラス・パラメーターを明示的に指定して、ストレージ管理者によって定義される属性を利用することができます。そのようなデフォルトがストレージ管理者によって設定されている場合は、システムによって決定されるデフォルトを取ることによって SMS

クラスを暗黙的に指定することもできます。SMS クラスは、クラスター・レベルでのみ割り当てられます。それらをデータまたは索引レベルで指定することはできません。

SMS がアクティブであり、非システム管理クラスターを定義している場合は、データ・クラスを明示的に指定するか、データ・クラス・デフォルトが使用可能な場合

VSAM データ・セットの定義

122 z/OS V1R10 DFSMS データ・セットの使用法

Page 147: DFSMS データ・セットの使用法

は、それを取ることもできます。管理クラスおよびストレージ・クラスは、非システム管理データ・セットの場合はサポートされません。

非システム管理データ・セットを定義しており、データ・クラスを指定していない場合、他のアクセス方式サービス・プログラム・パラメーターを通じて、すべての必要な記述的、パフォーマンス、セキュリティー、および保全性の情報を明示的に指定する必要があります。これらのパラメーターの大部分は、データ・コンポーネント、索引コンポーネント、またはその両方の場合に指定できます。全クラスターについての情報は、CLUSTER パラメーターを使用して指定します。データ・コンポーネントについてのみの情報は DATA パラメーターを使用して、索引コンポーネントのみについては INDEX パラメーターを使用して指定します。これらのパラメーターを使用して指定された記述的、パフォーマンス、セキュリティー、および保全性情報のタイプの説明については、 『アクセス方式サービス・プログラム・パラメーターの使用』を参照してください。

同じパラメーター (たとえば、制御インターバル・サイズ) に対する値を指定するのに、データ・クラスと他のいくつかのアクセス方式サービス・プログラム・パラメーターの両方を使用することができます。システムは、どのパラメーター値を割り当てるか決定するのに、次の順の優先順位またはフィルターを使用します。1. 明示的に指定された DEFINE コマンド・パラメーター2. モデル化された属性 (DEFINE コマンドで MODEL パラメーターを指定して割り当てられます)

3. データ・クラス属性4. DEFINE コマンド・パラメーター・デフォルト

アクセス方式サービス・プログラム・パラメーターの使用必要な記述的、パフォーマンス、セキュリティー、および保全性情報を指定するのに SMS クラスを使用しない場合、アクセス方式サービス・プログラム・パラメーターを使用する必要があります。

記述的パラメーター次のアクセス方式サービス・プログラム・パラメーターが記述情報を提供します。

v INDEXED|NONINDEXED|NUMBERED|LINEAR パラメーター ― 使用するデータ編成のタイプ (キー順、入力シーケンス、相対レコード、または線形) を指定します。

v RECORDSIZE パラメーター ― データ・レコードの平均および最大長を指定します。 RECORDSIZE パラメーターは、線形データ・セットの場合は使用されません。

可変長 RRDS は、NUMBERED および RECORDSIZE を使用して定義されます。ここで、平均および最大レコード長は異なっている必要があります。

入力順、キー順、または可変長 RRDS レコードの実際の長さが最大レコード長より小さい場合、VSAM は、レコード定義フィールド (RDF) に実際のレコード長を保管することによってディスク・スペースを節約します。RDF は、固定長RRDS の場合は調整されません。

v KEYS パラメーター ― キー順データ・セットのレコード内のキー・フィールドの長さおよび位置を指定します。

VSAM データ・セットの定義

第 7 章 VSAM データ・セットの定義 123

Page 148: DFSMS データ・セットの使用法

v CATALOG パラメーター ― クラスターを定義しようとするカタログの名前およびパスワードを指定します。

v VOLUMES パラメーター ― クラスター用のスペースを割り振るボリュームのボリューム通し番号を指定します。最大 59 の DASD ボリュームを指定できます。

v RECORDS|KILOBYTES|MEGABYTES|TRACKS|CYLINDERS パラメーター ―クラスターに割り振るスペースの量を指定します。CYLINDERS、TRACKS、MEGABYTES、KILOBYTES、および RECORDS パラメーターは、線形データ・セットの場合に許可されます。線形データ・セット用に RECORDS パラメーターを指定する場合、システムは、レコードの数に等しい数の制御インターバルを使用してスペースを割り振ります。 (線形データ・セットは、レコードを持ちません。それらは、データの連続ストリングであるオブジェクトを持ちます。)

v RECATALOG パラメーター ― 項目が VSAM ボリューム・データ・セット(VVDS) 内の情報から再作成されるか、あるいは初めて定義されるかどうかを指定します。

v REUSE|NOREUSE パラメーター ― クラスターが一時記憶のデータ用に再使用可能であるかどうかを指定します。 136ページの『作業ファイルとしての VSAM

データ・セットの再使用』を参照してください。

v BUFFERSPACE パラメーター ― データ・セットを処理するために割り振る必要がある入出力バッファー・スペースの最少量を指定します。 189ページの『非共用リソース用の入出力バッファー・スペースの決定』を参照してください。

パフォーマンス・パラメーター次のアクセス方式サービス・プログラム・パラメーターが、パフォーマンス情報を提供します。これらのすべてのパフォーマンス・オプションについては、 179ページの『第 10 章 VSAM パフォーマンスの最適化』で説明されています。

v CONTROLINTERVALSIZE パラメーター ― VSAM が使用する制御インターバル・サイズを指定します (VSAM にサイズを計算させるのではなく)。

制御インターバルのサイズは、データ・セットが SPANNED パラメーターを使用して定義されていない限り、RECORDSIZE パラメーターで指定された最大サイズのデータ・レコードを保持するのに十分なだけ大きくなければなりません。

共用リソース・バッファー方式を使用するデータ・セット用のCONTROLINTERVALSIZE パラメーターを指定し、BLDVRP マクロ上でどの制御インターバル・サイズをコーディングするかわかるようにします。

v SPANNED パラメーター ― レコードが制御インターバルをスパンできるかどうか指定します。 SPANNED パラメーターは、固定長と可変長 RRDS、および線形データ・セットの場合は許可されません。

v SPEED|RECOVERY パラメーター ― データ・セットの初期ロード中に制御域を事前フォーマットするかどうかを指定します。 134ページの『プログラムを使用したデータ・セットのロード』を参照してください。

v 索引コンポーネント用の VOLUMES パラメーター ― クラスターの索引をデータから個別のボリューム上に置くかどうかを指定します。

VSAM データ・セットの定義

124 z/OS V1R10 DFSMS データ・セットの使用法

Page 149: DFSMS データ・セットの使用法

v FREESPACE パラメーター ― データ・レコードがロードされるときにキー順データ・セットのデータ・コンポーネントまたは可変長 RRDS の制御インターバルおよび制御域に残るフリー・スペースの量を指定します。

セキュリティーおよび保全性パラメーター次のアクセス方式サービス・プログラム・パラメーターが、セキュリティーおよび保全性情報を提供します。使用可能なデータ保護のタイプについての詳細は、 67ページの『第 5 章 データ・セットの保護』を参照してください。

v パスワード ― システム管理データ・セットの場合はパスワードがサポートされていないので、この情報は、非システム管理データ・セットにのみ関係しています。「z/OS DFSMS Access Method Services for Catalogs」を参照してください。

v AUTHORIZATION パラメーター ― 要求者がデータにアクセスする権利を持つことを確認するために独自の許可ルーチンを指定します。

v EXCEPTIONEXIT パラメーター ― プログラムが SYNAD 出口を指定しない場合に入力される入出力エラー処理ルーチン (例外出口ルーチン) を指定します。VSAM ユーザー作成出口ルーチンについての情報は、 279ページの『第 16 章VSAM ユーザー作成出口ルーチンのコーディング』を参照してください。

v WRITECHECK パラメーター ― 書き込み操作が完了し、データを読み取ることができるか検査するかどうかを指定します。

v SHAREOPTIONS パラメーター ― システム、およびジョブ間でデータを共用するかどうか、およびどの程度共用するかを指定します。

v ERASE パラメーター ― データ・セットを削除するときにデータ・セットが含む情報を消去するかどうかを指定します。

クラスターが RACF 保護され、カタログ化されている VSAM コンポーネント内のデータの消去を制御するには、総称または個別プロファイル内で ERASE 属性を使用することができます。 ERASE オプションの指定および使用についての情報は、 72ページの『DASD データの消去』および 68ページの『VSAM データ・セットに対する総称プロファイルと個別プロファイル』を参照してください。

制約事項:

新規の KEYRANGE データ・セットを定義することは、最早サポートされません。キー範囲データ・セットの変換の詳細については、「z/OS DFSMShsm

Implementation and Customization Guide」を参照してください。

VSAM データ・セット用のスペースの割り振りデータ・セットを定義するとき、データ・セット用に割り振られるスペースの量はユーザーまたは SMS が指定する必要があります。SMS がアクティブな場合は、データ・クラスを指定したり、ストレージ管理者によって設定されるスペース割り振りを利用することができます。スペースを明示的に指定したい場合は、それをVSAM データ・セットに対してレコード、キロバイト、メガバイト、トラック、またはシリンダーの単位で指定することができます。装置独立性を保持するために、レコード、キロバイト、またはメガバイトを指定します。割り振るスペースの量

VSAM データ・セットの定義

第 7 章 VSAM データ・セットの定義 125

Page 150: DFSMS データ・セットの使用法

は、データ・セットのサイズおよび選択した索引オプションに応じて異なります。203ページの『索引オプションの使用』では、パフォーマンスを改善する索引オプションについて説明します。

保証スペース・ストレージ・クラス (STORAGECLASS パラメーター) がデータ・セットに割り当てられ、ボリューム通し番号が指定されている場合、次の条件が満たされると、指定されたすべてのボリュームに 1 次スペースが割り振られます。これらの条件が満たされていない場合、コマンドは失敗し、 IGDxxxx メッセージが印刷されます。

v 指定されたボリュームがすべて同じストレージ・グループに属している。

v これらのボリュームが属しているストレージ・グループが、この割り振りについて ACS ルーチンによって選択されたストレージ・グループのリストに入っている。

スペース割り振りは、クラスターまたは代替索引レベルで、データ・レベルでのみで、またはデータと索引レベルの両方で指定できます。スペースはクラスターまたはデータ・レベルで割り振るのが最良です。 VSAM は、次の場合にスペースを割り振ります。

v 割り振りがクラスターまたは代替索引レベルでのみ指定され、索引に必要とされる量は指定された量から減算される。指定された量の剰余は、データに割り当てられます。

v 割り振りがデータ・レベルでのみ指定され、指定された量がデータに割り当てられる。索引に必要な量は、指定された量に加算されます。

v 割り振りがデータと索引レベルの両方で指定され、指定されたデータ量がデータに割り当てられ、指定された索引量が索引に割り当てられる。

v 2 次割り振りがデータ・レベルで指定され、2 次割り振りが索引レベルまたはクラスター・レベルで指定される必要がある。

VSAM は、制御域の増分でスペースを獲得します。制御域サイズは、通常 1 次および 2 次スペース割り振りに基づいています。制御域サイズを最適化することについての情報は、 183ページの『制御域サイズの最適化』を参照してください。

部分リリース部分解放は、拡張フォーマット・データ・セットから未使用スペースを解放するために使用され、SMS 管理クラスを通じてまたは JCL RLSE サブパラメーターによって指定されます。高使用 RBA の後のすべてのスペースは、CA 境界上で高割り振り RBA まで解放されます。高使用 RBA が CA 境界上にない場合、高使用量は、次の CA 境界に丸められます。部分解放の制約事項には、次のものが含まれます。

v 部分解放処理は、拡張フォーマット・データ・セットの場合のみサポートされる。

v VSAM クラスターのデータ・コンポーネントのみが部分解放に適格である。

v パスまたはアップグレード処理用にオープンされた代替索引は、部分解放に適格でない。代替索引のデータ・コンポーネントは、クラスターとしてオープンされたときは、部分解放に適格な場合がある。

v 部分解放処理は、一時クローズの場合はサポートされない。

VSAM データ・セットの定義

126 z/OS V1R10 DFSMS データ・セットの使用法

Page 151: DFSMS データ・セットの使用法

v 部分解放処理は、保証スペースを使用して定義されたデータ・セットの場合はサポートされない。

VSAM CLOSE は、次の場合のみ部分解放処理を要求します。

v 部分解放が、SMS 管理クラスを通じて、または DD ステートメント上の JCL

SPACE=(,,RLSE) パラメーターを通じて指定された。

v データ・セットが拡張フォーマットとして定義される。

v データ・セットが OUTPUT 処理用にオープンされた。

v これはデータ・セット用の最後の ACB クローズである (これには、システム、および他のシステム内の現行アドレス・スペース、ならびに他のアドレス・スペースにあるすべてのクローズが含まれています)。

小さいデータ・セット拡張アドレス・ボリューム上では、システムが非ストライプ VSAM データ・セットに対して行う部分開放処理によって、未使用スペースが解放されるポイントがマルチシリンダー・ユニットの境界上に存在することが保証されます。さらに、ストライピング VSAM データ・セットでは、システムによって、すべてのストライプについて未使用スペースが解放されるポイントが同じサイズのストライプになることが保証されます。どちらの場合でも、システムは未使用スペースの一部または全部をデータ・セットの末尾から解放することはできません。

1 つのシリンダーより小さい単位でデータ・セット用のスペースを割り振る場合、VSAM はデータ・セットを定義するときにトラック数でスペースを割り振ります。サイズが 1 シリンダーより小さいデータ・セットの場合、データ・コンポーネント用の 1 次割り振りに必要とされる最大トラック数、シーケンス・セット索引用の 1

トラック (組み込みであってはならない) を指定し、データまたは索引のどちららにも 2 次割り振りを指定しないことが最良です。

VSAM は、1 次および 2 次スペース値の小さい方を、指定された装置のシリンダー・サイズと比べて検査します。小さい方の数量が装置のシリンダー・サイズより大か等しい場合、制御域はシリンダー・サイズに等しく設定されます。小さい方の数量が装置のシリンダー・サイズより小の場合、制御域のサイズは小さい方のスペース数量に等しく設定されます。最小制御域サイズは 1 トラックです。小さな制御域を作成することについての情報は、 183ページの『制御域サイズの最適化』を参照してください。

複数のシリンダー・データ・セット最初に、1 次割り振りに必要なスペース量を計算します。データ・セットが 1 シリンダーより大きい場合、1 次割り振り用に新規に定義されたデータ・セット内のデータに必要なシリンダー数を計算し、指定します。 1 シリンダーより大か等しいが、1 次割り振りよりは小さい 2 次割り振りを行います。 130 ページの『KSDS

のデータ・コンポーネント用のスペースの計算』は、データ・セットのサイズを計算する方法を示しています。

索引オプションについての情報は、 203ページの『索引オプションの使用』を参照してください。

VSAM データ・セットの定義

第 7 章 VSAM データ・セットの定義 127

|

|

|

|

|

|

|

Page 152: DFSMS データ・セットの使用法

線形データ・セット線形データ・セットでは、スペースは、トラック、シリンダー、レコード、キロバイト、またはメガバイト単位で割り振る必要があります。

線形データ・セットを定義する場合は、4096 バイトの増分で、 4096 から 32768

バイトの制御インターバル・サイズを指定することができます。 4096 の倍数の整数でない場合は、制御インターバル・サイズは次の 4096 の増分に切り上げられます。システムは、そのトラック・サイズ形状を使用するための最適な物理レコード・サイズを選択します。例えば、CISIZE(16384) を指定すると、ブロック・サイズは 16384 に設定されます。指定された BUFFERSPACE が 8192 バイトより大きい場合、4096 の倍数に減分されます。BUFFERSPACE が 8192 より小さい場合、アクセス方式サービス・プログラムはメッセージを出し、コマンドは失敗します。

VSAM エクステントの使用1 次スペース割り振り は、割り振られたスペースの初期量です。最初のボリューム上の 1 次量が使い果たされると、2 次量がそのボリューム上で割り振られます。新規レコードが、割り振られたスペース内に収まらなくなるたびに、システムは 2 次スペース量内でさらにスペースを割り振ります。ボリュームがスペース不足になるか、またはボリュームのエクステント限度 123 に達するまで、システムはこのスペースの割り振りを繰り返します。

非ストライプ VSAM データ・セットの場合は、新規ボリュームに拡張するときに1 次割り振り量または 2 次割り振り量のどちらを使用するかを SMS データ・クラス・パラメーターの中に指定することができます。非ストライプ VSAM コンポーネント用のスペースを 255 エクステントに拡張することができます。SMS 管理対象の VSAM データ・セットでは、データ・クラスでエクステント制約除去が指定された場合、このエクステント制限は除去されます。その理論上の制限は、最大ボリューム数 (59)、最大ボリューム数 (59) x 123 エクステント/ボリューム、または7257 エクステントとなります。

ストライピング VSAM コンポーネント用のスペースを (255 x ストライプ数) のエクステント数に拡張できます。どの非 SMS 管理対象データ・セットの場合も、依然として VSAM 制限の 255 エクステントが強制されます。システムが最後のエクステントを 1 つの完全なものとして割り振ることができないとき、システムはコンポーネントを拡張するための最後の 4 つのエクステントを予約します。

注: z/OS V1R7 から始まりますが、ストライプ当たり 255 エクステント制約は除去されます。これを可能にするには、データ・クラスのエクステント制約除去パラメーターを Y (yes) に設定します。デフォルト値は N (no) です。これにより 255 エクステントの制約が強制されます。V1R7 以前のシステムとデータ・セットを共用する可能性がある場合は、この制約を強制的に実施する必要があります。

保証スペース割り振りと非保証スペース割り振りの両方の場合、データ・セットにスペースを割り振るときに、1 次割り振りと 2 次割り振りの両方を指定することができます。保証スペース割り振りと非保証スペース割り振りは、システムがデータ・セットを新規ボリュームに拡張するまで、同様に処理されます。相違点は、保証スペース・データ・セットがそのボリューム上ですでに割り振られている「候補スペース」の量を使用することです。

VSAM データ・セットの定義

128 z/OS V1R10 DFSMS データ・セットの使用法

Page 153: DFSMS データ・セットの使用法

保証スペース割り振りの場合、1 次割り振りは「PRIME」として最初のボリューム上で割り振られ、「候補スペース」としてその他のすべての保証スペース・ボリューム上で割り振られます。 1 次ボリューム上のスペースがすべて使用されると、システムは、2 次量を使用して 1 次ボリューム上のスペースを取得します。 1 次ボリューム上で割り振ることができるスペースがなくなった場合は、システムは次のボリューム上の「候補スペース」の量を使用します。後続の拡張では、そのボリュームがいっぱいになるまで、スペースの割り振りに 2 次量が再度使用されます。続いて、システムはその次のボリューム上の「候補スペース」の量を使用します。このようにして、以後同様に処理されます。

VSAM エクステント統合システムは、同じボリュームを占める VSAM データ・セットの隣接エクステントを統合します。 VSAM エクステントの統合は自動的に行われるので、これに対する処置は不要です。エクステントが隣接している場合、新エクステントが前のエクステントに組み込まれます。

例: 旧エクステントはシリンダー 6、トラック 0 で始まり、シリンダー 9、トラック 14 で終わるものとし、新エクステントはシリンダー 10、トラック 0 で始まり、シリンダー 12、トラック 14 で終わるものとします。 2 つのエクステントは結合されて、シリンダー 6、トラック 0 で始まり、シリンダー 12、トラック 14

で終わる 1 つのエクステントとなります。こうして 2 つのエクステントの代わりに 1 つだけのエクステントが存在することになります。VSAM が 2 つのエクステントを結合するため、エクステント・カウントの増分はなく、したがってエクステントは減少します。

例: CYLINDERS(3 1) を使用して VSAM データ・セットを割り振っているものとします。このデータ・セットは当初は 3 シリンダーを占めますが、データ・セットが拡張されるたびに追加シリンダーを占めることになります。ここで、このデータ・セットを 5 倍に拡張するものとします。隣接エクステントが何もなければ、LISTCAT 出力にシリンダー 3,1,1,1,1,1 の、計 8 個のシリンダーの割り振りが示されます。

結果: どのエクステントが隣接するかに応じて、LISTCAT 出力にはシリンダー5,1,1,1 またはシリンダー 3,5 またはシリンダー 3,2,3 の割り振りが次のように示されます。

v 5,1,1,1 の例では、初めから 3 つだけのエクステントが隣接している。

v 3,5 の例では、第 1 と第 2 のエクステントは隣接していないが、第 3 から第 8

までのエクステントは隣接している。

v 3,2,3 の例では、第 1 と第 2 のエクステントは隣接していないが、第 2 と第 3

のエクステントは隣接し、第 3 と第 4 のエクステントは隣接しないが、終わりの 3 つのエクステントは隣接している。

全タイプの SMS 管理 VSAM データ・セット (KSDS、ESDS、RRDS、VRRDS、および LDS) では、エクステント統合が使用されます。

制約事項: VSAM は、以下のタイプのデータ・セットについてはエクステント統合をサポートしません。

v キー範囲データ・セット

VSAM データ・セットの定義

第 7 章 VSAM データ・セットの定義 129

Page 154: DFSMS データ・セットの使用法

v ページ・スペースなどのシステム・データ・セット

v カタログ

v VVDS

v 非システム管理データ・セット

v 組み込みまたは複製索引

v レコード・レベル共用を使用してアクセスする VSAM データ・セット

KSDS のデータ・コンポーネント用のスペースの計算DASD には次の公式を使用することができます。トラック当たりのブロックおよびトラック当たりの制御インターバルの数は、使用している DASD によって決まります。次の例は、キー順データ・セット用のデータ・コンポーネントのサイズを計算する方法を示しています。以下のことが、計算の前提とされます。

装置タイプ。 3390

スペース割り振りの単位。シリンダーデータ制御インターバル・サイズ。1024 バイト物理ブロック・サイズ (VSAM によって計算されます)。 1024 バイトレコード・サイズ。200 バイトフリー・スペース定義 - 制御インターバル。20%

フリー・スペース定義 - 制御域。10%

ロードされるレコードの数。 3000

データ・コンポーネント用のスペースは、次のように計算できます。

1. フリー・スペースのバイト数 (20% × 1024) = 204 (切り捨て)

2. 制御インターバル当たりにロードされるレコード数 (1024-10-204)/200=4.

3. トラック当たりの物理ブロックの数 = 33。

4. トラック当たりの制御インターバルの数 = 33。

5. CA 当たりの最大制御インターバル数 (33 x 15) = 495。

6. CA 当たりにロードされる制御インターバルの数 = (495 - 10% x 495) = 446.

7. シリンダー当たりにロードされるレコードの数 (4 x 446) = 1784.

8. データ・コンポーネント用の合計スペース (3000/1784) (丸められます) = 2 シリンダー。

値 (1024 - 10) は、制御インターバル長から 2 つの RDF と 1 つの CIDF 用の 10

バイトを引いたものです。レコード・サイズは 200 バイトです。 IBM 3380 上では、1024 バイトを持つ 31 の物理ブロックが 1 トラック上に保管できます。値(33 × 15) は、トラック当たりの物理ブロックにシリンダー当たりのデータ・トラック数を乗算したものです。

索引コンポーネント用のスペースの計算索引コンポーネントに必要なスペースを計算するための特定の数式はありません。アクセス方式サービス・プログラム LISTCAT を使用して、索引コンポーネントにどれだけスペースが割り振られたか調べてください。

VSAM データ・セットの定義

130 z/OS V1R10 DFSMS データ・セットの使用法

Page 155: DFSMS データ・セットの使用法

ALTER を使用したコンポーネント属性の変更データ・セットが定義された後、アクセス方式サービス・プログラム・コマンドALTER を使用してその属性の一部を変更することができます。コンポーネントは名前によって識別し、新規の属性を指定します。また、ALTER は、入力順データ・セットを、適切な属性を指定して、線形データ・セットに変更するのにも使用できます。データ・セットの内容は変更されません。入力順データ・セットを線形データ・セットに変更する例については、「z/OS DFSMS Access Method Services for

Catalogs」を参照してください。

ALTER は、固定長 RRDS を可変長 RRDS に、またはその逆に変更するのには使用できません。

ALTER を使用したデータ・セットの名前変更ALTER コマンドを使用して、VSAM データ・セットおよび PDS および PDSE のメンバーを名前変更できます。 ALTER は、システム管理データ・セットを非システム管理に変換することもできます。特定のデータ・セット・タイプについてどの値、または属性を変更できるかを判別するには、「z/OS DFSMS Access Method

Services for Catalogs」を参照してください。

JCL を使用したデータ・セットの定義JCL を使用して VSAM データ・セットを定義できるようにする前に、システム上で SMS がアクティブでなければなりません。可変長 RRDS を除き、任意のVSAM データ・セットは JCL を使用して定義できます。JCL を使用して VSAM

データ・セットを定義するのには、特定の利点があります。これは、入力するのにかかる時間が少なくてすみ、VSAM データ・セットを定義するための構文を、それにアクセスするための構文と非常に似たものにします。

DB2 は、区分テーブル・スペース上でのストライピングを提供します。 区画のそれぞれは、個別の線形データ・セットです。これらの区画のうち 2 つ以上に対し並列入出力を並行して行うには、ストライピングが使用されます。ストライピングの利点を達成できるのは、同じボリューム上に複数の区画が割り振られない場合だけです。システム管理ボリューム上でのストレージ・クラス保証スペース割り振りに頼らなくても、ボリューム分離を達成できます。

JCL を使用して区画のすべてを単一の IEFBR14 ジョブ・ステップで割り振ります。ストレージ・グループ内に十分な数のボリュームがあり、ボリュームが割り振りしきい値を超えない限り、SRM を使用した SMS 割り振りアルゴリズムにより、各区画が個別のボリューム上に確実に割り振られます。

DB2 ストライピングは、VSAM ストライピングと関連がありません ( 102ページの『拡張フォーマット VSAM データ・セット』を参照してください)。同じセットの線形拡張フォーマット・データ・セットに DB2 ストライピングと VSAM ストライピングの両方を使用することができます。

関連資料: VSAM データ・セットの定義に使用される JCL キーワードについては、 309ページの『第 18 章 VSAM 用のジョブ制御言語の使用』を参照してください。 JCL キーワードおよび JCL の使用については、「z/OS MVS JCL 解説書」および「z/OS MVS JCL ユーザーズ・ガイド」を参照してください。

VSAM データ・セットの定義

第 7 章 VSAM データ・セットの定義 131

Page 156: DFSMS データ・セットの使用法

VSAM データ・セットのロードデータ・セットが定義された後、ソース・データ・セットからそれにレコードをロードすることができます。ロードされている VSAM データ・セットのタイプに応じて、ソース・データ・セット・レコードが特定の順序である必要がある場合とない場合があります。

v 入力順データ・セットにロードされているレコードは、特定の順序でサブミットする必要はありません。入力順データ・セット・レコードは、論理レコード内のフィールドによってではなく、それらの到着時刻によって順序付けられます。

v 固定長 RRDS レコードは、ユーザー提供または VSAM 提供の相対レコード番号によって指定されたスロットに入れられます。相対レコード番号は、論理レコードの部分ではないので、レコードが特定の順序でサブミットされる必要はありません。

v キー順データ・セットにロードされているレコードは、入力データ・セット内に重複するキーなしで、キーによって昇順になっていなければなりません。

v 可変長 RRDS にロードされているレコードは、入力データ・セット内に重複するキーなしで、キーによって昇順になっていなければなりません。 それらが順次方式でロードされる場合、 VSAM は相対レコード番号を割り当てます。

入力順またはキー順データ・セット、あるいは RRDS では、すべてのレコードを 1

つのジョブまたはいくつかのジョブにロードすることができます。複数のジョブを使用してレコードをデータ・セットにロードする場合、VSAM は後続ジョブからのレコードを、先行ジョブからのレコードを保管したのと同じ方法で保管し、必要に応じてデータ・セットを拡張します。

REPRO を使用した VSAM データ・セットのコピーREPRO コマンドによって、レコードを順次、索引順次、または VSAM データ・セットから検索し、それらを VSAM フォーマットでキー順次、 入力順次、相対レコード、または順次データ・セットに保管することができます。 REPRO コマンドは、データをある線形データ・セットから別の線形データ・セットにロードするのにも使用されます。

レコードがキー順で保管されるときは、索引項目が作成され、データ制御インターバルおよび制御域が埋められながら索引コンポーネントにロードされます。フリー・スペースは、カタログ内のクラスター定義で指示されているとおりに残されます。

VSAM データ・セットはカタログ化しなければなりません。順次および索引順次データ・セットは、カタログ化する必要がありません。システム管理される順次データ・セットは、カタログ化する必要があります。

順次または索引順次データ・セットがカタログされていない場合は、DD ステートメント上で適切なボリュームおよびユニット・パラメーターを組み込みます。また、入力データ・セットが順次または索引順次であるか、出力データ・セットが順次であるか、あるいはその両方である場合も、DCB パラメーターの最小セットを提供します。次の表は、4 つのキー・パラメーターを示しています。

VSAM データ・セットの定義

132 z/OS V1R10 DFSMS データ・セットの使用法

Page 157: DFSMS データ・セットの使用法

パラメーター ユーザーが提供できるもの提供されない場合のデフォルト

DSORG IS PS

RECFM F、FB、V、VB、VS、VBS U

BLKSIZE ブロック・サイズ なし

LRECL 論理レコード長 F または FB の場合BLKSIZE、またはV、VB、VS、VBS の場合BLKSIZE-4

DSORG パラメーターを指定する唯一の方法は、DD ステートメントを使用することです。 DCB パラメーター RECFM、BLKSIZE、および LRECL は、DSCB または標準ラベル・テープのヘッダー・ラベルを使用して、または DD ステートメントによって提供できます。システムは、最適なブロック・サイズを決定できます。

REPRO を使用して順次データ・セットへのコピーを行う場合は、システムがデータ・セットのオープン時にブロック・サイズを決定するので、ブロック・サイズを提供する必要はありません。 JCL の使用時または出力データ・セットの定義時にBLKSIZE 値を任意に指定することができます。

VSAM データ・セットを順次データ・セットにロードしている場合、 3 バイトのVSAM レコード定義フィールド (RDF) は VSAM レコード長に含まれないことを忘れないでください。REPRO が、長さが非 VSAM LRECL-4 より大の VSAM レコードをコピーしようとすると、リカバリー可能エラーが発生し、レコードはコピーされません。 (それぞれの非 VSAM レコードは、長さに含まれている 4 バイトの接頭部をもちます。したがって、各 VSAM 可変長レコードの長さは、非 VSAM

レコードの長さより 4 バイト小さくなります。)

アクセス方式サービス・プログラムは、非 VSAM データ・セットの場合 32 760

バイトより大きいレコードをサポートしません (LRECL=X はサポートされません)。非 VSAM 入力データ・セットの論理レコード長が 32 760 バイトより大きい場合、または 32 760 より大きいレコード長を使って定義された VSAM データ・セットを順次データ・セットにコピーする場合、REPRO コマンドはエラー・メッセージで終了します。

相対キー位置がゼロの固定長の非ブロック化フォーマットを持つ索引順次データ・セット内のレコードは、入力として使用されるときは先頭にキー・ストリングが付きます。出力データ・セット内のレコードは、キー・ストリングによって生じた拡張された長さを含めて定義されたレコード長を持つ必要があります。『ダミー』索引順次レコード (最初のバイトに X'FF' が付きます) をコピーするには、ENVIRONMENT パラメーターで DUMMY オプションを指定します。

REPRO は、次の場合に終了します。v 出力データ・セットに書き込み中に 1 つの物理入出力エラーが検出されるv 次のものの任意に組み合わせで、合計 4 つのエラーが検出される

– 出力データ・セットへの書き込み中の論理エラー– 入力データ・セットを読み取り中の論理エラー– 入力データ・セットを読み取り中の物理エラー

VSAM データ・セットの定義

第 7 章 VSAM データ・セットの定義 133

Page 158: DFSMS データ・セットの使用法

関連資料: 物理エラーと論理エラーについては、「z/OS DFSMS Macro Instructions

for Data Sets」を参照してください。

プログラムを使用したデータ・セットのロード独自のプログラムを使用して、キー順データ・セットをロードするには、まずレコードをキー順でソート (またはそれらを作成) してから、それらを順次保管します(PUT マクロを使用して)。初期にデータ・セットをロードしているときは、直接アクセスは許可されません。レコードをデータ・セットに挿入することについて詳しくは、 163ページの『レコードの挿入と追加』を参照してください。

VSAM は、高頻度使用 RBA フィールドを使用して、データ・セットが空であるかどうかを判別します。暗黙の検査は、高頻度使用 RBA を更新することができます。データ・セットの定義の直後では、高頻度使用 RBA 値はゼロです。空のデータ・セットは、検査できません。

作成モード、ロード・モード、および初期データ・セット・ロードの用語は、レコードを空の VSAM データ・セットに挿入するプロセスと同義語です。空の VSAM

データ・セットのロードを開始するには、 VSAM OPEN マクロを呼び出します。成功したオープンに続いて、ロードは、レコードが追加されている間継続され、データ・セットがクローズされるときに終結します。

制約事項: 入力順データ・セットのロードが失敗する場合は、それをオープンできません。

ロード・モード処理中、特定の制約事項が適用されます。

v PUT および CHECK のみが、使用できるマクロです。

v 改良制御インターバル処理は使用しないでください。

v データ・セットがロードまたはクローズされるまで、更新または入力処理はできません。

v ACB 内では 1 つだけのストリングを指定します (STRNO>1 は許可されません)。

v ローカル共用リソース (LSR) またはグローバル共用リソース (GSR) は指定しないでください。

v データ・セットは共用できません。

v 直接処理は許可されません (相対レコード・キー直接を除く)。

アプリケーションの設計でロード・モード中に直接処理が必要な場合、以下のステップに従ってこの制約事項を避けることができます。

1. ロード・モード処理用に空データ・セットをオープンします。

2. 1 つ以上のレコードを順次書き込みます。これは、ダミー・レコードであってもかまいません。

3. データ・セットをクローズして、ロード・モード処理を終了します。

4. 標準処理用にデータ・セットを再オープンします。これで、ロードを再開するか、直接処理を行うことができるようになります。この方法を使用して VSAM

データ・セットをロードするときは、部分解放の指定については慎重にしてください。データ・セットがクローズされると、部分解放は未使用のスペースをすべて解放しようとします。

VSAM データ・セットの定義

134 z/OS V1R10 DFSMS データ・セットの使用法

Page 159: DFSMS データ・セットの使用法

レコードをデータ・セットにロードするときに、ユーザー作成出口ルーチンを使用することについての情報は、 279ページの『第 16 章 VSAM ユーザー作成出口ルーチンのコーディング』を参照してください。

ロード・モード中、制御域は、レコードがそれにロードされるときに事前フォーマットできます。ロード中にエラーが発生する場合、リカバリーには事前フォーマットが便利です。ただし、初期データ・セット・ロード時のパフォーマンスは、事前フォーマットしない方がよくなります。アクセス方式サービス・プログラムDEFINE コマンドの RECOVERY パラメーターは、VSAM がロード・モード中に制御域を事前フォーマットするか示すために使用されます。固定長 RRDS およびSPEED の場合は、ロード・モード中にレコードが挿入される制御域は、常に事前フォーマットされます。 RECOVERY を使用して、すべての制御域が事前フォーマットされます。

事前フォーマットすると、直接アクセス記憶装置域からすべての事前情報が消去され、ファイル・マーク標識が書き込まれます。VSAM の場合、ファイル・マーク標識は、ゼロに等しい CIDF を持つ制御インターバルから構成されます。

v 入力順データ・セットの場合、VSAM は、制御域内の各制御インターバルにファイル・マーク標識を書き込みます。

v キー順データ・セットの場合、VSAM は、事前フォーマットされた制御域に続く制御域内の最初の制御インターバルにファイル・マーク標識を書き込みます。(事前フォーマットされた制御域にはフリー制御インターバルが含まれます。)

v 固定長 RRDS の場合、VSAM は、事前フォーマットされた制御域に続く制御域内の最初の制御インターバルにファイル・マーク標識を書き込みます。空の事前フォーマット済み制御インターバル内のすべての RDF には、「スロットが空」というマークが付きます。

レコードが入力順データ・セットの事前フォーマット済み制御域にロードされるとき、レコードに続くファイル・マーク標識は、ロードがどこまで進行したかを示します。データ・セットを検査した後、そのポイントからロードを再開することができます。(データ・セットは、最初にそれを検査した後でないとオープンできません。) ロードを継続できなくするエラーが発生する場合、ファイル終わりを読み取ることにより、正常にロードされた最後のレコードを識別することができます。

SPEED パラメーターは、データ制御域を事前フォーマットしません。最後のレコードがロードされた後でのみファイル・マーク標識を書き込みます。パフォーマンスは、 SPEED パラメーターを使用する場合、および拡張フォーマット・データ・セットを使用している場合の方がよくなります。拡張フォーマット・データ・セットは、システム管理バッファー方式を使用することもできます。これにより、データ・バッファーの数をロード・モード処理用に最適化することができます。これは、新規データ・セットの再編成またはリカバリー用に REPRO パラメーターと一緒に使用することができます。ロードを継続できなくするエラーが発生する場合、正常にロードされた最後のレコードを識別することができず、レコードを最初から再ロードしなければならない場合があります。キー順データ・セットの場合、SPEED パラメーターは、データ・コンポーネントにのみ影響を及ぼします。

注: SPEED を指定する場合、それはロード・モード処理にも有効であることを忘れないでください。ロード・モード処理の後は、DEFINE 指定にかかわらず、RECOVERY が有効になります。

VSAM データ・セットの定義

第 7 章 VSAM データ・セットの定義 135

Page 160: DFSMS データ・セットの使用法

作業ファイルとしての VSAM データ・セットの再使用VSAM では、再使用可能データ・セットを定義して作業ファイルとして使用することができます。データ・セットを再使用可能として定義し、オープン時にそのデータ・セットがリセットされるように指定します。ストライピング VSAM データ・セットを再使用することもできます。

再使用可能でないデータ・セットは、1 回しかロードできません。データ・セットがロードされた後、そのデータ・セットの読み取りおよび書き込みができ、さらにそのデータ・セットの中のデータを変更することができます。ただし、データのセットを除去する唯一の方法は、アクセス方式サービス・プログラムの DELETE コマンドを使用することであり、このコマンドによりデータ・セット全体が削除されます。データ・セットを再使用したい場合は、アクセス方式サービス・プログラムのDEFINE コマンド、JCL、または動的割り振りを使用してデータ・セットを定義してください。

DELETE - DEFINE シーケンスを使用する代わりに、DEFINE

CLUSTER|ALTERNATEINDEX コマンドで REUSE パラメーターを指定することができます。REUSE パラメーターでは、いっぱいになったデータ・セットをそれが空であるかのように扱って、前の内容とは無関係にそれを繰り返しロードすることができます。

再使用可能データ・セットは、1 つ以上のボリューム上に常駐する KSDS、ESDS、LDS、または RRDS とすることができます。再使用可能基本クラスターは、代替索引を持つことができず、キー範囲と関連付けることができません。再使用可能データ・セットがリセット・オプションを使用してオープンされる場合、それを他のジョブと共用することはできません。

VSAM は、高頻度使用相対バイト・アドレス (RBA) フィールドを使用して、データ・セットが空であるかどうかを判別します。データ・セットの定義の直後では、高頻度使用 RBA 値はゼロです。データ・セットをロードおよびクローズした後、高頻度使用 RBA はデータ・セット内の最後のバイトのオフセットに等しくなります。再使用可能データ・セットの場合、この高頻度使用 RBA フィールドは、OPEN

時に ACB で MACRF=RST を指定することにより、OPEN 時にゼロにリセットすることができます。VSAM は、この再使用可能データ・セットを新規に定義されたデータ・セットのように設定することができます。

圧縮フォーマット・データ・セットの場合、MACRF=RST についてゼロにリセットされた高頻度使用 RBA フィールドに加えて、OPEN は、圧縮および非圧縮データ・セット・サイズをゼロにリセットします。システムは、圧縮ディクショナリー・トークンをリセットせず、新規データの圧縮に再使用します。ディクショナリー・トークンは前のデータから派生したので、このアクションは、新規データの性質に応じて圧縮率に影響を及ぼすことがあります。

VSAM データ・セットの定義

136 z/OS V1R10 DFSMS データ・セットの使用法

Page 161: DFSMS データ・セットの使用法

データ・セットのコピーおよびマージさまざまな理由から、データ・セットをコピーしたり、2 つのデータ・セットをマージしたい場合があります。たとえば、テスト・コピーを作成したいことも、2 つの異なる目的に使用するために 2 つのコピーを必要とすることも、データ・セットを更新する前にバックアップ・レコードをコピーしたいこともあります。アクセス方式サービス・プログラム REPRO コマンドを使用して、データ・セットをコピーすることができます。

RLS を使用してデータ・セットにアクセスすることについての情報は、 253ページの『第 14 章 VSAM レコード・レベル共用の使用』を参照してください。

REPRO コマンドを使用して、次のいずれかを行うことができます。

v VSAM データ・セットを別の VSAM データ・セットにコピーまたはマージする。

v 順次データ・セットを別の順次データ・セットにコピーまたはマージする。

v 代替索引をキー順 VSAM データ・セットとしてコピーする。

v レコードが固定長の VSAM データ・セットを、空の固定長 RRDS にコピーする。

v 順次または索引順次データ・セットを VSAM データ・セットに変換する。

v VSAM データ・セットを順次データ・セットにコピーする。

v データ・セット (カタログ以外のもの) をコピーして、再編成する。データ・セットは、自動的に再編成されます。

v PDS または PDSE の個々のメンバーをコピーする。PDS または PDSE はコピーできませんが、個々のメンバーはコピーすることができます。

キー順データ・セットをコピーするとき、コピーされるレコードは昇順になっていなければならず、入力データ・セットに重複があってはなりません。すべてのキーは、固有でなければなりません。入力順データ・セットでは、コピーされるレコードはどのような順番になっていてもかまいません。

データは、キー・シーケンスでも物理順でも単一の論理レコードとしてコピーされるので、自動再編成は次のようにして行うことができます。v 論理レコードの物理再配置v データ・セット内でのレコードの物理位置の変更v データ・セットを通じてのフリー・スペースの再分散v VSAM 索引の再構成

カタログ化されていない順次データ・セットにコピーするか、それからコピーしている場合、DD ステートメントに適切なボリュームまたはユニット・パラメーターを組み込む必要があります。これらのパラメーターについて詳しくは、 132ページの『REPRO を使用した VSAM データ・セットのコピー』を参照してください。

表 10 では、出力データ・セットが空または非空の入力順次、順次、キー順次、または線形データ・セットであるか、固定長または可変長 RRDS であるときに、入力データ・セットからのデータが出力データ・セットにどのように追加されるかを説明します。

VSAM データ・セットの定義

第 7 章 VSAM データ・セットの定義 137

Page 162: DFSMS データ・セットの使用法

表 10. さまざまなタイプの出力データ・セットへのデータの追加

データ・セットのタイプ 空 非空

入力順 新規データ・セットを順次ロードします。

レコードをデータ・セットの末尾に順次追加します。

順次 新規データ・セットを順次ロードします。

レコードをデータ・セットの末尾に順次追加します。

キー順 新規データ・セットをキー順にロードし、索引を作成します。

レコードをキーごとにマージし、索引を更新します。REPLACE オプションが指定されていない限り、キーが出力データ・セット内のキーと重複するレコードは失われます。

線形 新規線形データ・セットを相対バイト順にロードします。

制御インターバルへのデータをデータ・セットの末尾に順次追加します。

固定長 RRDS 新規データ・セットを、相対レコード番号 1 から始めて、相対レコード・シーケンスでロードします。

別の固定長または可変長 RRDS からのレコードを、それらの古いレコード番号を保持しながら、マージします。REPLACE オプションが指定されない限り、番号が既存のレコード番号と重複する新規レコードは失われます。他のタイプの編成からのレコードは、非空固定長 RRDS にコピーすることはできません。

可変長 RRDS 新規データ・セットを、相対レコード番号 1 から始めて、相対レコード・シーケンスでロードします。

別の固定長または可変長 RRDS からのレコードを、それらの古いレコード番号を保持しながら、マージします。REPLACE オプションが指定されない限り、番号が既存のレコード番号と重複する新規レコードは失われます。他のタイプの編成からのレコードは、非空固定長 RRDS にコピーすることはできません。

REPRO は、次の場合に終了します。

v 出力データ・セットに書き込み中に 1 つの物理入出力エラーが検出される

v 次のものの任意に組み合わせで、合計 4 つのエラーが検出される– 出力データ・セットへの書き込み中の論理エラー– 入力データ・セットを読み取り中の論理エラー– 入力データ・セットを読み取り中の物理エラー

代替索引の定義代替索引は、その関連付けられた基本データ・レコードの代替キーによって編成された索引項目を含むキー順データ・セットです。それは、クラスターのデータ・コンポーネント内のレコードを見つけるための別の方法を提供します。

代替索引は、キー順または入力順クラスターを通して定義することができます。代替索引は、再使用可能クラスター、固定長または可変長 RRDS、拡張アドレス可能な ESDS、カタログ、VVDS (データ・セット名 ’SYS1.VVDS.Vvolser’)、別の代替索引、線形データ・セット、または非 VSAM データ・セット用には定義できません。 データ・クラス・パラメーターは、システム管理代替索引用に指定できます。アクセス方式サービス・プログラム DEFINE は、代替索引の基本クラスターと同じ管理クラスおよびストレージ・クラスを割り当てます。基本クラスターが拡張フォーマットとして定義される場合は、それが関係付けられる代替索引は拡張フォーマ

VSAM データ・セットの定義

138 z/OS V1R10 DFSMS データ・セットの使用法

Page 163: DFSMS データ・セットの使用法

ットとして定義することができなければなりません。代替索引は圧縮できません。代替索引の構造についての情報は、 112ページの『代替索引を通じてのレコードへのアクセス』を参照してください。

代替索引を作成するための順序は、次のとおりです。

1. ALLOCATE コマンド、DEFINE CLUSTER コマンド、または JCL を使用して、基本クラスターを定義します。

2. REPRO コマンドを使用するか、データ・セットをロードするための独自のプログラムを作成することによって、基本クラスターをロードします。

3. DEFINE ALTERNATEINDEX コマンドを使用して、代替索引を定義します。

4. DEFINE PATH コマンドを使用して、代替索引を基本クラスターに関係付けます。基本クラスターと代替索引は、同じカタログ内の項目によって記述されます。

5. BLDINDEX コマンドを使用して、代替索引を作成します。

VSAM は、次の 3 つのカタログ項目を使用して、代替索引を記述します。

v 代替索引項目は、代替索引をキー順クラスターとして記述します。

v データ項目は、代替索引のデータ・コンポーネントを記述します。

v 索引項目は、代替索引の索引コンポーネントを記述します。

データ・クラスを除き、代替索引のデータおよび索引コンポーネントの属性は、代替索引全体の属性から個別に指定できます。属性が、データおよび索引コンポーネントについてではなく、代替索引全体について指定されている場合、これらの属性は (パスワードおよび USVR セキュリティー属性を除き) コンポーネントにも適用されます。属性がコンポーネントについて指定されている場合、それらは、代替索引全体について指定されている属性を指定変更します。

代替索引の命名代替索引を定義するときに、その項目名を指定します。項目名は、JCL DD ステートメントで dsname として指定することができます。 VSAM がユーザー用のコンポーネントをどのように生成できるかについての詳細は、 120ページの『クラスターの命名』を参照してください。

代替索引情報の指定代替索引を定義するときに、記述情報ならびにパフォーマンス、セキュリティー、およびデータ保全性オプションを指定します。情報は、代替索引のデータ・コンポーネント、その索引コンポーネント、または代替索引全体に適用することができます。代替索引全体についての情報は、ALTERNATEINDEX パラメーターまたはそのサブパラメーターを使用して指定されます。データ・コンポーネントまたは索引コンポーネントについての情報は、パラメーター DATA または INDEX を使用して指定されます。

システム管理される代替索引の場合はパスワードがサポートされません。代替索引を定義するには、基本クラスターについて RACF 変更権限を持っている必要があります。

VSAM データ・セットの定義

第 7 章 VSAM データ・セットの定義 139

Page 164: DFSMS データ・セットの使用法

代替索引用の記述情報の指定代替索引について次の記述情報を指定する必要があります。

v RELATE パラメーターとして指定される、代替索引に関連付けられる基本クラスターの名前およびパスワード。RELATE 項目名は、マルチレベル別名機能が正しいカタログを選択できるようにするために、選択する必要があります。マルチレベル別名機能については「z/OS DFSMS Managing Catalogs」を、カタログ検索の順序については「z/OS DFSMS Access Method Services for Catalogs」を参照してください。

v CYLINDERS|KILOBYTES|MEGABYTES|RECORDS|TRACKS パラメーターとして指定される、代替索引に割り振るスペースの量。

v VOLUMES パラメーターで指定される、代替索引に対してスペースが割り振られるボリュームのボリューム通し番号。ただし、システム管理データ・セットについて VOLUMES パラメーターを指定する場合、指定されたボリュームが使用されるときとされないときがあり、時々障害が発生することがあります。システム管理データ・セットの場合は、各ボリューム通し番号についてアスタリスク (*)

を指定することによって、非特定ボリュームを示すことができます。その場合は、SMS がボリューム通し番号を決定します。デフォルトは 1 ボリュームです。特定および非特定ボリュームの両方が指定される場合は、指定されたボリューム通し番号が最初に指定される必要があることに注意してください。

v BUFFERSPACE パラメーターで指定される、プログラムが代替索引のデータを処理するときに OPEN が提供しなければならない入出力バッファー・スペースの最少量。

v CATALOG パラメーターで指定される、代替索引の項目を含むカタログの名前およびパスワード。これは、基本クラスターの項目を含むのと同じカタログでなければなりません。

v 代替索引について、ストレージ管理者によって割り当てられる属性を利用するためのデータ・クラス。

v KEYS パラメーターで指定される、基本クラスターのデータ・レコード内での代替キー・フィールドの長さと位置。

v RECORDSIZE パラメーターで指定される、代替索引の平均および最大長。

v REUSE パラメーターで指定される、代替索引が再使用可能かどうか。

v データ・セットが拡張フォーマットであるかどうか、およびそれが拡張アドレッシング機能を持つかどうか。代替索引についてのこれらの特性は、クラスターについてのそれらと同じです。

代替索引についてのパフォーマンス・オプションおよびセキュリティーと保全性情報は、クラスターの場合と同じです。 123ページの『アクセス方式サービス・プログラム・パラメーターの使用』を参照してください。

非固有キーを持つ代替索引の場合の RECORDSIZE の指定多くの非固有キーを持つ代替索引を定義するときは、すべての非固有キーを処理するのに十分大きい RECORDSIZE 値を指定します。特定の代替キーに対する基本キーのすべてのオカレンスは、単一の代替索引論理レコード内になければなりません。最大 RECORDSIZE 値がたとえば 1000 である場合、最大 RECORDSIZE 値が5000 である場合ほどには多くの非固有キーをサポートすることができなくなります。単一の代替索引論理レコードに含まれる基本キーの最大数 は 32767 です。

VSAM データ・セットの定義

140 z/OS V1R10 DFSMS データ・セットの使用法

Page 165: DFSMS データ・セットの使用法

代替索引のビルド代替索引が BLDINDEX 処理によってビルドされるとき、代替索引のボリュームおよび基本クラスターのボリュームをマウントする必要があります。WORKFILES パラメーターを使用して識別されるボリュームもマウントする必要があります。WORKFILES ddname によって識別されるデータ・セットの 1 つがシステム管理される場合、他のデータ・セットは、カタログ検索順序によって判別されるカタログ内にカタログ化されているシステム管理データ・セットまたは非システム管理データ・セットのいずれかでなければなりません。基本クラスターは空であることはありえません (つまり、その高頻度使用 RBA はゼロではありえません)。代替索引がNONUNIQUEKEY 属性を使って定義された場合以外、各レコードの代替索引は固有でなければなりません。

アクセス方式サービス・プログラムは、データ・レコードを順次読み取るための基本クラスターをオープンし、データ・レコードから入手された情報をソートし、代替索引データ・レコードをビルドします。

次のように、基本クラスターのデータ・レコードが読み取られ、情報が抽出されてキー・ポインター・ペアが作成されます。

v 基本クラスターが入力順である場合は、代替キー値およびデータ・レコードのRBA がキー・ポインター・ペアを形成します。

v 基本クラスターがキー順である場合は、代替キー値およびデータ・セット・レコードの基本キー値がキー・ポインター・ペアを形成します。

キー・ポインター・ペアは、昇順代替キー順序でソートされます。

キー・ポインター・ペアが昇順代替キー順序にソートされた後、アクセス方式サービス・プログラムはキー・ポインター・ペア用の代替索引を作成します。すべての代替索引レコードが作成されて、代替索引にロードされると、代替索引およびその基本クラスターはクローズされます。

関連資料: レコードのソートに必要な仮想記憶域の量の計算、BLDINDEX コマンドの使用、およびカタログ検索順序については、「z/OS DFSMS Access Method

Services for Catalogs」を参照してください。

代替索引の維持VSAM は、代替索引が常に基本クラスターと同期していると想定しており、オープン処理中に同期を検査しません。したがって、基本クラスターに対して行われたすべての構造上の変更は、その代替索引に反映されなければなりません。これは、索引アップグレードと呼ばれます。

自身の代替索引を維持するか、VSAM にそれらを維持させることができます。代替索引が、DEFINE コマンドの UPGRADE 属性を使用して定義されるとき、 VSAM

は、関連付けられた基本クラスターに変更があるたびに、代替索引を更新します。VSAM は、基本クラスターが出力用にオープンされるたびに、基本クラスター用のすべての更新代替索引をオープンします。制御インターバル処理を使用している場合は、 UPGRADE を使用することはできません。 207ページの『第 11 章 制御インターバルの処理』を参照してください。

VSAM データ・セットの定義

第 7 章 VSAM データ・セットの定義 141

Page 166: DFSMS データ・セットの使用法

UPGRADE 属性を使用して、基本クラスター内で最大 255 の代替索引を定義できます。

所定の基本クラスターについて UPGRADE 属性を持つすべての代替索引は、アップグレード・セットに属しています。アップグレード・セットは、基本データ・レコードが挿入、消去、または更新されるたびに更新されます。アップグレードは要求の一部であり、 VSAM は、ご使用のプログラムに制御を戻す前にそれを完了します。アップグレード処理が、マシンまたはプログラムのエラーにより中断されたため、レコードが基本クラスターから欠落しているが、そのポインターが代替索引内にまだ存在する場合、レコード管理は、欠落している基本レコードを再挿入できるようにさせることによって、代替索引を基本クラスターと同期します。ただし、ポインターが代替索引から欠落している、つまり代替索引がすべての基本クラスター・データ・レコードを反映していない場合、この矛盾を解決するにはご使用の代替索引を作成し直す必要があります。

SHAREOPTIONS 2、3、および 4 を使用する場合は、基本クラスターおよびその関連付けられた代替索引上で並行要求 (GET および PUT など) を出すときに読み取り/書き込み保全性を引き続き保証する必要があることに注意してください。読み取り/書き込み保全性を保証しないと、GET 要求について一時的に「レコードが見付からない」または「関連付けられる基本レコードなし」のエラーが生じることがあります。そのようなエラーは、GET 要求を再発行することによって迂回できますが、読み取り/書き込み保全性を保証することによってエラーを防ぐのが最良です。

代替索引が定義されるときに DEFINE コマンドで NOUPGRADE を指定しない場合、基本クラスターに対して行われた追加、削除、または変更が関連付けられた代替索引で反映されません。

更新用のパスがオープンされるときに、基本クラスターおよびアップグレード・セット内のすべての代替索引が割り振られます。代替索引の更新が不必要な場合は、DEFINE PATH コマンドで NOUPDATE を指定することができ、基本クラスターのみが割り振られます。その場合、VSAM は代替索引を自動的にアップグレードしません。 ACB マクロで MACRF=DSN を指定して 2 つのパスがオープンされる場合、 UPDATE を指定して他のパスがオープンされると、1 つのパスのNOUPDATE 指定は無効にされます。

代替索引のバックアップDFSMShsm を使用して、基本クラスターおよびその関連の代替索引をバックアップすることができます。 詳しくは、「z/OS DFSMShsm Managing Your Own Data」を参照してください。

パスの定義代替索引が定義された後、アクセス方式サービス・プログラム・コマンド DEFINE

PATH を使用して、代替索引とその基本クラスターの間の関係を設定する必要があります。パスに名前を付けなければならず、それにパスワードを与えることもできます。パス名は、基本クラスター/代替索引のペアを指します。パスを通じてデータ・セットにアクセスするときには、JCL の DSNAME パラメーターでパス名を指定する必要があります。

VSAM データ・セットの定義

142 z/OS V1R10 DFSMS データ・セットの使用法

Page 167: DFSMS データ・セットの使用法

プログラムが処理用のパスをオープンするとき、代替索引と基本クラスターの両方がオープンされます。キー順基本クラスター内のデータが、パスの代替索引を使用して読み書きされるとき、キー処理が使用されます。 RBA 処理は、入力順データ・セット基本クラスターの読み取りまたは書き込みの場合のみ許可されます。

関連資料: DEFINE PATH コマンドの使用については、「z/OS DFSMS Access

Method Services for Catalogs」を参照してください。

ページ・スペースの定義ページ・スペースは、仮想記憶域のページを含むシステム・データ・セットです。ページは、補助記憶マネージャーによってページ・スペースに保管されたり、そこから取り出されたりする。ページ・スペースは、事前フォーマットされている (他のデータ・セットと異なります) 入力順クラスターであり、単一ボリュームに含まれます。ページ・スペースをユーザー・データ・セットとしてオープンすることはできません。

ページ・スペースの最大サイズは、16 777 215 スロット (レコード) と等しくなります。

ページ・スペースを定義するための考慮事項は、クラスターを定義するための考慮事項と非常によく似ています。DEFINE PAGESPACE コマンドは、DEFINE

CLUSTER コマンドと同じパラメーターの多くを持っているので、ページ・スペースについて提供しなければならない情報は、クラスターについて指定するものに似ています。ページ・スペース・データ・セットは拡張フォーマットにすることができません。

ページ・スペースをユーザー・カタログ内で定義してから、カタログを新規システムに移動し、それをシステムのマスター・カタログとして設定することができます。ページ・スペースがシステム管理されるには、それらをカタログ化する必要があり、どのカタログを使用するかシステムに決定させる必要があります。また、ページ・スペースは、重複するデータ・セットにすることはできません。ページ・スペースの項目がユーザー・カタログ内にある場合は、システムはそれを使用できません。

DEFINE PAGESPACE コマンドを発行するとき、システムはページ・スペース用の項目をカタログ内に作成してから、ページ・スペースを事前フォーマットします。事前フォーマット・プロセス中にエラーが発生する場合 (たとえば、入出力エラーまたは割り振りエラー)、ページ・スペースの項目は、それ用のスペースが存在しないにもかかわらず、カタログ内に残ります。ページ・スペースを再定義する前に、DELETE コマンドを発行して、ページ・スペースのカタログ項目を除去してください。

各ページ・スペースは、カタログ内で、クラスター項目およびデータ項目の 2 つの項目によって表されます。(ページ・スペースは入力順クラスターです。) ページ・スペースが RACF 保護されている場合は、これらの項目はどちらも RACF 保護されている必要があります。

ページ・スペースがシステム初期化時にシステム・データ・セットとして定義されている場合、またはそれが SYS1.PARMLIB で指定されている場合、システムはそ

VSAM データ・セットの定義

第 7 章 VSAM データ・セットの定義 143

Page 168: DFSMS データ・セットの使用法

れを認識します。ページ・スペースとして使用されるためには、それがマスター・カタログ内で定義されている必要があります。

関連資料:

v DEFINE PAGESPACE パラメーターを使用したページ・サイズの定義については、「z/OS DFSMS Access Method Services for Catalogs」を参照してください。

v データ・セット、特にシステム管理データ・セットについての情報の指定の詳細は、 122ページの『クラスター情報の指定』および 123 ページの『アクセス方式サービス・プログラム・パラメーターの使用』を参照してください。

v VSAM が重複するデータ・セットを処理する方法については、 121ページの『重複データ・セット名』を参照してください。

カタログおよびデータ・セット内の問題の検査VSAM は、カタログおよびデータ・セット内の問題を見つけ出すいくつかの手段を提供します。このセクションでは、カタログ項目をリストして、データ・セットの内容を印刷するための手順を説明します。

アクセス方式サービス・プログラム REPRO コマンドを使用して、データ・セットを出力装置にコピーすることもできます。REPRO について詳しくは、 137ページの『データ・セットのコピーおよびマージ』を参照してください。

アクセス方式サービス・プログラム VERIFY コマンドは、システム障害後にデータ・セット終わり値を検査して復元する手段を提供します。

アクセス方式サービス・プログラム EXAMINE コマンドによってユーザーは、キー順データ・セット・クラスターの矛盾を分析して、それについて報告することができます。 EXAMINE コマンドについては、 273ページの『第 15 章 構造エラーについての VSAM キー順データ・セット・クラスターの検査』に説明があります。

注: VSAM データ・セットが JCL ジョブに割り振られているがオープンされておらず、別のジョブが削除されて同じ VSAM データ・セットが再定義された場合、最初のジョブはデータ・セットをオープンすることができません。データ・セットを削除、再定義すると、 IDCAMS DELETE NOSCRATCH コマンドは SYSDSN/dsname リソース上でシリアライズしません。別の UCB 上でパスが削除、再定義され、新しい UCB と TIOT 項目内の元の UCB が一致しないので続く OPEN が失敗した場合、割り振りは特定の UCB を指定するからです。

関連資料: VERIFY の詳細については、 63ページの『不適切にクローズされたデータ・セットを処理するための VERIFY の使用』を参照してください。DIAGNOSE

コマンドを使用して無効なデータの存在または BCS と VVDS の関係を示すことについては、「z/OS DFSMS Managing Catalogs」を参照してください。

カタログ項目のリストカタログまたはデータ・セットを定義した後、アクセス方式サービス・プログラム・コマンド LISTCAT を使用して、カタログの項目の全部または一部をリストします。LISTCAT は、カタログで定義されたオブジェクトについての情報を表示します。たとえば、次のものがあります。

VSAM データ・セットの定義

144 z/OS V1R10 DFSMS データ・セットの使用法

Page 169: DFSMS データ・セットの使用法

v オブジェクトの属性 (SMS 属性を含む)

v 作成日および有効期限v 保護指定v 動的使用または項目によって表されるデータ・セット・アクセスに関する統計v スペース割り振りv ボリューム情報v データ・セットの構造

リストは、項目の数、および各項目について印刷される情報を制限することによってカスタマイズすることができます。

対話式記憶管理機能 (ISMF) を使用している間に、「データ・セット・リスト」パネル上で CATLIST 行演算子を発行することによって同じリストを入手することができます。リストはデータ・セット内に入れられ、要求を出した直後にそれを見ることができます。

関連資料: CATLIST 行演算子については、「z/OS DFSMS 対話式記憶管理機能(ISMF) の使用法」を参照してください。

データ・セットの内容の印刷問題が発生する場合、アクセス方式サービス・プログラム・コマンド PRINT を使用して、固定長または可変長 RRDS、キー順、線形、または入力順 VSAM データ・セット、代替索引、またはカタログの内容の一部または全部を印刷することができます。相対バイト・アドレスを使用する場合は、線形データ・セットの一部を印刷できます。部分印刷は、4096 バイト境界に切り上げられます。キー順データ・セットまたは代替索引のコンポーネントは、コンポーネント名をデータ・セット名として指定することによって個別に印刷できます。代替索引は、それがキー順クラスターであるかのように印刷されます。

入力順および線形データ・セットは、物理順次順序で印刷されます。キー順データ・セットは、キー順または物理順次順序で印刷できます。固定長または可変長RRDS は、相対レコード番号シーケンスで印刷されます。基本クラスターは、クラスター用のデータ・セット名としてパス名を指定することによって代替キー順で印刷できます。

論理レコードのデータ内容のみが印刷されます。システム定義の制御フィールドは印刷されません。印刷された各レコードは、次のいずれかによって識別されます。

v 入力順データ・セット用の相対バイト・アドレス (RBA)。

v 索引順およびキー順データ・セット用、および代替索引用のキー。

v 固定長または可変長 RRDS 用のレコード番号。

関連資料: プログラム許可については、「z/OS MVS Programming: Authorized

Assembler Services Guide」を参照してください。 PRINT コマンドを使用したカタログの印刷については、 74ページの『許可プログラム機能とアクセス方式サービス・プログラム』を参照してください。

制約事項: 入力を読み取ろうとしている間に、システムが 4 つの論理または物理エラーあるいはその両方を検出する場合、印刷は異常終了します。

VSAM データ・セットの定義

第 7 章 VSAM データ・セットの定義 145

Page 170: DFSMS データ・セットの使用法

データ・セットの削除「z/OS DFSMS Access Method Services for Catalogs」で説明されているアクセス方式サービス・プログラム DELETE コマンドを使用して、データ・セット、カタログ、およびオブジェクトを削除します。 DELETE 項目名 は、データ・セットが常駐するボリューム、およびデータ・セット用のカタログ項目からデータ・セットを除去します。クラスター全体を削除することも、たとえば、代替索引、パス、または別名のみを削除することもできます。 DELETE 項目名 VVR FILE (ddname) を使用して、非カタログ化 VSAM データ・セットを削除します。DELETE 項目名VVR FILE (ddname) は、VSAM ボリューム・データ・セット (VVDS) から VSAM

ボリューム・レコード (VVR) を、ボリューム目録 (VTOC) からデータ・セット制御ブロックを除去します。

クラスターまたは代替索引を削除するときにそのコンポーネントを消去したい場合は、ERASE パラメーターを使用します。ERASE はデータ・セットを上書きします。データ・セット項目 (DSCB) を VTOC から除去したくない場合はNOSCRATCH パラメーターを使用します。 NOSCRATCH は、同じ DELETE コマンド上の ERASE パラメーターを無効にします。

アクセス方式サービス・プログラムを使用して、NOUPGRADE で定義された代替索引と関連している VSAM クラスターまたはパスを削除します。ただし、DISP=(OLD,DELETE) を指定した DD ステートメントを指定して、 JCL を使用した削除を行う場合は、代替索引の削除に必要なボリュームがすべて割り振られるわけではありません。削除操作はジョブ・ステップの終了時に失敗し、エラー・メッセージが表示されます。

VSAM データ・セットの定義

146 z/OS V1R10 DFSMS データ・セットの使用法

Page 171: DFSMS データ・セットの使用法

第 8 章 VSAM データ・セットの定義と操作: 例

この章では以下のトピックを扱います。

トピック 該当ページ

VSAM データ・セットを定義する例 148

一時 VSAM データ・セットの定義の例 150

代替索引とパスの定義の例 151

次のセットの例には、次のものを定義できるアクセス方式サービス・プログラム・コマンドを通じて使用可能な広範囲の機能が含まれています。v VSAM データ・セットv 一時 VSAM データ・セットv 代替索引およびパス

アクセス方式サービス・プログラムを通じて使用可能な他の機能の例は、「z/OS

DFSMS Access Method Services for Catalogs」を参照してください。

既存システム・カタログは、更新パスワード、制御パスワード、およびマスター・パスワードのレベルでセキュリティー保護されていると想定されています。パスワードは、システム管理データ・セットおよびカタログ用にはサポートされていないので、システム管理データ・セットおよびカタログを定義および取り扱う例では、操作が行われるには読者が RACF 権限を持っていることを前提とします。

© Copyright IBM Corp. 1987, 2008 147

Page 172: DFSMS データ・セットの使用法

VSAM データ・セットを定義する例次の例では、カタログを作成し、データ・セット (新規に作成されたカタログ内でカタログ化されているもの) を定義し、データ付きのデータ・セットをロードし、データ・セットのカタログ項目をリストし、データ・セットを印刷するためのコマンドの典型的なシーケンスを示しています。

//DEFINE JOB ...//STEP1 EXEC PGM=IDCAMS//SYSPRINT DD SYSOUT=*//SYSIN DD *

DEFINE USERCATALOG (NAME (USERCATX) ICFCATALOG CYLINDERS(15 5) -VOLUMES(VSER05)) DATA (CYLINDERS(3 1))

IF LASTCC = 0 THEN -DEFINE CLUSTER(NAME (EXAMPL1.KSDS) VOLUMES(VSER05)) -

DATA (KILOBYTES (50 5))

/*//STEP2 EXEC PGM=IDCAMS//SYSPRINT DD SYSOUT=*//SYSABEND DD SYSOUT=*//AMSDUMP DD SYSOUT=*//INDSET4 DD DSNAME=SOURCE.DATA,DISP=OLD,// VOL=SER=VSER02,UNIT=3380//SYSIN DD *

REPRO INFILE(INDSET4) OUTDATASET(EXAMPL1.KSDS)

IF LASTCC = 0 THEN -LISTCAT ENTRIES(EXAMPL1.KSDS)

IF LASTCC = 0 THEN -PRINT INDATASET(EXAMPL1.KSDS)

/*

次のアクセス方式サービス・プログラム・コマンドがこの例で使用されています。

DEFINE USERCATALOG カタログを作成するDEFINE CLUSTER データ・セットを定義するREPRO データ・セットをロードするLISTCAT カタログ項目をリストするPRINT データ・セットを印刷する

JCL を通じて VSAM データ・セットを作成する例は、 309ページの『第 18 章VSAM 用のジョブ制御言語の使用』を参照してください。上記のコマンドおよび他のアクセス方式サービス・プログラム・コマンドの詳細および例については、「z/OS DFSMS Access Method Services for Catalogs」を参照してください。

VSAM データ・セットの定義と操作: 例

148 z/OS V1R10 DFSMS データ・セットの使用法

Page 173: DFSMS データ・セットの使用法

最初の DEFINE コマンドは、USERCATX という名前が付いたユーザー・カタログを定義しています。USERCATALOG は、ユーザー・カタログが定義されることを指定します。コマンドのパラメーターを次に示します。

NAME NAME が必要であり、定義されるカタログの名前を付けます。

ICFCATALOG カタログ・フォーマットを指定します。

CYLINDERS ボリュームの使用可能なスペースから割り振られるスペースの量を指定します。これが、システム管理カタログ用に指定されている場合は、DATACLAS スペース使用を指定変更します。スペース・パラメーターが必要です。

VOLUMES カタログを入れるボリュームを指定します。

カタログがシステムにより管理されている場合は、システムはそのボリュームを選出します。 SMS は、VOLUMES パラメーターで指定された値を無視します。

ただし、カタログが保証スペースを伴うストレージ・クラスに属している場合は、 SMS は、VOLUMES パラメーターで指定したボリュームを選択します。ストレージ・クラスを選択するために VOLUMES パラメーターで指定したボリュームを使用する ACS ルーチンを書き込むこともできます。

DATA クラスターのデータ・コンポーネントについて属性が明示的に指定されるときは、DATA が必要です。

CYLINDERS データ・コンポーネント用に割り振られるスペースの量を指定します。スペース・パラメーターが必要です。

2 番目の DEFINE コマンドは、EXAMPL1.KSDS という名前付きのキー順データ・セットを定義します。コマンドのパラメーターは次の通りです。

CLUSTER CLUSTER キーワードが必要であり、クラスターが定義されることを指定します。 CLUSTER キーワードの後に、全クラスター用に指定されたパラメーター、およびオプションによって、データと索引コンポーネント用に個別に指定されたパラメーターが続きます。

NAME NAME が必要であり、定義されるクラスターを指定します。

VOLUMES クラスターのコンポーネントが割り振られたスペースであることを指定します。システム管理クラスターではクラスター当たり最大 59 ボリュームを指定することができます。

DATA DATA は、クラスターのデータ・コンポーネントに対してパラメーターが明示的に指定されているときは、必要です。

KILOBYTES データ・コンポーネント用に割り振られるスペースの量を指定します。

REPRO コマンドは、ここでは、SOURCE.DATA と呼ばれる既存のデータ・セットから EXAMPL1.KSDS という名前付きの VSAM キー順データ・セットをロードします (INDSET4 DD ステートメントによって説明されます)。コマンドのパラメーターは次の通りです。

INFILE ソース・データを含むデータ・セットを識別します。このデータ・セット用の DD ステートメントの ddname は、このパラメーターで指定された名前に一致する必要があります。

VSAM データ・セットの定義と操作: 例

第 8 章 VSAM データ・セットの定義と操作: 例 149

Page 174: DFSMS データ・セットの使用法

OUTDATASET ロードされるデータ・セットの名前を識別します。アクセス方式サービス・プログラムは、データ・セットを動的に割り振ります。データ・セットはマスター・カタログ内にカタログ化されます。

クラスター・コンポーネントはパスワード保護されていないので、パスワードは必要ありません。

REPRO 操作が成功する場合、データ・セットのカタログ項目がリストされ、ロードされたばかりのデータ・セットの内容が印刷されます。

LISTCAT カタログ項目をリストします。 ENTRIES パラメーターは、リストされる項目の名前を識別します。

PRINT データ・セットの内容を印刷します。 INDATASET パラメーターが必要であり、印刷されるデータ・セットの名前を識別します。アクセス方式サービス・プログラムは、データ・セットを動的に割り振ります。データ・セットはマスター・カタログ内にカタログ化されます。 クラスター・コンポーネントはパスワード保護されていないので、パスワードは必要ありません。

一時 VSAM データ・セットの定義の例次の例では、ALLOCATE コマンドを使用して新規一時 VSAM データ・セットを定義します。 JCL を通じて一時 VSAM データ・セットを作成する例は、 317ページの『例 4: 一時 VSAM データ・セットの割り振り』を参照してください。 JCL を使用して永続 VSAM データ・セットを定義する方法については、 315ページの『JCL を使用して VSAM データ・セットを割り振る例』を参照してください。

例 1: ALLOCATE を使用しての一時 VSAM データ・セットの定義

//ALLOC JOB ...//STEP1 EXEC PGM=IDCAMS//SYSPRINT DD SYSOUT=A//SYSIN DD *

ALLOC -DSNAME(&CLUSTER) -NEW -RECORG(ES) -SPACE(1,10) -AVGREC(M) -LRECL(256) -STORCLAS(TEMP)

/*

コマンドのパラメーターは次の通りです。

DSNAME データ・セット名を指定します。システム管理一時データ・セット用のデータ・セット名を指定する場合は、& または && で始めなければなりません。DSNAME パラメーターは、一時データ・セットの場合のみオプショナルです。DSNAME を指定しない場合、システムは、一時データ・セット用に修飾されたデータ・セット名を生成します。

VSAM データ・セットの定義と操作: 例

150 z/OS V1R10 DFSMS データ・セットの使用法

Page 175: DFSMS データ・セットの使用法

NEW 新規データ・セットがこのジョブ・ステップで作成されることを指定します。

RECORG VSAM 入力順データ・セットを指定します。

SPACE 1 の平均レコード長および 10 の 1 次数量を指定します。

AVGREC SPACE キーワード上で指定された 1 次数量がメガバイト (1,048,576 の乗数) 単位のレコードの数を表すことを指定します。

LRECL 256 バイトのレコード長を指定します。

STORCLAS 一時データ・セット用のストレージ・クラスを指定します。 STORCLAS

キーワードはオプショナルです。新規データ・セット用の STORCLAS

を指定しておらず、ストレージ管理者が ACS ルーチンを提供してある場合、ACS ルーチンはストレージ・クラスを選択することができます。

例 2: デフォルト・パラメーター値を使用しての一時データ・セットの作成

次の例は、一時非 VSAM 順次データ・セットを作成するために必要なパラメーターの最小数を示しています。一時 VSAM データ・セットを作成したい場合は、RECORG パラメーターを指定してください。

//ALLOC JOB ...//STEP1 EXEC PGM=IDCAMS//SYSPRINT DD SYSOUT=A//SYSIN DD *

ALLOC -FILE(ddname)NEW -RECORG(ES)

*/

DSNAME 名が指定されない場合は、システムがそれを生成します。STORCLAS 名が指定されておらず、ストレージ管理者が ACS ルーチンを提供してある場合は、ACS ルーチンがストレージ・クラスを選択することができます。

代替索引とパスの定義の例このセクションでは、アクセス方式サービス・プログラム DEFINE

ALTERNATEINDEX および DEFINE PATH コマンドが、代替索引およびパスを定義するのに使用されます。

JCL ステートメントIDCUT1 および IDCUT2 DD ステートメントは、外部ソートが実行される場合に 2

つのソート作業データ・セットを定義および使用するために BLDINDEX に使用可能にされたデータ・スペースを含むボリュームおよび DSNAMES を説明します。内部ソートを実行するための十分な仮想記憶域が使用可能な場合、データ・スペースは BLDINDEX によって使用されません。

VSAM データ・セットの定義と操作: 例

第 8 章 VSAM データ・セットの定義と操作: 例 151

Page 176: DFSMS データ・セットの使用法

コマンド最初の DEFINE コマンドは、基本クラスター EXAMPL1.KSDS を通しての VSAM

代替索引を定義します。

NAME NAME は必要であり、定義されるオブジェクトの名前を付けます。

RELATE RELATE は必要であり、代替索引が定義されている基本クラスターの名前を指定します。

MASTERPW およびUPDATEPW

代替索引について、それぞれマスターおよび更新パスワードを指定します。

KEYS 代替キーの長さ、および基本クラスター・レコードでのそのオフセットを指定します。

RECORDSIZE 代替索引レコードの長さを指定します。平均および最大レコード長は、それぞれ 40 および 50 バイトです。代替索引は、NONUNIQUEKEY 属性を使用して定義されるので、索引は任意の 1

つの代替キーのすべてのオカレンスについて基本キーを含むのに十分なだけ大きくなければなりません。

VOLUMES VOLUMES は非システム管理データ・セットの場合のみ必要であり、代替索引を含むボリュームを指定します (EXAMPL1.AIX)。

CYLINDERS 代替索引に割り振られるスペースの量を指定します。スペース・パラメーターが必要です。

NONUNIQUEKEY 基本クラスターが任意の 1 つの代替キーの複数のオカレンスを含むことができることを指定します。

UPGRADE 代替索引が、レコードの追加または削除など、基本クラスター・レコードに対して行われるすべての変更を反映することを指定します。

CATALOG マスター・カタログは、パスワード保護されているので、CATALOG パラメーターが必要です。これは、マスター・カタログの名前、および保護されたカタログを定義するのに必要とされるその更新またはマスター・パスワードを指定します。

2 番目の DEFINE コマンドは、代替索引を通じてのパスを定義します。代替索引が作成された後、パス名を使用してオープンすると、代替索引を通じての基本クラスターの処理が発生します。

NAME NAME パラメーターは必要であり、定義されるオブジェクトの名前を付けます。

PATHENTRY PATHENTRY パラメーターは必須であり、パスが定義される代替索引の名前およびそのマスター・パスワードを指定します。

READPW パス用の読み取りパスワードを指定します。これは、マスター・パスワード・レベルへと伝達されます。

CATALOG マスター・カタログは、パスワード保護されているので、 CATALOG パラメーターが必要です。これは、マスター・カタログの名前、および保護されたカタログを定義するのに必要とされるその更新またはマスター・パスワードを指定します。

VSAM データ・セットの定義と操作: 例

152 z/OS V1R10 DFSMS データ・セットの使用法

Page 177: DFSMS データ・セットの使用法

BLDINDEX コマンドは、代替索引を作成します。内部ソートを実行するために十分な仮想記憶域が使用可能であると想定します。ただし、想定が正しくなく、外部ソートを実行しなければならない場合は、IDCUT1 および IDCUT2 のデフォルトddname を指定した DD ステートメントが、2 つの外部ソート作業データ・セット用に提供されます。

INDATASET INDATASET パラメーターは、基本クラスターを識別します。アクセス方式サービス・プログラムは、基本クラスターを動的に割り振ります。基本クラスターのデータ・コンポーネントと索引コンポーネントはパスワード保護されているとはいえ、そのクラスター項目は、パスワード保護されていません。

OUTDATASET OUTDATASET パラメーターは、代替索引を識別します。アクセス方式サービス・プログラムは、代替索引を動的に割り振ります。代替索引の更新レベルまたは高位レベルのパスワードが必要です。

CATALOG CATALOG パラメーターは、マスター・カタログの名前を指定します。BLDINDEX が外部ソート作業データ・セットを使用する必要がある場合、それらはマスター・カタログ内で定義されるか、それから削除されます。マスター・パスワードは、これらのアクションを許可します。

PRINT コマンドによって、この関係を作成するために定義されたパスを使用して、基本クラスターが、代替キーを使って印刷されます。INDATASET パラメーターは、パス・オブジェクトを識別します。アクセス方式サービス・プログラムは、パスを動的に割り振ります。パスの読み取りパスワードが必要です。

VSAM データ・セットの定義と操作: 例

第 8 章 VSAM データ・セットの定義と操作: 例 153

Page 178: DFSMS データ・セットの使用法

154 z/OS V1R10 DFSMS データ・セットの使用法

Page 179: DFSMS データ・セットの使用法

第 9 章 VSAM データ・セットの処理

この章では以下のトピックを扱います。

トピック 該当ページ

アクセス方式制御ブロックの作成 156

出口リストの作成 157

データ・セットのオープン 158

要求パラメーター・リストの作成 159

制御ブロックの内容の操作 161

データ・セットへのアクセスの要求 163

データ・セットのクローズ 174

SRB またはクロスメモリー・モードでの操作 175

プログラムでの VSAM マクロの使用 176

VSAM データ・セットを処理するには、VSAM マクロを使用します。データを読み取り、更新、追加、または削除するために VSAM データ・セットを処理するには、次の手順を使用することができます。

1. ACB または GENCB マクロを使用してオープンされるデータ・セットを示すためにアクセス方式制御ブロックを作成します。

2. EXLST または GENCB マクロを使用して、提供するオプションの出口ルーチンを指定するために出口リストを作成します。

3. BLDVRP マクロを使用して、オプションにより、リソース・プールを作成します。 ( 239ページの『第 13 章 VSAM データ・セット間でのリソースの共用』を参照してください。)

4. OPEN マクロを使用して、処理したいデータ・セットにプログラムを接続します。

5. RPL または GENCB マクロを使用して、アクセスに対する要求を定義するために要求パラメーター・リストを作成します。

6. GENCB、TESTCB、MODCB、および SHOWCB マクロを使用して制御ブロックの内容を操作します。

7. VSAM 要求マクロ (GET、PUT、POINT、ERASE、CHECK、および ENDREQ)

のうち 1 つ以上を使用して、データ・セットへのアクセスを要求します。

8. CLOSE マクロを使用して、プログラムをデータ・セットから切断します。

リソース・プールを使用するためにオープンが発行される前に、クラスターまたは代替索引のすべてのコンポーネントについての仮想リソース・プールをうまくビルドしておく必要があります。そうでないと、結果が予測不能になることがあり、パフォーマンスの問題が発生することがあります。

各マクロの構文についての情報、およびマクロのコーディングされた例は、「z/OS

DFSMS Macro Instructions for Data Sets」を参照してください。

© Copyright IBM Corp. 1987, 2008 155

Page 180: DFSMS データ・セットの使用法

ACB、RPL、および EXLST は、VSAM の呼び出し元によって作成されます。これらのブロック用のストレージが入手されるとき、仮想記憶管理は、要求発行者のPSW キーをサブプール・ストレージに割り当てます。許可タスクは、その PSW キーを変更することができます。VSAM レコード管理はその呼び出し元の保護キーで実行されるので、そのような変更により、前に取得された制御ブロックが使用不能になる場合があります。これらの制御ブロックを含むサブプールのストレージ・キーは、VSAM 呼び出し元のキーにもはや一致していないからです。

アクセス方式制御ブロックの作成処理用のデータ・セットをオープンする前に、次のことを行うアクセス方式制御ブロック (ACB) を作成する必要があります。

v オープンされるデータ・セットを識別する

v 処理のタイプを指定する

v 基本オプションを指定する

v データ・セットの処理中にユーザー出口ルーチンが使用されるかどうかを指示する

プログラムが必要とする種類の処理を準備するには OPEN の ACB に次の情報を含めてください。

v 出口ルーチン用の出口リストのアドレス。EXLST マクロを使用して、リストを構成します。

v 並行要求を処理している場合は、データ・セットの処理用に定義された要求の数(STRNO)。並行要求について詳しくは、 171ページの『並行要求をする』を参照してください。

v 入出力バッファー仮想記憶スペースのサイズ、またはデータ・レコードと索引レコードを処理するために VSAM に提供している入出力バッファーの数、あるいはその両方。

v 希望する処理のタイプに必要とされるパスワード。パスワードは、システム管理データ・セットの場合はサポートされません。操作のタイプが実行されるには、読者は RACF 許可を持っている必要があります。

v 使用することになる処理オプションは次のとおりです。– キー、アドレス、制御インターバル、または組み合わせ– 順次、直接、またはスキップ順次アクセス、あるいは組み合わせ– 検索、ストレージ、または更新 (削除を含む)、あるいは組み合わせ– 共用または非共用リソース

v VSAM からのエラー・メッセージ用の区域のアドレスおよび長さ。

v RLS を使用している場合は、253 ページの『第 14 章 VSAM レコード・レベル共用の使用』を参照してください。

プログラムがアセンブルされている場合は、ACB マクロを使用してアクセス方式制御ブロックを作成することができ、プログラムが実行されている場合は、GENCB

マクロを使用して制御ブロックを作成することができます。GENCB を使用することの利点と欠点についての情報は、 161ページの『制御ブロックの内容の操作』を参照してください。

VSAM データ・セットの処理

156 z/OS V1R10 DFSMS データ・セットの使用法

Page 181: DFSMS データ・セットの使用法

出口リストの作成データ・セット処理中に出口ルーチンにアクセスするには、EXLST マクロを使用して出口ルーチンのアドレスを指定する必要があります。プログラム内の任意の数のACB マクロは、それらのための特殊な処理をすべて行うため同じ出口ルーチンについて同じ出口リストを指示することができ、あるいは異なる出口リストを指示することができます。出口ルーチンは、次のタスクに使用します。

v 物理エラーの分析。VSAM が、入出力操作においてオペレーティング・システムのエラー・ルーチンが訂正することができないエラーを検出する場合、エラー・ルーチンは、物理エラー分析ルーチン (SYNAD ユーザー出口) が取り組むためのメッセージをフォーマット設定します。

v 論理エラーの分析。無効要求など、入出力操作に直接関連していないエラーによって、VSAM は論理エラー分析ルーチン (LERAD ユーザー出口) に出ることになります。

v データ・セット終わり処理。プログラムがデータ・セット内の最後のレコードを超えてレコードを要求するとき、データ・セット終わりルーチン (EODAD ユーザー出口) に制御が与えられます。データ・セットの末尾が最高アドレスまたは最高キーが付いたレコードを超える場合、プログラムはアドレスまたはキー・アクセスを使用しています。

v トランザクションのジャーナル記録。データ・セットに対してトランザクションをジャーナル記録するには、ジャーナル・ルーチン (JRNAD ユーザー出口) を指定する場合があります。アドレス・アクセスを使用してキー順データ・セットを処理するには、キー処理中に RBA が変更されたか知る必要があります。キーによって処理しているとき、VSAM は、RBA の変更がある制御インターバルを書き込む前に RBA 変更を注釈するためにルーチンに出ます。圧縮データ・セットについてトランザクションをジャーナル記録しているときは、RBA およびデータ長が圧縮データを表します。データ・セットが拡張アドレッシング可能である場合は、VSAM は、RBA 変更について JRNAD ルーチンに出ません。

v ユーザー処理。ユーザー処理出口 (UPAD) は、新規作業単位をディスパッチする必要があるサブシステムを支援するために使用可能です。UPAD 待機出口は、VSAM が WAIT SVC を出す前に、制御が与えられます。UPAD ポスト出口を使用して、クロスメモリー間処理をより容易にします。 301ページの表 26 を参照してください。

EXLST マクロは、ACB を生成するために使用される ACB または GENCB マクロの EXLST パラメーターを使って整合されます。出口リストを使用するには、ACB

内で EXLST パラメーターをコーディングする必要があります。

プログラムがアセンブルされている場合は、EXLST マクロを使用して出口リストを作成することができ、プログラムが実行されている場合は GENCB マクロを使用して出口リストを作成することができます。 GENCB を使用することの利点と欠点についての情報は、 161ページの『制御ブロックの内容の操作』を参照してください。

VSAM データ・セットの処理

第 9 章 VSAM データ・セットの処理 157

Page 182: DFSMS データ・セットの使用法

データ・セットのオープンデータ・セットにアクセスする前に、プログラムは OPEN マクロを発行して、データ・セットを処理用にオープンする必要があります。データ・セットをオープンすると、VSAM は次のアクションを取ります。

v データ・セットが、ACB または GENCB マクロで指定される記述に一致することを確認します (たとえば、MACRF=KEY は、データ・セットがキー順データ・セットであることを意味します)。

v データ・セットへのアクセス要求を処理するために VSAM が必要とする内部制御ブロックを構成します。

どの処理オプションを使用するか決定するために、 VSAM は、データ・セットのデータ定義 (DD) ステートメントおよびカタログ定義からの情報をアクセス方式制御ブロックおよび出口リスト内の情報とマージします。優先順位は次のとおりです。

1. DD ステートメント AMP パラメーター

2. ACB、EXLST、または GENCB パラメーター

3. データ・セット用のカタログ項目

たとえば、ACB または GENCB マクロと DD ステートメントの両方がバッファー・スペース用の値を持つ場合、DD ステートメント内の値がマクロ内のそれらを指定変更します。カタログ項目が DD ステートメントまたはマクロで指定されていない場合、またはそれがデータ・セット定義内で指定されている量より小さい場合、それは最小バッファー・スペースとなります。

v キー順データ・セット、代替索引、またはパスをオープンしている場合は、基本索引およびデータ・コンポーネントへの更新が整合性を持つか検査します。データ・セットとその索引に対する個別の更新が発生する場合、VSAM はタイム・スタンプの矛盾を示すために警告メッセージを出します。

v OPEN 中のエラーによって、更新処理用にオープンしているコンポーネントが不適切にクローズして、出力用オープン標識をオンのままにすることがあります。VSAM が出力用オープン標識を検出するとき、それは暗黙の VERIFY コマンド、および VERIFY コマンドが成功したかどうかを示すメッセージを出します。

更新のために後続の OPEN が発行される場合、VSAM は CLOSE 時に出力用オープン標識をオフにします。 ただし、データ・セットが入力用にオープンになった場合、 VSAM は出力用オープン標識をオンのままにします。

v プログラムが ACB PASSWD パラメーターで指定したパスワードを、データのカタログ定義内の該当するパスワード (ある場合) と比べて検査します。システムは、システム管理データ・セット用のパスワードをサポートしていません。あるレベルのパスワードは、それより下位のパスワードが許可するすべてのことを許可します。操作のためには、読者は RACF 許可を持っている必要があります。パスワード要件は、アクセス方式制御ブロックで指定されているアクセスの種類に応じて異なります。

– 全アクセス権限により、関連付けられた索引またはカタログ・レコード上のデータ・セットですべての操作 (検索、更新、挿入、および削除) を実行することができます。マスター・パスワードは、それが保護するデータ・セットまたはカタログ用のカタログ項目を削除または変更することができます。

VSAM データ・セットの処理

158 z/OS V1R10 DFSMS データ・セットの使用法

Page 183: DFSMS データ・セットの使用法

– 制御インターバル更新アクセスは、制御パスワードまたは RACF 制御権限を必要とします。 制御によって、制御インターバル・アクセスを使用して、それが保護するデータ・セット内のレコードを検索、更新、挿入、または削除することができます。制御インターバル・アクセスの使用についての情報は、207ページの『第 11 章 制御インターバルの処理』を参照してください。

制御インターバル読み取りアクセスは、それが保護するデータ・セット内の制御インターバルを検査できるようにする、読み取りパスワード または RACF

読み取り権限のみを必要とします。 読み取りパスワードまたは RACF 読み取り権限では、レコードを追加、変更、または削除することはできません。

– 更新アクセスでは更新パスワードが必要です。これによって、それが保護するデータ・セット内のレコードを検索、更新、挿入、または削除することができます。

– 読み取りアクセスでは読み取りパスワードが必要です。これによって、それが保護するデータ・セット内のレコードを検査できます。読み取りパスワードは、レコードを追加、変更、または削除することを許可しません。

注: RACF 保護は、データ・セットのパスワード保護に取って代わります。 RACF

検査は、監視プログラム状態またはキー 0 にある呼び出し元については迂回されます。パスワードおよび RACF 保護の詳細については、 67ページの『第 5

章 データ・セットの保護』を参照してください。

要求パラメーター・リストの作成プログラムをデータ・セットに接続した後、アクセスのための要求を出すことができます。要求パラメーター・リストは要求を定義します。このリストは、データ・セットを定義する ACB マクロを指定することにより、要求が送られる先のデータ・セットを識別します。各要求マクロ (GET、PUT、ERASE、POINT、CHECK、および ENDREQ) は、要求を定義する要求パラメーター・リストのアドレスを与えます。

プログラムがアセンブルされている場合は、RPL マクロを使用して要求パラメーター・リスト (RPL) を生成することができ、プログラムが実行されている場合は、GENCB マクロを使用して要求パラメーター・リストを作成することができます。GENCB を使用することの利点と欠点についての情報は、 161ページの『制御ブロックの内容の操作』を参照してください。

要求を定義するときは、その特定の要求に該当する処理オプションのみを指定します。要求に必要ないパラメーターは無視されます。たとえば、要求パラメーター・リストを使用して直接検索から順次検索に切り替える場合、検索引数 (ARG=アドレス) を含むフィールドのアドレスをゼロにリセットする必要はありません。

次の情報は要求を定義しています。

v アドレス (RBA)、キー、または相対レコード番号によるアクセス。アドレス・アクセスは、順次または直接にすることができます。キーまたは相対レコード番号アクセスは、順次、スキップ順次、または直接にすることができます。アクセスは、正方向 (次の順次レコード) または逆方向 (直前の順次レコード) にすることができます。アクセスは、更新用または非更新用にすることができます。レコードを索引するために非更新直接要求を行うと、VSAM は次のレコードに移り、後

VSAM データ・セットの処理

第 9 章 VSAM データ・セットの処理 159

Page 184: DFSMS データ・セットの使用法

続の順次アクセスが行われます。VSAM の位置決めについて詳しくは、 167ページの『位置決め用の POINT マクロ』を参照してください。

v RPL (チェーンによって定義された RPL を含む) は、同期 (要求が完了するまで、VSAM は制御をプログラムに戻さない) または非同期 (要求がアクティブである間に、プログラムが他の要求を処理または発行し続けることができる) のいずれか。非同期要求では、プログラムは CHECK マクロを使用して、要求が完了するまでその処理を中断しなければなりません。同期および非同期処理について詳しくは、 173ページの『非同期要求をする』を参照してください。

v キー付き要求では、総称キー (キー・フィールドの先行位置)、またはレコードのキー・フィールドが比較される全キーのいずれか。

v 検索では、プログラム内の作業域に入るデータ・レコード、またはプログラムに渡される VSAM のバッファー内のレコードのアドレスのいずれか。更新または挿入に関係する要求では、プログラム内の作業域にはデータ・レコードが含まれます。

v 制御インターバルに直接アクセスするための要求では、制御インターバルの RBA

を指定します。制御インターバル・アクセスでは、ユーザーが制御インターバル内の制御情報を維持管理する責任があります。 VSAM のバッファーが使用される場合、 VSAM は、制御インターバルと保管レコードの操作を同時に許可します。プログラムが独自のバッファーを提供する場合、制御インターバル処理のみが許可されます。制御インターバル・アクセスについての情報は、 207ページの『第 11 章 制御インターバルの処理』を参照してください。

要求パラメーター・リストを一緒にチェーニングして、単一の GET または PUT

について一連のアクションを定義することができます。たとえば、チェーン内の各パラメーター・リストは、固有の検索引数を含み、固有の作業域をポイントすることもできます。単一の GET マクロは、チェーン内の各要求パラメーター・リストごとにレコードを検索することになります。チェーン内のすべての RPL は、同じACB を参照する必要があります。

要求パラメーター・リストのチェーンは、単一要求として連続して処理されます。(要求パラメーター・リストをチェーニングすることは、並行要求を並列して処理することと同じではありません。並列に処理するには、VSAM がデータ・セット内の多くの位置を追跡する必要があります。)

チェーン内の各要求パラメーター・リストは、同じ OPTCD サブパラメーターを持つ必要があります。異なるサブパラメーターを持つと、論理エラーが発生することがあります。レコードを更新または削除するためにではなく、レコードを検索するか新規レコードを保管するためにだけ、要求パラメーター・リストをチェーニングすることができます。チェーン要求パラメーター・リストを使用して、入出力バッファー内のレコードを処理することはできません。(RPL OPTCD=UPD および RPL

OPTCD=LOC は、チェーン要求パラメーター・リストの場合は無効です。)

チェーン要求パラメーター・リストでは、POINT、順次または スキップ順次GET、または要求された位置決め (RPL OPTCD=NSP) を指定した直接 GET によって、VSAM は、チェーン内の最後の要求パラメーター・リストによって識別されるレコードに続くレコードに移ることになります。

VSAM データ・セットの処理

160 z/OS V1R10 DFSMS データ・セットの使用法

Page 185: DFSMS データ・セットの使用法

チェーン RPL を使用しているときに、チェーン内のどこかでエラーが発生した場合、エラーが起きたものに続く RPL が、処理されることなく使用可能になり、フィードバック・コードがゼロの完了としてポストされます。

制御ブロックの内容の操作VSAM は、マクロ GENCB、TESTCB、MODCB、および SHOWCB のセットを提供して、実行時に制御ブロックの内容を操作できるようにします。これらのマクロを使用して、アクセス方式制御ブロック、出口リスト、および要求パラメーター・リスト内のフィールドの内容を生成、テスト、変更、および表示します。これらのマクロを使用するときに、制御ブロックのフォーマットについて知っている必要はありません。

GENCB、MODCB、TESTCB、および SHOWCB マクロは、読者が指定するパラメーターによって示されるアクションを、コードで記述するパラメーター・リストを作成します。パラメーター・リストは、示されたアクションを取るために VSAM

に渡されます。パラメーターを誤って指定する場合は、エラーが起こることがあります。

非 VSAM ACB について MODCB、SHOWCB、または TESTCB を発行する場合は、予測不能な結果が発生することがあります。

制御ブロックの生成GENCB マクロは、プログラムが実行されるときにアクセス方式制御ブロック、出口リスト、または要求パラメーター・リストを生成するために使用することができます。GENCB を使用して実行時に制御ブロックを生成することには、制御ブロック・フォーマットが変更されたかもしれない新規バージョンの VSAM を採用するときにプログラムを再アセンブルが必要ないという利点があります。ACB、EXLST、および RPL マクロを使用して制御ブロックを作成してから、制御ブロック・フォーマットが変更された VSAM の以降のリリースを採用する場合は、プログラムを再アセンブルする必要があります。GENCB では、並行要求に使用されるACB、 EXLST、または RPL の複数のコピーを生成することもできます。GENCB

を使用することの欠点は、パス長さが長くなることです。 GENCB を使用して制御ブロックを作成するには、制御ブロックを直接コーディングするより多くの命令が必要です。

WAREA パラメーターを使用して、制御ブロックを生成するためのストレージ域を提供することができます。この作業域には 64K (X'FFFF') のサイズ制限があります。制御ブロックを生成するときにストレージを提供しない場合、LOC=ANY が指定されない限り、ACB、RPL、および EXLST は 16 MB 以下になります。

ACB、EXLST、および RPL フィールドの内容のテストTESTCB マクロを使用して、VSAM は、指定されたフィールドの内容を、指定された値と比較します。この比較の結果を示すために、VSAM は条件コードを PSW (プログラム状況ワード) で設定します。TESTCB が発行されるたびに、キーワードを1 つだけ指定できます。TESTCB を使用して、次のことを見つけ出します。

v アクションが VSAM またはプログラムによって行われたかどうか (たとえば、データ・セットのオープンまたは出口の活動化)。

VSAM データ・セットの処理

第 9 章 VSAM データ・セットの処理 161

Page 186: DFSMS データ・セットの使用法

v テストの結果としてプログラム・ロジックを変更するためにどのような種類のデータ・セットを処理中か。

TESTCB マクロを発行した後、PSW 条件コードを検査します。TESTCB が成功しない場合、レジスター 15 にはエラー・コードが含まれ、VSAM は制御をエラー・ルーチンに渡します (それが指定されている場合)。オプションまたは名前として指定されているキーワードの場合、等しいか等しくないかの比較についてテストします。アドレスまたは番号として指定されるキーワードの場合、等しい、等しくない、高い、低い、高くない、または低くない条件についてテストします。

VSAM は A を B と比較します。ここで、A はフィールドの内容であり、B は比較するための値です。低い条件は、たとえば、A が B より低いことを意味します。つまり、制御ブロック内の値は、指定した値より低くなります。キーワード用のオプション・コード (たとえば、MACRF=(ADR,DIR)) を指定する場合、等しい条件を得るには、それらのそれぞれが制御ブロック内の対応する値に等しくなければなりません。

フィールドの一部は随時テストできますが、他のものはデータ・セットがオープンされた後のみです。データ・セットがオープンされた後のみテストできるものは、キー順データ・セットの場合、OBJECT パラメーターで指定されているように、データまたは索引に属すことができます。

フィールドをテストするのと同時に SHOWCB マクロを使用してフィールドを表示できます。

ACB、EXLST、または RPL の内容の変更MODCB マクロでは、GENCB マクロを使用して生成された制御ブロックをカスタマイズできます。MODCB マクロは、アクセス方式制御ブロック、出口リスト、または要求パラメーター・リストの内容を変更するために使用することができます。要求パラメーター・リストを変更するための典型的な理由は、レコードがすべて同じ長さではないデータ・セットを処理しているときにレコード長 (RECLEN) を変更するため、および要求のタイプ (OPTCD) を直接から順次アクセスへと、または全キー検索引数から総称キー検索引数へと変更するためです。

RPL 内のフィールドを変更するときは、RPL に接続されているアクティブまたは非アクティブなプロセスがないことを最初に確認する必要があります。 それらのRPL にまだ接続されている非アクティブなプロセスには、順次、スキップ順次、および POINT プロセスが含まれます。ENDREQ マクロを使用して、任意のプロセスから RPL を切断できます。

ACB、EXLST、および RPL フィールドの内容の表示SHOWCB マクロによって、VSAM がアクセス方式制御ブロック、出口リスト、または要求パラメーター・リスト内のさまざまなフィールドの内容を作業域へと移動させることができます。エラーの理由を学習したり、データ・セットに関する統計を収集して、プログラムがメッセージを印刷するかトランザクションのレコードを保持できるようにすることができます。

VSAM データ・セットの処理

162 z/OS V1R10 DFSMS データ・セットの使用法

|

|

|

|

|

Page 187: DFSMS データ・セットの使用法

データ・セットへのアクセスの要求プログラムがオープンされ、要求パラメーター・リストが作成された後、アクション要求マクロ GET、PUT、ERASE、POINT、CHECK、および ENDREQ を使用します。各要求マクロは、取られるアクションを定義する要求パラメーター・リストを使用します。たとえば、GET マクロが、同期、順次検索を指定する要求パラメーター・リストにポイントするとき、シーケンス内の次のレコードが検索されます。ENDREQ マクロが要求パラメーター・リストをポイントすると、その要求パラメーター・リストに対する現行の要求 (たとえば、PUT) が終了し、要求パラメーター・リストによって保持されるリソースが解放されます。

アクション要求マクロによって次のタスクを行うことができます。v 新規レコードを挿入するv 既存のレコードを検索するv 既存のレコードをポイントするv 既存のレコードを更新するv 既存のレコードを削除するv バッファーを書き込むv バッファーを保存するv マルチストリング処理を実行するv 並行要求を実行するv パスを使用してレコードにアクセスするv 非同期要求の完了を検査するv 要求処理を終了する

レコードの挿入と追加VSAM データ・セット内のレコード挿入はいくつかの方法で行われます。

v PUT RPL OPTCD=DIR,NSP ― レコードを直接挿入する。 VSAM は、後続の順次アクセス用にその位置を覚えています。

v PUT RPL OPTCD=DIR,NUP ― レコードを直接挿入します。 VSAM はその位置を覚えていません。

v PUT RPL OPTCD=SEQ,NUP または NSP ― レコードを順次挿入します。VSAM は、後続の順次アクセス用にその位置を覚えています。

v PUT RPL OPTCD=SKP,NUP または NSP ― レコードをスキップ順次順序で挿入します。VSAM は、後続の順次アクセス用にその位置を覚えています。

入力順データ・セットへの挿入VSAM は、新規レコードを入力順データ・セットに挿入しません。レコードはすべてデータ・セットの末尾に追加されます。

キー順データ・セットへの挿入キー順データ・セットへの挿入は、データ・セットの定義中に提供されるフリー・スペースまたは制御インターバルおよび制御域分割のために生じるフリー・スペースを使用します。データ・セットを作成するか、大量挿入を行うには、 RPL

OPTCD=SEQ,NUP または NSP を使用します。RPL OPTCD=SEQ,NUP または NSP

は、レコードを順次挿入し、ロード・モード中および大量挿入中にフリー・スペー

VSAM データ・セットの処理

第 9 章 VSAM データ・セットの処理 163

Page 188: DFSMS データ・セットの使用法

スを保守します。他のすべてのタイプは、直接挿入ストラテジーを使用します。MACRF=SIS が ACB で指定される場合、挿入はすべて順次挿入ストラテジーを使用します。

キー順データ・セットのアドレス・アクセスでは、VSAM は新規レコードを挿入または 追加しません。

順次挿入。新規レコードが制御インターバルの最後のレコードの後に属し、そのレコードにフリー・スペースが含まれている場合は、新規レコードは既存の制御インターバルに挿入されます。制御インターバルが十分なフリー・スペースを含んでいない場合、新規レコードは、真分割なしに新規インターバルに挿入されます。

新規レコードが制御インターバルの末尾に属しておらず、制御インターバル内にフリー・スペースがある場合、それは順次、既存の制御インターバルに入れられます。制御インターバル内に十分なフリー・スペースが存在しない場合、追加のポイントで制御インターバル分割が発生します。新規レコードは、オリジナル制御インターバルに挿入され、次のレコードが新規制御インターバルに挿入されます。

大量順次挿入。複数のレコードがデート・セット内で照合位置 (2 つのレコード間の) に順次挿入されることを VSAM が検出するとき、 VSAM は、大量順次挿入と呼ばれる技法を使用して、挿入されるレコードをバッファーに入れ、入出力操作を削減します。直接アクセスの代わりに順次を使用することで、この技法を利用できます。また、順次挿入を使用して最高キーまたは相対レコード番号を超えてレコードを追加することによっても、データ・セットを拡張 (ロードを再開) します。指定された共用オプションに応じて、データ・セットを新規制御域に拡張するための制約事項があります。 221ページの『第 12 章 VSAM データ・セットの共用』を参照してください。

大量順次挿入は、新規レコードが制御インターバルまたは制御域の論理拡張であるとき (つまり、新規レコードが、制御インターバルまたは制御域内で使用される最高キーまたは相対レコード番号を超えて追加されるとき)、制御インターバルおよび制御域のフリー・スペース指定を守ります。

シーケンスになったいくつかのグループのレコードが大量挿入されるとき、各グループの先頭に、位置決めを設定するための RPL OPTCD=KGE を指定した POINT

を置くことができます。 KGE は、検索引数用に提供するキーがレコードのキーまたは相対レコード番号に等しくなければならないことを指定します。

直接挿入 ― CI 分割。制御インターバルに使用可能なスペースが十分ある場合、レコードが挿入されます。制御インターバルにレコードを保持するのに十分なスペースがない場合、そのレコードがファイル内の最後のキーでない限り、CI 全体が分割されます。最後のレコードは必ず、新規の空の CI に入れられ、CI 分割として現れることはありません。

直接挿入 ― CA 分割。CI 分割を可能にする追加の CI が使用可能でない場合は、CA が分割されます。ただし、ファイル内の最後のレコードの場合は、新規レコードは、新規の空の CA 内の最初のレコードとして挿入されます。これは、CA 分割としては現れません。新規レコードが制御インターバルの最後のレコードの後に属し、スペースがない場合、新規レコードは、既存の制御インターバルの末尾に追加

VSAM データ・セットの処理

164 z/OS V1R10 DFSMS データ・セットの使用法

Page 189: DFSMS データ・セットの使用法

されます。制御インターバルに十分なフリー・スペースが含まれない場合、新規レコードは、未使用の制御インターバルに挿入されます。

固定長相対レコード・データ・セットへの挿入レコードは、固定長 RRDS に順次挿入または直接挿入することができます。

順次挿入。固定長 RRDS への挿入は、空のスロットに入ります。レコードが固定長RRDS に順次挿入されるとき、それには、シーケンス内の次の相対レコード番号が割り当てられます。スロットが空でない場合、 VSAM は、エラーの戻りコードを設定し、重複するレコードを示します。割り当てられた番号は、RPL の引数フィールドに戻されます。

直接挿入。固定長 RRDS へのレコードの直接またはスキップ順次挿入では、 RPL

の引数フィールド内の相対レコード番号によって示されるようにレコードを置きます。レコードは、レコードを含まないスロットに挿入されます。指定されたスロットがレコードを含まない場合、VSAM は RPL 内に戻りコードを設定し、要求をリジェクトします。

挿入が、制御インターバルの末尾に行われる場合、レコードは新規制御インターバル内に置かれます。

可変長相対レコード・データ・セットへの挿入可変長 RRDS は、固定長 RRDS と同じように処理されますが、次の例外があります。

v レコード長は、RPL マクロの RECLEN フィールド内で指定する必要があります。

v 可変長 RRDS への挿入は、データ・セットの定義中に提供されるフリー・スペース、または制御インターバルおよび制御域分割のために生じるフリー・スペースを使用します。

固定長 RRDS については、レコードを可変長 RRDS に順次または直接挿入することができます。

順次挿入。レコードが可変長 RRDS に順次挿入されるとき、それには、シーケンス内の次の使用可能な相対レコード番号が割り当てられます。 割り当てられた番号は、RPL の引数フィールドに戻されます。 大量順次挿入は、可変長 RRDS と一緒に使用します。

直接挿入。可変長 RRDS へのレコードの直接またはスキップ順次挿入では、 RPL

の引数フィールド内の相対レコード番号によって示されるようにレコードを置きます。 重複する相対レコード番号を指定する場合、VSAM は RPL 内に戻りコードを設定し、要求をリジェクトします。

線形データ・セットへの挿入線形データ・セットは、レコード・レベルでは処理できません。GET、 PUT、および POINT マクロの使用は、レコード・レベルでは許可されません。 DIV マクロを使用して、線形データ・セットを処理する必要があります。DIV の使用についての情報は、「z/OS MVS プログラミング:アセンブラー・サービス ガイド」 を参照してください。

VSAM データ・セットの処理

第 9 章 VSAM データ・セットの処理 165

Page 190: DFSMS データ・セットの使用法

レコードの検索GET マクロは、レコードを検索するのに使用されます。更新のためにレコードを検索するには、 GET マクロを PUT マクロと一緒に使用します。レコードを順次または直接検索するとき、VSAM は、検索されたレコードの長さを RPL の RECLEN

フィールドに戻します。

順次検索レコードは、キー・アクセスまたはアドレス・アクセスを使用して順次検索することができます。

キー順次検索。プログラムがキー順次アクセス (RPL OPTCD=(KEY,SEQ)) 用のデータ・セットに初めてアクセスする場合、VSAM は、次のことが真である場合のみ、キー順でデータ・セット内の最初のレコードに位置決めされます。1. 非共用リソースが使用されている。2. ファイルに対して前に要求がなかった。

VSAM が、前に使用されたストリングを選出する場合、この暗黙の位置決めは発生しません。したがって、並行または複数の RPL の場合、論理エラーを防ぐために独自の POINT および位置決めを開始するのが最良です。

共用リソースでは、必ず POINT マクロを使用して位置を設定します。そうすると、GET マクロがレコードを検索できます。特定の直接要求も、位置を保持できます。位置決めがいつ保存または解放されるかについての詳細は、 169ページの表 11

を参照してください。VSAM は、処理モードが要求間で変更されるときに位置決めを検査します。

固定長または可変長 RRDS のキー順次検索では、相対レコード番号は全キーとして扱われます。削除されたレコードが、順次検索中に検出される場合、それはスキップされ、次のレコードが検索されます。検索されたレコードの相対レコード番号は、RPL の引数フィールドに入れて戻されます。

アドレス順次検索。アドレスによる検索は、キーによる検索と同じですが、検索引数が RBA であり、それがデータ・セット内のレコードの RBA と一致しなければならない点だけが異なります。処理プログラムが、アドレス・アクセス用の非共用リソースを持つデータ・セットをオープンするとき、VSAM は、アドレス順次処理を開始するために、ゼロの RBA を持つレコードに位置決めされます。順次 GET

要求は、VSAM にそれが位置決めされたデータ・レコードを検索させてから、VSAM を次のレコードに位置決めさせます。 GET または POINT について指定されたアドレスは、データ・レコードの先頭に対応しなければなりません。それ以外の場合は、要求は無効です。キー順データ・セット内に保管されたスパン・レコードは、アドレス検索を使用して検索することはできません。

圧縮されたレコードの RBA を予測することはできません。

GET-previous (GET 直前) (逆方向順次) 処理は、通常のキー順次またはアドレス順次処理を変形したものです。次のレコードを昇順 (データ・セット内の現行の位置決めに相対して) で検索する代わりに、GET 直前処理は、次のレコードを降順で検索します。レコードを降順で処理するには、 RPL OPTCD パラメーターで BWD

と指定します。POINT、GET、PUT (更新のみ)、および ERASE 操作の場合は、GET 直前処理を選択します。POINT による初期位置決めでは、POINT LRD を除

VSAM データ・セットの処理

166 z/OS V1R10 DFSMS データ・セットの使用法

Page 191: DFSMS データ・セットの使用法

き、キーを指定する必要があります。次の GET 直前処理は、降順で次のレコードを検索するのに、指定されたキーを必要としません。

GET 直前処理は、制御インターバルまたはスキップ順次処理と一緒には許可されません。

位置決め用の POINT マクロPOINT マクロを使用して、データ・セットの先頭以外の場所でレコードを順次検索することができます。POINT マクロは、指定されたキーまたは相対バイト・アドレスを持つレコードに VSAM を置きます。ただし、レコードに対するデータ・アクセスは提供しません。総称キー (キー・フィールドの先行位置) を指定する場合、ポイントされるレコードは、同じ総称キーを持つレコードのうち最初のものです。POINT マクロは、RPL OPTCD パラメーターで FWD または BWD が指定された場合は、VSAM を正方向または逆方向処理用に位置決めできます。

位置決めの後、同じ要求パラメーター・リストを通じて直接要求を出す場合、RPL

OPTCD パラメーターで NSP または UPD が指定されていた場合を除き、VSAM

は位置決めを除去します。

POINT に続けて VSAM GET/PUT 要求が出される場合、POINT と後続要求の両方が同じ処理モードにある必要があります。たとえば、RPL OPTCD=(KEY,SEQ,FWD) を指定した POINT の次に、RPL OPTCD=(KEY,SEQ,FWD) を指定した GET/PUT が続く必要があります。それ以外の場合は、GET/PUT 要求がリジェクトされます。

スキップ順次検索では、検索される次のレコードのキーを示す必要があります。VSAM は、該当するシーケンス・セット索引レコードを見つけて、その項目をスキャンするためにシーケンス・セット内の水平ポインターを使用することにより、次のレコードの索引項目にスキップします。検索される次のレコードのキーは、検索された先行レコードのキーより、シーケンス内で必ずより高いものである必要があります。

要求が失敗してエラー・コードが出る場合、位置決めを保持することはできません。論理エラーが発生したときに位置決めが保持されるかどうかを判別するには、「z/OS DFSMS Macro Instructions for Data Sets」を参照してください。ENDREQ

マクロを指定すると、位置決めは常に解放されます。

直接検索レコードは、キー・アクセスまたはアドレス・アクセスを使用して直接検索することもできます。

キー直接検索。キー順データ・セットの場合は、以前の位置決めには依存しません。VSAM は、索引を最高位レベルからレコードを検索するためのシーケンス・セットまで検索します。検索されるレコードは、次のいずれかを提供することによって指定します。v レコードの正確なキーv レコードのキー・フィールドより小か等しい該当するキーv 総称キー

VSAM データ・セットの処理

第 9 章 VSAM データ・セットの処理 167

Page 192: DFSMS データ・セットの使用法

正確なキーを知らないときは、適切な指定を使用することができます。レコードで実際にキーが指定されている場合は、VSAM がそれを検索します。それ以外の場合は、次の高位のキーでレコードを検索します。直接処理用の総称キー指定では、VSAM はその総称キーを持つ最初のレコードを検索します。総称キーを持つすべてのレコードを検索したい場合は、直接要求で RPL OPTCD=NSP を指定します。それによって、VSAM はキー順内の次のレコードにそれ自身を位置決めします。それから、残りのレコードを順次検索します。

固定長または可変長 RRDS を処理するために直接またはスキップ順次アクセスを使用するには、必要なレコードの相対レコード番号を RPL マクロの引数フィールドで提供する必要があります。可変長 RRDS の場合は、レコード長も、RPL マクロの RECLEN フィールドで提供する必要があります。削除されたレコードを要求する場合、その要求は該当レコードなし論理エラーを発生させます。

固定長 RRDS は索引を持ちません。VSAM は、検索されるレコードの数を取り、それを含む制御インターバルおよび制御インターバル内でのその位置を計算します。

アドレス直接検索。個々の各レコードの RBA が指定される必要があります。直前の位置決めは適用できません。

直接処理では、オプションによって RPL OPTCD=NSP を指定して、位置が GET

に続いて保持されることを示します。そうすると、プログラムは、次のレコードを正方向または逆方向で順次処理できます。

レコードの更新GET および PUT マクロが、レコードを更新するために使用されます。更新の GET

はレコードを取り出し、更新用の次の PUT が、GET が取り出したレコードを保管します。

キー順データ・セット内のレコードを更新するとき、基本キー・フィールドを変更することはできません。

レコード長の変更アドレス・アクセスを使用してレコードの内容を更新することができますが、レコードの長さは変更できません。入力順データ・セット内のレコードの長さを変更するには、それをデータ・セットの末尾に (新規レコードとして) 保管するか、同じ長さの非アクティブ・レコードの代わりに保管する必要があります。レコードの古いバージョンを非アクティブとしてマーク付けする必要があります。

キー順データ・セットのデータ・コンポーネントの処理データ・コンポーネントは、索引コンポーネントとは別個に処理できます。データ・コンポーネントを別個に処理することによって、キー順データ・セットのデータ・コンポーネントと索引コンポーネントを個別に印刷またはダンプすることができます。ただし、データ・セットを更新する予定がある場合は、データ・コンポーネントを処理しないでください。キー順データ・セットを更新するときは、必ずクラスターをオープンしてください。

VSAM データ・セットの処理

168 z/OS V1R10 DFSMS データ・セットの使用法

Page 193: DFSMS データ・セットの使用法

レコードの削除更新用の GET がレコードを検索した後、ERASE マクロはレコードを削除できます。 ERASE マクロは、キー順データ・セットあるいは固定長または可変長 RRDS

と一緒にのみ使用することができます。キー順データ・セットまたは可変長 RRDS

でレコードを削除するとき、レコードは物理的に消去されます。そうすると、レコードが占めていたスペースは、フリー・スペースとして使用可能になります。

基本クラスターがキー順データ・セットの場合のみ、パスの基本クラスターからレコードを消去できます。代替索引がアップグレード・セット (代替索引が定義されたときに UPGRADE が指定されていた) になっている場合、それは、レコードを消去するときに自動的に変更されます。消去されるレコードの代替キーが固有である場合、その代替キーを持つ代替索引データ・レコードも削除されます。

レコードを固定長 RRDS から消去するとき、そのレコードは 2 進ゼロに設定され、レコード用の制御情報は空スロットを表すために更新されます。スロットに同じ長さの別のレコードを挿入することにより、それを再使用します。

入力順データ・セットでは、削除すべきだと考えるレコードにマークを付ける必要があります。 VSAM に関する限り、レコードは削除されません。 更新用のレコードを検索して、その場所に同じ長さの新規レコードを保管することにより、削除されるべきだとしてマーク付けされたレコードによって占められたスペースを再使用します。

バッファー書き込みの据え置きおよび強制保全性の理由から、PUT 操作の後にデータ・バッファーが書き込まれるよう強制することが望ましい場合があります。他のときには、パフォーマンスを改善するためにバッファーの書き込みをできる限り据え置くのが好ましい場合があります。 PUT

が発行されるときに、RPL OPTCD が直接処理 (DIR) を指定し、 NSP が指定されない場合、バッファーの強制書き込みが発生します。それ以外の場合は、書き込みが据え置かれます。ERASE 要求は、PUT 要求と同じバッファー書き込み規則に従います。LSR および GSR 据え置き書き出しが指定されない場合、ENDREQ マクロは常に、現行の変更されたデータ・バッファーが書き込まれることを強制します。

データ・バッファーの保存および位置決め操作によっては位置決めを保存するものと、それを解放するものがあります。同様にして、操作によってはバッファー上に保持されるものと、それをその内容と一緒に解放するものがあります。表 11 は、どの RPL オプションによってデータ・バッファーの保存が生じ、どのオプションによってデータ・バッファーと位置決めの解放が生じるかを示しています。

表 11. RPL オプションがデータ・バッファーと位置決めに及ぼす影響

RPL オプション 保存 解放

SEQ *

SKP *

DIR NSP *

DIR (NSP なし) *

VSAM データ・セットの処理

第 9 章 VSAM データ・セットの処理 169

Page 194: DFSMS データ・セットの使用法

表 11. RPL オプションがデータ・バッファーと位置決めに及ぼす影響 (続き)

RPL オプション 保存 解放

DIR LOC *

UPD (Get を使用) *

注:

1. 新規制御インターバルに対する順次 GET 要求は、直前のバッファーを解放します。

2. RPL OPTCD=DIR を指定した ENDREQ マクロおよび ERASE マクロは、データ・バッファーおよび位置決めを解放します。

3. 正常な完了時に位置決めおよびバッファーを保存する特定のオプションは、要求がエラー・コードで失敗する場合はそれを行うことができません。論理エラーが発生する場合に位置決めが保持されるかどうか判別するには、「z/OS DFSMS

Macro Instructions for Data Sets」を参照してください。

次の操作は、バッファーを使用しますが、即時に解放し、位置決めを保存しません。

GET RPL OPTCD=(DIR,NUP,MVE)

多重ストリングの処理多重ストリング処理では、同じデータ・セット用のアドレス・スペース内に複数の独立 RPL が存在することがあります。データ・セットは、共通制御ブロック構造を共用する複数のタスクを持つことができます。多重ストリング処理が発生することを示すいくつかの ACB および RPL の配置があります。

v 最初の ACB がオープンした状態で、STRNO または BSTRNO が 1 より大きい。

v 同じアドレス・スペース内の同じデータ・セットについて複数の ACB がオープンし、同じ制御ブロック構造に接続されている。

v 非同期要求を使用して同じ ACB に対して複数の並行 RPL がアクティブである。

v 同期処理を使用して同じ ACB に対して複数の RPL がアクティブであり、それぞれについて位置決めが保持される必要がある。

多重ストリング更新処理を行う場合は、VSAM ルックアサイド処理および排他使用にかかわる規則を考慮する必要があります。ルックアサイドは、索引またはデータ制御インターバルを要求するときに制御インターバルがすでに存在するかどうかを調べるために VSAM がそのバッファーを検査することを意味します。

GET 非更新要求では、すでにストレージにあるバッファーを見つけるための試みが行われます。その結果、データの下位レベル・コピーを、このストリングに付加されたバッファーから、または 2 次ストレージから入手することができます。

GET が要求を更新するために、バッファーが排他制御で入手されてから、データの最新コピー用の装置から読み取られます。バッファーがすでに別のストリングの排

VSAM データ・セットの処理

170 z/OS V1R10 DFSMS データ・セットの使用法

Page 195: DFSMS データ・セットの使用法

他制御にある場合は、要求は失敗し、排他制御フィードバック・コードが出ます。共用リソースを使用している場合は、要求をキューに入れることができ、排他制御エラーを戻すことができます。

排他使用規則は、次のとおりです。

1. 所定のストリングが、更新用の GET を使用してレコードを入手する場合、制御インターバルは、別のストリングによる更新または挿入処理用には使用できません。

2. 所定のストリングが、長さ変更を持つ更新または挿入によって生じた制御域分割の処理中である場合、そのストリングは、分割されている全制御域の排他制御を取得します。他のストリングは、分割が完了するまでこの制御域に対する挿入または更新要求を処理することができません。

非共用リソースを使用している場合、VSAM は排他制御競合を持つ要求をキューに入れることができず、その競合をクリアする必要があります。競合が検出される場合は、VSAM が論理エラーの戻りコードを戻し、アクティビティーを停止して競合をクリアする必要があります。競合を生じさせた RPL が直前の要求からの制御インターバルの排他制御を持っていた場合、問題をクリアしようとする前に ENDREQ

を発行します。競合を次の 3 つの方法のいずれかでクリアします。

v 制御インターバルの排他制御を保持する RPL がその制御を解放するまでキューに入れてから、要求を再び出します。

v 排他制御を保持する RPL に対して ENDREQ を発行して、それが制御を即時に解放するよう強制します。

v 共用リソースを使用して、MRKBFR MARK=RLS を発行します。

注: RPL が正しく指定された MSGAREA および MSGLEN を含んでい場合、排他制御を保持する RPL のアドレスは、MSGAREA の最初のワードで提供されます。RPL フィールド RPLDDDD には、要求された制御インターバルの RBA が含まれます。

並行要求をするVSAM では、データ・セットへの多くの要求について並行位置決めを保持することができます。

ストリング (時には、プレースホルダー と呼ばれます) は、カーソルのようなものであり、それぞれデータ・セット内の位置を表し、場所を保持するために本の中に指を挟んでおくようなものです。すべての要求に対して同じ ACB が使用され、データ・セットは 1 回だけオープンされる必要があります。これは、たとえば、1 つの RPL を使用してデータ・セットを順次処理し、それと同時に別の RPL を使用して、選択されたレコードに同じデータ・セットから直接アクセスすることもできることを意味します。

ただし、ストリングは、要求が位置を保持する間だけ RPL によって「所有される」ことを覚えておいてください。要求が位置を放棄すると (たとえば、ENDREQ

によって)、そのストリングは別の要求によって自由に使えるようになり、ユーザーによってデータ・セット内で位置変更されなければなりません。

VSAM データ・セットの処理

第 9 章 VSAM データ・セットの処理 171

Page 196: DFSMS データ・セットの使用法

各要求ごとに、ストリングは、1 つの要求の排他使用のために制御ブロックのセットを定義します。たとえば、3 つの RPL を使用する場合、3 つのストリングを指定する必要があります。指定するストリング数が十分でなく、NSR を使用している場合、オペレーティング・システムは、ACB に対する並行要求によって必要とされるだけの数のストリングを動的に拡張します。動的ストリング追加によって割り振られるストリングは、必ずしも隣接するストレージ内にあるわけではありません。

動的ストリング追加は、LSR および GSR では発生しません。その代わりに、使用可能なストリングより多くの要求がある場合、論理エラーを受け取ります。

システムによって定義または追加することができるストリングの最大数は 255 です。したがって、任意の一時点に 1 つのデータ・セット内で位置を保持する並行要求の最大数は 255 です。

パスを使用してのレコードへのアクセスパスを使用してレコードを順次処理しているときは、基本クラスターからのレコードは、昇順、または直前のレコードを検索している場合は、降順の代替キー値に従って戻されます。非固有代替キーを持ついくつかのレコードがある場合、それらのレコードは、それらが代替索引に入力された順に戻されます。 READNEXT およびREADPREV は、これらの非固有代替索引レコードを同じ順序で戻します。同じ代替キーを持つ少なくとも 1 つのレコードが処理される場合、VSAM は RPL 内で戻りコードを設定します。たとえば、代替キー 1234 を持つデータ・レコードが 3 つある場合、戻りコードは、レコード 1 および 2 の検索中に設定され、3 番目のレコードの検索中にリセットされることになります。

直接またはスキップ順次アクセスを使用してパスを処理するとき、基本データ・セットからのレコードが、RPL マクロの引数フィールドで指定した代替キーに従って戻されます。代替キーが固有でない場合、その代替キーを使用して最初に入力されたレコードが戻され、フィードバック・コード (重複キー) が RPL 内で設定されます。同じ代替キーを使用して残りのレコードを検索するには、直接要求を使用して最初のレコードを検索するときに RPL OPTCD=NSP を指定し、次に順次処理に切り替えます。

次の場合は、パスを使用して基本クラスター内でデータ・レコードを挿入および更新することができます。

v PUT 要求が、代替索引 (UNIQUEKEY 属性を使用して定義されたもの) 内で非固有代替キーにならない。ただし、非固有代替キーが生成され、NONUNIQUEKEY

属性が指定される場合は、更新が発生することがあります。

v レコードが更新用に検索された時点と PUT が発行された時点の間で参照キーを変更する必要がない。

v 基本キーを変更しない。

代替索引がアップグレード・セット内にあるとき、代替索引は、基本クラスター内でレコードを挿入するか更新することにより、自動的に変更されます。代替索引を更新することにより基本クラスターへのポインターを持たない代替索引が生じる場合、代替索引レコードは消去されます。

注: SHAREOPTIONS 2、3、および 4 を使用する場合、基本クラスターおよびその関連付けられた代替索引上で並行要求 (GET および PUT など) を発行するときに

VSAM データ・セットの処理

172 z/OS V1R10 DFSMS データ・セットの使用法

Page 197: DFSMS データ・セットの使用法

読み取り/書き込み保全性を引き続き保証する必要があります。読み取り/書き込み保全性を保証しないと、GET 要求について一時的に「レコードが見付からない」または「関連付けられる基本レコードなし」のエラーが生じることがあります。 そのようなエラーは、GET 要求を再発行することによって迂回しますが、読み取り/書き込み保全性を保証することによってエラーを防ぐのが最良です。

非同期要求をする同期モードでは、VSAM は、操作を完了するまで、PUT または GET 操作からプログラムに戻りません。非同期モードでは、 VSAM は、PUT または GET を完了する前にプログラムに制御を戻します。非同期モードのプログラムは、VSAM PUT または GET が完了される間に他の有用な作業を実行することができます。

非同期モードでは、処理を直接アクセス装置との間でのアクセスとオーバーラップすることができるので、直接処理を使用してスループットを改善できます。レコードを直接読み取っているときは、各読み取りは、遅い操作である、直接アクセス装置上でのシークに関係していることがよくあります。同期モードでは、このシーク・タイムは他の処理とオーバーラップすることはありません。

非同期モードの指定非同期モードを指定するには、RPL 内で OPTCD=SYN ではなく、OPTCD=ASY を指定する必要があります。

非同期要求の完了の検査プログラムが次のレコードを処理する準備ができているが、VSAM がまだそのレコードを入手しようとしていると想定します。(次のレコードは、直接アクセス装置からまだ読み取られていません。) プログラムの実行を停止し、VSAM がレコード内の読み取りを完了するのを待つ必要があります。進行中の操作が完了するまで、CHECK マクロはプログラムの実行を停止します。 RPL に対する各要求の後にCHECK マクロを発行する必要があります。介入 CHECK を使用せずに別の要求を試みると、その要求はリジェクトされます。

要求が完了すると、CHECK はプログラム内の次の命令に制御を解放し、RPL を別の要求によって使用できるように解放します。

要求の終了開始した要求を完了したくないと決めているものとします。たとえば、GET の直後の処理中に、要求下ばかりのレコードを必要としないと決めたものとします。ENDREQ マクロを使用して、要求を取り消すことができます。ENDREQ マクロを使用することには、次の利点があります。v 不必要な非同期要求の検査を避ける。v 書き込まれていないデータまたはストリングによって使用中の索引バッファーを書き込む。

v RPL 用のデータ・セット上の VSAM 位置決めを取り消す。

推奨: ENDREQ マクロを発行する場合、それが正常に完了することを確認するために ENDREQ 戻りコードを検査することが重要です。非同期要求が ENDREQ を正常に完了しない場合、 CHECK マクロを発行する必要があります。すべての非同期要求が ENDREQ または CHECK を正常に完了するまで、データ・セットをクロー

VSAM データ・セットの処理

第 9 章 VSAM データ・セットの処理 173

Page 198: DFSMS データ・セットの使用法

ズすることができません。 ENDREQ は、ターゲット RPL が通知するまで待つので、停止した要求を終了しようとするときには発行しないでください。

データ・セットのクローズCLOSE マクロは、プログラムをデータ・セットから切断します。これにより、VSAM は次のアクションを取ります。

v 未書き込みデータまたは内容が変更された索引レコードを書き込みます。

v 必要な場合 (たとえば、ファイル・マーク標識のロケーションが変更された場合)

データ・セット用のカタログ項目を更新します。

v SMF が使用されている場合は、SMF レコードを書き込みます。

v データ・セットがオープンされた前の状況に制御ブロックを復元します。

v 追加の VSAM 制御ブロックおよび VSAM ルーチンについての OPEN 処理中に入手された仮想記憶域を解放します。

v オープン時に部分解放が指定されていた場合は、(CA 境界上の) 高使用 RBA の後で高割り振り RBA までのすべてのスペースを解放します。

CLOSE がバッファーをフラッシュ中にレコード管理エラーが発生する場合、データ・セットのカタログ情報は更新されません。カタログはデータ・セットの状況を正しく反映することができず、索引はデータ・レコードの一部を正確に反映できません。プログラムが異常終了ルーチン (ABEND) を入力する場合、オープンしたデータ・セットはすべてクローズされます。ABEND によって呼び出された VSAM

CLOSE は、データ・セットのカタログ情報を更新したり、未解決の入出力要求を完了したりせず、バッファーはフラッシュされません。カタログは、クラスターの状況を正しく反映することができず、索引はデータ・レコードの一部を正確に参照できません。アクセス方式サービス・プログラム VERIFY コマンドを使用して、カタログ情報を訂正します。 VERIFY の使用については、 63ページの『不適切にクローズされたデータ・セットを処理するための VERIFY の使用』に説明があります。

非同期 VSAM 要求を処理しているときは、CLOSE または CLOSE TYPE=T (一時CLOSE) を発行する前に CHECK マクロまたは ENDREQ マクロを発行することにより、すべてのストリングを静止させる必要があります。

CLOSE TYPE=T によって、VSAM は未解決の入出力操作を完了し、必要に応じてカタログを更新し、要求された SMF レコードを書き込むことになります。処理は、一時 CLOSE の後、OPEN マクロを発行しなくても継続することができます。

VSAM データ・セットがクローズされ、CLOSE TYPE=T が指定されない場合、その上で追加の処理を実行する前にデータ・セットを再オープンする必要があります。

一時または永続 CLOSE マクロを発行するとき、VSAM はデータ・セットのカタログ・レコードを更新します。プログラムが、VSAM データ・セットをクローズせずに異常終了 (ABEND) で終了する場合、データ・セットのカタログ・レコードは更新されず、不正確な統計を含みます。

VSAM データ・セットの処理

174 z/OS V1R10 DFSMS データ・セットの使用法

Page 199: DFSMS データ・セットの使用法

これらの DD ステートメントを共用するすべての ACB がクローズされるまで、共用 DD ステートメントが動的に割り振り解除されないようにするのは、ユーザーの責任です。動的割り振りの詳細については、「z/OS MVS JCL ユーザーズ・ガイド」を参照してください。

制約事項: 以下のクローズ・オプションは、VSAM データ・セットの場合は無視されます。

v FREE=CLOSE JCL パラメーター

v 動的割り振りを使用して要求される FREE=CLOSE (DALCLOSE)

SRB またはクロスメモリー・モードでの操作VSAM は、サービス要求ブロック (SRB) モードまたはクロスメモリー・モードで操作する唯一のアクセス方式です。 SRB モードまたはクロスメモリー・モードで操作すると、他のアドレス・スペース内での構造を使用して、使用可能なスペースの量を増やすことができます。 SRB モードおよびクロスメモリー・モードは、許可ユーザー用に予約されている操作の監視プログラム・モードです。クロスメモリーは複雑な概念であり、それに関連したいくつかの警告および制約事項があります。「z/OS MVS Programming: Authorized Assembler Services Guide」を参照してください。

VSAM では、共用リソースまたは改良制御インターバル (ICI) アクセスを使用する監視プログラム状態要求は、同期の場合はクロスメモリーまたは SRB モードでのみ操作されます。 ICI を使用して処理されないデータ・セットでは、問題のある状態で、またはクロスメモリーまたは SRB モードで非共用リソースを使用して、VSAM を非同期で呼び出そうとすると、論理エラーが発生します。このエラーは、ICI の場合は生成されません。

VSAM では、クロスメモリー・モード要求を同期しません。非 ICI 処理では、RPL

は WAITX を指定する必要があり、UPAD 出口 (ユーザー処理出口ルーチン) は、クロスメモリー要求用の待機およびポストの処理を扱うために出口リストに提供されなければなりません。その出口を提供しなければ、VSAM エラー・コードが戻されます。

クロスメモリー・モードの要求の場合、待機用の UPAD が VSAM に制御を戻しても、VSAM は待機処理を行いません。ただし、非クロスメモリー・タスク・モードでは、待機用に取られた UPAD が、ECB がポストされずに制御を戻す場合、VSAM は WAIT 監視プログラム呼び出し命令 (SVC) を発行します。どちらのモードでも、ポストの処理用に取られた UPAD が制御を戻すとき、VSAM は ECB に完了のマークが付いたものと見なし、ポストの処理は行いません。

クロスメモリー・モードでの ICI は、要求が同期であると想定します (検査はなし)。 UPAD は必要ありません。UPAD ルーチンが指定されていない場合、入出力待機およびポストの処理は、中断および再開によって行われます。ICI の場合は、リソース待機/ポストの処理はありません。 ICI についての情報は、 217ページの『改良制御インターバル・アクセス』を参照してください。

SRB モードは UPAD を必要としません。UPAD が SRB モード要求用に提供される場合、これは入出力待機およびリソース待機処理の場合のみ取られます。

VSAM データ・セットの処理

第 9 章 VSAM データ・セットの処理 175

Page 200: DFSMS データ・セットの使用法

クロスメモリーまたは SRB モードでは、レコード管理は監視プログラム呼び出し命令 (SVC) を発行することができません。VSAM が SVC を発行することを避けられない場合は、RPL 戻りコードを設定し、データ・セットがオープンされたアドレス・スペース内でタスク制御ブロック (TCB) の下で実行するように処理モードを変更する必要があることを示します。クロスメモリー・モードにすることはできません。その場合、SVC が VSAM によって発行されることができるようにする要求を再発行します。VSAM が SVC を発行するための要件は、最小限にしておきます。TCB がクロスメモリー・モードでないことを必要とするものとして識別された区域は、EXCEPTIONEXIT、ロード済み出口、 EOV (ボリュームの終わり)、動的ストリング追加、および代替索引処理です。

クロスメモリーまたは SRB 処理の間に論理エラーまたはデータ終わり条件が発生する場合、VSAM は LERAD (論理エラー) または EODAD (データ・セットの終わり) 出口ルーチンを入力しようとします。ルーチンをロードする必要がある場合、ロードは SVC に関係しているので、それを取ることはできません。VSAM は「無効 TCB」を示すための RPL フィードバックを設定します。クロスメモリーまたはSRB 処理の間に入出力エラーが発生し、EXCEPTIONEXIT またはロード済みSYNAD (物理エラー出口) ルーチンが指定される場合、これらのルーチンを取ることはできません。RPL フィードバックは、入出力エラー条件を示します。

詳しくは、 279ページの『第 16 章 VSAM ユーザー作成出口ルーチンのコーディング』を参照してください。

プログラムでの VSAM マクロの使用この時点で、これらのマクロのすべてがプログラム内でどのように一緒に働くかを見ておくことが重要です。図 20 は、プログラム内の JCL と VSAM マクロの間を示しています。

VSAM データ・セットの処理

176 z/OS V1R10 DFSMS データ・セットの使用法

Page 201: DFSMS データ・セットの使用法

178ページの図 21 は、VSAM マクロの相互間およびプログラムの残りの部分に対する関係を示すスケルトン・プログラムです。

(label) OPEN

GET|PUT

RPL

ACB

EXLST [JRNAD=(address[A|N[,L])][SYNAD=(address[A|N[,L])]. . . . . . . . .

[ACB=address]

[,OPTCD= [DIR|SEQ|SKP][ . . . . . . . . . . . .])]. . . . . . . . .

. . . . . . . . . . .[,DDNAME=ddname]

[,BUFND=number][,BUFNI=number][,BUFSP=number][,MACRF=([DIR][,SEQ][,SKP]

[,IN][,OUT][,NRS ][,RST]

[,STRNO=number][,PASSWD=address][,EXLST=address]

. . . . . . . .

RPL=address

(address[,(options)], . . . .)

//ddname DD DSNAME=dsname,DISP=(OLD|SHR)

(label)

(label)

(label)

(label)

図 20. VSAM マクロの関係

VSAM データ・セットの処理

第 9 章 VSAM データ・セットの処理 177

Page 202: DFSMS データ・セットの使用法

START CSECTSAVE(14,12) Standard entry code.B INIT Branch around file specs

MASACB ACB DDNAME=MASDS,AM=VSAM, File specs XMACRF=(KEY,SEQ,OUT), XEXLST=EXITS, XRMODE31=ALL

MASRPL RPL ACB=MASACB, XOPTCD=(KEY,SEQ,NUP,MVE,SYN), XAREA=WA, XAREALEN=80, XRECLEN=80

EXITS EXLST LERAD=LOGER, XJRNAD=JOURN

TRANDCB DCB DDNAME=TRANDS, XDSORG=PS, XMACRF=GM, XEODAD=EOTRF, XLRECL=80, XBLKSIZE=80, XRECFM=F

INIT . Program initialization.OPEN (MASACB,,TRANDCB) Connect data sets.GET TRANDCB,WA Processing loop.PUT RPL=MASRPL.

EOTRF CLOSE (MASACB,,TRANDCB) Disconnect data sets.RETURN (14,12) Return to calling routine

LOGER Exit routines.

JOURN ..

WA DS CL80 Work areaEND

図 21. スケルトン VSAM プログラム

VSAM データ・セットの処理

178 z/OS V1R10 DFSMS データ・セットの使用法

Page 203: DFSMS データ・セットの使用法

第 10 章 VSAM パフォーマンスの最適化

この章では、次のトピックを扱い、VSAM およびオペレーティング・システムの両方のパフォーマンスに影響を及ぼしたり、それらを決定したりするオプションや要因の多くについて説明します。

トピック 該当ページ

制御インターバル・サイズの最適化 179

制御域サイズの最適化 183

フリー・スペース分散の最適化 185

索引オプションの使用 203

診断情報の入手 205

大容量記憶システムからのマイグレーション 205

Hiperbatch の使用 205

オプションの多くは、データ・セットが定義されるときに、アクセス方式サービス・プログラム DEFINE コマンドで指定されます。オプションを ACB およびGENCB マクロおよび DD AMP パラメーターで指定できる場合もあります。

制御インターバル・サイズの最適化VSAM にデータ・セット用の制御インターバルのサイズを選択させることができるか、DEFINE コマンド内の特定の制御インターバル・サイズを要求することができるか、DEFINE でデータ・クラスを指定し、ストレージ管理者によって割り当てられた CISIZE 属性を使用することができます。データ・セット用の特定のストレージおよびアクセス要件に応じて、DEFINE コマンド内で制御インターバル・サイズを指定することにより、VSAM のパフォーマンスを改善することができます。制御インターバルの構造および内容についての情報は、 86ページの『制御インターバル』を参照してください。

制御インターバル・サイズは、次のようにしてレコード処理速度およびストレージ所要量に影響を及ぼします。

v バッファー・スペース。大きな制御インターバル・サイズを持つデータ・セットは、仮想記憶域により多くのバッファー・スペースを必要とします。必要なバッファー・スペースの量については、 189ページの『非共用リソース用の入出力バッファー・スペースの決定』を参照してください。

v 入出力操作。大きな制御インターバル・サイズを持つデータ・セットは、所定の数のレコードを仮想記憶域に入れるのに必要な入出力操作が少なくてすみます。読み取る必要がある索引レコードは少なくなります。順次およびスキップ順次アクセスには大きな制御インターバル・サイズを使用するのが最良です。大きな制御インターバルは、キー順データ・セットまたは可変長 RRDS のキー直接処理には有益でありません。

v フリー・スペース。フリー・スペースは、制御インターバル・サイズがデータ・レコード・サイズに比例して大きくなるので、より効率的に使用されます (制御

© Copyright IBM Corp. 1987, 2008 179

Page 204: DFSMS データ・セットの使用法

インターバル分割が少なくなり、むだなスペースが減ります)。フリー・スペースの効率的な使用について詳しくは、 185ページの『フリー・スペース分散の最適化』を参照してください。

制御インターバル・サイズの制限制御インターバル・サイズを要求するとき、レコードの長さ、および SPANNED パラメーターが指定されているかどうかを考慮する必要があります。

データ・コンポーネントまたは索引コンポーネントの有効な制御インターバル・サイズおよびブロック・サイズは、 512 バイトの増分で 512 から 8192 バイトであり、2 KB の増分で 8 KB から 32 KB です。 512 または 2048 の倍数でない CI

サイズを選択すると、VSAM は次に大きい倍数を選択します。線形データ・セットの場合、4096 以下に指定されると、指定されたサイズは 4096 に切り上げられます。4096 より大きな数として指定された場合は、次に大きな 4096 の倍数に切り上げられます。

例: 2050 は 2560 に増やされます。

索引コンポーネントのブロック・サイズは、常に制御インターバル・サイズに等しくなります。ただし、データ・コンポーネントと索引コンポーネント用のブロック・サイズは異なる場合があります。

例: 有効な制御インターバル・サイズは、 512、1024、1536、2048、3584、4096、...

8192、10 240、12 288 などです。

関連資料: 詳しくは、「z/OS DFSMS Access Method Services for Catalogs」の中のDEFINE CLUSTER コマンドの CONTROLINTERVALSIZE パラメーターの説明を参照してください。

データ・セットが SPANNED 属性を使用して定義されていない限り、制御インターバルは、 RECORDSIZE パラメーターで指定された最大サイズのデータ・レコードを保持するのに十分なだけ大きくなければなりません。制御インターバル内の制御情報の最少量は 7 バイトであるので、制御インターバルは、通常、コンポーネント内の最大のレコードより少なくとも 7 バイト大きくなります。圧縮データ・セットの場合、制御インターバルは、それが圧縮された後の最大レコードより少なくとも10 バイト大きくなります。これは、制御情報とレコード接頭部を入れる余裕を見込んでいます。特定のレコードの長さは予測するのが困難であり、レコードは圧縮されない場合があるので、最大レコードは圧縮されないと想定するのが最良です。指定する制御インターバル・サイズが最大サイズのレコードを保持するのに十分なだけ大きくない場合、VSAM は、制御インターバル・サイズを最小物理ブロック・サイズの倍数に増やします。 VSAM が提供する制御インターバル・サイズは、レコードにオーバーヘッドを加えたものを入れるのに十分な大きさを持ちます。

可変長 RRDS の場合、制御インターバルは最大レコードより少なくとも 11 バイト大きくなります。

SPANNED パラメーターの使用は、データ・レコードを制御インターバルを超えて継続できるようにすることによってこの制約を除去します。その場合、最大レコード・サイズは、制御域当たりの制御インターバルの数に制御インターバル・サイズを乗算して 10 を減算したものに等しくなります。 SPANNED パラメーターの使用

VSAM パフォーマンスの最適化

180 z/OS V1R10 DFSMS データ・セットの使用法

Page 205: DFSMS データ・セットの使用法

は、データ・セットと一緒に使用することができる処理オプションに特定の制約事項を課します。たとえば、SPANNED パラメーターを持つデータ・セットのレコードは、位置指定モードで読み書きできません。スパン・レコードについて詳しくは、 89ページの『スパン・レコード』を参照してください。

物理ブロック・サイズとトラック容量図 22 は、制御インターバル・サイズ、物理ブロック・サイズ、および拡張フォーマットでないトラック容量との間の関係を示しています。

トラックに関する情報は、物理ブロックに分割されます。制御インターバル・サイズは、物理ブロックの整数でなければなりません。制御インターバルはトラックにスパンできます。読み取り/書き込みヘッドはシリンダー間で移動しなければならないので、制御インターバルがシリンダー境界をスパンすると、パフォーマンスが低下します。

物理ブロック・サイズは、常に VSAM によって選択されます。 VSAM は、正確に制御インターバル・サイズに分割される最大物理ブロック・サイズを選択します。ブロック・サイズは、装置特性にも基づいています。

トラック割り振り対シリンダー割り振りシリンダーを除くすべてのスペース指定は、適切な数のトラックに変換されます。通常、シリンダー割り振りは、トラック割り振りより優れたパフォーマンスを提供します。パフォーマンスは、制御インターバル・サイズ、バッファー・サイズ、バッファーの数、および索引オプションによっても決まります。

データ制御インターバル・サイズデータ制御インターバル・サイズを指定するか、システムで計算される制御インターバル・サイズをデフォルトにすることができます。サイズを指定しない場合、スパン・レコードの平均レコード・サイズまたは非スパン・レコードの最大レコード・サイズについてトラック上のスペースを最もよく使用するデフォルト値をシステムが計算します。

CONTROLINTERVALSIZE 値がクラスター・レベルで指定される場合、この値は、CONTROLINTERVALSIZE 値が指定されていないコンポーネント・レベルに伝達されます。

通常、4096 バイトのデータ制御インターバルは、使用されている DASD 装置、処理パターン、またはプロセッサーとは無関係に、妥当です。線形データ・セット

図 22. 制御インターバル・サイズ、物理トラック・サイズ、およびトラック容量

VSAM パフォーマンスの最適化

第 10 章 VSAM パフォーマンスの最適化 181

Page 206: DFSMS データ・セットの使用法

は、4096 バイトの増分で 4096 から 32768 バイトの制御インターバル・サイズを必要とします。ただし、この選択項目に影響を及ぼすことがある、いくつかの特別な考慮事項があります。

v 非常に大きい制御インターバルがある場合は、入出力操作中にさらに多くのページが固定される必要があります。これは、システムの操作に不利な影響を及ぼす場合があります。

v データ制御インターバル内の小さなレコードから、大量の制御情報が生じることがあります。フリー・スペースが使用できないことがしばしばあります。

v 使用する処理のタイプも、制御インターバル・サイズの選択に影響を及ぼすことがあります。

– 直接処理。直接処理が優勢であるときは、一度に 1 つのレコードを検索しているので、小さな制御インターバルが望ましくなります。妥当なスペース量を使用する最小のデータ制御インターバルを選択します。

– 順次処理。順次処理が優勢であるときは、より大きいデータ制御インターバルが良好な選択項目となります。たとえば、16 KB のデータ・バッファー・スペースが与えられる場合、2 つの入出力操作で 4 つの 4 KB 制御インターバルを読み取るより、1 つの入出力操作で 2 つの 8 KB 制御インターバルを読み取る方が良好です。

– 混合処理。処理が直接および順次の混合である場合、順次処理用の複数のバッファーを持つ小さなデータ制御インターバルが良好な選択項目となります。

キー順データ・セットまたは可変長 RRDS 用のフリー・スペースを指定する場合、システムが、フリー・スペース用に予約されるバイト数を決定します。たとえば、制御インターバル・サイズが 4096 バイトであり、制御インターバル内のフリー・スペースのパーセンテージが 20% として定義されている場合、819 バイトが予約されます。フリー・スペースの計算は、分数値を切り捨て、整数のみを使用します。

定義されたデータ・セット内でどの値が実際に設定されるか見つけるには、アクセス方式サービス・プログラム LISTCAT コマンドを発行します。

索引制御インターバル・サイズキー順データ・セットでは、索引制御インターバル・サイズを指定するか、システムで計算されたサイズをデフォルトとします。サイズを指定しない場合、 VSAM

は、予期されたキー圧縮比 3:1 およびデータ・セット内の制御域当たりのデータ CI

の数に基づいて CISIZE 値を計算します。 VSAM が制御域内の CI の数を決定した後、それはユーザーが指定したサイズが制御域内のすべての CI に対して十分に大きいかどうか見積もります。 ( 183ページの『VSAM は制御インターバル・サイズをどのように調整するか』を参照してください。) サイズが小さすぎる場合は、システムは索引制御インターバルのサイズを VSAM の最小許容サイズに大きくします。指定されたサイズが VSAM が計算した最小サイズより大きい場合は、システムは指定されたサイズを使用します。

割り振り単位、データ CI サイズ、キー長、およびキーの内容 (これは圧縮に影響するので) に応じて、VSAM が計算したサイズより大きい CI を必要とする場合があります。 (キー圧縮があるので、全体のキーが索引内に表されることはまれです。) データ・セット用のキーが見積もられた比率 (3:1) に従って圧縮されない場

VSAM パフォーマンスの最適化

182 z/OS V1R10 DFSMS データ・セットの使用法

Page 207: DFSMS データ・セットの使用法

合、VSAM が計算した索引 CI サイズが小さくなりすぎ、1 つ以上の CA 内で CI

をアドレッシングすることができなくなることがあります。これにより、データ・セット内で使用不能な割り振りスペースが生じます。最初の定義 (DEFINE) の後で、カタログ・リスト (LISTCAT) は、制御域内の制御インターバルの数およびデータ・セットのキー長を表示します。

制御インターバルの数およびキー長を使用して、制御域分割 (これは、索引制御インターバル・サイズが小さすぎるときに発生します) を避けるために必要な索引レコードのサイズを見積もることができます。必要な索引制御インターバル・サイズの大まかな見積もりを行うには、キー長 (KEYLEN) の半分に制御域当たりのデータ制御インターバルの数 (DATA CI/CA) を乗算します。

(KEYLEN/2) * DATA CI/CA ≤ INDEX CISIZE

VSAM が使用する 3:1 ではなく 2:1 の比率を使用する場合は、CI サイズを決定するための実際のアルゴリズムの中で追加のオーバーヘッド係数のいくつかを考慮に入れています。

VSAM は制御インターバル・サイズをどのように調整するかデータ・セットが定義されるときに指定する制御インターバル・サイズは、必ずしもカタログに現れるものと同じでありません。VSAM は、可能な場合には調整を行い、制御インターバル・サイズが適切なサイズ限度、最小バッファー・スペース、十分な索引対データのサイズ、およびレコード・サイズに順応するようにします。VSAM は、データ・セットの定義時に以下の調整を行います。

1. データおよび索引制御インターバル・サイズを指定する。 VSAM が制御域内の制御インターバルの数を決定した後、それは、制御域内のすべての制御インターバルを処理するのに、1 つの索引レコードが十分に大きいかどうか見積もります。そうでない場合は、索引制御インターバルのサイズが、可能な場合は、大きくされます。サイズを大きくできない場合は、VSAM は、制御域内での制御インターバルの数を減らします。

2. 最大レコード・サイズを 2560、データ制御インターバル・サイズを 2560 として指定し、スパン・レコードを持たないようにする。 VSAM は、データ制御インターバル・サイズを 3072 に調整し、データ制御インターバル内に制御情報用のスペースを入れられるようにします。

3. バッファー・スペースを 4K として、索引制御インターバル・サイズを 512 として、データ制御インターバル・サイズを 2K として指定する。 VSAM は、データ制御インターバルを 1536 に減らします。バッファー・スペースは、DEFINE 時に 2 つのデータ制御インターバルおよび 1 つの索引制御インターバル用のスペースを組み込みます。バッファー・スペース要件について詳しくは、189ページの『非共用リソース用の入出力バッファー・スペースの決定』を参照してください。

制御域サイズの最適化制御域サイズは明示的に指定できません。一般に、1 次および 2 次スペース割り振り量が制御域サイズを決定します。

VSAM パフォーマンスの最適化

第 10 章 VSAM パフォーマンスの最適化 183

Page 208: DFSMS データ・セットの使用法

v 1 次または 2 次割り振りが 1 シリンダーより小さい場合、小さい方の値が制御域サイズとして使用されます。 RECORDS が指定される場合、割り振りはフル・トラックに切り上げられます。

v 1 次と 2 次割り振りの両方が 1 シリンダーより大か等しい場合、制御域サイズは、制御域に対する最大サイズである 1 シリンダーです。

次の例は、制御域サイズが 1 次および 2 次割り振り量によってどのように一般的に決定されるかを示しています。索引制御インターバル・サイズおよびバッファー・スペースも、制御域サイズに影響を及ぼすことができます。使用可能な制御域サイズは、1、3、5、7、9 および 15 トラックです。次の例は、索引 CI サイズがCA 内のすべてのデータ CI を処理するのに十分な大きさであるという前提に基づいています。バッファー・スペースは、CI サイズに影響を及ぼさない十分な大きさです。

v CYLINDERS(5,10) ― 1 シリンダーの制御域サイズになります。

v KILOBYTES(100,50) ― システムによって、制御域は 50 KB に基づいて決定され、1 トラック制御域サイズになります。

v RECORDS(2000,5) ― トラックに 10 のレコードが収まると想定し、 1 トラックの制御域サイズになります。

v TRACKS(100,3) ― 3 トラックの制御域サイズになります。

v TRACKS(3,100) ― 3 トラックの制御域サイズになります。

スパン・レコードは、制御域のサイズから制御情報のサイズ (制御インターバル当たり 10 バイト) を引いたものより大きくすることはできません。したがって、最大のスパン・レコードを入れるのに十分に大きい 1 次または 2 次割り振りは指定しないでください。

注: スペースがキロバイト、メガバイト、またはレコード単位で割り振られる場合、システムは、指定されたキロバイト、メガバイト、またはレコードを入れるのに必要とされるトラックまたはシリンダーの数の倍数に等しい制御域サイズを設定します。スペースは、バイトまたはレコードの単位では割り当てられません。

制御域がシリンダーより小さい場合は、制御域サイズはトラックの整数倍数であり、シリンダーをスパンすることができます。ただし、制御域はデータ・セットのエクステントをスパンすることは決してできません。これは、常に整数の制御域から構成されます。使用可能な制御域サイズは、1、3、5、7、9 および 15 トラックです。1 次または 2 次割り振り量が 1 シリンダーより小さい要求に対しては、システムが 1 次または 2 次の数量を調整する場合があります。システムは、前のリリースで選択された CA とは異なる CA を選択する場合もあります。たとえば、TRK(24,4) 要求の結果は、それぞれ制御域が 5 トラック、1 次および 2 次の数量が 25 および 5 トラックとなります。データ・セット用にスペースを割り振ることについて詳しくは、 125ページの『VSAM データ・セット用のスペースの割り振り』を 参照してください。

大きい制御域サイズの利点制御域サイズは、重要なパフォーマンスの含意を持ちます。 1 シリンダーの制御域は、次の利点を持ちます。

v 制御域分割の確率が少なくなります。

VSAM パフォーマンスの最適化

184 z/OS V1R10 DFSMS データ・セットの使用法

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 209: DFSMS データ・セットの使用法

v 索引がより統合されたものになります。 1 つの索引レコードは、制御域内のすべての制御インターバルをアドレッシングします。制御域が大きい場合、必要な索引レコードおよび索引レベルが少なくなります。順次アクセスでは、制御域が大きいと、索引レコードの読み込み回数が減ります。

v シーケンス・セット・レコードが少なくなります。制御域用のシーケンス・セット・レコードは、常に読み取られます。レコードが少なくなると、それらを読み取るのにかかる時間が短くなります。

v 索引のシーケンス・セットが、制御域の最初のトラックに組み込まれる場合、このシーケンス・セットは、装置から読み取るときに固有な回転待ちを減らすために複製されます。

v 十分なバッファーを割り振った場合、制御域が大きいと、一度にストレージに読み取ることができるバッファーが増えます。レコードに順次アクセスしているときは、大きな制御域が便利です。

大きい制御域サイズの欠点1 シリンダー制御域の次の欠点も考慮する必要があります。v 制御域分割があると、移動されるデータが増えます。v 順次入出力中、大きな制御域が関係付けられる実記憶域およびバッファーが増えます。

フリー・スペース分散の最適化DEFINE コマンドを使用して、各制御インターバル内のフリー・スペースのパーセンテージおよび制御域当たりのフリー制御インターバルのパーセンテージを指定するか、データ・クラスを指定して、ストレージ管理者によって設定された ACS ルーチンを通じて割り当てられた FREESPACE 属性を使用します。

フリー・スペースは、制御インターバルおよび制御域分割の確率を減らすことにより、パフォーマンスを改善します。これにより、今度は、VSAM がレコードのセットを、キー順内の他のレコードから離して異なるシリンダーに移動する確率が減ります。分割を発生させない直接挿入または大量順次挿入がある場合、VSAM はレコードを使用可能なフリー・スペースに挿入します。

必要なフリー・スペースの量は、挿入されるか、長くされるか、削除されるレコードの数およびロケーションによって決まります。フリー・スペースが多すぎると、次のようになることがあります。

v 索引レベルの数が増え、直接処理の実行回数に影響を及ぼす。

v データ・セットを入れるのに必要な直接アクセス記憶が増える。

v 同じ数のレコードを処理するのに必要な入出力操作が増える。

フリー・スペースが少なすぎると、制御インターバルおよび制御域分割の数が過剰になります。これらの分割は時間がかかり、さらに次の影響があります。

v データ・セットが物理シーケンスになっていないので、順次処理に必要な時間が増える。

v 制御域分割により、処理中に必要なシーク時間が増える。

VSAM パフォーマンスの最適化

第 10 章 VSAM パフォーマンスの最適化 185

Page 210: DFSMS データ・セットの使用法

LISTCAT または ACB JRNAD 出口を使用して、制御域分割をモニターします。286ページの『トランザクションをジャーナル記録するための JRNAD 出口ルーチン』を参照してください。

分割が頻繁になるときは、REPRO または EXPORT を使用してデータ・セットを再編成します。再編成によって、制御インターバルを減らしてデータ・セットをより小さく、効率的にすることができます。ただし、データ・セットの再編成には時間がかかります。

図 23 は、制御インターバルについてフリー・スペースがどのように決定されるかを示しています。

VSAM パフォーマンスの最適化

186 z/OS V1R10 DFSMS データ・セットの使用法

Page 211: DFSMS データ・セットの使用法

このデータ・セットについて、各制御インターバルは 4096 バイトです。各制御インターバル内で、10 バイトが制御情報用に予約されます。制御インターバルフリー・スペースは 20% として指定されるので、819 バイトがフリー・スペースとして予約されます。 (4096 × .20 = 819)。端数は切り捨てます。フリー・スペースしきい値は 3267 バイトです。しきい値と制御情報の間のスペースは、フリー・スペースとして予約されます。

データ・セット内にロードされるレコードは 500 バイトのレコードなので、バイト3000 とバイト 3267 にあるフリー・スペースしきい値との間には別のレコード用の十分なスペースがありません。未使用スペースのこれらの 267 バイトは、フリー・スペースとしても使用されます。これで、1086 バイトのフリー・スペースが残ります。これは、500 バイトのレコードを 2 つ挿入するのに十分です。 86 バイトのみが使用できずに残されます。

フリー・スペースを指定するとき、指定するフリー・スペースのパーセンテージが、フル・レコードおよびフル制御インターバルを生じさせ、使用できないスペースが最少量になるようにします。

フリー・スペースの最適パーセンテージの選択予期されるレコード追加のパーセンテージ、およびそれらの分散に基づいて制御インターバル・フリー・スペースの量を決定します。

追加なし。レコードが追加される場合、およびレコード・サイズが変更されない場合、フリー・スペースの必要はありません。

少数の追加。データ・セットにほとんどレコードが追加されない場合は、(0 0) のフリー・スペース指定を考慮してください。レコードが追加されるとき、挿入を追加できるスペースを設けるために新規制御域が作成されます。

追加する少数のレコードがかなり均一に分散している場合は、制御インターバル・フリー・スペースは、追加されるレコードのパーセンテージに等しい必要があります。 (FSPC (nn 0)、ここで nn は追加されるレコードのパーセンテージと等しくなります。)

均一に分散した追加。新規レコードがデータ・セットを通じて均一に分散される場合は、制御域フリー・スペースは、データ・セットがロードされた後にデータ・セ

図 23. フリー・スペースの決定

VSAM パフォーマンスの最適化

第 10 章 VSAM パフォーマンスの最適化 187

Page 212: DFSMS データ・セットの使用法

ットに追加されるレコードのパーセンテージに等しい必要があります。(FSPC (0

nn)、ここで nn は追加されるレコードのパーセンテージに等しくなります。)

不均一に分散した追加。新規レコードがデータ・セットを通じて不均一に分散する場合は、少量のフリー・スペースを指定します。データ・セットのうち最も増加が多い部分の中で、最初の分割の後に追加の分割を挿入すると、少量のみの不必要なスペースを持つ制御インターバルが生じます。

大量挿入。順次レコードのグループを挿入している場合は、ALTER コマンドを使用して、データ・セットがロードされた後にフリー・スペースを (0 0) に変更することによって、大量挿入をフルに利用します。大量挿入について詳しくは、 163ページの『レコードの挿入と追加』を参照してください。

データ・セットの特定部分への追加。新規レコードがデータ・セットの特定部分にのみ追加される場合は、(0 0) のフリー・スペースを使用して追加が発生しない部分にロードします。次に、指定を (n n) に変更し、データ・セットのうち追加を受け取る部分をロードします。 『データ・セットをロードするときのフリー・スペース指定の変更』にある例は、これを示しています。

データ・セットをロードするときのフリー・スペース指定の変更次の例では、データ・セットをロードするときに ALTER コマンドを使用してFREESPACE 指定を変更します。

大きなキー順データ・セットに、1 から 300 000 のキーを持つレコードを含めるものと想定します。キー範囲 1 から 100 000 には挿入がなく、キー範囲 100 001 から 200 000 にはいくらか挿入があり、キー範囲 200 001 から 300 000 には多数の挿入があると予期されます。

ロード時の理想的なデータ構造は、次のようになります。

キー範囲 フリー・スペース1 から 100 000 なし100 001 から 200 000 5% の制御域200 001 から 300 000 5% の制御インターバルおよび 20% の制御域

このデータ構造は、次のように作成できます。

1. DEFINE CLUSTER および次のいずれかを行います。

v FREESPACE パラメーターを省略します。

v FREESPACE (0 0) を指定します。

v DATACLAS を指定し、ストレージ管理者によって設定された自動クラス選択ルーチンを通じて割り当てられた FREESPACE 属性を使用します。

2. REPRO または順次追加技法を使用するユーザー・プログラムを使用してレコード 1 から 100 000 をロードします。

3. データ・セットをクローズします。

4. アクセス方式サービス・プログラム・コマンド ALTER クラスター名FREESPACE (0 5) を使用してクラスターの FREESPACE 値を変更します。FREESPACE の明示的な指定は、ストレージ管理者によって割り当てられたデータ・クラス属性を指定変更します。

VSAM パフォーマンスの最適化

188 z/OS V1R10 DFSMS データ・セットの使用法

Page 213: DFSMS データ・セットの使用法

5. REPRO または順次追加技法を使用するユーザー・プログラムを使用してレコード 100 001 から 200 000 をロードします。

6. データ・セットをクローズします。

7. アクセス方式サービス・プログラム・コマンド ALTER クラスター名FREESPACE (5 20) を使用してクラスターの FREESPACE 値を変更します。

8. REPRO または順次追加技法を使用するユーザー・プログラムを使用してレコード 200 001 から 300 000 をロードします。

この手順には次の利点があります。

v スペースを無駄遣いせずにすみます。たとえば、FREESPACE (0 10) が全データ・セットについて定義されていたとすると、最初のキー範囲にあるフリー・スペースはすべて浪費されることになります。

v これは、制御インターバルおよび制御域分割を最小化します。 FREESPACE (0

0) が全データ・セットについて定義されていたとすると、最初に挿入について非常に多数の制御インターバルおよび制御域分割があることになります。

非共用リソース用の入出力バッファー・スペースの決定DASD からの制御インターバルを仮想記憶域に読み書きするには、入出力バッファーが VSAM によって使用されます。キー順データ・セットまたは可変長 RRDS の場合、 VSAM は、最小限 3 つのバッファーを必要とします。2 つはデータ制御インターバル用、1 つは索引制御インターバル用です。 (データ・バッファーの 1 つは、制御域をフォーマット設定して制御インターバルおよび制御域を分割するためにのみ使用されます。) VSAM のデフォルトは、これら 3 つのバッファー用の十分なスペースです。入力順次、固定長 RRDS、または線形データ・セット用には、データ・バッファーのみが必要とされます。

パフォーマンスを高めるには、VSAM デフォルト値を指定変更するパラメーターがあります。これらのパラメーターを指定できる 5 つの場所があります。

v BUFFERSPACE はアクセス方式サービス・プログラム DEFINE コマンドで指定されます。これは、入出力バッファー用に提供される最少量のストレージです。

v BUFSP、BUFNI、および BUFND は、VSAM ACB マクロで指定されます。これは、データ・セットの入出力バッファーで使用される最大量のストレージです。ACB マクロで指定された値が、DEFINE で指定された値より大きい場合は、ACB

値は DEFINE 値を指定変更します。

v BUFSP、BUFNI、および BUFND は、JCL DD AMP パラメーターで指定されます。これは、データ・セットの入出力バッファーで使用される最大量のストレージです。 JCL で指定された値は、それが DEFINE で指定された値より大きい場合は、DEFINE および ACB 値を指定変更します。

v ACCBIAS は、JCL DD AMP パラメーターで指定されます。レコード・アクセス・バイアスには、6 つの指定があります。

SYSTEM システム管理バッファリングを強制し、ACB MACRF およびストレージ・クラス指定に基いてシステムにバッファリング技法を決定させます。

USER システム管理バッファリングを迂回します。SO 順次最適化を使用するシステム管理バッファリング。SW 順次処理用に重み付けされたシステム管理バッファリング。

VSAM パフォーマンスの最適化

第 10 章 VSAM パフォーマンスの最適化 189

Page 214: DFSMS データ・セットの使用法

DO 直接最適化を使用するシステム管理バッファリング。DW 直接最適化用に重み付けされたシステム管理バッファリング。

v データ・クラスのレコード・アクセス・バイアス = SYSTEM または USER

VSAM は、指定された処理オプションによって指示されるようにデータ・セットを処理するための十分なスペースを常に使用可能でなければなりません。

16 MB を超えるバッファーの入手アプリケーション・プログラム用に使用可能な 16 MB 以下のストレージ域を増やすには、16 MB を超える仮想記憶域から VSAM データ・バッファーおよびVSAM 制御ブロックを要求します。これを行うには、ACB マクロ上で RMODE31

パラメーターを指定します。 305ページの『第 17 章 VSAM での 31 ビット・アドレッシング・モードの使用』を参照してください。

必要に応じて、JCL DD AMP パラメーター内で RMODE31 を指定し、ACB が作成されたときに指定された RMODE31 値をユーザーが指定変更できるようにします。 JCL AMP パラメーターにおいて RMODE31 を指定せず、ACCBIAS の値がSYSTEM の場合、RMODE31 のデフォルト値は BUFF となります。VSAM バッファーが 16 MB 境界を超えており、それらに直接アクセスしようとする場合 (位置指定モードの場合と同様に)、プログラムは 31 ビット・アドレッシング・モードで実行しなければなりません。

プログラムを 24 ビット・アドレッシング・モードで実行する必要があり、VSAM

バッファーに直接アクセスする必要がある場合は、JCL AMP パラメーターでRMODE31=NONE をコーディングします。

注: 同じデータ・セットに対して複数の ACB を開いており、それらが同じ制御ブロック構造に接続されている場合は、最初に開いた ACB で定義されている属性が適用されます。 221ページの『第 12 章 VSAM データ・セットの共用』を参照してください。

仮想記憶域制約解放「ハードウェア構成定義 (HCD)」パネル上で LOCANY パラメーターを使用して、16 MB 境界の上下のどちらかで装置制御ブロック (UCB) を定義してください。システムに接続された各装置には、1 つ以上の UCB が関連付けられています。16MB

境界以下の共通仮想記憶域を保護するために、16MB 境界を超える区域にある装置に UCB を定義することができます。

関連資料: 詳しくは、「z/OS HCD ユーザーズ・ガイド」を参照してください。

記憶域使用率を低下させるための動的割り振りオプション24 ビット・アドレスを必要とするアプリケーション・プログラムの場合、システムは 16 MB を超える区域の UCB 用の 24 ビット・アドレスを作成します。このビューは取得 UCB として知られているものです。ステップまたはバッチでの割り振りでは、システムは常に自動的に、割り振り時に 16 MB を超える区域の UCB を取得して、割り振り解除の時点でこの UCB を解放します。動的割り振りの場合に、UCB の取得を選択しないようにすることができます。これができるのは、影響

VSAM パフォーマンスの最適化

190 z/OS V1R10 DFSMS データ・セットの使用法

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 215: DFSMS データ・セットの使用法

を受けるアプリケーションで 16 MB を超える区域にある UCB が処理できる場合です。取得されない UCB の主要なユーザーは DB2 です。

16MB 境界を超える区域にある取得されない UCB を使用して、記憶域使用率を低下させるように VSAM データ・セットを割り振るときには、以下の動的割り振りオプションを使用してください。

v XTIOT オプション (S99TIOEX) - このオプションでは、ご使用のプログラムはAPF 許可を得ているか、監視プログラム状態にあるか、またはシステム・キー状態になっていることが必要です。

v NOCAPTURE オプション (S99ACUCB) - このオプションでも XTIOT エントリーが作成されることになりますが、許可や、XTIOT オプションのコーディングは必要ありません。

v DSAB-above-the-line オプション (S99DSABA) - このオプションを指定して16MB 境界を超える区域にデータ・セット関連制御ブロック (DSAB) を配置してください。このオプションは S99TIOEX と一緒に使用することが必要です。

関連資料: 詳しくは、「 z/OS MVS Programming: Authorized Assembler Services

Guide」を参照してください。

システム管理バッファリングの調整VSAM は、システム管理バッファリング (SMB) を使用して、 VSAM データ・セット用に使用するバッファーの数およびバッファー管理のタイプを決定することができます。

VSAM が SMB を使用することを指示するには、次のオプションのどちらかを指定します。

v JCL DD ステートメント AMP パラメーターの ACCBIAS サブパラメーターおよびレコード・アクセス・バイアス用の適切な値を指定します。

v データ・クラス内のレコード・アクセス・バイアスおよび ACB 内のアプリケーション処理オプションを指定します。

システム管理バッファリング (SMB) では、データ・セットは次のオプションの両方を使用する必要があります。

v システム管理サブシステム (SMS) ストレージ

v 拡張フォーマット (データ・クラス内の DSNTYPE=ext)

JCL は、データ・クラスでの指定より優先されます。 NSR を指定する必要があります。 SMB は、バッファー・ハンドリングを順次または直接処理へと重み付けまたは最適化します。

拡張フォーマット・データ・セットを最適化するには、AMP パラメーターのACCBIAS サブパラメーターを関連したサブパラメーター SMBVSP、SMBDFR、および SMBHWT と一緒に使用します。これらのサブパラメーターは、データ・クラス内の Record Access Bias=SYSTEM と共に使用することもできます。これらのサブパラメーターは、直接最適化処理に専用です。

VSAM パフォーマンスの最適化

第 10 章 VSAM パフォーマンスの最適化 191

|

|

|

|

|

Page 216: DFSMS データ・セットの使用法

処理方法このセクションの情報は、プランニング目的としてのみ記述されています。 これは、ストレージ所要量に関して絶対または正確でありません。これは、ストレージ所要量を見積もるためのガイドラインとしてのみ使用する必要があります。個々の順守事項は、特定のインプリメンテーションおよび処理に応じて異なる場合があります。

DFSMSdfp™ のフィーチャーであるシステム管理バッファー方式 (SMB) は、バッチ・アプリケーション処理をサポートしています。 SMB は次のアクションを取ります。

1. これは、VSAM データ・セットを処理するためのデフォルトを変更します。これによって、システムは現在および将来のハードウェア・テクノロジーをより効率的に利用できるようになります。

2. これは、アプリケーション・パフォーマンスを改善するためのバッファリング技法を開始します。この技法は、アプリケーション・プログラムが指定していないものです。

SMB がインプリメントする次の 4 つの処理技法のどれでも選択または指定することができます。

v 直接最適化 (DO)

v 順次最適化 (SO)

v 直接重み付け (DW)

v 順次重み付け (SW)

直接最適化 (DO)。DO 処理技法は、まったくランダムなレコード・アクセスを最適化します。これは、データ・セット内のレコードにまったくランダムな順序でアクセスするアプリケーション用に適切です。この技法は、非共用リソース (NSR) バッファー方式のユーザー指定をローカル共用リソース (LSR) インプリメンテーションのバッファー方式に指定変更します。

次の 3 つのオプション SMBVSP、SMBDFR、および SMBHWT は、直接最適化技法での処理にのみ使用されます。

v SMBVSP。このオプションは、データ・セットがオープンされるときにバッファー用に取得する、仮想記憶域の量を指定します。 仮想バッファー・サイズは、キロバイト単位で 1K から 2048000K まで、またはメガバイト単位で 1M から2048M まで指定することができます。 SMBVSP パラメーターを使用して、データ・コンポーネント用に作成されるプールのサイズを制限することができます。

v SMBDFR。このオプションは、据え置き書き出しの処理を指定します。 SMBVSP

を使用すると、以下のいずれかの状態が発生するまでメディアへのバッファーの書き込みを据え置くことができます。

– バッファーが別の要求のために必要になる。

– データ・セットがクローズされる。

システムが直接最適化のために LSR 処理を使用するとき、CLOSE TYPE=T はバッファーをメディアに書き込みません。据え置き書き出し処理用のデフォルトは、データ・セットを定義するときに指定する SHAREOPTIONS 値によって決まります。 SHAREOPTIONS (1,3) および (2,3) のデフォルトは据え置き書き出し

VSAM パフォーマンスの最適化

192 z/OS V1R10 DFSMS データ・セットの使用法

Page 217: DFSMS データ・セットの使用法

です。 SHAREOPTIONS (3,3)、(4,3)、および (x, 4) のデフォルトは非据え置き書き出しです。 SMBDFR に対して値を指定する場合は、デフォルトよりこの値が常に優先されます。

v SMBHWT。このオプションでは、バッファーの 10 進値の範囲を指定します。Hiperspace バッファーを割り振るために 1 から 99 の整数の 10 進値を指定することができます。 割り振りは、割り振られていた仮想バッファー数の倍数に基づいて行われます。

注:

1. JCL AMP パラメーターを使って SMBDFR および SMBHWT を指定することができます。 詳しくは、「z/OS MVS JCL 解説書」を参照してください。

2. ISMF データ・クラスを使って SMBVSP を指定することができます。 詳しくは、「z/OS DFSMS 対話式記憶管理機能 (ISMF) の使用法」を参照してください。

順次最適化 (SO)。SO 技法は、順次に行われるレコード・アクセス用の処理を最適化します。これは、バックアップ用、および全データ・セットまたはレコードの大きなパーセンテージを順次に読み取るアプリケーション用に適しています。

直接重み付け (DW)。大部分は直接処理で、一部は順次です。DW 処理は、順次検索用の最小限の先読みバッファーおよび直接要求用の最大限の索引バッファーを提供します。

順次重み付け (SW)。大部分は順次で、一部は直接です。この直接技法は、順次要求用に先読みバッファーを使用し、直接要求用に追加の索引バッファーを提供します。先読みは、SO を使用して転送されたデータの量ほど大きくはなりません。

SMB をインプリメントするには、アプリケーション・プログラムは、非共用リソース (NSR) バッファー方式 ACB MACRF=(NSR) を指定する必要があります。VSAM データ・セットが他のバッファー方式オプション MACRF=

(LSR|GSR|UBF|RLS) に対する要求を指定してオープンされるとき、システムはSMB を設定しません。

デフォルトの技法の基本は、ACB MACRF=(DIR,SEQ,SKP) 用のアプリケーション指定です。関連付けられたストレージ・クラス (SC) での次の値の指定も、デフォルトの技法に影響を及ぼします。v 直接ミリ秒応答時間v 直接バイアスv 順次ミリ秒応答v 順次バイアス

AMP= パラメーターの ACCBIAS サブパラメーターを使用することにより技法を外部から指定することができます。システムは、データ・セットの OPEN 処理中に機能を呼び出します。 SMB がそのプロセス中に初期決定を行った後、それ以上かかわりを持ちません。

194ページの表 12は、特定のパラメーター指定に対してどのアクセス・バイアスをSMB が選択するかを示すガイドラインです。

VSAM パフォーマンスの最適化

第 10 章 VSAM パフォーマンスの最適化 193

Page 218: DFSMS データ・セットの使用法

表 12. SMB のアクセス・バイアス・ガイドライン

ACB MACRF= とストレージ・クラス MSR/BIAS に基づく BIAS 選択

MACRF オプション

ストレージ・クラスで指定した MSR/BIAS 値

SEQ DIR 両方 なし

DIR DW DO DO DO

SEQ - デフォルト

SO SW SO SO

SKP DW DW DW DW

(SEQ,SKP) SO SW SW SW

(DIR,SEQ) または (DIR,SKP) または(DIR,SEQ,SKP)

SW DW DW DW

このテーブルで使用した省略形の意味は以下のとおりです。

v DO = 直接最適化

v DW = 直接重み付け

v SO = 順次最適化

v SW = 順次重み付け

注: 上記のテーブルをガイドラインとして使用できるのは、JCL AMP パラメーターで ACCBIAS=SYSTEM を指定時、または Dataclass でRECORD_ACCESS_BIAS=SYSTEM を指定時に、SMB がどのアクセス・バイアスを選択することになるかを示す場合に限定されます。実際のアクセス・バイアスの決定時には例外があります。決定に影響する他の要因としては、使用可能なストレージ量、それが AIX® または Base コンポーネントであるかどうか、および DSN または DDN 共用が有効状態かどうかです。

JCL AMP パラメーター上で ACCBIAS=DO が特別に要求されたケースでは、SMB

はストレージ不足の場合に DW をデフォルトとする可能性があります。この状態を回避するには、以下の 2 つの手法を使用します。

1. このジョブに対してもっと多くのストレージを割り振ります。

2. JCL 上で SMBVSP=xx を指定して、SMB が DO 用に使用するストレージ量を制限します。SMBVSP の使用方法について詳しくは、関連するセクションを参照してください。

SMB を要求し、JCL AMP MSG = SMBBIAS を指定すると、VSAM Open がメッセージ IEC161I 001 を発行し、SMB が選択するアクセス・バイアスを示します。以下の出力は、メッセージ IEC161I 001 の例です。

J E S 2 J O B L O G -- S Y S T E M 3 0 9 0 -- N O D E S J P L 3 7 2

16.59.12 JOB00019 ---- WEDNESDAY, 26 APR 2006 ----16.59.12 JOB00019 IRR010I USERID IBMUSER IS ASSIGNED TO THIS JOB.16.59.12 JOB00019 ICH70001I IBMUSER LAST ACCESS AT 16:57:04 ON WEDNESDAY, APRIL 26, 200616.59.12 JOB00019 $HASP373 OPENCLOS STARTED - INIT 1 - CLASS A - SYS 309016.59.24 JOB00019 IEC161I 001(DW)- 255,OPENCLOS,TESTIT,DD1,,,IBMUSER.TEST.BASE1,, 547

547 IEC161I SYS1.MVSRES.MASTCAT

VSAM パフォーマンスの最適化

194 z/OS V1R10 DFSMS データ・セットの使用法

Page 219: DFSMS データ・セットの使用法

内部処理技法そのほかに、2 つの内部技法がデータ・セット作成およびロード・モード処理をサポートします。ユーザーは、これらの技法を指定できません。これらは、データ・セットがロード・モード (HURBA=0) である場合および次の項目が SYSTEM キーワードを指定する場合に、システムが内部的に呼び出します。v 関連したデータ・クラスの場合は RECORD ACCESS BIAS

v データ・セット JCL の AMP= パラメーターでは ACCBIAS

2 つの技法は、作成最適化 (CO) および作成リカバリー最適化 (CR) です。

作成最適化 (CO): データ定義で SPEED を指定する場合は、ロード・パフォーマンスを最適化するための最大バッファー。

作成リカバリー最適化 (CR): データ定義で RECOVERY を指定する場合は、ロード・パフォーマンスを最適化するための最大バッファー。

ガイドラインおよび制約事項の処理次のガイドラインおよび制約事項は、各技法を使用しての処理に関係しています。

直接最適化 (DO) のガイドライン。DO により、大部分の追加プロセッサーの仮想記憶域に対する要件定義が生じることがあります。これにより、単一のアプリケーション・プログラムの中でこの技法を使用してオープンされた各データ・セットについてローカル共用リソース (LSR) プールが作成されます。データ・セットのサイズは、バッファリング用のプロセッサー仮想記憶域要件定義における主な係数です。プールのサイズは、プールが作成される時点での実際のデータ・セット・サイズに基づいています。つまり、プロセッサーの仮想記憶域要件定義は、レコードが追加され、データ・セットがその直前のサイズを超えて拡張された後、各 OPEN で増えます。

各データ・セットごとに、データと索引コンポーネントの両方 (該当する場合) について個別のプールが作成されます。 単一のプールを複数データ・セットによって共用する機能はありません。 ただし、DSN 共用と DDN 共用はサポートされます。索引プールは、索引コンポーネント内のすべてのレコードを入れられるようにサイズ変更されます。データ・プールは、データ・セット内のユーザー・レコードのおよそ 20% を入れられるようにサイズ変更されます。前述したように、このサイズはデータ・セットの増加に基づいて変化することがあります。データ・コンポーネント用の最大プール・サイズが識別されます。 これらのバッファーは、RMODE31

を使用することによって指定変更されない限り、16MB 境界より上で獲得されます。

SMBVSP パラメーターを使用して、データ・コンポーネント用に作成されるプールのサイズを制限することができます。 索引レコード用のプールのサイズを指定変更する機能はありません。 SMBHWT パラメーターを使用して、データ・コンポーネント用の仮想バッファーと合わせて Hiperspace 内でバッファリングを提供することができます。 このパラメーターの値は、Hiperspace バッファー用の仮想バッファー・スペースの乗数として使用されます。 これは、アプリケーション領域用に必要なサイズを減らすことができますが、プロセッサー・サイクル要件定義に関連した含意を持ちます。つまり、すべてのアプリケーション要求は、仮想バッファー・アドレスに向けられる必要があります。要求されたデータが Hiperspace バッファー内

VSAM パフォーマンスの最適化

第 10 章 VSAM パフォーマンスの最適化 195

Page 220: DFSMS データ・セットの使用法

にある場合は、そのデータは、仮想バッファーを「スチール」して、そのバッファーを一番前に使用された (LRU) Hiperspace バッファーに移動した後に、仮想バッファーに移動される必要があります。

このオプションに必要とされる最適量のストレージが使用可能でない場合、 SMB

はバッファーの数を減らし、要求を再試行します。データについて、SMB は、減らした量と最少量を使用して 2 回試行を行います。索引については、SMB はストレージの量を 1 回だけで最少量に減らします。すべての試行が失敗する場合は、DW

技法が使用されます。システムは IEC161I メッセージを出して、これが起きたことを知らせます。そのほかに、SMF タイプ 64 レコードは、リソースの減らされた量と最少量のどちらがデータ・プール用に使用されているかどうか、および DW が使用されているかどうかを示します。詳しくは、「z/OS MVS システム管理機能(SMF)」を参照してください。

直接最適化 (DO) の使用に関する制約事項。 直接最適化 (DO) 技法は、ACB がデータ・セットにアクセスするために MACRF=(DIR) オプションのみを指定している場合に、選択されます。 SEQ|SKP が、DIR と組み合わせて、または独立して指定される場合、DO は選択されません。選択は、関連した DD ステートメントのAMP= パラメーター上の ACCBIAS=DO のユーザー指定によって指定変更できます。

直接最適化 (DO) 技法の使用にはいくつかの制約事項があります。

1. アプリケーションは、順次処理のためにデータ・セットを先頭に位置付ける必要があります。これは、最初の検索がデータ・セットのそのポイントに設定されることを想定しています。

2. 複数ストリングを使用するアプリケーションは、他の要求が処理中にその位置を保留状態にしている場合はハングする可能性があります。この例としては、ある要求が順次 GET を行い、一方で別要求が PUT を行うアプリケーションです。

順次最適化 (SO) のガイドライン。この技法は、データ・セットのバックアップなどの順次アプリケーション処理用の最も効率的なバッファーを提供します。データ・セットのサイズは、バッファリングに必要とされるプロセッサー仮想記憶域における係数ではありません。アプリケーションによって指定されたバッファリング・インプリメンテーション (NSR) は、この技法では変更されません。この技法には、デフォルトが 16 MB を超える、バッファー用のおよそ 500K のプロセッサー仮想記憶域が必要です。

直接重み付け (DW) のガイドライン。この技法は、 VSAM データ・セット内のレコードへの要求がアクセスの大部分についてランダムであるアプリケーションに適用されます。そのほかに、これは、順次パフォーマンスについて VSAM デフォルトを上回るいくらかの改善も提供することもできる場合があります。

データ・セットのサイズは、バッファリングに必要とされるストレージにおけるあまり重要でない係数です。この技法は、アプリケーションが指定したバッファリング・インプリメンテーション (NSR) を変更しません。この技法は、バッファー用におよそ 100K の主記憶域 (デフォルトは 16 MB) を必要とします。

順次重み付け (SW) のガイドライン。この技法は、 VSAM データ・セット内のレコードへの要求が大部分のアクセスについて順次であるアプリケーションに適用さ

VSAM パフォーマンスの最適化

196 z/OS V1R10 DFSMS データ・セットの使用法

Page 221: DFSMS データ・セットの使用法

れます。そのほかに、この技法は直接パフォーマンスについて VSAM デフォルトを超えるいくらかの改善を提供することができます。

データ・セットのサイズは、バッファリングが必要とするプロセッサー仮想記憶域の量におけるあまり重要でない係数です。この技法は、アプリケーションが指定したバッファリング・インプリメンテーション (NSR) を変更しません。この技法は、バッファー用におよそ 100K のプロセッサー仮想記憶域 (デフォルトは 16 MB 以上) を必要とします。

作成最適化 (CO) のガイドライン。これは、データ・コンポーネントへの物理入出力については、VSAM データ・セットをロードするための最も効率的な技法です。これが適用されるのは、データ・セットが初期ロード状況にあり、SPEED オプションを使用して定義されているときのみです。システムは、データ・クラスでのRECORD ACCESS BIAS の指定または SYSTEM の AMP=(ACCBIAS=) 値以外のユーザー制御を使用せずに、それを内部的に呼び出します。

データ・セットのサイズは、バッファリングが必要とするストレージの量における係数ではありません。この技法は、アプリケーションが指定したバッファリング・インプリメンテーション (NSR) を変更しません。この技法は、バッファー用におよそ 2 MB のプロセッサー仮想記憶域 (デフォルトは 16 MB 以上) を必要とします。

作成リカバリー最適化 (CR) のガイドライン。RECOVERY オプションを使用して定義されたデータ・セットが初期ロード状況にあるとき、システムはこの技法を使用します。システムは、データ・クラスでの RECORD ACCESS BIAS の指定または SYSTEM の AMP=(ACCBIAS=) 値以外のユーザー制御を使用せずに、CR を内部的に呼び出します。

データ・セットのサイズは、バッファリングが必要とするストレージの量における係数ではありません。この技法は、アプリケーションが指定したバッファリング・インプリメンテーション (NSR) を変更しません。この技法は、バッファー用におよそ 1 MB のプロセッサー仮想記憶域 (デフォルトは 16 MB 以上) を必要とします。

最終的な SMB 処理技法および SMB に関係した追加のリソース・ハンドリング情報を決定するには、SMF タイプ 64 レコードを調べます。 SMF タイプ 64 レコードはデータ・セットの CLOSE 処理中に収集されるので、これは主に診断を目的として行われます。 SMF レコードの詳細については、「z/OS MVS システム管理機能 (SMF)」を参照してください。

SMB の使用に関する一般的な考慮事項次の係数が、SMB バッファー用のストレージ所要量に影響を及ぼします。v 単一のアプリケーション・プログラム内で SMB 用にオープンされた VSAM データ・セットの数

v 選択または指定された技法v 一部の技法用のデータ・セット・サイズ

SMB 技法の場合のバッファー用のストレージは、16 MB 以上で入手されます。アプリケーションが AMODE=RMODE=24 として実行され、位置指定モード要求

VSAM パフォーマンスの最適化

第 10 章 VSAM パフォーマンスの最適化 197

Page 222: DFSMS データ・セットの使用法

(RPL OPTCD=(,LOC)) を発行する場合、AMP= パラメーターは、SMB を使用するデータ・セット用に RMODE31=NONE を指定する必要があります。

SMB は、すべてのアプリケーション・プログラム・バッファリング要件定義に対する応答ではない場合があります。 SMB の主な目的は、バッチ・アプリケーション処理用のパフォーマンス・バッファリング・オプションを、標準のデフォルトが提供するオプションを超えて改善することです。多くの大きいデータ・セットおよびレコードへの明らかにランダムなアクセスの場合、アプリケーション・プログラム内で共通リソース・プールを共用する技法をインプリメントする方がよい場合があります。アプリケーション・プログラムのデザイナーは、データ・セット用のアクセス技法を知ることはできますが、SMB がそれを予測することはできません。そのようなアプリケーションでは、アプリケーション・プログラムのデザイナーに各プールごとにバッファーのサイズおよび数を定義させるのがよいようです。これは、高性能データベース・システムの要件定義と違っているわけではありません。

並行データ・セット位置決め用のバッファーの割り振り必要なバッファーの数を計算するには、使用するストリングの数を決定する必要があります。ストリングは、データ・セット位置決めを必要とする VSAM データ・セットへの要求です。同じデータ・セットへの異なる並行アクセスが必要な場合、多重ストリングが使用されます。多重ストリングが使用される場合、各ストリングは索引入出力バッファーの排他制御を必要とします。したがって、STRNO パラメーター (ACB または GENCB マクロで、または AMP パラメーター) について指定された値は、並行位置決めを必要とする要求が発行されたときに必要とされる索引入出力バッファーの最小数です。

直接アクセス用のバッファーの割り振りキー順データ・セットまたは可変長 RRDS では、索引バッファーの数を増やすことによって直接処理用のパフォーマンスを高めます。直接処理は、索引を通じてのトップダウン検索を常に必要とします。各アクセスごとにデータ・バッファーは 1 つしか使用されないので、多くのデータ・バッファーはパフォーマンスを高めません。

直接アクセス用のデータ・バッファーVSAM は直接処理用にバッファーを読み進めないので、最小数のデータ・バッファーのみが必要とされます。各アクセスごとにデータ・バッファーは 1 つしか使用されません。最小より多くのデータ・バッファーをデータ・バッファーを指定する場合、これには有益な影響がほとんどありません。

データ・セットを直接処理するとき、VSAM は一度に 1 つだけのデータ制御インターバルを読み取ります。出力処理 (更新用の PUT) では、RPL マクロでOPTCD=NSP が指定されていない場合、VSAM は更新された制御インターバルを即時に書き出します。

直接アクセス用の索引バッファー索引レコード用に提供されている入出力バッファーの数が並行位置決め (STRNO)

を必要とする要求の数より大きい場合、最高位レベルの索引レコードには 1 つのバッファーが使用されます。他の索引セット索引レコードには、必要に応じて追加のバッファーが使用されます。直接アクセスでは、VSAM に最高位の索引レコードを

VSAM パフォーマンスの最適化

198 z/OS V1R10 DFSMS データ・セットの使用法

Page 223: DFSMS データ・セットの使用法

常に常駐させたい場合は、ACB の STRNO パラメーターの値に 1 を加えた値に等しくなるように少なくとも十分な索引バッファーを提供する必要があります。

未使用の索引バッファーはパフォーマンスを低下させないので、常に十分な数を指定する必要があります。最適なパフォーマンスを得るには、索引バッファーの数は、高位レベル索引セット制御インターバルの数に、高位レベル索引セット全体および仮想記憶域内のストリング当たり 1 シーケンス・セットの制御インターバルを含めるためにストリング当たり 1 を加えたものに少なくとも等しい必要があります。

VSAM は索引バッファーを一度に 1 つずつ読み取り、共用リソースを使用する場合は、ストレージ内に索引セット全体を保持します。索引が参照されるときに索引バッファーがロードされます。多くの索引バッファーが提供されるとき、要求された索引制御インターバルがストレージ内になくなるまで、索引バッファーは再使用されません。共用リソース・プールが使用されない限り、ストリング当たり 2 つ以上のシーケンス・セット・バッファーに対し追加の索引バッファーが使用されないことを注意してください。大きいデータ・セットの場合は、索引レベルの数に等しい索引バッファーの数を指定します。

VSAM は、バッファー・スペースが仮想記憶域内で許容するものと同じだけ多くの索引セット・レコードを保持します。理想的には、索引は、索引セット全体が仮想記憶域に残れるのに十分なだけ小さくします。データ・セットの特性から小さな索引にすることができないので、いくつ提供するかを決定するには索引入出力バッファーがいくつ使用されるか承知しておく必要があります。

直接アクセス用のバッファー割り振りの例次の例 (図 24 を参照) は、いくつのバッファーが直接アクセス用にスケジュールされているかを示しています。次のことを前提とします。v 2 つのストリングv 図に示されているように 3 レベルの索引構造v 3 つのデータ・バッファー (各ストリングごとに 1 つと分割用に 1 つ)

v 4 つの索引バッファー (最高位レベルの索引用に 1 つ、2次 レベル用に 1 つ、および各ストリングごとに 1 つ)

VSAM パフォーマンスの最適化

第 10 章 VSAM パフォーマンスの最適化 199

Page 224: DFSMS データ・セットの使用法

次の要求が発生します。

要求 1。CA2 からの制御インターバルがストリング 1 によって提供されます。

v 最高位レベルの索引セット IS1 が索引バッファーに読み込まれます。すべての要求について IS1 はこのバッファーに残ります。

v IS1 は IS2 を指し、これは 2 次索引バッファーに読み込まれます。

v IS2 はシーケンス・セット SS2 を指し、これはストリング 1 用の索引バッファーに読み込まれます。

v SS2 は CA2 内の制御インターバルを指します。この制御インターバルはストリング 1 用のデータ・バッファーに読み込まれます。

要求 2。CA3 からの制御インターバルがストリング 2 によって提供されます。

v IS1 および IS2 はそれぞれのバッファー内に残ります。

v SS3 はストリング 2 用の索引バッファーに読み込まれます。

v SS3 は CA3 内の制御インターバルを指します。この制御インターバルはストリング 2 用のデータ・バッファーに読み込まれます。

要求 3。CA6 内の最初の制御インターバルがストリング 1 によって要求されます。

図 24. 直接アクセス用のバッファーのスケジューリング

VSAM パフォーマンスの最適化

200 z/OS V1R10 DFSMS データ・セットの使用法

Page 225: DFSMS データ・セットの使用法

v IS1 はそのバッファー内に残ります。

v IS1 は今度は IS3 を指しているので、IS3 は 2 次索引バッファーに読み込まれ、IS2 を置き換えます。

v SS6 はストリング 1 用の索引バッファーに読み込まれます。

v SS6 は CA6 内の最初の制御インターバルを指します。この制御インターバルはストリング 1 用のデータ・バッファーに読み込まれます。

要求 4。CA6 内の最初の制御インターバルが今度はストリング 2 によって要求されます。

v IS1 および IS3 はそれぞれのバッファー内に残ります。

v SS6 はストリング 2 用の索引バッファーに読み込まれます。

v SS6 は CA6 内の最初の制御インターバルを指します。この制御インターバルはストリング 2 用のデータ・バッファーに読み込まれます。

v この制御インターバル用のストリング 1 要求が更新用の GET であったとすると、制御インターバルは排他制御に保持され、ストリング 2 はそれにアクセスできないことになります。

直接処理用に提案されるバッファー数:

索引バッファー数最小 = STRNO最大 = 索引セット・レコード数 + STRNO

データ・バッファー数STRNO + 1

順次アクセス用のバッファーの割り振りデータに順次にアクセスしているとき、データ・バッファーの数を大きくすることによりパフォーマンスを高めます。 複数のデータ・バッファーがあるとき、VSAM

は先読み機能を使用して、次のデータ制御インターバルを、それらが必要とされる前にバッファーに読み込みます。索引入出力バッファーが 1 つしかなくてもパフォーマンスは損なわれません。 VSAM は、索引セット内の垂直ポインターではなく、シーケンス・セット・レコード内の水平ポインターを使用することによって次の制御インターバルに到達するからです。順次処理中、余分の索引バッファーがあってもほとんど影響しません。

初期ロード・モード処理用に提案されるバッファー数:

索引バッファー数 = 3Data buffers = 2 * (number of Data CI/CA)

連続した順次処理環境では、ストリング当たり 4 つのデータ・バッファーで始めます。 1 つのバッファーは、制御域をフォーマット設定し、制御インターバルおよび制御域を分割するためにのみ使用されます。他の 3 つは、先読み機能をサポートするために使用されるので、順次制御インターバルは、制御インターバルからレコードが要求される前にバッファーに置かれます。十分なバッファーを指定することにより、小さなデータ制御インターバルを使用して、大きいデータ制御インターバルを使用する場合と、入出力操作当たり同じ量のデータにアクセスすることができます。

SHAREOPTIONS 4 がデータ・セット用に指定されるときは、バッファーは各制御インターバルが読み取られるときに更新されるので、先読み機能が効果的でないこ

VSAM パフォーマンスの最適化

第 10 章 VSAM パフォーマンスの最適化 201

Page 226: DFSMS データ・セットの使用法

とがあります。したがって、SHAREOPTIONS 4 については、データ・バッファーを最小限に保持することで、パフォーマンスを実際に改善することができます。

装置から入力を待っているときにパフォーマンスの問題が生じる場合は、ジョブの実行時間を改善するためにさらに多くのデータ・バッファーを指定する必要があります。データ・バッファーを増やすと、さらに多くの先読み処理を行うことができます。ただし、バッファー数が過剰だと、ページングが過剰になるので、パフォーマンスの問題が発生することがあります。

混合処理状態 (順次および直接) では、ストリング当たり 2 つのデータ・バッファーで開始し、ページングが問題でない場合は、BUFND をストリング当たり 3 つに増やします。

データ・セットを順次処理しているときは、VSAM は、バッファーが使用可能になるにつれて先読みします。出力処理 (更新用の PUT) では、制御インターバル分割が必要でない限り、VSAM は更新された制御インターバルをバッファーから即時に書き出しません。 POINT マクロは、RPL OPTCD=SEQ が指定されない限り先読み処理を発生させません。 POINT は、後続の順次検索用にデータ・セットを位置決めします。

順次アクセス用に提案されるバッファー数:

索引バッファー数 = STRNOData buffers = 3 + STRNO (minimum)

パス用のバッファーの割り振りパスを使用してデータ・セットを処理すると、割り振られる必要があるバッファー数が増えます。これは、代替索引、基本クラスター、およびアップグレード・キット内の代替索引用にバッファーが必要とされるからです。

基本クラスターがその代替索引を使っての処理用にオープンされているとき、BUFSP、BUFND、BUFNI、および STRNO パラメーターは、パスの代替索引にのみ適用されます。クラスターの BUFFERSPACE 値 (DEFINE コマンドで指定されます) または BSTRNO 値 (ACB マクロで指定されます) によってさらにバッファーが許可されない限り、最小数のバッファーが基本クラスターに割り振られます。VSAM は直接処理を想定し、それに従って追加のバッファーがデータ・コンポーネントと索引コンポーネントの間で割り振られます。

アップグレード・セット内の各代替索引ごとに、2 つのデータ・バッファーおよび1 つの索引バッファーが常に割り振られます。パスの代替索引がアップグレード・セットのメンバーである場合、各割り振りごとのバッファーの最小の増加は、データ・バッファー用に 1 つと索引バッファー用に 1 つです。バッファーは、それがキー順データ・セットであるかのように代替索引に割り振られます。パスが出力用にオープンされており、パス代替索引がアップグレード・セット内にあるときは、ACB MACRF=DSN を指定すると、パス代替索引はバッファーをアップグレード代替索引と共用します。

バッファーの獲得データおよび索引バッファーが獲得され、割り振られるのは、データ・セットがオープンされているときのみです。 VSAM は、プログラムがデータ・セットをオー

VSAM パフォーマンスの最適化

202 z/OS V1R10 DFSMS データ・セットの使用法

Page 227: DFSMS データ・セットの使用法

プンするときに有効であるパラメーターに基づいてバッファーを動的に割り振ります。バッファー割り振りに影響を及ぼすパラメーターは、プログラムの ACB にあり、次のとおりです。MACRF=(IN|OUT, SEQ|SKP, DIR)、STRNO=n、BUFSP=n、BUFND=n、および BUFNI=n。バッファー割り振りに影響を及ぼすその他のパラメーターは、BUFSP、BUFND、および BUFNI については DD ステートメントのAMP 指定に、そして BUFFERSPACE 値はデータ・セットのカタログ・レコードにあります。

ACB が MACRF=(SEQ,DIR) を組み込んでいるデータ・セットをオープンする場合、バッファーは順次処理の規則に従って割り振られます。 RPL が後にプログラム内で変更される場合、データ・セットがオープンされたときに割り振られたバッファーは変更されません。

データおよび索引バッファー割り振り (BUFND および BUFNI) は、ACB パラメーターを変更するためのアクセスを持つユーザーによって、または DD ステートメントの AMP パラメーターを通じてのみ指定できます。プログラムに追加バッファー・スペースを割り当てるには、データ・セットの BUFFERSPACE 値を変更することによって、またはデータ・セットの DD ステートメント内の AMP パラメーターでより大きい BUFSP 値を指定することによって行うことができます。

バッファーの内容が書き込まれるとき、バッファーのスペースは解放されません。制御インターバルは、新規制御インターバルで上書きされるまでストレージに残ります。プログラムがその制御インターバルを参照する場合、VSAM がそれを再読み取りする必要はありません。 VSAM は、希望する制御インターバルがストレージ内にあるかどうか検査します。プログラムが限定キー範囲内のレコードを処理するとき、追加のデータ・バッファーを提供することによりスループットを増やすことができます。データ・セットがクローズされているとき、バッファー・スペースは解放されます。

推奨: データを使用する直前にそれが使用可能になるようにします。データが、プログラム内でそれが使用されるよりはるかに前にバッファーに読み取られる場合、それをページアウトすることができます。データまたは索引バッファーが必要以上に多いと、過剰のページングまたは過剰な内部処理が発生する場合があります。バッファーがそれよりも多くても役に立たない最適なポイントがあります。

索引オプションの使用キー順データ・セットまたは可変長 RRDS の索引を使用しているとき、次のオプションがパフォーマンスに影響を及ぼします。各オプションがパフォーマンスを改善しますが、一部のものでは追加の仮想記憶域または補助記憶域スペースを提供する必要があります。オプションは、以下のとおりです。

v すべての索引セット・レコードを入れるのに十分な仮想記憶域を指定する (共用リソースを使用している場合)。

v 索引制御インターバルを、制御域内の各制御インターバルのキーを含められる大きさにする。

v 索引およびデータ・セットを別個のボリューム上に置く。

VSAM パフォーマンスの最適化

第 10 章 VSAM パフォーマンスの最適化 203

Page 228: DFSMS データ・セットの使用法

索引セット・レコード用の仮想記憶域の増加キー順データ・セットまたは可変長 RRDS からレコードを検索するか、キー・アクセスを使用してレコードを保管するには、VSAM は、そのデータ・セットの索引を検査する必要があります。処理プログラムがデータ・セットの処理を開始する前に、索引レコードをバッファーに入れるためにそれが VSAM に提供している仮想記憶域の量を指定する必要があります。最小値は、索引レコード用の 1 つの入出力バッファーに十分なスペースですが、索引レコードが、別のものを入れるスペースを空けるために仮想記憶域から継続的に削除されてから、後でそれが必要なときに再び検索されると、重大なパフォーマンス上の問題が発生することがあります。索引レコード用の十分なバッファー・スペースによって、パフォーマンスを改善できます。

キー順データ・セットまたは可変長 RRDS の処理を開始するときに、索引入出力バッファー用に十分な仮想記憶域を指定することにより、索引セット・レコード用の仮想記憶域を確保します。 VSAM は、仮想記憶域内にできるだけ多くの索引セット・レコードを保持します。データ・レコードを見つけるために索引レコードを検索する必要があるたびに、VSAM は、普通の状況のもとで最も有用でないと VSAM

が判断する索引レコードを削除することによってそれを入れるスペースを空けます。これは、一般には、最下位の索引レベルに属しているか、最も使用されなかった索引レコードです。共用リソース・プールが使用されない限り、VSAM は、ストリング当たり 2 つ以上のシーケンス・セットを保持しません。

制御域分割の回避考慮することができる 2 番目のオプションは、索引セット・インターバルが、制御域内の各制御インターバルのキーを含むのに十分に大きいようにすることです。これで制御域分割の数が減ります。このオプションは、必要な索引レベルの数を最小限に抑えることによって、検索時間を減らしてパフォーマンスを改善します。ただし、このオプションは、索引セット制御インターバルについて回転待ちおよびデータ転送の時間を長くすることができます。これは、索引レコードについて仮想記憶域所要量も増やします。

別個のボリュームでの索引およびデータのプットこの情報は非 SMS 管理ボリュームに適用されます。 SMS 管理ボリュームでは、SMS がボリュームを選択します。キー順データ・セットまたは可変長 RRDS が定義されるとき、索引全体または高位レベル索引セットのみを、同じまたは異なるタイプの装置上で、データとは別個のボリューム上に置くことができます。

異なるボリュームを使用することによって、VSAM は同時に索引とデータにアクセスできます。また、索引用に必要なスペース量が小さくなると、そのためにより高速のストレージ・デバイスを使用することが経済的になります。

別個のボリュームによるパフォーマンスの改善には、一般に、非同期処理または多重ストリングを使うマルチタスキングが必要です。

VSAM パフォーマンスの最適化

204 z/OS V1R10 DFSMS データ・セットの使用法

Page 229: DFSMS データ・セットの使用法

診断情報の入手汎用トレース機能 (GTF) およびその他の VSAM 診断援助機能についての情報は、「z/OS DFSMSdfp Diagnosis」 を参照してください。トレースは、どの VSAM を行うよう要求されているか判別しようとするのに非常に有用です。

大容量記憶システムからのマイグレーションMSS はもはやサポートされていないので、MSS からデータをマイグレーションする必要があります。 ACQRANGE、CNVTAD、または MNTACQ マクロを発行する場合、0 の戻りコードおよび 20 の理由コードを受け取ります。これは、これらのマクロがもはやサポートされていないことを意味します。

Hiperbatch の使用Hiperbatch は、特定の状態でパフォーマンスを改善するよう設計された VSAM 拡張です。 これは、MVS おけるデータ・ルックアサイド機能 (DLF) サービスを使用して、データが多くのバッチ・ジョブに使用できるようにする代替ファースト・パスを提供します。 Hiperbatch を通じて、アプリケーションは、既存のアプリケーション・プログラムおよびそれらを実行するために使用される JCL を変更することなく、 MVS のパフォーマンスの利益を利用することができます。 Hiperbatch の使用について詳しくは、「MVS Hiperbatch Guide」を参照してください。

VSAM パフォーマンスの最適化

第 10 章 VSAM パフォーマンスの最適化 205

Page 230: DFSMS データ・セットの使用法

206 z/OS V1R10 DFSMS データ・セットの使用法

Page 231: DFSMS データ・セットの使用法

第 11 章 制御インターバルの処理

この章では以下のトピックを扱います。

トピック 該当ページ

制御インターバルへのアクセス 208

制御情報の構造 209

ユーザー・バッファー方式 216

改良制御インターバル・アクセス 217

共通制御ブロック (CBIC) オプション 218

制御インターバル・アクセスでは、制御インターバルの内容へアクセスでき、キー・アクセスおよびアドレス・アクセスでは、個別のデータ・レコードにアクセスできます。

制約事項: 制御インターバル・アクセスを使用して、圧縮データ・セットにアクセスすることはできません。データ・セットを制御インターバル・アクセス用にオープンして、VERIFY および VERIFY REFRESH 処理のみを許可することができます。

制御インターバル・アクセスでは、VSAM に入出力バッファーを管理させるか、ご自身でそれらを管理する (ユーザー・バッファー方式) オプションがあります。キー・アクセスとアドレス・アクセスでは、VSAM が常に入出力バッファーを管理します。ユーザー・バッファー方式を選択する場合、さらに改良制御インターバル・アクセスを使用するオプションがあります。これは、通常の制御インターバル・アクセスより高速の処理を提供します。ユーザー・バッファー方式では、制御インターバル処理のみが許可されます。 217ページの『改良制御インターバル・アクセス』を参照してください。

制御インターバル・アクセスによって、入力順データ・セットの処理でのより大きな柔軟性が可能になります。制御インターバル・アクセスでは、RDF および CIDF

を変更することによって、制御インターバル内のレコードの RBA を変更し、レコードを削除します。

制御インターバル処理を使用しているときは、代替索引を維持する責任があります。キー・アクセスまたはアドレス・アクセス (ACB MACRF={KEY|ADR},...) および制御インターバル・アクセスを指定した場合は、キー・アクセスまたはアドレス・アクセスに対する要求 (RPL OPTCD={ KEY|ADR},...) によって、VSAM が代替索引をアップグレードします。制御インターバル・アクセスを指定する要求は、代替索引をアップグレードしません。ユーザーがそれらをアップグレードする責任があります。代替索引のアップグレードは、 141ページの『代替索引の維持』で説明されています。

制約事項: 制御インターバル・アクセスでは、キー順データ・セットまたは可変長RRDS を更新しないでください。制御インターバル・アクセスは、圧縮フォーマット・データ・セットと一緒に使用することはできません。制御インターバルを処理

© Copyright IBM Corp. 1987, 2008 207

Page 232: DFSMS データ・セットの使用法

するときは、その処理が索引、 RDF、および CIDF にどのように影響を及ぼすかについてユーザーが責任を負います。 CIDF および RDF で制御情報の使用を迂回すると、制御インターバルがレコード・レベル処理に使用できなくなることがあります。たとえば、キー順データ・セットは、それらの索引の正確性および各制御インターバルでの RDF および CIDF に依存しています。

制御インターバルへのアクセス制御インターバルは、ACB MACRF パラメーターおよび RPL (または GENCB)

OPTCD パラメーターによって完全に指定されます。 VSAM が入出力バッファーを管理している状態で制御インターバル・アクセス用のデータ・セットをオープンする準備をするには、次のように指定します。

ACB MACRF=(CNV,...),...

NUB (ユーザー・バッファリングなし) および NCI (標準制御インターバル・アクセス) を使用して、MACRF パラメーターでデータ・セットがキー・アクセスとアドレス・アクセスおよび制御インターバル・アクセス用にオープンされるように指定します。たとえば、MACRF=(CNV, KEY, SKP, DIR, SEQ, NUB, NCI, OUT)

は、サブパラメーターの有効な組み合わせです。

次のようにコーディングすることにより、制御インターバル・アクセスに対する特定の要求を定義します。

RPL OPTCD=(CNV,...),...

通常、ユーザー・バッファリングなしを指定した制御インターバル・アクセスは、キー・アクセスおよびアドレス・アクセスと同じ自由度および制限を持ちます。制御インターバルは、同期または非同期にすることができ、作業域に移動された(OPTCD=MVE) または VSAM の入出力バッファーに残された (OPTCD=LOC) 制御インターバルの内容を持つことができ、一連の要求パラメーター・リスト(OPTCD=LOC が指定されている場合を除く) によって定義できます。

ERASE を除き、すべての要求マクロ (GET、PUT、POINT、CHECK、およびENDREQ) は、通常の制御インターバル・アクセスに使用することができます。制御インターバルの内容を更新するには、更新の内容を (ユーザー・バッファリングなしを使用して) 前もって検索しておく必要があります。 OPTCD=LOC を指定して制御インターバルの内容を変更することはできません。

直接アクセスと順次アクセスの両方は、制御インターバル・アクセスと一緒に使用することができますが、スキップ順次アクセスはそれができません。つまり、OPTCD=(CNV,DIR) または (CNV,SEQ) を指定しても、 OPTCD=(CNV,SKP) は指定しないでください。

順次アクセスでは、CIDF が 0 によって埋められた制御インターバルを検索しようとするとき、または最後のものを超えて制御インターバルを検索しようとするときにそのような制御インターバルがない場合、VSAM は EODAD 出口を取ります。そのような CIDF がない制御インターバルは、データを含まないか未使用のスペースを含み、ソフトウェアのファイル終わりを表すために使用されます。ただし、VSAM 制御インターバル処理は、ソフトウェアのファイル終わりを検索するのに、直接 GET または POINT および順次 GET を使用することを妨げるものではあり

制御インターバルの処理

208 z/OS V1R10 DFSMS データ・セットの使用法

Page 233: DFSMS データ・セットの使用法

ません。制御インターバル・アクセスを使用しての直接要求のための検索引数は、望ましい内容を持つ制御インターバルの RBA です。

RPL (または GENCB) パラメーター AREA および AREALEN は、OPTCD=MVE

または LOC に関連する制御インターバル・アクセスでは、キー・アクセスおよびアドレス・アクセスの場合と同じ用途を持ちます。 OPTCD=MVE では、AREA

は、VSAM が制御インターバルの内容を移動する区域のアドレスを示します。OPTCD=LOC では、AREA は、制御インターバルの内容を含む入出力バッファーのアドレスを VSAM が書き込む区域のアドレスを示します。

制御インターバル・アクセスを使用して、入力順データ・セットをロードできます。空の入力順データ・セットをオープンする場合、VSAM では順次ストレージのみを使用できます。つまり、OPTCD=(CNV,SEQ,NUP) を指定して、PUT のみを発行します。 OPTCD=NUP を指定した PUT は、次の使用可能な制御インターバルに(データ・セットの末尾で) 情報を保管します。

改良制御インターバル・アクセスを使用してデータ・セットをロードまたは拡張することはできません。 VSAM も、通常の制御インターバル・アクセスを通じて固定長または可変長 RRDS を拡張することはできません。

制御インターバルの内容を次の 2 つの方法のいずれかで更新します。

v OPTCD=UPD を使用して内容を検索し、元どおり保管します。この場合、制御インターバルの RBA は、制御インターバルについての GET 中に指定されます。

v 内容を検索することなく、OPTCD=UPD を使用して新規の内容を制御インターバルに保管します。(ユーザー・バッファリングの場合は UBF を指定する必要があります。) PUT に先行して GET (または OPTCD=NUP を指定した GET) がないので、RPL によってアドレスによる引数として制御インターバルの RBA を指定する必要があります。

制御情報の構造キー・アクセスおよびアドレス・アクセスでは、VSAM は制御インターバル内の制御情報を保守します。制御インターバル・アクセスでは、その情報に対してはユーザーが責任を負います。

注: 線形データ・セットには、制御インターバルに組み込まれた制御情報はありません。制御インターバル内のバイトはすべて、データ・バイトです。CIDF またはRDF はありません。

210ページの図 25 は、制御インターバル内のデータ、未使用スペース、および制御情報の相対位置を示しています。

制御インターバルの処理

第 11 章 制御インターバルの処理 209

Page 234: DFSMS データ・セットの使用法

制御インターバルの構造について詳しくは、 86ページの『制御インターバル』を参照してください。

制御情報は、CIDF (制御インターバル定義フィールド) および、少なくとも 1 つのレコードを含む制御インターバルでは、レコード・スロット、またはレコード・セグメント、1 つ以上の RDF (レコード定義フィールド) から構成されます。 CIDF

および RDF は、右から左に配列されます。 CIDF のフォーマットは、制御インターバル・サイズが複数のより小さい物理レコードを含んでいる場合であっても、同じです。

図 25. 制御インターバルの一般フォーマット

制御インターバルの処理

210 z/OS V1R10 DFSMS データ・セットの使用法

Page 235: DFSMS データ・セットの使用法

CIDF - 制御インターバル定義フィールドCIDF は、2 つの 2 バイト 2 進数を含む 4 バイトのフィールドです。

オフセット 長さ 説明

0(0) 2 制御インターバルの先頭から未使用スペースの先頭への、または未使用スペースがない場合は、制御情報の先頭への変位。変位は、データ(レコード、レコード・スロット、またはレコード・セグメント) の長さに等しくなります。データのない制御インターバルでは、数は 0

です。

2(2) 2 未使用スペースの長さ。この数は、制御インターバルの長さから制御情報の長さを引き、CIDF+0 にある 2 バイト値を引いたものに等しくなります。データ (レコード、レコード・スロット、またはレコード・セグメント) のない制御インターバルでは、数は、制御インターバルの長さから 4 (CIDF の長さ、RDF はありません) を引いたものに等しくなります。未使用スペースがない制御インターバルでは、数は 0 です。

2(2) 1... .... ビジー・フラグ。制御インターバルが分割されているときは設定され、分割が完了するとリセットされます。

入力順データ・セットでは、データを含む最後のものを超えて未使用の制御インターバルがある場合、未使用の制御インターバルの最初のものは、0 で埋められたCIDF を含みます。キー順データ・セットまたは RRDS では、最初の未使用の制御域 (ある場合) には、0 で埋められた CIDF が含まれます。0 で埋められた CIDF

は、ファイル終わりを表します。

RDF - レコード定義フィールド制御インターバル内のレコードの RBA またはスロットの相対レコード番号は、左から右に上昇します。右から左への RDF は、これらのレコードまたはスロット、あるいはスパン・レコードのセグメントを記述します。RDF は、レコードを、キー順データ・セット、入力順データ・セット、および可変長 RRDS の場合は一方の方法で記述し、固定長 RRDS の場合はもう一方の方法で記述します。

キー順データ・セットまたは入力順データ・セットでは、レコードは長さが変化することがあり、制御インターバルをスパンすることができます。可変長 RRDS では、レコードは長さが変化しますが、制御インターバルをスパンしません。

v 隣に同じ長さの他のレコードがない非スパン・レコードは、レコードの長さを示す単一の RDF によって記述されます。

v 同じ長さの複数の連続非スパン・レコードは、1 対の PDF によって記述されます。右側の RDF は各レコードの長さを示し、左側の RDF は同じ長さの連続レコードの数を示します。

v スパン・レコードの各セグメント (制御インターバル当たり 1 つのセグメント)

は、1 対の RDF によって記述されます。右側の RDF はセグメントの長さを示し、左側の RDF はその更新番号を示します。(各セグメント内の更新番号は、スパン・レコードが更新されるたびに 1 ずつ増分されます。スパン・レコード内の更新番号間の差は、レコード内にエラーがありうることを示します。)

制御インターバルの処理

第 11 章 制御インターバルの処理 211

Page 236: DFSMS データ・セットの使用法

固定長 RRDS では、レコードの長さが変化したり、制御インターバルをスパンすることはありません。各レコード・スロットは、単一の RDF によって記述されます。これは、その長さを示し、それがレコードを含むかどうか示します。

制御インターバルの処理

212 z/OS V1R10 DFSMS データ・セットの使用法

Page 237: DFSMS データ・セットの使用法

RDF は、3 バイトのフィールドであり、次の表が示すように、1 バイトの制御フィールドと 2 バイトの 2 進数を含みます。

オフセット

長さおよびビット・パターン 説明

0(0) 1 制御フィールド。

x... ..xx 予約済み。

.x.. .... この RDF の左側に対の RDF があるか (1) ないか (0) を示します。

..xx .... レコードが制御インターバルをスパンするかどうかを示します。00 いいえ。01 はい。これは最初のセグメントです。10 はい。これは最後のセグメントです。11 はい。これは中間のセグメントです。

.... x... 2 バイトの 2 進数が何を示すかを示します。0 この RDF によって記述されるレコード、セグメント、また

はスロットの長さ。1 同じ長さの連続非スパン・レコードの数、またはスパン・レ

コードのセグメントの更新番号。

.... .x.. 固定長 RRDS では、この RDF によって記述されたスロットがレコードを含むか (0) 含まないか (1) を示します。

1(1) 2 2 進数:

v バイト 0 のビット 4 が 0 である場合、この RDF によって記述されたレコード、セグメント、またはスロットの長さを示します。

v バイト 0 のビット 4 が 1 であり、バイト 0 のビット 2 と 3 が0 である場合、同じ長さの連続レコードの数を示します。

v バイト 0 のビット 4 が 1 であり、バイト 0 のビット 2 と 3 が0 でない場合、この RDF によって記述されたセグメントの更新番号を示します。

非スパン・キー順、入力順、および可変長相対レコード・データ・セット用の制御フィールド値非スパン・レコードを持つキー順データ・セット、入力順データ・セット、または可変長 RRDS では、RDF の制御フィールドで取りうる 16 進値は次のとおりです。

左の RDF 右の RDF 説明

X'00' X'00' にある RDF は、単一の非スパン・レコードの長さを示します。

X'08' X'40' 右の RDF は、同じ長さの複数の連続非スパン・レコードの長さを示します。左の RDF は、同じ長さの連続非スパン・レコードの数を示します。

214ページの図 26 は、異なる長さの非スパン・レコードを含む 512 バイトの制御インターバルの CIDF と RDF の内容を示しています。

制御インターバルの処理

第 11 章 制御インターバルの処理 213

Page 238: DFSMS データ・セットの使用法

4 つの RDF および CIDF は、次のように 16 バイトの制御情報から構成されます。

v RDF4 は 5 番目のレコードを記述します。

v RDF3 は 4 番目のレコードを記述します。

v RDF2 および RDF1 は最初の 3 つのレコードを記述します。

v CIDF 内の最初の 2 バイトのフィールドは、5 つのレコードの合計長 8a を示します。これは、制御インターバルの先頭からフリー・スペースまでの変位です。

v 2 番目の 2 バイト・フィールドは、フリー・スペースの長さを示します。これは制御インターバルの長さからレコードと制御情報の合計長を引いたもの、つまり512 から 8a と 16 を引いたもの、すなわち 496 から 8a を引いたものです。

図 26. 非スパン・レコード用の制御情報のフォーマット

制御インターバルの処理

214 z/OS V1R10 DFSMS データ・セットの使用法

Page 239: DFSMS データ・セットの使用法

スパン・キー順および入力順データ・セット用の制御フィールド値スパン・レコードのレコード・セグメントを含む制御インターバルには、他のデータは含まれません。これは、常に 2 つの RDF を持ちます。それらの制御フィールド内で取りうる 16 進値は、次のとおりです。

左の RDF 右の RDF 説明

X'18' X'50' 右の RDF は、スパン・レコードの最初のセグメントの長さを示します。左の RDF は、セグメントの更新番号を示します。

X'28' X'60' 右の RDF は、スパン・レコードの最後のセグメントの長さを示します。左の RDF は、セグメントの更新番号を示します。

X'38' X'70' 右の RDF は、スパン・レコードの中間セグメントの長さを示します。左の RDF は、セグメントの更新番号を示します。

図 27 は、長さが 1306 バイトのスパン・レコード用の CIDF および RDF の内容を示します。

図 27. スパン・レコード用の制御情報のフォーマット

制御インターバルの処理

第 11 章 制御インターバルの処理 215

Page 240: DFSMS データ・セットの使用法

レコードのセグメントを含む 512 バイトの制御インターバルが 3 つあります。RDF2 内の番号「n」は更新番号です。スパン・レコードの最後のセグメントを含む制御インターバルのみが、フリー・スペースを持つことができます。他のセグメントのそれぞれは、制御インターバルの最後の 10 バイトを除くすべてのバイトを使用します。

キー順データ・セットでは、制御インターバルは、連続していないか、セグメントと同じ順序でない場合があります (たとえば、2 番目のセグメントの RBA は、最初のセグメントの RBA より低いことがあります)。

スパン・レコードのすべてのセグメントは、同じ制御域にあることが必要です。制御域にスパン・レコード用に使用できる十分な制御インターバルがないとき、レコード全体が新規制御域に保管されます。

固定長相対レコード・データ・セット用の制御フィールド値固定長 RRDS では、RDF の制御フィールド内で取りうる 16 進値は、次のとおりです。

X'04' X'04' にある RDF は、空スロットの長さを示します。

X'00' X'00' にある RDF は、レコードを含むスロットの長さを示します。

固定長 RRDS 内の各制御インターバルは、同じ数のスロットと同じ数の RDF (各スロットごとに 1 つ) を含んでいます。最初のスロットは、一番右の RDF によって記述されます。2 番目のスロットは、左隣の RDF によって記述されます。以下同様です。

ユーザー・バッファー方式制御インターバル・アクセスでは、ユーザー・バッファー方式のオプションがあります。ユーザー・バッファー方式オプションを使用する場合、ご自身のストレージ域に VSAM によって使用されるためのバッファーを提供する必要があります。

ユーザー・バッファー方式は、改良制御インターバル・アクセス (ICI) 用およびOPTCD=NUP を指定した PUT 用に必要です。

ACB MACRF=(CNV,UBF) を指定した場合 (ユーザー・バッファー方式を使用した制御インターバル・アクセス)、RPL (または GENCB) AREA パラメーターによって指定された作業域は、実際には、入出力バッファーです。VSAM は、制御インターバルの内容を作業域と直接アクセス記憶装置間で直接送信します。

ユーザー・バッファー方式を指定する場合、MACRF パラメーター内で KEY または ADR を指定することはできません。CNV しか指定できません。つまり、キー要求とアドレス要求を制御インターバル・アクセス用の要求と混ぜることはできません。

OPTCD=LOC は、ユーザー・バッファー方式と矛盾し、許可されません。

制御インターバルの処理

216 z/OS V1R10 DFSMS データ・セットの使用法

Page 241: DFSMS データ・セットの使用法

改良制御インターバル・アクセス改良制御インターバル・アクセス (ICI) は、通常の制御インターバル・アクセスより高速ですが、一度に 1 つの制御インターバルしかスケジュールできません。改良制御インターバル・アクセスは、直接処理の場合は良好に作動します。

ICI を使用するには、ユーザー・バッファー方式 (UBF) を指定する必要があります。これは、改良制御インターバル・アクセスを指定するオプションを提供します。

ACB MACRF=(CNV,UBF,ICI,...),...

ICI を使用して、データ・セットをロードまたは拡張することはできません。改良制御インターバル処理は、拡張フォーマット・データ・セット用には許可されません。

処理プログラムは、改良制御インターバル・アクセスを SRB ディスパッチング機能と組み合わせることによってそれについて最良のパフォーマンスを達成することができます。 SRB ディスパッチング機能については、「z/OS MVS Programming:

Authorized Assembler Services Guide」および 175 ページの『SRB またはクロスメモリー・モードでの操作』に説明されています。

改良制御インターバル・アクセス用のオブジェクトのオープン改良制御インターバル処理では、機能がパスから除去されているので、より高速になります。ただし、改良制御インターバル処理ではいくつかの制約事項が生じます。

v オブジェクトは空でなければなりません。

v オブジェクトは圧縮されてはなりません。

v オブジェクトは次のいずれかでなければなりません。

– 入力順、固定長、または可変長 RRDS クラスター。

– 入力順、キー順、線形、固定長、または可変長 RRDS クラスター。

– キー順クラスターの索引コンポーネント (索引レコードは複製してはなりません)。

v 制御インターバルは物理レコードと同じサイズでなければなりません。アクセス方式サービス・プログラム DEFINE コマンドを使用してオブジェクトを定義するとき、オブジェクトが保管されている装置用に使用されている物理レコード・サイズに等しい制御インターバル・サイズを指定します。 VSAM は (n x 512) および (n x 2048) の物理レコード・サイズを使用します。ここで、n は 1 から 16

の正整数です。物理レコード・サイズは、索引コンポーネント用の制御インターバル・サイズと常に等しくなります。

改良制御インターバル・アクセスを使用してのデータ・セットの処理

改良制御インターバル・アクセスを使用してデータ・セットを処理するには、要求は次のとおりでなければなりません。

v 単一の RPL によって定義される (VSAM は NXTRPL パラメーターを無視します)。

制御インターバルの処理

第 11 章 制御インターバルの処理 217

Page 242: DFSMS データ・セットの使用法

v 直接 GET、更新用の GET、または更新用の PUT (POINT なし、空データ・セットの処理なし)。スロットがフォーマット済みの RRDS は、スロットにレコードが含まれていない場合であっても、空でないとは見なされません。

v 同期 (CHECK なし、ENDREQ なし)。

更新用の GET の後に排他制御を解放するには、異なる制御インターバルについて更新用の PUT、更新なしの GET、または更新用の GET を発行する必要があります。

改良制御インターバル・アクセスでは、次の前提が VSAM について有効です (検査なし)。v ACB が MACRF=ICI を持つ RPL は OPTCD=(CNV, DIR, SYN) を持つ。v PUT が更新用である (RPL OPTCD=UPD)。v バッファー長 (RPL AREALEN=number で指定されたもの) が正しい。

VSAM はこれらのパラメーターを検査しないので、ACB MACRF=NCI を使用してプログラムをデバッグしてから、ICI に変更する必要があります。

改良制御インターバル・アクセスでは、VSAM は JRNAD 出口を取らず、統計 (通常は、SHOWCB を通じて使用可能です) を保持しません。

実記憶域での制御ブロックおよびバッファーの固定改良制御インターバル・アクセスでは、制御ブロックが実記憶域で固定されるように指定することができます (ACB MACRF=(CFX,...))。そのように指定する場合、入出力バッファーは、実記憶域でも固定する必要があります。制御ブロックを実記憶域に固定したが、入出力バッファーは固定していないと、物理エラーまたは予測不能な結果が発生することがあります。 ICI を使わずに MACRF=CFX を指定する場合、VSAM は CFX を無視します。 NFX はデフォルトです。これは、入出力操作を除き、バッファーが実記憶域に固定されないことを示します。プログラムはページを実記憶域に固定することを、記憶保護キー 0 から 7 を持つ監視プログラム状態で、または権限を使ったリンク編集で許可される必要があります。 (許可プログラム機能 (APF) については「z/OS MVS Programming: Authorized Assembler Services

Guide」で説明されています)。非許可要求は無視されます。

拡張フォーマット・データ・セットであるかないかにかかわらず、すべての VSAM

データ・セットについて 64 ビットの実記憶域を使用することができます。プロセッサーが使用できる実アドレス・ロケーションからバッファー・ストレージを入手することができます。ロケーションは、2 ギガバイトより大きい実アドレスを持つことができるか、実アドレスが 2 ギガバイト未満の 31 ビットの実記憶域内に存在することができます。

共通制御ブロック (CBIC) オプション改良制御インターバル処理を使用しているときは、CBIC オプションによって、同じデータにアドレッシングして同じ制御ブロック構造を使用するマルチアドレス・スペースを持つことができます。VSAM データ・セットに関連付けられた VSAM

制御ブロックは、共通サービス域 (CSA) に置かれます。制御ブロック構造およびVSAM 入出力操作は、制御ブロック構造のロケーションを除いて、CBIC オプションが呼び出されているかどうかにかかわらず、基本的に同じです。ユーザー関連の

制御インターバルの処理

218 z/OS V1R10 DFSMS データ・セットの使用法

Page 243: DFSMS データ・セットの使用法

制御ブロックは、保護キー (0 から 7) で生成されます。システム関連の制御ブロックは、保護キー 0 で生成されます。CBIC オプションが呼び出されるときに生成される VSAM 制御ブロック構造は、通常のインターフェースを VSAM データ・セットをオープンしたアドレス・スペースに保存します (たとえば、DEB はアドレス・スペースの TCB にチェーニングされます)。

CBIC オプションは、VSAM データ・セットがオープンしているときに呼び出されます。 CBIC オプションを呼び出すには、CBIC フラグ (ACB、ビット 2

(ACBCBIC) 内でオフセット X'33' (ACBINFL2) に位置する) を 1 に設定します。プログラムが CBIC オプション・セットを使用して ACB をオープンするとき、プログラムは、保護キー 0 から 7 を持つ監視プログラム状態になければなりません。それ以外の場合、VSAM はデータ・セットをオープンします。

次の制約事項は、CBIC オプションの使用に適用されます。

v CBIC オプションは、ICI オプションも指定されているときのみ使用する必要があります。

v LSR または GSR も指定することはできません。

v 次のタイプのデータ・セットを CBIC オプションと一緒に使用することはできません。カタログ、カタログ・リカバリー域、スワップ・データ・セット、またはシステム・データ・セット。

v アドレス・スペースが、CBIC オプションを使用して VSAM データ・セットをオープンする場合、プログラムはそのアドレス・スペース用のチェックポイントを指定することができません。

別のアドレス・スペースが、CSA 内のデータ・セットの制御ブロック構造にVSAM レコード管理を通じてアクセスする場合、次の条件を守る必要があります。

v OPEN マクロは、データ・セットに対して発行してはならない。

v CBIC オプションを使用してデータ・セットをオープンしたユーザーの ACB を使用する必要がある。

v CLOSE および一時 CLOSE は、データ・セットに発行することはできない(CBIC オプションを使用してデータ・セットをオープンしたユーザーのみがデータ・セットをクローズできます)。

v データ・セット制御ブロック構造にアクセスするアドレス・スペースは、CBIC

オプションを使用してデータ・セットをオープンしたユーザーと同じ記憶保護キーを持つ必要がある。

v ユーザー出口ルーチンは、CBIC オプションを使用してデータ・セットにアクセスするすべてのアドレス・スペースからアクセス可能でなければならない。

制御インターバルの処理

第 11 章 制御インターバルの処理 219

Page 244: DFSMS データ・セットの使用法

制御インターバルの処理

220 z/OS V1R10 DFSMS データ・セットの使用法

Page 245: DFSMS データ・セットの使用法

第 12 章 VSAM データ・セットの共用

この章では、データ・セットを単一システム内および複数システム間で共用する方法を説明します。 NSR または LSR/GSR アクセスで VSAM データ・セットを共用するための考慮事項も説明します。RLS アクセスで VSAM データ・セットを共用することについての考慮事項は、 253ページの『第 14 章 VSAM レコード・レベル共用の使用』を参照してください。

この章では以下のトピックを扱います。

トピック 該当ページ

サブタスク共用 222

領域間共用 227

システム間共用 231

制御ブロック更新機能 (CBUF) 232

データ共用の技法 235

次のものの間でデータ・セットを共用できます。v 単一のオペレーティング・システム内での異なるジョブv タスクまたは異なるサブタスク内での複数の ACB

v タスクまたは異なるサブタスク内での 1 つの ACB

v 異なるオペレーティング・システム。異なるオペレーティング・システム間で安全に共用するには、VSAM SHAREOPTIONS、レコード・レベル共用アクセス、および OPEN/CLOSE/EOV 逐次化をインプリメントするグローバル・リソースの逐次化または同等のプロダクトが必要です。 GRS またはそれと同等のものを使用しないと、データ・セットと VTOC の両方とも壊れることがあります。「z/OS

MVS 計画: グローバル・リソース逐次化」を参照してください。

VSAM データ・セットを定義するとき、データ・セットへのアクセスを持ち、同じ直接アクセス装置を共用することができる単一システム内または複数システム間でデータをどのように共用するか指定できます。データ・セットについて共用のレベルを定義する前に、誤ったデータを読み取ることの結果 (読み取り保全性が失われる) および誤ったデータを書き込むことの結果 (書き込み保全性が失われる) を評価する必要があります。このような状況は、データ・セットのユーザーの 1 人または複数が、共用データ・セットにアクセスするために推奨されたガイドラインを順守しないときに生じることがあります。

データ・セットを共用させたいエクステントは、アプリケーションによって決まります。要件定義が、カタログ (ここでは、複数のシステム上に多くのユーザーがいることができます) のそれと同様である場合、複数のユーザーがデータ・セットを同時に読み取りおよび更新することを許可される必要があります。スペクトルの他方の端には、高いセキュリティーとデータ保全性で一度に 1 人だけのユーザーがデータへのアクセスを持つことを要求するアプリケーションがあります。

© Copyright IBM Corp. 1987, 2008 221

Page 246: DFSMS データ・セットの使用法

プログラムが GET 要求を発行するとき、VSAM は、制御インターバル全体を仮想記憶域に読み込みます (またはすでに仮想記憶域にある制御インターバルからデータのコピーを入手します)。プログラムが制御インターバルのデータを変更する場合、VSAM は、単一の制御ブロック構造内で、制御インターバル内の情報がデータ・セットに元通り書き込まれるまで、ユーザーがその情報の排他使用を持つことを保証します。データ・セットが一度に複数のプログラムによってアクセスされ、複数の制御ブロック構造がデータ・セットの制御インターバル用のバッファーを含んでいる場合、VSAM は、プログラムがデータの排他使用を持つことを保証することはできません。 ENQ/RESERVE および DEQ などの機能を使用して、排他制御をご自身で入手する必要があります。

データ・セット共用のエクステントを設定するための 2 つの方法は、JCL で指定されたデータ・セット後処理およびアクセス方式サービス・プログラム (AMS)アクセス方式サービス・プログラム DEFINE または ALTER コマンドで指定された共用オプションです。 JCL で指定された後処理のために VSAM データ・セットが共用できない場合、スケジューラー割り振り失敗が発生します。使用中のデータ・セットをプログラムがオープンしようとし、指定された共用オプションがデータの並行使用を許可しない場合は、オープンが失敗し、戻りコードが ACB エラー・フィールドに設定されます。

ロード・モード処理中は、データ・セットを共用できません。共用オプションは、ロード・モード処理中に指定変更されます。共用データ・セットが作成またはリセット処理用にオープンされるとき、プログラムは、オペレーティング・システム内のデータ・セットの排他制御を持ちます。

ENQ/DEQ を使用して VSAM 要求を発行することはできますが、VSAM が使用するシステム・リソースをシリアライズすることはできません。

サブタスク共用サブタスク共用は、タスク内または単一アドレス・スペース内の異なるサブタスクからの同じデータ・セットに複数の OPEN を実行し、しかも単一の制御ブロック構造を共用する機能です。サブタスク共用は、単一の制御ブロック構造を保持している間にデータ・セットの多くの論理ビューを許可します。単一の制御ブロック構造では、データ・セットを更新するときにバッファーの排他制御を保証することができます。

タスクまたはアドレス・スペース内で複数の制御ブロック構造を共用する場合、VSAM はこれをクロス・アドレス・スペース共用のように扱います。 227ページの『領域間共用』で指定されたガイドラインおよび制約事項を順守する必要があります。

単一の制御ブロック構造の作成タスク内でまたはサブタスク間でうまく共用するには、VSAM がデータ・セット用の単一の制御ブロック構造を作成するようにする必要があります。この制御ブロック構造には、制御情報および入出力バッファー用のブロックが含まれます。すべてのサブタスクは、SHAREOPTION または DISP 指定とは独立して、この制御ブロッ

VSAM データ・セットの共用

222 z/OS V1R10 DFSMS データ・セットの使用法

Page 247: DFSMS データ・セットの使用法

ク構造を通じてデータ・セットにアクセスします。複数の並行要求を処理している間に VSAM データ・セット用の単一の制御ブロック構造を達成する 3 つの方法は、次のとおりです。

v 単一のアクセス方式制御ブロック (ACB) および STRNO>1

v 複数の ACB (すべて同じデータ・セットから) が DD ステートメントを指している状態での、データ定義名 (ddname) 共用。これはデフォルトです。以下に例を示します。

//DD1 DD DSN=ABC

OPEN ACB1,DDN=DD1OPEN ACB2,DDN=DD1

v 複数の ACB が異なる ddname を持つ複数の DD ステートメントを指している状態でのデータ・セット名共用。データ・セットは ACB オープン指定(MACRF=DSN) に関連しています。以下に例を示します。

//DD1 DD DSN=ABC//DD2 DD DSN=ABC

OPEN ACB1,DDN=DD1,MACRF=DSNOPEN ACB2,DDN=DD2,MACRF=DSN

複数の ACB が同じアドレス・スペースになければならず、同じ基本クラスターにオープンしていなければなりません。接続は、基本クラスターへと選択されたパスとは独立して発生します。ATTACH マクロが、共用データ・セットを処理することになる新規タスクを作成するために使用される場合、ATTACH キーワード SZERO

がデフォルトで YES になるようにするか、SZERO=YES をコーディングします。これにより、サブプール 0 がサブタスクと共用されます。 ATTACH マクロについて詳しくは、「z/OS MVS Programming: Authorized Assembler Services Reference

ALE-DYN」を参照してください。これは、タスクまたは異なるサブタスク内で 1 つの ACB を共用しているときにも適用されます。共用環境での正しい処理を保証するには、すべての VSAM 要求は、ジョブ・ステップ TCB キーと同じキーで発行する必要があります。

排他制御競合の解決単一の制御ブロックを持つこの環境で、VSAM レコード管理は、単一の制御インターバルの更新を順次行い、読み取りと書き込みの保全性を提供します。制御インターバルが、要求されたユーザー処理のタイプ (共用または排他的) 用に使用できないとき、VSAM レコード管理は、論理エラー・コードを、RPL フィードバック・コードに示された排他的制御エラーと共に戻します。これが発生するとき、後で再試行するのか、競合を起こしているリソースを解放するのかを決定する必要があります。排他的制御競合フィードバックおよび異なるユーザー要求の結果の図は、 224

ページの図 28 を参照してください。

VSAM データ・セットの共用

第 12 章 VSAM データ・セットの共用 223

Page 248: DFSMS データ・セットの使用法

デフォルトでは、排他制御競合が検出されると、リソースが使用可能になるまでVSAM は要求を据え置きます。これは、VSAM 回避 LSR エラー制御待機機能を使用することによって変更することができます。要求を据え置くのではなく、ACB マクロ用の MACRF パラメーターの NLW サブパラメーターを使用することにより、VSAM はアプリケーション・プログラムに排他制御戻りコード 20 (X'14') を戻します。アプリケーション・プログラムは、それから次のアクションを決定することができます。

あるいは、アプリケーション・プログラムで GENCB ACB マクロを変更することによりこれを行うことができます。

新規機能が有効であるかどうか調べるために検査するには、TESTCB ACB マクロをアプリケーション・プログラムにコーディングすることができます。

図 28. 排他制御競合の解決

VSAM データ・セットの共用

224 z/OS V1R10 DFSMS データ・セットの使用法

Page 249: DFSMS データ・セットの使用法

排他制御エラー・戻りコードを処理するには、アプリケーション・プログラムを変更する必要があります。レジスター 15 は 8 を含み、RPLERRCD フィールドは 20

(X'14') を含みます。リソースを所有する RPL のアドレスは、RPL エラー・メッセージ域の最初のワードに置かれます。 VSAM 回避 LSR 排他制御待機オプションは、OPEN の後で変更することはできません。

共用リソースの排他制御でのデッドロックの防止VSAM データ (制御インターバルの内容) に対する競合からデッドロックが起きることがあります。つまり、データに対する要求が満たされないので、処理プログラムを継続できなくなります。A および B が競合者として携わるには、次の 4 通りの方法があります。

1. A が排他制御を希望するが、B が排他制御を持っています。VSAM は A の要求を拒絶します。A はデータなしですますか、要求を再試行します。

2. A が排他制御を希望するが、B は共用なら進んで行います。 VSAM は A の要求をキューに入れ (A に待機について通知せずに)、B がデータを解放するときに A にデータの使用を与えます。

3. A が共用を希望するが、B が排他制御を持っています。VSAM は A の要求を拒絶します。A はデータなしですますか、要求を再試行します。

4. A が共用を希望し、B が共用を進んで行います。VSAM は B に加えて A にデータの使用を与えます。

データに対する競合時の VSAM のアクションは、次の 2 つの前提事項に基づいています。

v 処理プログラムがデータの排他制御を持つ場合は、プログラムはそれを更新または削除できます。

v 処理プログラムがデータを更新または削除している場合、それは排他制御を持ちます。 (MRKBFR, MARK=OUT の使用は、この前提事項への例外を提供します。処理プログラムは、それらの排他制御なしに制御インターバルの内容を更新できます。)

上記の 1 および 3 では、B は、ENDREQ、MARK=RLS を指定した MRKBFR、または異なる制御インターバルへのアクセス要求を通じて、制御インターバルの排他制御を放棄する責任を負います。 (ENDREQ、MRKBFR、または要求を定義するRPL は、もともと排他制御を獲得するために使用されたものです。)

データ・セット名共用データ・セット名共用は、ACB オプション (MACRF=DSN) によって設定されます。 DSN 共用を理解するには、スフィアとそのスフィアのベースおよびそれらがどのように機能するかを理解する必要があります。

スフィア。スフィアは、VSAM クラスターおよびその関連したデータ・セットです。クラスターは、初めはアクセス方式サービス・プログラム ALLOCATE コマンド、DEFINE CLUSTER コマンドを使用して、または JCL を通じて定義されます。スフィアの最も一般的な用途は、単一クラスターをオープンすることです。スフィアのベースはクラスター自体です。パス (これは、代替索引と基本クラスターの間の関係です) をオープンするときは、スフィアのベースはここでも基本クラスターです。代替索引をデータ・セットとしてオープンすると、代替索引がスフィアのベ

VSAM データ・セットの共用

第 12 章 VSAM データ・セットの共用 225

Page 250: DFSMS データ・セットの使用法

ースになります。 図 29 では、DSN が各 ACB ごとに指定され、出力処理が指定されます。

接続されるスフィア。VSAM は、スフィアのベースが両方の ACB について同じ場合のみ、データ・セット名共用のために ACB を既存の制御ブロック構造に接続します。次の 3 つの OPEN ステートメントは、情報がどのようにして制御ブロック構造に追加されて、データ・セット名共用が可能になるかを示しています。

1. OPEN ACB=(CLUSTER.REAL)

v CLUSTER.REAL 用の制御ブロック構造を作成しますv CLUSTER.REAL.AIX 用の制御ブロック構造を作成します

2. OPEN ACB=(CLUSTER.REAL.PATH)

v CLUSTER.REAL 用の既存の構造に追加しますv CLUSTER.REAL.AIX 用の既存の構造に追加します

3. OPEN ACB=(CLUSTER.ALIAS)

CLUSTER.REAL 用の既存の構造に追加します

4 番目のステートメントを追加すると、スフィアのベースが変化し、代替索引CLUSTER.REAL.AIX 用に複数の制御ブロック構造が作成されます。

4. OPEN ACB=(CLUSTER.REAL.AIX)

v スフィアのベースは同じでないので、既存の構造に追加しません。

v 複数の制御ブロック構造が存在するので、SHAREOPTIONS が CLUSTER.REAL.AIX

用に強制されます。

一貫性のある処理オプション矛盾しないようにするため、新規の ACB と既存の制御ブロック構造は、次の処理オプションでのそれらの指定が一貫している必要があります。

v データ・セット指定は、ACB と既存の制御ブロック構造の両方で一貫している必要があります。つまり、入力順データ・セットとしてオープンされているキー順データ・セットは、キー順データ・セットとしてオープンされているキー順データ・セットと同じ制御ブロック構造を共用していません。

v MACRF オプション DFR、UBF、ICI、CBIC、LSR、および GSR は、一貫性がなければなりません。たとえば、新規の ACB と既存の構造の両方が

CLUSTER.REAL.AIX(UPGRADE)

CLUSTER.REAL.PATH

CLUSTER.REALCLUSTER.ALIAS

図 29. 基本クラスターと代替索引の間の関係

VSAM データ・セットの共用

226 z/OS V1R10 DFSMS データ・セットの使用法

Page 251: DFSMS データ・セットの使用法

MACRF=DFR を指定している場合、接続が行われます。新規の ACB がMACRF=DFR を指定し、既存の構造が MACRF=DFR,UBF を指定している場合、接続は行われません。

一貫性が確立されない場合、OPEN は (データ・セットが定義されたときに指定された共用オプションの範囲内で) 新規制御ブロック構造を作成しようとします。それができない場合、OPEN は失敗します。

共用サブタスク単一の制御ブロックを共用する複数のサブタスク共用を処理するときは、並行 GET

および PUT 要求が許可されます。制御インターバルは、VSAM レコード管理で提供される排他制御機能を使用して書き込み操作について保護されます。同じ制御インターバルへの他の PUT 要求は許可されず、要求マクロを発行するユーザーに論理エラーが戻されます。選択されたバッファー・オプション、非共用 (NSR) または共用 (LSR/GSR) リソースに応じて、更新されているのと同じ制御インターバルに対する GET 要求を許可できる場合と、できない場合があります。 224ページの図 28

は、排他制御機能を示しています。

以前に使用することもできた制御ブロック構造を共用する ACB にサブタスクがOPEN を発行するときは、POINT マクロを発行してデータ・セット用の位置を入手します。この場合、位置がデータ・セットの先頭にあるとは想定しないでください。

領域間共用1 つのオペレーティング・システム内のデータ・セット共用のエクステントは、データ・セットを定義するときに指定されたデータ・セット後処理およびクロス領域共用オプションによって異なります。 MVS システムの独立ジョブ・ステップまたはサブタスク、あるいはグローバル・リソースの逐次化 (GRS) を持つ複数のシステムは、同時に VSAM データ・セットにアクセスできます。 GRS について詳しくは、「z/OS MVS 計画: グローバル・リソース逐次化」を参照してください。データ・セットを共用するには、各ユーザーは、データ・セットの DD ステートメントで DISP=SHR を指定する必要があります。

クロス領域共用オプションVSAM によって許可されるクロス領域共用のレベルは、SHAREOPTIONS 値を使用して設定されます (データ・セットが定義されるときに)。

v クロス領域 SHAREOPTIONS 1: データ・セットは、読み取り処理では任意の数の VSAM 制御ブロックによって共用できるか、または読み取りおよび書き込み(OUTPUT) 処理では 1 つの VSAM 制御ブロックのみによってアクセスできます。このオプションでは、VSAM はデータ・セットについて完全なデータ保全性を保証します。この設定では、データ・セットが RLS 処理用にすでにオープンしているときは、どのタイプの非 RLS アクセスも許可しません。

v クロス領域 SHAREOPTIONS 2: データ・セットがレコード・レベル共用 (RLS)

用にすでにオープンされていない場合、データ・セットは、読み取り処理では任意の数の非 RLS ユーザーによってアクセスでき、書き込み処理では 1 人の非RLS ユーザーによってもアクセスできます。このオプションでは、VSAM は、

VSAM データ・セットの共用

第 12 章 VSAM データ・セットの共用 227

Page 252: DFSMS データ・セットの使用法

制御インターバルが更新されるときに制御インターバル用の排他制御を入手することによって書き込み保全性を保証します。

データ・セットが RLS 処理用にすでにオープンされている場合は、読み取り用の非 RLS アクセスが許可されます。VSAM は、その RLS ユーザーに対する完全な読み取りおよび書き込み保全性を提供しますが、読み取り保全性を保証するのは非 RLS ユーザーの責任です。

読み取り保全性を要求する場合は、ENQ および DEQ マクロを適切に使用して、プログラムが入手するデータ用の読み取り保全性を提供するのは、ユーザーの責任です。 ENQ および DEQ については、「z/OS MVS Programming: Authorized

Assembler Services Reference ALE-DYN」および「z/OS MVS Programming:

Authorized Assembler Services Reference EDT-IXG」を参照してください。

v クロス領域 SHAREOPTIONS 3: データ・セットは、任意の数のユーザーによって完全に共用することができます。このオプションでは、各ユーザーは、プログラムがアクセスするデータに対する読み取りと書き込みの両方の保全性を維持する責任があります。この設定では、データ・セットがすでに RLS 処理用にオープンされていると、どのようなタイプの非 RLS アクセスもできません。

このオプションでは、ユーザーのプログラムは、OPEN および CLOSE 処理を含めて、データ・セットを共用している間にデータ保全性を維持するのにENQ/DEQ を使用する必要があります。書き込み保全性のガイドラインを無視するユーザー・プログラムによって、VSAM プログラム・チェック、失われたかアクセス不能なレコード、訂正不能なデータ・セット障害、およびその他の予測不能な結果が生じることがあります。 このオプションは、データ・セットを共用する各ユーザーに責任を課します。

v クロス領域 SHAREOPTIONS 4: データ・セットは、任意の数のユーザーによって完全に共用することができ、直接処理用に使用されるバッファーは各要求ごとに更新されます。この設定では、データ・セットがすでに RLS 処理用にオープンされていると、どのようなタイプの非 RLS アクセスもできません。このオプションでは、SHAREOPTIONS 3 の場合と同様、ユーザーは、プログラムがアクセスするデータについて読み取りと書き込みの両方の保全性を保持する責任があります。ENQ/DEQ および SHAREOPTIONS 4 にも同様に適用される警告情報については、SHAREOPTIONS 3 の説明を参照してください。

オプション 3 および 4 では、ユーザーはデータ・アクセスおよびプログラム・アクセス用に読み取りと書き込みの両方の保全性を保持する責任があります。これらのオプションでは、プログラムは、 OPEN および CLOSE 処理を含めて、データ・セットを共用している間にデータ保全性を維持するのに ENQ/DEQ を使用する必要があります。書き込み保全性のガイドラインを無視するユーザー・プログラムによって、VSAM プログラム・チェック、失われたかアクセス不能なレコード、訂正不能なデータ・セット障害、およびその他の予測不能な結果が生じることがあります。 これらのオプションは、データ・セットを共用する各ユーザーに重い責任を課します。

プログラムが、要求されたデータ・レコードの処理を完了する前に、別の制御ブロック構造からの更新が起こらないことを必要とするときは、プログラムは ENQ を発行して VSAM データ・セットの排他使用を入手することができます。プログラムが処理を完了する場合、DEQ を使用してデータ・セットの制御を解放することが

VSAM データ・セットの共用

228 z/OS V1R10 DFSMS データ・セットの使用法

Page 253: DFSMS データ・セットの使用法

できます。プログラムがデータを読み取っているだけで、更新していない場合、更新をシリアライズして、更新が起きている間は読取装置を待機させるのが、おそらくよい処置です。プログラムが更新している場合は、更新が ENQ/DEQ ブラケットを完了した後、読取装置は、通信メカニズムに基づいて制御ブロックのリフレッシュとバッファー無効化のために必要な操作を決定するか、すべてが下位レベルにあると想定して、各要求をリフレッシュする必要があります。

クロス領域共用のエクステントは、DD ステートメントで DISP=SHR またはDISP=OLD を使用することによって影響を受けます。データ・セットの DD ステートメントが DISP=OLD を指定している場合、DD ステートメントに関連付けられるdsname は排他的に制御されます。この場合、OPEN ルーチンの排他使用には、クラスター名のみが予約されます。クラスターのコンポーネントのそれぞれについてDISP=OLD を指定した DD ステートメントを組み込み、それらも予約することができます。これを行うことによって、タスクが開始される前に、データ・セットをオープンするのに必要なすべてのリソースが排他的に予約されるようにすることができます。

クラスター名を DISP 処理を使用して保護し、コンポーネントを VSAM OPEN

SHAREOPTIONS によって保護するのは、通常受け入れられるプロシージャーです。共用データ・セットが、DISP=OLD を使用してオープンされるか、リセット処理 (IDCAMS REUSE コマンド) のためにオープンされるか、または空である場合、そのデータ・セットは SHAREOPTIONS 1 規則を使用して処理されます。

スケジューラー後処理は、VSAM と非 VSAM データ・セットについて同じです。これは、第 1 レベルの共用保護です。

クロス領域共用中の読み取り保全性クロス領域 SHAREOPTIONS 2、3、および 4 と共用するためにデータ・セットがオープンされるときは、読み取り保全性を保証する責任があります。プログラムがGET 要求を発行すると、 VSAM は、要求されたデータ・レコードを含む制御インターバルのコピーを入手します。データ・セットを共用する別のプログラムは、同じ制御インターバルのコピーを入手することもでき、データを更新して、制御インターバルをデータ・セットに書き戻すことができます。これが起きると、プログラムは読み取り保全性を失ったことになります。プログラムのバッファーにある制御インターバル・コピーは、もはや現行のコピーではありません。

読み取り保全性を提供しているときは、次のことを考慮する必要があります。

v すべての要求、読み取りおよび書き込み用の ENQ/DEQ プロシージャーを確立します。

v 下位になる可能性のあるバッファー (索引またはデータ、あるいはその両方) を判別して無効化する方法を決定します。

v 入力順データ・セットあるいは固定長または可変長 RRDS については 2 次割り振りを許可しないでください。2 次割り振りを許可する場合は、エクステントが増やされた読み取り専用タスクに通信メカニズムを提供し、CLOSE を強制してから、別の OPEN を発行する必要があります。索引入出力用のバッファー・リフレッシュ・メカニズムを提供すると、キー順データ・セット用の 2 次割り振りを配慮することになります。

VSAM データ・セットの共用

第 12 章 VSAM データ・セットの共用 229

Page 254: DFSMS データ・セットの使用法

v 入力順データ・セットあるいは固定長または可変長 RRDS では、GET マクロの前に VERIFY マクロを使用して、起こり得る下位レベル制御ブロックを更新することもできます。

v 一般に、読み取り保全性が失われると、下位レベル・データ・レコードおよび誤った該当レコードなし状態が発生します。

索引バッファーの無効化索引バッファーを無効にするには、次のステップを実行することもできます。

1. ACB で、次のように指定します。STRNO>1。非共用リソースを示すための MACRF=NSR。BUFNI の値のデフォルトを最小にします。

2. 索引がマルチレベル索引であるようにします。

3. 次のように指定することにより、すべての要求が位置決めについてであるようにします。

GET RPL OPTCD=DIR

POINT

PUT RPL OPTCD=NUP

データ・バッファーの無効化データ・バッファーを無効にするには、次のいずれかを指定することにより、すべての要求が位置決めについてであるようにします。v GET/PUT RPL OPTCD=(DIR,NSP) の次に ENDREQ を続けるv POINT GET/PUT RPL OPTCD=SEQ の次に ENDREQ を続ける

クロス領域共用中の書き込み保全性データ・セットがクロス領域 SHAREOPTIONS 3 または 4 を使用してオープンされる場合、書き込み保全性を確認する責任があります。

アプリケーション・プログラムが「直接」または「スキップ順次」の更新用 PUT

または非更新 (RPL OPTCD=DIR|SKP) を発行する場合、更新された制御インターバルが直接アクセス記憶装置に書き込まれるのは、同期要求 (RPL OPTCD=SYN) に続いて、または非同期要求 (RPL OPTCD=ASY) からの CHECK マクロに続いて制御を取得するときです。順次 PUT (RPL OPTCD=SEQ) 用の直接アクセス入出力を強制するには、アプリケーション・プログラムは、ENDREQ または MRKBFR

TYPE=OUT を発行する必要があります。

ENDREQ が発行されるたびに、レジスター 15 内の戻りコードを検査して、エラーがあるかどうか判別する必要があります。エラーがある場合、要求を完了するために、通常の検査処理を行う必要があります。

読み取り保全性に適用される考慮事項は、書き込み保全性にも適用されます。読み取り用の逐次化は、共用 ENQ として行うこともでき、書き込み用には排他的 ENQ

として行うこともできます。逐次化メカニズム (通常は DEQ) をドロップする前に、DASD へのすべての入出力が実行されるようにする必要があります。

VSAM データ・セットの共用

230 z/OS V1R10 DFSMS データ・セットの使用法

Page 255: DFSMS データ・セットの使用法

システム間共用以下の共用オプションにより、SHAREOPTION 3 または 4 のレコード管理処理を使用して SHAREOPTION 1 または 2 の共用規則を指定可能です。同時に複数のオペレーティング・システムによってアクセスまたは更新されなければならないデータ・セットを定義するときは、次の共用オプションのどちらかを使用します。

v システム間 SHAREOPTION 3。データ・セットは完全に共用できます。このオプションでは、アクセス方式は制御ブロック更新機能 (CBUF) を使用して補助します。このオプションでは、クロス領域 SHAREOPTIONS 3 の場合と同様、ユーザーは、プログラムがアクセスするデータについて読み取りと書き込みの両方の保全性を維持する責任があります。書き込み保全性のガイドラインを無視するユーザー・プログラムによって、VSAM プログラムの検査、訂正不能なデータ・セット障害、およびその他の予測不能な結果が生じることがあります。このオプションは、データ・セットを共用する各ユーザーに重い責任を課します。データ・セットの保全性を維持するには、このオプションと一緒に、RESERVE およびDEQ マクロが必要です。

v システム間 SHAREOPTION 4。データ・セットは、完全に共用することができ、直接処理に使用されるバッファーは各要求ごとにリフレッシュされます。

このオプションでは、RESERVE および DEQ マクロを使用して、データ・セットの共用時にデータの保全性を維持することが必要です。出力処理は、DISP=SHR

が指定される場合に高使用 RBA または高キー・データ制御インターバルの RBA

を変更しない更新処理または追加処理あるいはその両方に限定されます。RESERVE および DEQ の使用法については、「z/OS MVS Programming:

Authorized Assembler Services Reference ALE-DYN」および「z/OS MVS

Programming: Authorized Assembler Services Reference LLA-SDU」を参照してください。

システム管理ボリュームおよびシステム管理データ・セットを含むカタログは、非システム管理システムと共用してはなりません。クロス領域またはシステム間環境でデータ・セットを共用するときは、データ・セットをオープンする前に VERIFY

マクロを実行します。 VERIFY は、データ・セットの現行の末尾を見つけ、内部制御ブロックを更新します。データ・セットが正常にクローズするとき、システムは、VERIFY が決定した情報を使用してカタログを更新します。この情報およびその影響は、データ・セットを共用するすべてのシステムに明白ではあるわけではありません。ジョブ・ストリームの最初のステップとして実行される場合、VERIFY

は、カタログ内のファイル終わり情報への更新を生じさせます。

共用環境でのデータ保全性を保証するために、VSAM は SHAREOPTIONS 4 (クロス領域とシステム間の両方) のユーザーに、次の援助を提供します。

v 各 PUT 要求によって、該当するバッファーが VSAM オブジェクトの直接アクセス装置スペースに即時に書き込まれることになります。VSAM は、新規または更新されたデータ・レコードを含むユーザーのアドレス・スペースにバッファーを書き出します。

v 各 GET 要求によって、すべてのユーザーの入力バッファーがリフレッシュされることになります。ユーザーのプログラムによって使用される各データ・バッファーおよび索引バッファーの内容は、VSAM オブジェクトの直接アクセス装置から検索されます。

VSAM データ・セットの共用

第 12 章 VSAM データ・セットの共用 231

Page 256: DFSMS データ・セットの使用法

データ・セットがシステム間 SHAREOPTIONS 4 のもとで共用されるとき、クロス領域要求に関係なく、VSAM は高使用および高キー RBA への変更を許可しません。そのほか、VSAM は、データの保全性を保持するのを補助するためにアプリケーションに援助を提供します。

v 制御域分割および制御インターバル分割から新規制御インターバル用の新規の高キー・レコードの追加は許可されません。 VSAM は、この状態が発生するような場合は、ユーザーのプログラムに論理エラーを戻します。

v データおよびシーケンス・セットの制御インターバル・バッファーは、直接アクセス記憶装置への入出力操作に続けて、無効としてマークされます。

複数のシステムのジョブ・ステップは、各ステップの JCL で指定された後処理とは無関係に、同じデータ・セットへのアクセスを得ることができます。ボリュームの排他制御を得るには、1 つのシステム内のタスクは RESERVE マクロを発行する必要があります。グローバル・リソースの逐次化 (GRS) を使用して排他制御を取得する他の方法は、「z/OS MVS 計画: グローバル・リソース逐次化」を参照してください。

制御ブロック更新機能 (CBUF)データ・セットが DISP=SHR、クロス領域 SHAREOPTION 3 または 4、あるいはシステム間 SHAREOPTION 3 を使用してオープンされるたびに、VSAM レコード管理は、重大な制御ブロック・データのコピーを共通ストレージに保持します。共通ストレージ域内の制御ブロック・データは、データ・セットを共用する各プログラム (各メモリー) に使用可能です。共通ストレージ域は、オペレーティング・システム内の領域にのみ使用可能です。この情報を別のオペレーティング・システムに通知するのは、ユーザーの責任です。

CBUF は、クロス領域 SHAREOPTION 4 の下での制御域分割を禁止する制約事項を排除します。したがって、制御域分割を防止するためのコードを制限したり、制御域分割エラー条件を配慮したりする必要はありません。システム間SHAREOPTION 4 について制御域分割を禁止するための制約事項は、まだ存在します。

データ・セットがシステム間 SHAREOPTION 4 を持つが、それがオープンされるときに共用 DASD 上にない場合、CBUF 処理は提供されません。つまり、データ・セットはまだ、共用 DASD 上のシステム間 SHAREOPTION 4 データ・セットとして処理されます。キー順データ・セットまたは可変長 RRDS が、システム間SHAREOPTION 4 を持つとき、制御域分割は防止されます。また、キー範囲の高キーを含む制御インターバル (またはデータ・セット) の分割は防止させます。制御インターバル・アクセスでは、新規制御インターバルの追加は防止されます。

システム間共用は、各出力要求の終結時 VSAM 共用情報 (VSI) ブロックを他のホストに送信することによって行うことができます。一般に、VSI は変更されておらず、検査だけが発生します。

SHAREOPTION 3 を使用する場合、読み取り/書き込み保全性を引き続き提供する必要があります。 VSAM は、逐次化が正しく行われる場合は、SHAREOPTION 3 お

VSAM データ・セットの共用

232 z/OS V1R10 DFSMS データ・セットの使用法

Page 257: DFSMS データ・セットの使用法

よび 4 ユーザーが正しい制御ブロック情報を持つことを保証するとはいえ、SHAREOPTION 3 ユーザーは、SHAREOPTION 4 と一緒に発生するバッファー無効化を得ることにはなりません。

改良制御インターバル処理が SHAREOPTION 3 または 4 を使用して指定されるとき、データ・セットはオープンできます。ただし、別の制御ブロック構造がデータ・セットを拡張する場合、改良制御インターバル処理を使用する制御ブロック構造は、それがクローズされて再オープンされない限り、更新されません。

表 13 は、カタログで指定された SHAREOPTIONS および DD ステートメントうえで指定された後処理がどのように相互作用して処理のタイプに影響を及ぼすかを示しています。

表 13. SHAREOPTIONS と VSAM 機能の間の関係

DISP=SHR の場合の (CR CS)1 提供される機能

(3 3) CBUF

(3 4) データおよびシーケンス・セット・バッファーが無効にされます。 CA 分割は許可されません。

(4 3) データおよび索引コンポーネント・バッファーが無効にされます。 CBUF。

(4 4) データおよびシーケンス・セット・バッファーが無効にされます。 CA 分割は許可されません。

凡例:CA = 制御域CR = クロス領域CS = システム間CBUF = 制御ブロック更新機能バッファー無効化 = バッファーの無効化が自動的です

注:

1. DISP=OLD が指定されているか、データ・セットが作成またはリセット・モードにある場合 (指定された後処理にかかわらず)、カタログで指定された共用オプションは無視されます。データ・セットは、SHAREOPTIONS(1 3) の規則の下で処理されます。 OPEN は、ユーザーが単一システム内のデータ・セットの排他制御を持つことを保証します。データ・セットがシステム間で共用できる場合は、VSAM は、別のシステムが並行してデータ・セットにアクセスしていないことを保証するために何も行いません。システム間共用では、ユーザーは、DISP=OLD を指定する前に、別のシステムがデータ・セットにアクセスしていないことを保証する必要があります。

CBUF 処理の考慮事項プログラムが SHAREOPTIONS(3 3) または SHAREOPTIONS(4 3) によって定義されるデータ・セットを共用する場合、次のことに注意する必要があります。

v 共用環境では、VSAM は、初期ロードまたはリセット・モード (作成) でデータ・セットを処理することを許可しません。 VSAM は、データ・セットが、SHAREOPTIONS(1 3) を使って定義されているかのように処理されることを強制します。

v ユーザー・プログラムは、システム・データ・セット (たとえば、マスター・カタログ、ページ・スペース・データ・セット、SYS1. データ・セット、二重データ・セット、およびスワップ・データ・セット) を共用できません。

VSAM データ・セットの共用

第 12 章 VSAM データ・セットの共用 233

Page 258: DFSMS データ・セットの使用法

v ユーザーのプログラムは、ENQ/DEQ (または同様の機能) を使用して、データ・セットに対するすべての VSAM 要求をシリアライズする必要があります。

v ユーザーのプログラムは、次のことを行うために、すべての VSAM リソースがENQ/DEQ プロトコル内で獲得され、解放されることを保証する必要があります。– VSAM に順次更新および挿入要求を書き込むよう強制する。– データ・セット内での VSAM の位置決めを解放する。

v VSAM は、クロス領域またはシステム間 SHAREOPTIONS 4 データ・セットと一緒に使用されるデータおよび索引バッファーを無効にしますが、SHAREOPTIONS 3 データ・セットと一緒に使用されるバッファーは無効にしません。バッファーが無効とマークされる場合、それが VSAM がリフレッシュする (DASD から制御インターバルのフレッシュ・コピーの中に読み取られる) 必要があるバッファーとして識別されないと、プログラムがそのバッファーの内容を使用できるようになりません。

v GSR および LSR を使用するプログラムは、MRKBFR および WRTBFR マクロを使用して、バッファーを無効にするか、書き込みを強制することができます。

v 多くの領域にあるプログラムが同じデータ・セットを共用できるので、1 つの領域で発生するエラーは、同じデータ・セットを共用する他の領域にあるプログラムに影響を及ぼすことができます。論理エラー (レジスター 15=8) または物理エラー (レジスター 15=12) が検出される場合、エラーが検出された前に行われた制御ブロックの変更は、共通ストレージ内の共用情報に伝達されます。

v VSAM データ・セットが追加のスペースを必要とするとき、VSAM ボリュームの終わり処理は、データ・セット用の新規エクステントを獲得し、データ・セット用の VSAM 制御ブロック構造を新規エクステント情報で更新し、共通ストレージ内の重要な制御ブロック・データを更新し、この新規スペースがデータ・セットを使用するすべての領域によってアクセス可能であるようにします。アベンドまたは予期しないエラーのオカレンスによってこのスペース割り振りが完了できない場合、すべての領域はそれ以上データ・セットを拡張できなくなります。追加のスペースを入手するには、すべての領域で VSAM データ・セットをクローズしてから、それを再オープンする必要があります。

v 異常終了 (アベンド) の後でデータ・セットの制御ブロックを訂正するには、VERIFY マクロを発行して、それらを更新します。 VERIFY はデータ・セットを変更しません。どのようなリカバリー・アクションが必要であるか (ある場合)

決定する必要があります。後続の CLOSE は、カタログ・レコードを更新します。システムは、異常終了の後、データ・セットのカタログ・レコードへの更新を迂回します。

v 暗黙の VERIFY は、カタログ内の出力用オープン標識によって呼び出されます。データ・セットがオープンされ、出力用オープン標識がすでにオンになっているとき、CLOSE 処理は、データ・セットが出力用にすでにオープンされていた場合のみ標識をリセットします。それ以外の場合は、そのビットをオンのままにしておきます。

v クロス領域またはシステム間環境で共用されるデータ・セットは、アクセス方式サービス・プログラム VERIFY コマンドを使用するか、アプリケーション・プログラム内から VERIFY マクロを発行する必要があります。

v 多くの領域にあるプログラムが同じデータ・セットを共用できるので、1 つの領域内のエラーは、データ・セットを共用する他の領域にあるプログラムに影響を

VSAM データ・セットの共用

234 z/OS V1R10 DFSMS データ・セットの使用法

Page 259: DFSMS データ・セットの使用法

及ぼすことができます。論理エラー (レジスター 15=8) または物理エラー (レジスター 15=12) が発生する場合、エラーが検出された前に行われた制御ブロックの変更は、共通ストレージ内の共用情報制御ブロックに伝達されます。この状態が発生するとき、そのデータ・セットはカタログ内に誤った情報を置くことがあります。適切な診断ツール (EXAMINE など) を使用することにより、影響を受けたデータ・セットを検査し、データ・セットが破壊されたかどうか判断します。データ・セットが損傷した場合は、適切なユーティリティー (REPRO など)

を使用して、データ・セットをリカバリーします。

共用データ・セット用のチェックポイントチェックポイントを発行する場合、または再始動が発生する場合、その時点で領域内でオープンしているどの VSAM データ・セットも、CBUF 処理を使用することはありません。チェックポイントを発行する場合は、CBUF 処理用に適格な VSAM

データ・セットを OLD の後処理を使用してオープンするか、チェックポイントの前でそれらを CLOSE する必要があります。代替索引が CBUF 処理を使用していた場合は、関連付けられた基本クラスターおよびその基本クラスターを通じてオープンする他のパスも、それらが CBUF 処理を使用していない場合であっても、チェックポイントの前でクローズする必要があります。

データ共用の技法このセクションでは、データ共用のいくつかの技法について説明します。

領域間共用データ・セット用の書き込み保全性を保持するために、プログラムは、制御インターバルの更新を完了するまで、データ・セットに対する競合するアクティビティーがないことを保証する必要があります。競合するアクティビティーは、2 つのカテゴリーに分けることができます。

1. 完全に事前フォーマットされているデータ・セット。唯一の書き込みアクティビティーは同所更新です。

この場合、共用の問題は、データがデータ・セット内でその位置を変更することがありえないという事実によって単純化されます。任意の書き込み操作(GET/PUT RPL OPTCD=UPD) に対して保持されなければならないロックは、制御インターバルである転送単位です。ロックを転送単位と関連付けるのは、ユーザーの責任です。レコード・キーは、制御インターバル内に単一の論理レコードしかない場合を除き、不十分です。

以下は、必要とされるプロシージャーの例です。

a. パラメーター OPTCD=(SYN,KEY,UPD,DIR),ARG=MYKEY を持つ RPL 用の GET

を発行します。

b. レコードがある制御インターバル (RELCI) の RBA を決定します。これは、RPL(RPLDDDD) 内で提供される RBA フィールドに基づいています。

RELCI=CISIZE * integer-part-of (RPLDDDD / CISIZE)

c. MYDATA.DSNAME.RELCI (計算値) をエンキューします。

d. ENDREQ を発行します。

VSAM データ・セットの共用

第 12 章 VSAM データ・セットの共用 235

Page 260: DFSMS データ・セットの使用法

e. パラメーター OPTCD=(SYN,KEY,UPD,DIR),ARG=MYKEY を持つ RPL 用の GET

を発行します。このアクションは入出力を行い、バッファーの更新コピーを入手します。

f. レコードがある制御インターバル (RELCI) の RBA を決定します。これは、RPL(RPLDDDD) 内で提供される RBA フィールドに基づいています。

RELCI = CISIZE * integer-part-of (RPLDDDD / CISIZE)

計算値を比較します。それらが等しい場合は、制御インターバルが移動していないことを保証されます。それらが等しくない場合は、リソースをステップ「c」からデキューし、ステップ「a」でやり直します。

g. パラメーター OPTCD=(SYN,KEY,DIR,UPD) を持つ RPL 用の PUT を発行します。これはバッファー内で位置を保持しません。次のいずれかを行うことができます。

v パラメーター OPTCD=(SYN,KEY,UPD,DIR),ARG=MYKEY を持つ RPL 用のGET を発行します。これはバッファーの位置を獲得します。

v パラメーター OPTCD=(SYN,KEY,DIR,NSP) を持つ RPL 用の PUT を発行します。これはバッファー内で位置を保持します。

h. ENDREQ を発行します。これは、DASD への入出力を強制し、位置を除去し、データ・バッファーの無効化を発生させます。

i. MYDATA.DSNAME.RELCI をデキューします。

VSAM データ・セットの共用

236 z/OS V1R10 DFSMS データ・セットの使用法

Page 261: DFSMS データ・セットの使用法

2. レコード追加および長さ変更を指定した更新が許可されるデータ・セット。

この場合、最小のロック単位は、制御インターバル分割を入れるための制御域です。制御域分割に関係する操作中に高位レベルのロックを保持する必要があります。分割アクティビティーは、データ・セット・レベルでシリアライズされる必要があります。マルチレベル・ロック・プロシージャーを実行するには、プログラムで VSAM JRNAD 処理中に提供される情報を使用する準備ができている必要があります。このユーザー出口は、データ移動のレベルを決定し、適切なロックを入手する責任があります。

より高い並行性は、ロックの階層によって達成することができます。特定の条件に基づいて、1 つ以上のロック階層が入手される必要があります。

ロック 条件制御インターバル レコードを同じ場所で更新するか、レコードを分割を生じさせることなく

制御インターバルに追加する。制御域 レコードを追加するか、長さ変更を指定してレコードを更新し、制御イン

ターバル分割を生じさせるが、制御域分割は生じさせない。データ・セット レコードを追加するか、長さ変更を指定してレコードを更新し、制御域分

割を生じさせる。

以下は、必要な保護を提供するための基本プロシージャーです。このプロシージャーでは、すべての更新はデータ・セット・レベルでロックされることに注意してください。

SHAREOPTION = (4 3) CBUF 処理MYDATA.DSNAME をエンキュー 読み取り専用の場合共用;

書き込みの場合排他的VSAM 要求マクロを発行

...MYDATA.DSNAME をデキュー

どの共用状態でも、すべてのリソースがロック・プロトコル間で入手および解放されるのが一般規則です。すべての位置決めは、すべての直接要求を使用することによって、またはプロシージャーを DEQ で終了する前に ENDREQ マクロを発行することによって解放する必要があります。

システム間共用システム間 SHAREOPTIONS 3 では、VSAM 共用情報 (VSI) を渡して、データ・バッファーまたは索引バッファーあるいはその両方を無効にする責任を追加しました。これは、通知制御レコードを低キーとして使用するか、データ・セット内の最初のレコードを使用することによって行うことができます。必要な索引レコード無効化を行うには次の情報が必要です。

1. シーケンス・セット無効化の場合は、データ制御インターバル分割および索引更新の数

2. 索引セット無効化の場合は、データ制御域分割の数

すべてのデータ・バッファーは、常に無効にされている必要があります。バッファーを無効にするために必要なプロシージャーは、 235ページの『データ共用の技法』を参照してください。選択バッファー無効化を実行するには、VSAM 制御ブロックの内部知識が必要です。

VSAM データ・セットの共用

第 12 章 VSAM データ・セットの共用 237

Page 262: DFSMS データ・セットの使用法

プログラムは次のタイプの要求をシリアライズする (要求に先行して ENQ を発行し、要求が完了したら、DEQ を発行します)。

v すべての PUT 要求。

v POINT、GET 直接 NSP、GET スキップ、および更新用 GET 要求に続けて、PUT 挿入、PUT 更新、または ERASE 要求。

v VERIFY 要求。VERIFY が VSAM によって実行されるときは、プログラムはデータ・セットの排他制御を持つ必要があります。

v 順次 GET 要求。

VSAM 共用情報へのユーザー・アクセス次の命令をコーディングして、別のプロセッサーに送信されるデータの長さおよびアドレスを入手することができます。

v ACB アドレスをレジスター RY にロードします。

v データ・コンポーネント用の VSI を見つけるには、次のようにします。

L RX,04(,RY) AMBL アドレスをレジスター RX に入れるL 1,52(,RX) データ AMB アドレスを取得するL 1,68(,1) VSI アドレスを取得するLH 0,62(,1) データの長さをロードするLA 1,62(,1) 交信するデータをポイントする

v キー順データ・セットの索引コンポーネント用の VSI 情報を見つけるには、次のようにします。

L RX,04(,RY) AMBL アドレスをレジスター RX に入れるL 1,56(,RX) 索引 AMB アドレスを取得するL 1,68(,1) VSI アドレスを取得するLH 0,62(,1) データの長さをロードするLA 1,62(,1) 交信するデータをポイントする

同様にして、受信プロセッサー上の VSI のロケーションも見つけることができます。受信プロセッサーに VSI が変更されたことを通知するために、VSI レベル番号を受信 VSI の中で増分する必要があります。レベル番号を更新するには、VSI のアドレスがレジスター 1 内にあると想定します。

LA 0,1 増分をレジスター 0 に入れるAL 0,64(,1) レベル番号を増分に追加するST 0,64(,1) 新レベル番号を保管する

VSI のすべての処理は、送信データへの同時更新を防ぐための ENQ/DEQ を使用することによって保護する必要があります。 VSI を変更するには、ユーザーは KEY0

AUTHORIZED で実行する必要があります。

データ・セットが z/OS オペレーティング・システム間で共用できる場合、別のシステム内のユーザーのプログラムは、そのデータ・セットに並行してアクセスできます。 DISP=OLD を指定してデータ・セットをオープンする前に、UCB オプションを使用して ENQ/DEQ でシステムを通して保護するのはユーザーの責任です。この保護は、GRS または同等の機能と一緒に使用可能です。

VSAM データ・セットの共用

238 z/OS V1R10 DFSMS データ・セットの使用法

|

|

Page 263: DFSMS データ・セットの使用法

第 13 章 VSAM データ・セット間でのリソースの共用

この章では以下のトピックを扱います。

トピック 該当ページ

リソース・プールのプロビジョン 239

共用リソース用の入出力バッファーの管理 246

共用リソース用の制約事項およびガイドライン 251

この章は、VSAM データ・セット間でリソースを共用するのに役立ちます。 VSAM

は、多くの VSAM データ・セット間で入出力バッファーおよび入出力関連の制御ブロックを共用できるようにするマクロのセットです。 VSAM では、入出力バッファーは、制御インターバルの内容が読み書きされる仮想記憶域です。これらのリソースを共用すると、それらの使用が最適化され、仮想記憶域の必要量が減るので、仮想記憶域のページングも減ります。

これらのリソースの共用は、データ・セット自体の共用 (つまり、それを独立してオープンする異なるタスク間での共用) と同じではありません。データ・セット共用は、入出力バッファーおよび入出力関連の制御ブロックがあってもなくても行うことができます。データ・セット共用についての情報は、 221ページの『第 12 章VSAM データ・セットの共用』を参照してください。

共用リソース用の入出力バッファーを管理できるようにするマクロもあります。

リソースの共用は、順次処理を改良しません。 VSAM は、順次アクセス用にオープンされたデータ・セットの先頭に自動的にそれ自身を位置決めするわけではありません。これは、プレースホルダーが、個々のデータ・セットではなく、リソース・プールに属しているからです。順次アクセス用のリソースを共用するときは、データ・セットの先頭への位置決めは、POINT マクロまたは RPL OPTCD=NSP を指定した GET マクロを使用して明示的に指定する必要があります。リソース・プールは、レコードを空のデータ・セットにロードするのに使用することはできません。

リソース・プールのプロビジョンリソースを共用するには、このプロシージャーに従ってリソース・プールを提供します。

1. BLDVRP マクロを使用して、リソース・プールをビルドします。

2. MACRF パラメーターを ACB 内でコーディングし、OPEN を使用してデータ・セットをリソース・プールに接続します。

3. すべてのデータ・セットをクローズした後、DLVRP マクロを使用してリソース・プールを削除します。

© Copyright IBM Corp. 1987, 2008 239

Page 264: DFSMS データ・セットの使用法

リソース・プールのビルド: BLDVRPBLDVRP を発行すると、VSAM は、入出力バッファーおよび ACB が共用リソース用の対応するオプションを示す入出力関連の制御ブロックを共用することになります。制御ブロックは自動的に共用されます。バッファーの共用は制御することができます。

BLDVRP を発行するとき、リソース・プールについて各仮想バッファー・プール用の仮想アドレス・スペース・バッファーのサイズおよび数を指定します。

LSR での Hiperspace バッファーの使用ローカル共用リソース (LSR) を使用する場合、リソース・プール内のバッファー・プールごとに 4K バイトの倍数の Hiperspace バッファーの数を指定することができます。 Hiperspace バッファーの数は、使用されているデータ・セットの CISIZE に等しくなければなりません。

Hiperspace バッファーを使用すると、データを中央ストレージにキャッシングすることにより直接アクセス記憶装置への入出力の量が減ります。中央ストレージが不足しており、Hiperspace バッファーを支持する中央ストレージがシステムによってレクラメーション処理される場合を除き、Hiperspace バッファー内のデータは保存されます。VSAM は、Hiperspace バッファーが仮想アドレス・スペース・バッファーにコピーされるときに、それを無効にし、逆に、仮想アドレス・スペース・バッファー が Hiperspace バッファーにコピーされるときに、それを無効にします。 したがって、仮想アドレス・スペースおよび Hiperspace には制御インターバルのコピーが 1 つまでしかありません。変更された仮想アドレス・スペース・バッファーがレクラメーション処理されるとき、それは Hiperspace および DASD にコピーされます。

OPEN 時にデータ・プールまたは個別の索引プールについて、データ・セットには、適切なサイズ (要求された正確な制御インターバル・サイズ、または使用可能な次の大きなサイズ) のバッファーを持つ 1 つのバッファー・プールが割り当てられます。

グローバル・リソース・プールと 1 つ以上のローカル・リソース・プールの両方を持つことができます。ローカル・リソース・プールを持つアドレス・スペース内のタスクは、グローバル・リソース・プール (下に説明する制約事項の下で)、またはローカル・リソース・プールのいずれかを使用することができます。各リソース・プールごとのバッファー・サイズに基づき複数のバッファー・プールがある場合があります。

リソースをローカルに共用する場合、アドレス・スペース内のタスクは、BLDVRP

TYPE=LSR, DATA|INDEX を発行します。リソースをグローバルに共用する場合、システム・タスクは BLDVRP TYPE=GSR を発行します。 BLDVRP TYPE=GSR

を発行するプログラムは、キー 0 ~ 7 を持つ監視プログラム状態にあることが必要です。

リソースは、次の制約事項のもとで、ローカルまたはグローバルに共用することができます。

v LSR (ローカル共用リソース)。1 つのアドレス・スペース内に最大 255 のデータ・リソース・プールおよび 255 の索引リソース・プールをビルドできます。各

VSAM データ・セット間でのリソースの共用

240 z/OS V1R10 DFSMS データ・セットの使用法

|

|

|

|

|

|

|

|

|

|

|

Page 265: DFSMS データ・セットの使用法

リソース・プールは、個別にビルドする必要があります。データ・プールは、同じ共用プール識別を持つ索引プールがビルドできる前に存在している必要があります。これらの複数の LSR プール用のパラメーター・リストは、16 MB より上または下にあることができます。 BLDVRP マクロ RMODE31 パラメーターは、LSR プール制御ブロックおよびデータ・バッファーがビルドされるときに、VSAM が仮想記憶域をどこで入手するかを示します。

これらのリソース・プールは、BLDVRP マクロ TYPE=LSR およびDATA|INDEX 指定を使用してビルドされます。 MACRF=LSR を ACB またはGENCB-ACB マクロで指定すると、データ・セットが BLDVRP マクロによってビルドされた LSR プールを使用することになります。 DLVRP マクロは、データと索引リソース・プールの両方を処理します。

v GSR (グローバル共用リソース)。システム内の所定の記憶保護キー用のすべてのアドレス・スペースは、1 つのリソース・プールを共用します。記憶保護キー 0

~ 7 のそれぞれについて 1 つのリソース・プールをビルドすることができます。 GSR では、アクセス方式制御ブロックおよびすべての関連した要求パラメーター・リスト、出口リスト、データ域、およびエクステント制御ブロックは、リソース・プールと同様に、記憶保護キーを持つ仮想記憶域の共通域になければなりません。その記憶保護キーを使って共通域内のストレージを入手するには、サブプール 241 内のストレージについて、そのキーの中にいる間に GETMAIN

マクロを発行します。アドレス・スペース、複数システム、またはその両方の間でデータ・セットを共用する必要がある場合は、GSR の代わりにレコード・レベル共用 (RLS) を使用することを考慮してください。

個別の索引リソース・プールは GSR 用にサポートされていません。

Hiperspace バッファー (BLDVRP マクロ内に指定されています) は、GSR 用にはサポートされていません。

GENCB マクロを使用して、ACB、RPL、および EXLST を生成します。WAREA および LENGTH パラメーターをコーディングします。グローバル・リソース・プールに関連するマクロを発行するプログラムは、同じキーを使用して監視プログラム状態にある必要があります。 (マクロは、BLDVRP、CHECK、CLOSE、DLVRP、ENDREQ、ERASE、GENCB、GET、GETIX、MODCB、MRKBFR、OPEN、POINT、PUT、PUTIX、SCHBFR、SHOWCB、TESTCB、および WRTBFR です。 SHOWCAT マクロは、リソース・プールに関連していません。プログラムは、オープンされたデータ・セットとは無関係にこのマクロを発行できるからです。)

仮想リソース・プールのサイズの決定リソース・プールを使用するためにオープンが発行される前に、クラスターまたは代替索引のすべてのコンポーネントについての仮想リソース・プールをうまくビルドしておく必要があります。そうでないと、結果が予測不能になることがあり、パフォーマンスの問題が発生することがあります。 BLDVRP マクロの BUFFERS、KEYLEN、および STRNO パラメーターを指定するためには、制御インターバル、データ・レコード (スパンされている場合)、およびリソース・プールを使用するコンポーネント内のキー・フィールドのサイズを知っている必要があります。コンポーネントがどのように処理されるかも知っている必要があります。この情報を入手

VSAM データ・セット間でのリソースの共用

第 13 章 VSAM データ・セット間でのリソースの共用 241

Page 266: DFSMS データ・セットの使用法

するには、SHOWCAT および SHOWCB マクロ、またはアクセス方式サービス・プログラム LISTCAT コマンドを使用することができます。

たとえば、SHOWCB を使用して制御インターバル・サイズを検索するには、非共用リソース処理についてデータ・セットをオープンし、SHOWCB を発行し、ACB をクローズし、BLDVRP を発行し、LSR または GSR 用の ACB をオープンします。

補足事項: Hiperspace バッファーは、拡張ストレージにあるので、仮想リソース・プールのサイズを計算するときは、それらのサイズおよび数を考慮する必要はありません。

ビルドしている仮想リソース・プールを共用する各 VSAM クラスターについて、次のプロシージャーに従ってください。

1. 処理することを予期している並行要求の数を決定します。並行要求の数は、クラスター用の STRNO を表しています。

2. クラスターのデータ・コンポーネントについて BUFFERS=(SIZE(STRNO+1)) を指定します。

v クラスターがキー順クラスターであり、索引 CISZ (制御インターバル・サイズ) がデータ CISZ と同じである場合は、指定を BUFFERS=(SIZE(2 X

STRNO)+1) に変更します。

v 索引 CISZ がデータ・コンポーネント CISZ と同じでない場合は、BUFFERS=(dataCISZ(STRNO+1),indexCISZ(STRNO)) を指定します。

このプロシージャーに従うと、並行してアクティブな STRNO ストリングをサポートするために必要なバッファーの最小数が提供されます。追加のストリングは、共用リソース・プールに動的に追加されません。計算は、リソース・プールを共用する各クラスター (関連付けられた代替索引クラスターおよび関連付けられた代替索引アップグレード・セット内のクラスターを含む) ごとに、繰り返すことができます。

異なる CISZ を持つ各クラスター・コンポーネントごとに、別の ‘,SIZE(NUMBER)’

範囲を ‘BUFFERS=’ 指定に追加します。データ・コンポーネントおよび索引コンポーネント・バッファーは、1 つのセットのバッファーとして作成することができるか、あるいは、‘TYPE=’ ステートメントを使用することにより、個別の索引およびデータ・バッファー・セット内に作成することができることに注意してください。

入出力要件定義を減らすことにより、データ・セットへの読み取りアクセスを必要とするアプリケーションのパフォーマンスを高めるために追加のバッファーを追加することができます。データ・セットのクロス領域またはシステム間共用の必要性も考慮する必要があります。ここでは、変更されたデータ・バッファーを頻繁に書き込んで、読み取りおよび更新の保全性を高める必要があります。そのような環境では、バッファーが多いことはいつでも利点であるわけではありません。リソース・プールが複数のデータ・セットによって共用され、すべてのデータ・セット・ストリングが並行してアクティブである、一部のアプリケーションでは、推奨されるバッファー数より少なくても満足な結果を生じることがあります。

指定されたバッファー数が十分でない場合は、VSAM は、バッファー外条件を示す論理エラーを戻します。

VSAM データ・セット間でのリソースの共用

242 z/OS V1R10 DFSMS データ・セットの使用法

Page 267: DFSMS データ・セットの使用法

非オープン・データ・セットに関する情報の表示SHOWCAT マクロにより、コンポーネントに関する情報を、そのクラスターまたは代替索引がオープンされる前に入手することができます。BLDVRP を発行することになるプログラムは、すべてのコンポーネント上で SHOWCAT を発行して、制御インターバル、レコード、およびキーのサイズを見つけ出すことができます。この情報を使用して、プログラムは、BLDVRP の BUFFERS および KEYLEN パラメーター用の値を計算することができます。

プログラムは、BLDVRP TYPE=GSR を発行するためには監視プログラム状態および記憶保護キー 0 から 7 にある必要があるとはいえ、SHOWCAT を発行するには記憶保護キー 0 から 7 を持つ監視プログラム状態にある必要はありません。

SHOWCAT マクロについては、「z/OS DFSMS Macro Instructions for Data Sets」に説明があります。

バッファー・プールに関する統計の表示SHOWCB マクロを使用して、バッファー・プールの使用に関する統計を入手することができます。これらの統計は、リソース・プールの直前の定義およびそれを使用するデータ・セットの混合の両方を改善する方法を決定するのに役立ちます。統計は、バッファー・プールを使用しているオープン・データ・セットを記述する ACB

を通じて使用可能です。それらは、バッファー・プールがビルドされた時点からSHOWCB が発行された時点までのバッファー・プールの使用を反映しています。統計は 1 つを除きすべて、単一バッファー・プール用です。リソース・プール全体についての統計を入手するには、そのバッファー・プールのそれぞれについてSHOWCB を発行します。

リソース・プールの使用中はそれを再定義するのに統計を使用できません。それを次回にビルドするときに、調整を行う必要があります。

SHOWCB を使用して ACB を表示することについては、 161ページの『制御ブロックの内容の操作』に説明されています。 ACB が MACRF=GSR を持つ場合は、SHOWCB を発行するプログラムは、記憶保護キー 0 から 7 を持つ監視プログラム状態になければなりません。リソース・プールと同じ記憶保護キーを持つ監視プログラム状態にないプログラムによって SHOWCB が発行される場合は、プログラム・チェックが発生することがあります。

バッファー・プール統計の場合は、下記に説明されるキーワードが FIELDS で指定されます。これらのフィールドは、ACB によって記述されるデータ・セットがオープンされた後でしか表示されません。各フィールドは、表示作業域に 1 つのフルワードを必要とします。

フィールド 説明BFRFND 入出力操作なしで満たすことができる検索用の要求の数 (データはバッフ

ァー内で検索されました)。BUFRDS データをバッファーに入れる読み取りの回数。NUIW 非ユーザー開始書き込み (制御インターバルの内容を読み取るためにバッ

ファーが使用可能でなかったために VSAM がそれを行うよう強制されました) の回数。

STRMAX リソース・プールについて (そのなかのすべてのバッファー・プールについて) 現行でアクティブなプレースホルダーの最大数。

VSAM データ・セット間でのリソースの共用

第 13 章 VSAM データ・セット間でのリソースの共用 243

Page 268: DFSMS データ・セットの使用法

フィールド 説明UIW ユーザー開始書き込みの回数 (据え置きされない PUT または

WRTBFR、 246ページの『書き出し要求の据え置き』を参照してください)。

リソース・プールへのデータ・セットの接続: OPENデータ・セットをオープンする前に、データ・セットの ACB の MACRF パラメーターで LSR または GSR を指定することにより、データ・セットが BLDVRP によってビルドされたリソース・プールを使用するようにさせます。

ACB MACRF=({NSR|LSR|GSR},...),...

デフォルトの NSR は、データ・セットが共用リソースを使用しないことを示します。 LSR は、それがローカル・リソース・プールを使用することを示します。GSR

は、それがグローバル・リソース・プールを使用することを示します。

VSAM 制御ブロックおよびデータ・バッファーが 16 MB より上にある場合は、OPEN が発行される前に RMODE31=ALL を ACB で指定する必要があります。OPEN パラメーター・リストまたは VSAM ACB が 16 MB より上にある場合、OPEN の MODE=31 パラメーターもコーディングする必要があります。

ACB が LSR または GSR を示す場合、VSAM は、その BSTRNO、BUFNI、BUFND、 BUFSP、および STRNO パラメーターを無視します。これは、VSAM

が、これらのパラメーターに関連付けられたリソースについて既存のリソース・プールを使用するからです。

SHRPOOL=0 以外の SHRPOOL 識別番号を持つ LSR プールを接続するには、ACB

マクロの SHRPOOL パラメーターを使用し、どの LSR プールに接続しているかを示す必要があります。

複数の ACB が、同じデータ・セットの LSR 処理用にオープンされている場合、最初の ACB について SHRPOOL パラメーターによって識別された LSR プールが後続のすべての ACB について使用されます。

MACRF=GSR を指定して ACB によって記述されるデータ・セットでは、ACB およびすべての関連する RPL、EXLST、ECB、およびデータ域は、リソース・プールと同じ記憶保護キーを持つ仮想記憶域の共通域になければなりません。

DLVRP マクロを使用してのリソース・プールの削除リソース・プールを使用するすべてのデータ・セットがクローズされた後、DLVRP

(VSAM リソース・プール削除) マクロを発行することによりリソースを削除します。ローカル・リソース・プールを削除しないと、ジョブ・ステップまたは TSO/E

セッションの終了まで、仮想記憶域が失われることになります。グローバル・リソース・プールでは、この消失は保護されています。 BLDVRP を発行したアドレス・スペースが、DLVRP を発行せずに終了する場合、システムは、その使用カウントが 0 のときにグローバル・リソース・プールを削除します。

VSAM データ・セット間でのリソースの共用

244 z/OS V1R10 DFSMS データ・セットの使用法

Page 269: DFSMS データ・セットの使用法

SHRPOOL=0 以外の SHRPOOL 識別番号を持つ LSR プールを削除するには、SHRPOOL パラメーターを使用して、どのリソース・プールを削除しているかを示します。データ・リソース・プールと索引リソース・プールが同じ SHRPOOL 番号を持つ場合は、両方とも削除されます。

DLVRP パラメーター・リストが 16 MB より上にある場合、MODE=31 パラメーターをコーディングする必要があります。

VSAM データ・セット間でのリソースの共用

第 13 章 VSAM データ・セット間でのリソースの共用 245

Page 270: DFSMS データ・セットの使用法

共用リソース用の入出力バッファーの管理入出力バッファーを管理することには、次のことが含まれます。

v 直接 PUT 要求について書き込みを据え置く。これにより、入出力操作の数が減ります。

v 関連する要求によって変更されたバッファーを書き込む。

v 指定された制御インターバルの内容を含むバッファーを位置決めする。

v PUT を発行することなく、書き込まれるバッファーにマークを付ける。

v プログラムが無効バッファーにアクセスするとき、VSAM は、その内容がプログラムに使用可能になる前に、バッファーをリフレッシュします (つまり、制御インターバルのフレッシュ・コピーで読み取ります)。

入出力バッファーを管理することにより、ランダムにアクセスされる VSAM データ・セットの直接処理の速度を上げることができます。おそらく、順次処理またはアクティビティーが一貫して大量にあるデータ・セットの処理は速度を上げることができません。

書き出し要求の据え置きVSAM は、順次 PUT 要求では書き出しを自動的に据え置きます。これは通常、直接 PUT 要求ではバッファーの内容を直ちに書き出します。共用リソースでは、直接 PUT 要求の場合の書き出しを据え置かせることができます。次の場合、バッファーは最終的には書き出されます。

v WRTBFR マクロを発行します。

v VSAM は、バッファーが GET 要求を満たすことを必要とします。

v バッファー・プールを使用するデータ・セットがクローズされます。 (一時CLOSE は、バッファーを共用しているデータ・セットに対しては無効であり、ENDREQ は、リソース・プール内のバッファーが書き込まれるようにしません。)

書き出しを据え置くと、後続の要求がバッファー・プール内のデータによって満たされるときに入出力操作が節約されます。制御インターバルを 2 回以上更新しようとしている場合、データ処理のパフォーマンスは、書き出しを据え置くことにより改善されます。

MACRF=LSR または GSR に加えて、ACB で MACRF=DFR をコーディングすることにより、書き出しが据え置かれることを示します。

ACB MACRF=({LSR|GSR},{DFR|NDF},...),...

DFR オプションは、SHAREOPTIONS 4 と両立しません。(SHAREOPTIONS は、アクセス方式サービス・プログラムの DEFINE コマンドのパラメーターです。これについては、「z/OS DFSMS Access Method Services for Catalogs」で説明されています。) 据え置き書き出しについて SHAREOPTIONS 4 を使用してデータ・セットをオープンする要求は、リジェクトされます。

VSAM は、現行の要求について変更されていないバッファーが検出されたが、次の要求について制御インターバルの内容を読み込むための変更されていないバッファーがそれ以上ないときに、処理プログラムにそれを通知します。 (VSAM は、次の入出力要求についてバッファーを使用可能にするためにバッファーを書き込むよう

VSAM データ・セット間でのリソースの共用

246 z/OS V1R10 DFSMS データ・セットの使用法

Page 271: DFSMS データ・セットの使用法

強制します。) VSAM は、レジスター 15 を 0 に設定し、状態を検出しているPUT 要求を定義する RPL のフィードバック・フィールドに 12 (X'0C') を書き込みます。

VSAM は、要求用のプレースホルダーに割り当てられるために使用可能なバッファーがないときにも処理プログラムに通知します。論理エラーはありません (LERAD

ルーチンに対して出口が取られない限り、レジスター 15 には 8 が含まれます)。RPL 内のフィードバック・フィールドには 152 (X'98') が含まれます。要求を再試行することができます。バッファーが解放される場合は、要求がそれを入手します。

トランザクション ID による据え置き要求の関連付けアクション要求 (GET、PUT、など) は、要求を定義する RPL 内で同じ ID を指定することによって、トランザクションに従って関連付けることができます。

トランザクションに属する要求を関連付ける目的は、WRTBFR によって、トランザクション用に使用されるすべての変更バッファーが書き込まれるようにすることです。 WRTBFR 要求が完了するとき、トランザクションは物理的に完了します。

RPLTRANSID=number,...

TRANSID は 0 から 31 の番号を指定します。デフォルトである番号 0 は、RPL

によって定義された要求が他の要求に関連付けられていないことを示します。 1 から 31 の番号は、この RPL によって定義された要求を、同じトランザクション ID

を持つ他の RPL によって定義された要求に関連付けます。

RPL がどのトランザクション IDを持つかは、SHOWCB または TESTCB を発行することによって検索することができます。

SHOWCB FIELDS=([TRANSID],...),...

TRANSID は、表示作業域に 1 つのフルワードを必要とします。

TESTCBTRANSID=number,...

RPL が関連付けられた ACB が MACRF=GSR を持つ場合、SHOWCB またはTESTCB を発行するプログラムは、リソース・プールと同じ記憶保護キーを持つ監視プログラム状態になければなりません。 RPL が関連付けられている ACB でMACRF=GSR が指定されていると、記憶保護キー 0 から 7 を持つ監視プログラム状態でないプログラムによって SHOWCB または TESTCB が発行される場合は、プログラム・チェックが発生することがあります。 SHOWCB および TESTCB の使用については、 161ページの『制御ブロックの内容の操作』を参照してください。

書き込みが据え置かれたバッファーの書き込み: WRTBFR共用リソース・プールを使用するデータ・セットへの PUT が据え置かれる場合、WRTBFR (書き込みバッファー) マクロを使用して、次のものを書き込むことができます。

VSAM データ・セット間でのリソースの共用

第 13 章 VSAM データ・セット間でのリソースの共用 247

Page 272: DFSMS データ・セットの使用法

v 所定のデータ・セットについてのすべての変更された書き込まれていない索引およびデータ・バッファー (これにより、データ・セットについてのすべてのHiperspace バッファーが無効にされます)

v リソース・プール内のすべての変更された書き込まれていない索引およびデータ・バッファー

v リソース・プールの各バッファー・プール内の最も以前に使用された変更されたバッファー

v 同じトランザクション ID を持つ要求によって変更されたすべてのバッファー

v 変更され、ゼロの使用カウントを持つ、RBA 値によって識別された、バッファー

ACB 内の DFR オプションは、バッファーを書き込むための WRTBFR を使用せずに、書き込むことができます。 VSAM が GET 要求を満たすためにバッファーを必要とするときは、それが書き込まれ、それらを使用するデータ・セットの最後のものがクローズされるときは、すべての変更されたバッファーが書き込まれます。

WRTBFR を使用して書き込みが据え置かれているバッファーを書き込むほかに、それを使用して MRKBFR マクロで出力用にマークされたバッファーを書き込むことができます。これについては、 250ページの『出力用のバッファーのマーク付け:

MRKBFR』に説明があります。

WRTBFR を使用すると、WRTBFR を他の処理をオーバーラップするようにスケジュールする場合は、パフォーマンスを改善できます。

VSAM は、制御インターバルの内容を書き込む変更されていないバッファーがそれ以上ないときに処理プログラムに通知します。 (VSAM は、別の GET 要求が入出力操作を必要としたとすると、バッファーを書き込むよう強制されます。) VSAM

は、レジスター 15 を 0 に設定し、状態を検出する PUT 要求を定義する RPL のフィードバック・フィールドに 12 (X'0C') を書き込みます。

VSAM は、要求用のプレースホルダーを割り当てるために使用可能なバッファーがないときにも処理プログラムに通知します。これは論理エラーです (出口が LERAD

ルーチンに取られる場合以外は、レジスター 15 は 8 を含みます)。RPL 内のフィードバック・フィールドには 152 (X'98') が含まれます。要求を再試行することができます。バッファーが解放される場合は、要求がそれを入手します。

データ・セットを別の領域のユーザーと共用するときは、プログラムは、指定されたバッファーの内容を、他のすべての変更されたバッファーを書き込むことなしに、書き込むことができます。プログラムは、WRTBFR マクロを発行して、指定された RBA を含むバッファーがないかバッファー・プールを検索します。見つかると、バッファーは、それが変更されており、ゼロの使用カウントを持つことを確認するために検査されます。そうである場合、VSAM は、バッファーの内容をデータ・セットに書き込みます。

推奨: WRTBFR TYPE=CHK|TRN|DRBA を使用する前に、必ずすべてのバッファーを解放してください。バッファーの解放についての情報は、 170ページの『多重ストリングの処理』を参照してください。バッファーの 1 つが解放されていない場合、VSAM は、バッファーが解放されるまで処理を据え置きます。

VSAM データ・セット間でのリソースの共用

248 z/OS V1R10 DFSMS データ・セットの使用法

Page 273: DFSMS データ・セットの使用法

物理エラー分析ルーチンへの出口の処理バッファーの据え置き書き出しでは、バッファーが書き込まれていない場合であっても、処理プログラムは、その PUT 要求が完了した後も継続します。処理プログラムは、バッファーが最終的に書き込まれるときに発生する物理エラーと同期しません。 MRKBFR MARK=OUT を使用する処理プログラムは、物理エラーとも同期しません。エラーを分析するために、EXCEPTION または SYNAD ルーチンを提供する必要があります。

物理エラー・メッセージの ddname フィールドは、バッファーを使用していたデータ・セットを識別しますが、バッファーが解放されていることもあるので、その内容が使用不能である場合もあります。入出力エラー用のバッファーの内容を記録するために JRNAD 出口ルーチンを提供することができます。これを物理エラー分析ルーチンと整合させて、書き込みが据え置かれたバッファーについての入出力エラーを処理することができます。トランザクション中に入出力エラーを取り消すために JRNAD 出口ルーチンが使用される場合、物理エラー分析ルーチンは、最後のエラー・戻りコードのみを入手します。 SYNAD および JRNAD ルーチンについての情報は、 296ページの『物理エラーを分析するための SYNAD 出口ルーチン』および 286ページの『トランザクションをジャーナル記録するための JRNAD 出口ルーチン』を参照してください。

共用リソースでの JRNAD 出口の使用ACB が MACRF=LSR または GSR であるデータ・セットに JRNAD 出口が関連付けられているとき、VSAM は次の理由からその出口を取ります。

v データまたは索引制御インターバル・バッファーが変更され、書き込まれようとしている。

v 物理エラーが発生した。 VSAM は、JRNAD 出口を最初に取ります ― ルーチンは、VSAM に、エラーを迂回して処理を継続するか、エラーを引き起こした要求を終了してエラー処理を続行するよう指図することができます。

v 制御インターバルまたは制御域が、キー順データ・セットまたは可変長 RRDS 用に分割されようとしている。ルーチンは、分割に対する要求を取り消して、VSAM から出ることができます。この目的での JRNAD 出口の使用の例は、 286

ページの『トランザクションをジャーナル記録するための JRNAD 出口ルーチン』に示されています。

VSAM から JRNAD ルーチンに制御が渡ったときのレジスターの内容、およびレジスター 1 によってポイントされているパラメーター・リスト内のフィールドについては、 286ページの『トランザクションをジャーナル記録するための JRNAD 出口ルーチン』を参照してください。

共用リソースでの制御インターバルへのアクセス共用リソースでは制御インターバル・アクセスは許可されません。

バッファー・プール内での RBA の位置決め: SCHBFRリソース・プールがビルドされるとき、各バッファー・プール内のバッファーは、1

から各バッファー・プール内のバッファーの数まで番号付けされます。ある時点に、バッファー・プール内のいくつかのバッファーが、特定のデータ・セットについて制御インターバルの内容を保持することができます。これらのバッファーは、

VSAM データ・セット間でのリソースの共用

第 13 章 VSAM データ・セット間でのリソースの共用 249

Page 274: DFSMS データ・セットの使用法

処理プログラムにとって関心のある RBA を含んでいることも、ないこともあります。 SCHBFR マクロによってそれを見つけ出すことができます。 SCHBFR を定義する RPL の ARG パラメーター内で、関心がある範囲の最初と最後の制御インターバル RBA を含む 8 バイト・フィールドのアドレスを指定します。

注: 圧縮フォーマット・データ・セットでは、圧縮レコードの RBA は予測不能です。別のレコードの RBA またはバッファー内の次のレコードのアドレスは、現行のレコードの長さまたは VSAM に提供されているレコードの長さを使用して決定することはできません。

検索されるバッファー・プールは、RPL が関連している ACB によって定義されたデータ・コンポーネントによって使用されるものです。 ACB がパスに名前を付ける場合、VSAM は、代替索引のデータ・コンポーネントによって使用されるバッファー・プールを検索します。 (パスが基本クラスターのみを通して定義される場合、VSAM は、基本クラスターのデータ・コンポーネントによって使用されるバッファー・プールを検索します。) VSAM は、指定したバッファーでその検索を開始し、範囲内で RBA を含むバッファーを検出するまで、または最高の番号が付いたバッファーが検索されるまで、検索を続けます。

検索を満たす最初のバッファーについて、VSAM はそのアドレス (OPTCD=LOC)

またはその内容 (OPTCD=MVE) を、アドレスが RPL の AREA パラメーターで指定されている作業域に戻し、その番号をレジスター 0 に戻します。検索が失敗する場合、レジスター 0 には、ユーザーが指定したバッファー番号および X'0D' の 1

バイト SCHBFR コードを戻します。範囲内で RBA を含む次のバッファーを検出するには、SCHBFR を再び発行し、検索を満たす最初のものの後の次のバッファーを指定します。 VSAM が範囲内で RBA を含むバッファーを検出できなかったことを示すまで、またはプールの末尾に達するまで、続けます。

希望する RBA を含むバッファーを検索しても、バッファーの排他制御を取得することにはなりません。排他制御は、更新用の GET を発行することによってのみ取得することができます。 SCHBFR は、すでに別の要求の排他制御の下にあるバッファーのロケーションまたは内容を戻しません。

出力用のバッファーのマーク付け: MRKBFR関心のある RBA を含むバッファーは、SCHBFR マクロ、読み取り専用 GET、または更新用の GET を発行することにより、位置決めします。更新用の GET を発行すると、バッファーの排他制御を取得します。排他制御を持っているかどうかとは無関係に、出力用のバッファーは、MARK=OUT を指定した MRKBFR マクロを発行することによってマーク付けしてから、バッファーの内容を変更することができます。排他制御なしに、CIDF または RDF 内の制御情報を変更してはなりません(レコード長を変更しないでください)。

MRKBFR MARK=OUT は、バッファーの内容が変更されることを示しています。コピーではなく、バッファー自体の内容を変更する必要があります。したがって、SCHBFR または GET を発行してバッファーを探し出すときは、RPL OPTCD=LOC

を指定する必要があります。 (OPTCD=MVE を使用する場合は、バッファーのコピーを入手しますが、そのロケーションはわかりません)。 WRTBFR が発行されるとき、または VSAM が GET 要求を満たすためにバッファーを書き込むよう強制するときに、バッファーが書き込まれます。

VSAM データ・セット間でのリソースの共用

250 z/OS V1R10 DFSMS データ・セットの使用法

Page 275: DFSMS データ・セットの使用法

バッファーを共用しているか、それの排他制御を持っている場合、共用状況またはMRKBFR MARK=RLS を指定した排他制御からそれを解放できます。バッファーが出力用にマークされている場合、MARK=RLS を指定した MRKBFR は、それを無効にしません。バッファーは最終的には書き込まれます。順次位置決めは失われます。 MARK=RLS を指定した MRKBFR は、ENDREQ マクロと同様です。

共用リソース用の制約事項およびガイドラインLSR および GSR オプションを使用するための制約事項は、次のとおりです。

v 空のデータ・セットは処理される (つまり、ロードされる) ことはできません。

v アドレス・スペース内の複数の LSR プールは、各 LSR プールを識別するためのBLDVRP マクロの SHRPOOL パラメーターを使用することによって入手されます。

v 制御インターバル・アクセスは使用できません (ACB MACRF=CNV および ACB

MACRF=ICI)。

v 共通制御ブロック (CBIC) は使用できません。

v ユーザー・バッファー方式は許可されません (ACB MACRF=UBF)。

v SHAREOPTIONS 4 を使用するデータ・セット用の書き出しは、据え置くことができません (ACB MACRF=DFR)。

v MRKBFR、SCHBFR、および WRTBFR 用の要求パラメーター・リストは、チェーニングできません (RPL マクロの NXTRPL パラメーターは無視されます)。

v 順次アクセスでは、データ・セットの先頭での位置決めは、明示的でなければなりません。POINT マクロまたは RPL OPTCD=NSP を指定した GET マクロを使用します。

v MACRF=DFR が関連付けられた ACB 内で指定されていた場合は、一時 CLOSE

および ENDREQ はバッファーを書き出すようにはしません。

v Hiperspace バッファー方式 (LSR のみ) を使用するアドレス・スペースは、スワップ不能にする必要があります。 それ以外の場合、拡張ストレージ (および、したがって Hiperspace バッファー) は、アドレス・スペースがスワップアウトされるときに廃棄されます。

v GSR、ACB、およびすべての関連した RPL では、EXLST、データ域、およびECB は、記憶保護キー 0 から 7 を持つ仮想記憶域の共通域に保管する必要があります。グローバル・リソース・プールに関連付けられたすべての VSAM 要求は、記憶保護キー 0 から 7 を持つ監視プログラム状態のプログラムによってのみ発行することができます (リソース・プールと同じ)。

v チェックポイントは、リソースがグローバル・リソース・プールで共用されているデータ・セット用に取ることはできません。 ACB が MACRF=GSR を持つデータ・セットをオープンしたアドレス・スペース内のプログラムが CHKPT マクロを発行する場合、8 がレジスター 15 に戻されます。別のアドレス・スペース内のプログラムが CHKPT マクロを発行する場合、チェックポイントが取られますが、グローバル・リソース・プールを使用していないデータ・セットについてのみです。

チェックポイント・リスタートは、リソースがローカル・リソース・プール内で共用されているデータ・セットで使用することができますが、リスタート・プログラムは、チェックポイントが発生したポイントでの処理のために位置変更する

VSAM データ・セット間でのリソースの共用

第 13 章 VSAM データ・セット間でのリソースの共用 251

Page 276: DFSMS データ・セットの使用法

ことはありません ― 処理は、データ・セットの最高使用 RBA でリスタートされます。 VSAM データの処理をリスタートすることについての情報は、「z/OS

DFSMSdfp Checkpoint/Restart」 を参照してください。

v 直接アクセス装置に制御インターバルを書き込んでいる間に物理入出力エラーが検出される場合、バッファーはリソース・プール内に残っています。書き込みが必要なフラグ (BUFCMW) および関連付けられた mod ビット (BUFCMDBT)

は、オフにされ、BUFC はエラーのフラグが立てられます (BUFCER2=ON)。バッファーはプール内で置き換えられず、バッファー書き込みは試行されません。このバッファーを再使用のために解放するには、TYPE=DS を指定した WRTBFR

マクロを発行することができるか、データ・セットをクローズすることができます (CLOSE は、WRTBFR マクロを発行します。)

v BLDVRP マクロを使用して、共用リソース・プールをビルドする場合、VSAM

制御ブロックの一部は、システム・サブプール内に置かれ、その他は サブプール0 に置かれます。タスクが終了するとき、それが別のタスクによって共用されていない限り、システムはサブプール 0 を解放します。システムは、ジョブ・ステップが終了するまで、システム・サブプールを解放しません。次に、別のタスクがリソース・プールを使用しようとする場合、VSAM が解放された制御ブロックにアクセスしようとするときにアベンドが発生することがあります。 2 つのタスクがサブプール 0 を共用する場合は、この問題は発生しません。ATTACH マクロ内に SZERO=YES パラメーター、あるいは SHSPL または SHSPV パラメーターをコーディングします。 SZERO=YES がデフォルトです。

v GSR は、圧縮データ・セット用には許可されません。

VSAM データ・セット間でのリソースの共用

252 z/OS V1R10 DFSMS データ・セットの使用法

Page 277: DFSMS データ・セットの使用法

第 14 章 VSAM レコード・レベル共用の使用

この章では、VSAM レコード・レベル共用 (RLS) および DFSMS Transactional

VSAM (DFSMStvs) の使用に必要なリソースをセットアップする方法について説明します。 この章では以下のトピックを扱います。

トピック 該当ページ

VSAM データ・セットへのアクセスの制御 253

DFSMStvs および VSAM レコード・レベル共用を使用したデータ・セットへのアクセス

253

読み取り保全性の指定 270

ロック要求のタイムアウト値の指定 271

VSAM データ・セットへのアクセスの制御DFSMStvs による VSAM データ・セットへのアクセスを制御するために、以下のオプションを指定することができます。

v VSAM レコード・レベル共用 (VSAM RLS)

v 読み取り保全性オプション

v ロック要求のタイムアウト値

VSAM データ・セットがリカバリー可能である場合は、DFSMStvs はトランザクション内の入力用にデータをオープンすることができます。リカバリー可能 VSAM

データ・セットは、LOG(UNDO) または LOG(ALL) 属性を用いて定義されます。リカバリー可能 VSAM データ・セットの使用の詳細については、「z/OS DFSMStvs

Planning and Operating Guide」を参照してください。

DFSMStvs および VSAM レコード・レベル共用を使用したデータ・セットへのアクセス

このセクションでは、DFSMStvs に関する VSAM データ・セットの使用について説明します。

VSAM レコード・レベル共用 (RLS) は、VSAM データ・セットのアクセス・オプションの一種であり、トランザクション対応のアプリケーション (顧客情報管理システム (CICS) および DFSMStvs など) と、非トランザクション対応のアプリケーションが並行してデータにアクセスできるようにします。このオプションは、z/OS

並列シスプレックス (Parallel Sysplex®) 間の VSAM データ・セットのマルチシステム共用を提供します。 VSAM RLS は、CF ベースト・ロック・マネージャーおよび CF キャッシュ・マネージャーを含むカップリング・ファシリティー (CF) のデータ共用テクノロジーを活用します。 VSAM RLS は、レコード・レベル共用のインプリメンテーションに CF ベースト・ロック・マネージャーおよび CF キャッシュ・マネージャーを使用します。

© Copyright IBM Corp. 1987, 2008 253

Page 278: DFSMS データ・セットの使用法

注: VSAM RLS では、アクセスするデータ・セットが System Managed Storage

(SMS) データ・セットであることが必要です。RLS のアクセス対象となるには、まだ SMS 管理対象でないデータ・セットは SMS に変換する必要があります。

RLS は、VSAM データ・セットへのアクセス・モードの 1 つです。 RLS は、オープン時に解釈されるアクセス・オプションです。このオプションは、新規 JCL パラメーター (RLS) を指定するか、または ACB で MACRF=RLS を指定することにより選択されます。 RLS MACRF オプションは、MACRF NSR (非共用リソース)、LSR (ローカル共用リソース)、および GSR (グローバル共用リソース) の各オプションと同時に指定することはできません。ここでは、RLS アクセスとNSR、LSR、および GRS アクセスとを区別するために非 RLS アクセス という用語を使用します。

アクセス方式サービス・プログラムは、IDCAMS EXPORT、IMPORT、PRINT、または REPRO コマンドを実行するときに RLS を使用しません。 RLS キーワードが、アクセス方式サービス・プログラムによってオープンされるデータ・セットのDD ステートメントで指定される場合、このキーワードは無視され、データ・セットは非 RLS モードでオープンされ、アクセスされます。非 RLS アクセスについての詳細は、 264ページの『VSAM データ・セットへの非 RLS アクセスの使用』を参照してください。

RLS アクセスは、KSDS、ESDS、RRDS、および VRRDS データ・セット、ならびに VSAM 代替索引用にサポートされます。

VSAM RLS 機能は、SMSVSAM サーバーによって提供されます。このサーバーは、システム・アドレス・スペースに常駐します。アドレス・スペースが作成され、サーバーが MVS IPL 時に開始されます。 VSAM は、クロス・アドレス・スペース・アクセスならびに要求発行者アドレス・スペースと SMSVSAM サーバー・アドレス・スペース間のリンケージを内部的に実行します。

SMSVSAM サーバーは、2 つのデータ・スペースを所有します。 1 つのデータ・スペースは、SMSVSAM データ・スペースと呼ばれます。これには、一部の VSAM

RLS 制御ブロックおよびシステム中のバッファー・プールが含まれます。 VSAM

RLS は、MMFSTUFF と呼ばれるその他のデータ・スペースを使用して、SMF レコードの生成に使用されるアクティビティー・モニター情報を収集します。 VSAM

は、要求側アドレス・スペースと SMSVSAM アドレス・スペースおよびデータ・スペースとの間のクロス・アドレス・スペース・アクセスおよびリンケージを提供します。 255ページの図 30 を参照してください。

VSAM レコード・レベル共用の使用

254 z/OS V1R10 DFSMS データ・セットの使用法

Page 279: DFSMS データ・セットの使用法

VSAM RLS データ・バッファーは、SMSVSAM データ・スペース・ストレージの最大の占有率を占めます。一部のケースでは、このデータ・バッファー上のストレージ制約により、大量トランザクション環境ではパフォーマンス低下となる可能性があります。どのようなストレージ上の制約も回避し、パフォーマンス向上の可能性のために、VSAM RLS は RLS データ・バッファーを 64 ビット・アドレス可能な仮想ストレージに移動するオプションを提供します。 このオプションをアクティブにするには、RlsAboveTheBar(YES) 指定の ISMF を使用したデータ・クラスにVSAM データ・セットを割り当てます。特に、トランザクション量の多い重要なCICS トランザクションが稼働するアプリケーションの場合は、このオプションの使用をお勧めします。このオプションのセットアップと使用方法の詳細は、 260ページの『64 ビット・アドレス可能なデータ・バッファーの使用』を参照してください。

レコード・レベル共用 CF キャッシングVSAM レコード・レベル共用は、アクティブなストレージ管理サブシステム (SMS)

構成で定義されている DFSMS キャッシュ構造用に複数レベルの CF キャッシングを許可します。

VSAM RLS は、複数レベルの CF キャッシングを持ちます。 SMS DATACLAS

RLS CF キャッシュ値キーワードの値は、CF キャッシングのレベルを決定します。デフォルト値 ALL は、RLS が VSAM データ・セットのデータ部分と索引部分の両方をカップリング・ファシリティーにキャッシュすることを示します。 NONE を指定する場合は、RLS は VSAM データ・セットの索引部分のみをキャッシュに入れます。 UPDATESONLY を指定する場合は、RLS は、書き込み操作中だけ、データをカップリング・ファシリティーにキャッシュします。

図 30. VSAM RLS アドレス・スペースおよびデータ・スペースと要求側アドレス・スペース

VSAM レコード・レベル共用の使用

第 14 章 VSAM レコード・レベル共用の使用 255

Page 280: DFSMS データ・セットの使用法

機能が使用可能にされる前に、シスプレックス内のすべてのアクティブ・システムに、4K を超える CF キャッシング・コードをインストールしておく必要があります。

RLS CF キャッシングをセットアップするには、次の値を使用します。

v SMS DATACLAS RLS CF キャッシュ値キーワードについて ALL またはUPDATESONLY または NONE

DFSMS VSAM データ・セットの 4K を超えるキャッシングを RLS 処理用にオープンできるようにするには、次の変更を行う必要があります。

– すべての VSAM RLS データのキャッシングを必要としない場合は、SMS

DATACLAS RLS CF キャッシュ値キーワードの値を変更できます。

ALL RLS が VSAM 索引およびデータ・コンポーネントをキャッシュすることを示します。ALL がデフォルトです。

NONE RLS が VSAM 索引データのみをキャッシュすることを示します。データ・コンポーネントは、キャッシュ構造に置かれません。

UPDATESONLYRLS は、WRITE 要求のみをキャッシュ構造に置くことを示します。

– VSAM は、RLS_MaxCfFeatureLevel(A) を指定するときのみ RLS CF キャッシュ値キーワードを受け入れ、シスプレックス内のすべてのシステムが 4K より大きなキャッシング・コードを実行することができます。

シスプレックス内の各システム上のコード・レベル、および RLS CF キャッシュ値キーワードが受け入れられるか判別するには、D SMS,SMSVSAM、D

SMS,SMSVSAM,ALL、および D SMS,CFCACHE() オペレーター・コマンドを使用します。 DFSMS キャッシュ構造がシステムに接続するとき、VSAM

RLS は IGW500I メッセージを出して、4K より大きいキャッシングがアクティブであることを示します。キャッシュ構造は、各システム上でオープンされているデータ・セットの最初のインスタンスを使用してシステムに接続します。

v RLS_MaxCfFeatureLevel キーワードについて次の値を指定できます。

– A ― この値は、シスプレックス内のすべてのアクティブな VSAM RLS インスタンスが正しいレベルのコードを持つ場合に、4K より大きいキャッシングを許可します。

– Z ― これは、アクティブ SMS 構成 で RLS_MaxCfFeatureLevel を指定しない場合は、デフォルト値です。4K より大きいキャッシングは許可されません。

v SETSMS コマンドでの RLS_MaxCfFeatureLevel キーワード

v SET SMSxx コマンドでの RLS_MaxCfFeatureLevel キーワード

v D SMS,OPTIONS コマンドでの RLS_MaxCfCacheFeatureLevel

VSAM レコード・レベル共用の複数のロック構造VSAM レコード・レベル共用には、アクティブなストレージ管理サブシステム(SMS) 構成で定義されている複数のロック構造があります。 SMS ストレージ・クラスで定義されているパラメーター、ロック・セットを使用することにより、複数の 2 次ロック構造を定義できます。ロック・セット属性を使用することで、追加の

VSAM レコード・レベル共用の使用

256 z/OS V1R10 DFSMS データ・セットの使用法

|

|

|

|

|

Page 281: DFSMS データ・セットの使用法

カップリング・ファシリティーの DFSMS ロック構造を単一の SMS ストレージ・クラスに関連付けるよう定義することができます。DFSMS では、最大 256 のロック・セットおよびロック構造の定義が可能です。各ロック・セットはロック構造名を 1 つ持つことができます。ただし、接続可能なロック構造の最大数は 10 ~ 14

であり、IEASYSxx の MAXCAD の値によって異なります。

アプリケーションが VSAM データ・セットを開く場合は、RLS 処理で、そのデータ・セット用に定義されたストレージ・クラスを検査することにより、使用するロック構造が決定されます。ストレージ・クラスが 2 次ロック構造を指定している場合は、RLS 処理で、データ・セット内のレコードへのアクセスをシリアライズするために 2 次ロック構造が使用されます。それ以外の場合は、RLS 処理ですべてのレコード・ロックに対して IGWLOCK00 が使用されます。

2 次ロック構造の接続は、データ・セットの閉止後も持続します。これは、ロック構造を使用する SMSVSAM アドレス・スペースを再始動する場合か、コマンドVARY SMS,SMSVSAM,FORCEDELETELOCKSTRUCTURE を使用してロック構造自体を削除する場合にのみ切断されます。詳しくは、「z/OS MVS システム・コマンド」を参照してください。

SMSVSAM アドレス・スペースが終了された場合でも、失敗した持続接続が存在する可能性があります。ロック構造は、VARY

SMS,SMSVSAM,FORCEDELETELOCKSTRUCTURE コマンドを使用して削除することができます。

注:

1. VSAM RLS では、単一の VSAM スフィア用のレコード・ロックを複数のロック構造に置くことはサポートしていません。

VSAM RLS と CICS の併用顧客情報管理システム (CICS) ファイル制御コンポーネントは、VSAM の上に構築されたトランザクション・ファイル・システムです。 CICS ファイル制御は、リカバリー可能データ・セット用のコミット、ロールバック、および順方向リカバリー・ロギング機能などのトランザクション機能を提供します。 VSAM RLS より以前では、CICS ファイル制御は、それ自体のレコード・レベル・ロックを実行します。 VSAM データ・セットは、単一の CICS を使用してアクセスされます。

複数の CICS 領域のユーザーは、ローカル・ファイル定義が常駐するファイル所有領域 (FOR) を持ちます。 FOR からのデータ・セットへのアクセスは、ローカル・ファイル定義を使用して行われます。ローカル・データ・セットは、要求を VSAM

に直接実行依頼する CICS アプリケーション所有領域 (AOR) によってアクセスされます。 リモート定義には、領域およびローカル・ファイル名に関する情報が含まれます。複数の領域またはシステム間のデータ・セットの共用は、データ・セットにアクセスしたい他の任意の領域内でリモート・ファイル定義を保持することにより達成されます。 VSAM RLS を使用しない場合は、共用は、ローカル・ファイルを共用したい任意の領域内でローカル・ファイルのリモート定義を保持することにより達成されます。 図 31 は、VSAM RLS より以前の AOR、FOR、およびVSAM 要求フローを示しています。

VSAM レコード・レベル共用の使用

第 14 章 VSAM レコード・レベル共用の使用 257

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 282: DFSMS データ・セットの使用法

CICS AOR の機能は、特定のデータ・セットにアクセスするための VSAM 要求を、そのデータ・セットに関連付けられているファイルを所有する CICS FOR に送ります。この分散アクセス形態のデータ共用は、CICS 内にしばらく存在していました。

VSAM RLS では、複数の CICS AOR が、 CICS 機能シップなしに VSAM データ・セットへのアクセスを直接共用することができます。 VSAM RLS では、CICS

は、引き続きトランザクション機能を提供します。 トランザクション機能は、VSAM RLS 自体によって提供されるわけではありません。 VSAM RLS は、CF ベースト・レコード・レベル・ロックおよび CF データ・キャッシングを提供します。 図 32 は、VSAM RLS を持つ CICS 構成を示しています。

図 31. CICS VSAM 非 RLS アクセス

図 32. CICS VSAM RLS

VSAM レコード・レベル共用の使用

258 z/OS V1R10 DFSMS データ・セットの使用法

Page 283: DFSMS データ・セットの使用法

VSAM RLS はマルチシステム・サーバーです。 CICS AOR は、VSAM RLS サーバーに要求を直接実行依頼することによって共用データ・セットにアクセスします。 このサーバーは、CF を使用して、レコード・レベルでのアクセスをシリアライズします。

関連資料: CICS を使用してデータ・セットをリカバリーする方法の詳細については、「CICS リカバリーおよび再始動ガイド」を参照してください。 CICS の概要については、「CICS System Definition Guide」を参照してください。

リカバリー可能データ・セットとリカバリー不能データ・セットCICS ファイル制御は、リカバリー可能データ・セットまたはリカバリー不能データ・セットをサポートします。 DFSMStvs はリカバリー可能なデータ・セットのみをサポートします。すなわち、DFSMStvs を使用すると、リカバリー可能な VSAM

データ・セットのバッチ更新が可能です。たとえ、そのデータ・セットを CICS が処理していても構いません。 データ・セット定義には、データ・セットがリカバリー可能かどうかを示す LOG 属性が含まれます。属性オプションは次のように指定されます。

v LOG(NONE) ― リカバリー不能

データ・セットをリカバリー不能として指定します。CICS は、この属性を持つデータ・セットについて変更のロギングを行いません。 ロールバックも順方向リカバリーも行われません。

v LOG(UNDO) ― リカバリー可能

データ・セットをコミットまたはロールバック・リカバリー可能として指定します。CICS と DFSMStvs は、データ・セットに対する変更前 (UNDO) イメージをログに記録し、アプリケーションがロールバックを要求するか、またはトランザクションが異常終了する場合に、その変更をバックアウトします。

v LOG(ALL) ― リカバリー可能

データ・セットをコミットまたはロールバック・リカバリー可能および順方向リカバリー可能の両方として指定します。LOG(UNDO) 用に提供されるロギングおよびリカバリー機能のほかに、CICS は、データ・セットに対する変更後イメージ (REDO レコード) をログに記録します。 やり直しログ・レコードは、万一データ・セットへのハードウェアまたはソフトウェア損傷が起きた場合にデータ・セットを再構成するために、CICS VSAM Recovery (CICSVR) などの順方向リカバリー・プログラムまたはプロダクトによって使用されます。

重要: LOG(NONE) の指定は、LOG をまったく指定しないこととは異なります。LOG を指定しない場合は、RLS はデータ・セットにアクセスすることはできません。

VSAM リカバリー可能データ・セット制御属性は、IDCAMS (アクセス方式サービス・プログラム) の DEFINE および ALTER コマンド上で指定することができます。データ・クラスでは、LOG を BWO および LOGSTREAMID パラメーターと一緒に指定することができます。データ・セットのバックアップをオープン時にとることができるようにしたい場合は、 IDCAMS BWO(TYPECICS) パラメーターを使用して上記の属性を定義する必要があります。CICS アプリケーションまたはDFSMStvs のみが、出力用のリカバリー可能データ・セットをオープンすることが

VSAM レコード・レベル共用の使用

第 14 章 VSAM レコード・レベル共用の使用 259

Page 284: DFSMS データ・セットの使用法

できます。これは、VSAM RLS がリカバリー可能データ・セットへの書き込みに必要なロギングおよびその他のトランザクション機能を提供しないためです。

データ・セットが非 RLS (NSR、LSR、または GSR) アクセス・モードでオープンされる場合は、データ・セットのリカバリー可能属性は適用されず、無視されます。リカバリー可能データ・セット規則は、RLS アクセスを使用しない既存のプログラムには影響を及ぼしません。

VSAM リカバリー可能データ・セット用の CICS トランザクション・リカバリーCICS のトランザクション・サービスは、データ共用のための理想的な環境を提供します。 変更されたレコード上の VSAM RLS によって保持される排他ロックは、他のトランザクションによるこれらのレコードへの保全性読み取りおよび書き込み要求を待機させます。変更しているトランザクションがコミットまたはロールバックすると、ロックは解放され、他のトランザクションがレコードにアクセスできるようになります。

CICS ロールバック (バックアウト) 機能は、トランザクションによってリカバリー可能データ・セットに加えられる変更を除去します。 トランザクションが異常終了すると、 CICS は、ロールバックを暗黙的に実行します。

コミットおよびロールバック機能は、他のトランザクションがリカバリー可能データ・セットまたはその他のリカバリー可能リソースに加える変更から個々のトランザクションを保護します。これにより、トランザクション・ロジックは、それが提供している機能に焦点を当てることができ、万一問題または障害が発生した場合に、データ・リカバリーまたはクリーンアップを気にかける必要がありません。

VSAM RLS の CICS 以外での使用VSAM RLS が CICS または DFSMStvs の外側で使用されるとき、アプリケーションは、トランザクション・リカバリー環境を持ちません。 ほとんどの場合、これは読み取り/書き込みデータ共用を実行可能にしません。

DFSMStvs 以外の非 CICS アプリケーションは、入力用にのみ RLS モードでリカバリー可能データ・セットをオープンできます。 VSAM RLS は、非 CICS アプリケーション用に保全性読み取り (要求される場合) を提供するために必要なレコード・レベル・ロックを提供します。この機能により、複数の CICS アプリケーションが、読み取りおよび書き込み RLS アクセス用にオープンされるデータ・セットを持つようになります。 CICS は、リカバリー可能データ・セットへの書き込みについて必要なトランザクション・リカバリーを提供します。 並行して、DFSMStvs

の外側の非 CICS アプリケーションが、読み取り RLS アクセス用にオープンされるデータ・セットを持つことができます。

64 ビット・アドレス可能なデータ・バッファーの使用シスプレックス環境内の各システムごとに、SMSVSAM アドレス・スペースにはすべての VSAM RLS データ・バッファーが入ります。デフォルトでは、このデータ・バッファーはアドレス・スペースデータ・スペース内の 2 GB 仮想ストレージ境界よりも下に入ります。 バッファー・スペースが制約を受ける可能性を回避し、および大量のトランザクションに対応できるようアプリケーションのパフォーマン

VSAM レコード・レベル共用の使用

260 z/OS V1R10 DFSMS データ・セットの使用法

Page 285: DFSMS データ・セットの使用法

スを将来的に向上させるために、 64 ビット仮想アドレスを持った RLS バッファーに対して、2 GB 境界よりも上でデータ・セットおよび索引が割り当てられるようにオプションで指定することが可能です。 この 64 ビットの仮想バッファリング・オプションを指定するには、データ・クラス・キーワードと、SYS1.PARMLIB

の IGDSMSxx メンバーでの設定の組み合わせにより行います。

VSAM RLS 指定のデータ・セットに対して 64 ビット・データ・バッファーを指定するには、以下の内容すべてを満足している必要があります。

v システム・レベルは z/OS 1.7 またはそれ以降である必要があります。

v そのデータ・セットまたは索引は、属性 『RLSAboveTheBar』『RLS Above the

2-GB Bar』 の設定が Yes に指定されたデータ・クラスに属している必要があります。

v SYS1.PARMLIB のアクティブ IGDSMSxx メンバーには、キーワードRlsAboveTheBarMaxPoolsize に 500 MB から 2 TB の数値がそのシステム用に設定されている必要があります。

さらに、名前を指定された各システムごとのパフォーマンス向上のために、そのバッファーが 2 GB 境界よりも上にあるかどうかに関係なく、データ・バッファー用に永続的にページ固定する合計実記憶量を指定する目的で、IGDSMSxx のキーワード RlsFixedPoolSize に設定します。

64 ビットのデータ・バッファーに対するデータ・クラスの設定ISMF データ・クラス属性の 「RLS Above the 2-GB Bar」は、VSAM データ・セット用バッファーが 2 GB 境界よりも上にあるか下にあるかを決定する場合の 3

つの必要条件のうちの 1 つです。デフォルトは 2 GB 境界よりも下です。2 GB 境界よりも上で RLS バッファーを使用する場合にそのデータ・クラスを適格にするには、「Data Class Define」または「Data Class ALTER」パネル上で 「RLS Above

the 2-GB Bar」に対して Yes を指定します。次に、そのデータ・クラスに VSAM

データ・セットを割り当てます。

VSAM RLS データ・バッファーに対する IGDSMSxx PARMLIB 値の設定SYS1.PARMLIB メンバーの IGDSMSxx で以下のキーワードを使用して、VSAM

RLS が使用するデータ・バッファー・スペースの量と位置を指定します。

RlsAboveTheBarMaxPoolSize(sysname1,value1;sysname2,value2;...) または(ALL,value)バッファー・プールの合計サイズを MB 単位で指定して、名前が指定された各システム上または全システム上の 2 MB 境界よりも上にそのバッファーを常駐させます。システム・プログラマーは、そのシスプレックス環境内の各システムごとに異なる値を指定するか、またはそのシスプレックス環境内の全システムに対して 1 つの値を指定可能です。有効な値は 0 (デフォルト値) か、または500 MB から 2000000 MB (2 TB) の間です。

RlsFixedPoolSize(sysname1,value1;sysname2,value2;...) または (ALL,value)MB 単位で合計実記憶量を指定 (2 GB 境界の上または下に) して、VSAM RLS

データ・バッファー用に永続的にページ固定するか「ピン」します。デフォルトは 0 です。システム・プログラマーは、そのシスプレックス環境内の各システムごとに異なる値を指定するか、またはそのシスプレックス環境内の全システム

VSAM レコード・レベル共用の使用

第 14 章 VSAM レコード・レベル共用の使用 261

Page 286: DFSMS データ・セットの使用法

に対して 1 つの値を指定可能です。この指定された量が、使用可能な実記憶量の 80% またはそれよりも大きくなると、80% が上限となって、WTO メッセージが出力されて限界に到達した旨の警告を出します。

VSAM RLS バッファリング用の実記憶量を決定できるようにするには、SMF

レコード・タイプ 42 のサブタイプ 19 をチェックして、VSAM RLS バッファー・ヒット率を調べることができます。大量のヒット・ミスの意味は、VSAM

RLS 用にピンすべき実記憶がもっと必要であることを示します。

注: 比較的小さな補助ストレージ・サイズしかない場合、RlsFixedPoolSize キーワードで永続的にバッファーをページ固定すると、補助ストレージの増設が必要となる可能性があります。その理由は、ページ固定したのと同数のページが補助ストレージにスチールされる可能性があり、永続的なページ固定が原因でページング用に使用可能な実記憶が減少したことに対して補填すべき補助ストレージが必要だからです。

IGDSMSxx メンバーで指定したこれらのキーワードと一緒に SET SMS=xx を使用するか、あるいは、変更対象の特定キーワード指定で SETSMS コマンドを使用してこれらの値を後から変更可能です。

通常どおりですが、IGDSMSxx 内で変更されたパラメーターは SET SMS=xx が発行されるまでは有効にはなりません。

IGDSMSxx PARMLIB メンバーを変更する以外に、RlsAboveTheBarMaxPoolSize 値と RlsFixedPoolSize 値を SETSMS コマンドを使って変更することもできます。

注: SETSMS と SET SMS=xx を使って変更した内容はすぐには有効になりません。あるシステム上でオープン済みのデータ・セットがある場合、RlsAboveTheBarMaxPoolSize と RlsFixedPoolSize に対する SETSMS と SET

SMS による変更は、SMSVSAM アドレス・スペースがリサイクルされるまではそのシステム上で有効になりません。そのデータ・セットがそのシステム上でオープン状態でない場合、この 2 つのキーワードに対する SETSMS と SET

SMS による変更内容が有効になるのは、そのシステム上で初めてそのデータ・セットがオープンされる時点であり、SMSVSAM のリサイクルは不要です。

IGDSMSxx パラメーターの指定方法の詳細は、「z/OS MVS 初期設定およびチューニング 解説書」を参照してください。 SMF レコードのチェック方法の詳細は「z/OS MVS システム管理機能 (SMF)」を参照してください。SET SMS とSETSMS コマンドの詳細は、「z/OS MVS システム・コマンド」を参照してください。

リカバリー可能データ・セットの読み取り共用DFSMStvs の外側の非 CICS アプリケーションは、入力用にのみ RLS モードでリカバリー可能データ・セットをオープンすることができます。 VSAM RLS は、非CICS アプリケーション用に保全性読み取り (要求される場合) を提供するために必要なレコード・レベル・ロックを提供します。このサポートにより、複数の CICS

アプリケーションが、読み取り/書き込み RLS アクセス用にオープンされるデータ・セットを持つようになります。 CICS は、リカバリー可能データ・セットへの書き込みについて必要なトランザクション・リカバリーを提供します。 並行して、DFSMStvs の外側の非 CICS アプリケーションが、読み取り RLS アクセス用にオ

VSAM レコード・レベル共用の使用

262 z/OS V1R10 DFSMS データ・セットの使用法

Page 287: DFSMS データ・セットの使用法

ープンされるデータ・セットを持つことができます。 VSAM は必要なロックを提供します。非 CICS アプリケーションはデータ・セットを書き込むことができないので、トランザクション・リカバリーは必要ありません。

KSDS CI および CA 分割にまたがる読み取り共用保全性非 RLS アクセスを持つ VSAM は、クロス領域共用オプション 2、3、および 4 を使用したデータ・セットへの非 RLS アクセスについて各分割にまたがる読み取り保全性を保証しません。読み取り保全性が必要な場合は、アプリケーションがそれを保証しなければなりません。 KSDS CI および CA 分割がレコードを 1 つの CI

から別の CI に移動する場合、書き込みプロセスが読取装置用のデータおよび索引バッファーを無効にできる方法はありません。これによって、読取装置は移動された一部のレコードを見ないことになる場合があります。

VSAM RLS は、各分割にまたがる読み取り保全性を保証することができます。これは、CF のクロス無効化機能を使用して、ライターのバッファー・プール以外のバッファー・プールにあるデータおよび索引 CI のコピーを無効にします。これによって、すべての RLS 読取装置、DFSMStvs、CICS 、および DFSMStvs の外側の非CICS は、並行 CI または CA 分割によって移動されたレコードを見ることができるようになります。 各 GET 要求で、VSAM RLS は、バッファーの妥当性を検査し、無効である場合は、バッファーが CF または DASD からリフレッシュされます。

リカバリー不能データ・セットの読み取りおよび書き込み共用リカバリー不能データ・セットは、トランザクション・リカバリーの一部とはなりません。コミットおよびロールバック・ロギングは、これらのデータ・セットに適用されません。トランザクション・リカバリーは必要とされないので、 VSAM RLS

は、DFSMStvs、 CICS、および非 CICS アプリケーションによるリカバリー不能データ・セットの並行した読み取りおよび書き込み共用を許可します。 どのアプリケーションも RLS モードでの出力用のデータ・セットをオープンすることができます。

VSAM RLS は、リカバリー不能データ・セットの CICS および 非 CICS の読み取り/書き込み共用アプリケーションにまたがるレコード・ロックおよびバッファー一貫性を提供します。 ただし、新規または変更されたレコード上のレコード・ロックは、変更を含むバッファーが CF キャッシュおよび DASD に書き込まれるとすぐに解放されます。これは、DFSMStvs または CICS トランザクションが VSAM

RLS リカバリー可能データ・セットを変更し、追加および変更されたレコード上の対応するロックがトランザクションの終わりまで保持されたままでいる場合とは異なります。

順次およびスキップ順次処理では、VSAM RLS は、処理が別の CI に移動するか、ENDREQ がアプリケーションによって発行されるまで、変更された制御インターバル (CI) を読み込みません。アプリケーションまたは VSAM RLS サーバーが異常終了した場合は、バッファーに入れられたこれらの変更は失われます。データ保全性の確保を支援するために、これらの順次レコードのロックは、レコードが書き込まれるまで解放されません。

VSAM レコード・レベル共用の使用

第 14 章 VSAM レコード・レベル共用の使用 263

Page 288: DFSMS データ・セットの使用法

VSAM RLS は、DFSMStvs、CICS 、および非 CICS アプリケーションにまたがるリカバリー不能データ・セットの読み取りおよび書き込み共用を許可するのに対し、ほとんどのアプリケーションはこの共用を許容するようには設計されていません。 トランザクション・リカバリーがない場合は、データとアプリケーションを非常に注意深く設計する必要があります。

VSAM データ・セットへの非 RLS アクセスの使用RLS アクセスは、VSAM データ・セット内のデータのフォーマットを変更しません。このデータ・セットは、非 RLS アクセスと互換性があります。データ・セットが、2 のクロス領域共用オプションを使用して定義されている場合、入力用にオープンしている非 RLS は、データ・セットが RLS 処理用にオープンしている間は許可されますが、出力用にオープンしている非 RLS は失敗します。データ・セットが非 RLS 出力用にすでにオープンしている場合、RLS 用のオープンは失敗します。したがって、随時、データ・セットは、非 RLS 書き込みアクセス用にオープンしているか、RLS アクセス用にオープンしていることができます。

CICS および VSAM RLS は、データ・セットを CICS RLS 使用から非 RLS 使用に切り替えるプロセスを支援する静止機能を提供します。

RLS アクセス・ルール下表には、RLS アクセス・ルールが記載されており、RLS 指定または無指定でデータ・セットをオープンすることに対して発生し得るシナリオを示しています。 表 14

では、OPEN1 は最初に正常完了したオープンを表し、OPEN2 は、RLS 指定または無指定で同じデータ・セットに対する後続オープン用のオプションを表します。

表 14. リカバリー可能またはリカバリー不能なデータ・セットに対する RLS オープン・ルール

OPEN1 実施済み ->

OPEN2 実施必要:

RLS SHR(2 x) 指定で 非RLS 入力

SHR(2 x) 無指定で非RLS 出力、または入力

RLS 以下の注を参照 OK NO

SHR(2 x) 指定で 非RLS 入力

OK OK SHAREOPTIONS ルール

SHR(2 x) 無指定で非RLS 出力、または入力

NO SHAREOPTIONS ルール

SHAREOPTIONS ルール

注: リカバリー不能データ・セットの場合、トランザクション対応 (CICS or

DFSMStvs) の RLS または非トランザクション対応 (非 CICS および非DFSMStvs) RLS が許容されます。 リカバリー可能なデータ・セットの場合は以下のとおりです。

v トランザクション対応の RLS が共用可能なのは、すべてのトランザクション対応の RLS アクセス、および入力のみの非トランザクション対応の RLS アクセス (非トランザクション対応の RLS はリカバリー可能データ・セットを更新できません) です。

v 非トランザクション対応の RLS が共用可能なのは、すべての非トランザクション対応の RLS です (リカバリー可能データ・セットを更新しない限り)。

VSAM レコード・レベル共用の使用

264 z/OS V1R10 DFSMS データ・セットの使用法

Page 289: DFSMS データ・セットの使用法

例えば、OPEN1 が RLS でアクセスするデータ・セットをすでに正常にオープン済みの場合、非 RLS 出力としてそのデータ・セットをオープンしようとする後続OPEN2 は失敗することになります。これは、そのデータ・セットがリカバリー可能であるかどうかとは無関係です。同じ OPEN1 を使用した場合 (そのデータ・セットがリカバリー可能と仮定)、OPEN2 は非トランザクション対応 (すなわち、非コミット・プロトコル) の RLS 入力のみアクセスとしてそのデータ・セットをオープンできます。

RLS アクセスと非 RLS アクセスの比較このセクションでは、RLS アクセスと非 RLS アクセス間の相違点について説明します。

共用オプション非 RLS アクセスでは、VSAM は、共用オプション設定値を使用して、許可される共用のタイプを決定します。クロス領域共用オプションを 2 に設定する場合は、データ・セットが RLS アクセス用にすでにオープンしている間は、入力用の非 RLS

オープンが許可されます。 VSAM は、RLS ユーザーには完全な読み取りおよび書き込み保全性を提供しますが、非 RLS ユーザーには読み取り保全性を提供しません。出力用の非 RLS オープンは、RLS 用にすでにオープンされているときは、許可されません。

VSAM RLS は、複数ユーザー用に完全な読み取りおよび書き込み共用を提供しますが、共用のレベルを決定するのに、ユーザー共用オプション設定値を使用しません。 RLS オープンが要求され、データ・セットが非 RLS 入力用にすでにオープンしているときは、VSAM はクロス領域設定値を検査しません。それが 2 である場合は、RLS オープンが許可されます。他の共用オプションについて、またはデータ・セットが非 RLS 出力にオープンされている場合、オープンは失敗します。

ロック非 RLS は、VSAM 制御インターバルのローカル・ロックを提供します (単一バッファー・プールの範囲内で)。ロック競合から、VSAM レコード管理要求への「排他制御競合」エラー応答が発生することがあります。

VSAM RLS は、DFSMS ロック・マネージャーを使用して、システム管理二重再構築プロセスを提供します。ロック細分度は、VSAM レコード・レベルにあります。VSAM レコード上で競合が発生するとき、競合を検出した要求は、競合が除去されるのを待ちます。 DFSMS ロック・マネージャーは、デッドロック検出を提供します。ロック要求がデッドロックにあるときは、VSAM が要求をリジェクトします。これにより、VSAM レコード管理要求はデッドロック・エラー応答で完了することになります。

ロック構造についてのユーザー管理再構築を要求するとき、妥当性検査は、再ビルド・プロセスが完了するための十分なスペースがあるかどうか決定します。十分なスペースがない場合、システムは要求をリジェクトし、通知メッセージを表示します。

ロック構造に対する変更操作を要求するとき、妥当性検査は、変更プロセスを完了するための十分なスペースがあるかどうか判別します。十分なスペースがない場合、システムはサイズの推奨を含む警告メッセージを表示します。

VSAM レコード・レベル共用の使用

第 14 章 VSAM レコード・レベル共用の使用 265

Page 290: DFSMS データ・セットの使用法

VSAM RLS は、RPL、PARMLIB、または JCL で指定できるタイムアウト値をサポートします。CICS は、このパラメーターを使用して、トランザクションが、ロックが使用可能になるのをいつまでも待つことがないようにします。 VSAM RLS は、DFSMS ロック・マネージャーのタイムアウト機能を使用します。

ESDS と VSAM RLS を併用する場合は、ESDS レコードの処理をシリアライズするために、データ・セットの最後にレコードが追加されるたびに、シスプレックス全体にわたるデータ・セット・レベルの排他的な『add to end』ロックが保持されます。既存のレコードの読み取りと更新では、このロックは獲得されません。非 RLS

VSAM は、シスプレックスにまたがる ESDS レコード追加をシリアライズしないので、このような逐次化オーバーヘッドを必要としません。

推奨: ESDS と RLS を併用する際の設計は慎重に行ってください。そうでないと、RLS を使用した場合と使用しない場合で ESDS へのアクセスにパフォーマンス上の相違が生じる可能性があります。

ロックの保存: VSAM RLS は、共用および排他レコード・ロックを使用して、共用データへのアクセスを制御します。排他ロックは、単一ユーザーが特定のレコードを更新していることを保証するために使用されます。排他ロックは、別のユーザーによるレコードに対する保全性読み取り要求 (CICS トランザクションまたは 非CICS アプリケーション) が、更新が終了し、ロックが解放されるまで待つようにさせます。

障害条件は、リカバリー可能データ・セットへの更新の完了を遅らせることがあります。これは、 CICS トランザクションが未確定状況に入るときに発生します。 これは、CICS がトランザクションをロールバックもコミットもできないことを意味します。 したがって、トランザクションによって変更されるリカバリー可能レコードは、ロックされたままにしなければなりません。 CICS AOR の失敗により、リカバリー可能データ・セットへの現行のトランザクション更新も完了しないことになります。 それらは、AOR がリスタートされるまで完了できません。

トランザクションが未確定状態、シスプレックス障害、MVS 障害、SMSVSAM アドレス・スペースのインスタンスの障害に入るか、CICS AOR が終了するとき、トランザクションによって保持されるリカバリー可能データ・セットのレコード上の排他ロックは、保持されたままでなければなりません。 ただし、これらのロックを待機している他のユーザーは、引き続き待機してはなりません。停止は、ユーザーが待機しようとするより時間が長いことがあります。これらの状態が発生するとき、VSAM RLS は、これらの排他レコード・ロックを保存ロックに変換します。

排他と保存ロックの両方は、他のユーザーには使用可能でありません。別のユーザーが排他ロックとのロック競合を検出したとき、ユーザーのロック要求は待ちます。別のユーザーが保存ロックとのロック競合を検出するとき、ロック要求は、「保存ロック」エラー応答で即時にリジェクトされます。これによって、ロック要求を生成した VSAM レコード管理要求が「保存ロック」エラー応答で失敗することになります。

トランザクションまたはリカバリー単位の途中でデータ・セットをクローズし、それがこのシステム上のこのデータ・セットに関する最終クローズである場合は、RLS はそのロックをアクティブから保存に変換します。

VSAM レコード・レベル共用の使用

266 z/OS V1R10 DFSMS データ・セットの使用法

Page 291: DFSMS データ・セットの使用法

保存ロックが存在する間の非 RLS アクセスのサポート: 保存ロックは、障害が発生するときに作成されます。ロックは、対応するリカバリーが完了するまで残っている必要があります。保存ロックは、RLS アクセスの場合のみ意味を持ちます。RLS アクセス要求によって発行されるロック要求は、保存ロックを検出することがあります。非 RLS アクセスは、レコード・ロックを実行せず、したがって保存ロックを検出することはありません。

リカバリー可能データ・セットの保全性を保証するために、VSAM は、そのデータ・セットについて保存ロックが存在する間は、非 RLS によるデータ・セットへの更新アクセスを許可しません。ご使用のシステムが、データ・セットへの非 RLS

による更新アクセスを必要とするいくつかの非 CICS アプリケーションを実行しなければならない状態が生じる可能性があります。 VSAM RLS は、保存ロックが存在する間に、リカバリー可能データ・セットへの非 RLS による更新アクセスを使用可能にするためにデータ・セットの状況の設定に使用できる IDCAMS コマンド(SHCDS PERMITNONRLSUPDATE) を提供します。このコマンドは、保存ロックを解放しません。この機能が使用される場合、VSAM は、その使用を思い出し、保存ロックを保持する CICS に、それらが後で RLS を使用してデータ・セットをオープンする時期を知らせます。

SHCDS PERMITNONRLSUPDATE コマンドを使用する場合は、CICS と DFSMStvs

のいずれにも、保留バックアウトを用いて処理を進めることが安全であるか否かについての認識がありません。 このため、ユーザーは DFSMStvs および CICS が呼び出す出口を提供し、さらに各出口はバックアウトを用いて処理を進めるべきか否かをリソース・マネージャーに伝える必要があります。詳しくは、 282ページの『バッチ指定変更用の IGW8PNRU ルーチン』の中のバッチ指定変更出口の説明を参照してください。

RLS によって使用されない VSAM オプションRLS は、次のオプションおよび機能をサポートしていません。

v 線形データ・セット

v KSDS へのアドレス指定アクセス

v 任意の VSAM データ・セット・タイプでの制御インターバル (CNV または ICI)

v ユーザー・バッファー方式 (UBF)

v IMBED オプションを使用して定義されたクラスター

v キー範囲データ・セット

v 一時データ・セット

v GETIX および PUTIX 要求

v MVS チェックポイント/リスタート機能

v ACBSDS (システム・データ・セット) 指定

v Hiperbatch

v カタログ、VVDS、JRNAD 出口、および JCL での任意の JCL AMP= パラメーター

v z/OS UNIX システム・サービスに保管されているデータ

v ストライピング VSAM データ・セット

さらに、VSAM RLS は、次の制約事項を持ちます。

VSAM レコード・レベル共用の使用

第 14 章 VSAM レコード・レベル共用の使用 267

Page 292: DFSMS データ・セットの使用法

v VSAM への ISAM インターフェースを使用して VSAM データ・セットにアクセスする場合は、 RLS アクセスを指定することはできません。

v RLS アクセスでは、VSAM クラスターの個々のコンポーネントをオープンすることはできません。

v RLS アクセスについて代替索引の直接オープンを指定することはできませんが、代替索引パスの RLS オープンを指定することはできます。

v RLS オープンは、データ・セットの先頭に暗黙的に位置付けられることはありません。順次またはスキップ順次処理では、POINT または GET DIR, NSP 要求を指定して、データ・セット内の位置を設定します。

v RLS は、呼び出し元が次のモードいずれか (クロスメモリー・モード、SRB モード、または FRR の下) で実行している間に発行される要求をサポートしません。モード要件定義の完全リストについては、『VSAM RLS 実行モードの要求』を参照してください。

v RLS は UNIX ファイルをサポートしません。

VSAM RLS 実行モードの要求プログラムが VSAM RLS 要求 (OPEN、CLOSE、またはレコード管理要求) を発行するとき、プログラムは、リストされた制約事項のもとで、次の実行モードで実行されていなければなりません。

v タスク・モード (SRB モードでない)

v アドレス・スペース制御 = 1 次

v ホーム・アドレス・スペース = 1 次アドレス・スペース = 2 次アドレス・スペース

v ESTAE 以外のどの機能リカバリー・ルーチン (FRR) も無効となる可能性がある。

VSAM RLS レコード管理要求タスクは、ACB をオープンしたのと同じタスクでなければならないか、ACB をオープンしたタスクがタスク階層になければなりません。つまり、レコード管理タスクは、ACB をオープンしたタスクによって、またはACB をオープンしたタスクによって付加されたタスクによって付加されました。

VSAM RLS 読み取り保全性オプションの使用VSAM RLS は、3 つのレベルの読み取り保全性を次のように提供します。

1. NRI ― 読み取り保全性なし

これは、VSAM RLS に GET または POINT 要求によってアクセスされたレコード上でレコード・ロックを取得しないよう指示します。これは、レコード・ロックのオーバーヘッドを回避します。これは、ダーティー読み取りとよばれることがあります。これは、読取装置が別のトランザクションによって行われたコミットされていない変更を見る場合があるからです。

このオプションが指定されている場合であっても、VSAM RLS は、なおバッファー妥当性検査を行い、バッファーが無効であるときはバッファー・リフレッシュを行います。したがって、KSDS の順次読取装置は、制御インターバル (CI)

および制御域 (CA) 分割によって新規制御インターバルに移動されたレコードを見逃すことはありません。

VSAM レコード・レベル共用の使用

268 z/OS V1R10 DFSMS データ・セットの使用法

Page 293: DFSMS データ・セットの使用法

NRI が指定されていても、VSAM RLS がレコード上で共用ロックを一時的に取得する場合があります。この状態は、レコードにアクセスしようとしている間に、読み取りが VSAM データ・セット内で不整合を検出するときに生じます。これの例は、代替索引を通じて並行代替索引アップグレードが実行されているレコードへのパス・アクセスです。パス・アクセスは、代替索引と基本クラスター間の不整合を調べます。これは、通常、エラー応答戻りコード 8 および理由コード 144 を生じさせます。 NRI 要求にこの応答を与える前に、VSAM RLS

は、代替索引によってポイントされた基本クラスター・レコード上で共用ロックを取得します。これにより、レコードが変更されていた場合は、変更および対応する代替索引アップグレードが完了することが保証されます。レコード・ロックが解放されます。 VSAM はアクセスを再試行します。再試行は、レコードを正しく検索する必要があります。この内部レコード・ロックは、デッドロックまたはタイムアウトのようなロック・エラーを検出することがあります。アプリケーションは、GET または POINT NRI 要求で戻されることがあるロック・エラーの戻りコードを受け入れる準備ができていなければなりません。通常は、そのようなエラーは発生しません。

2. CR ― 一貫読み取り

これは、VSAM RLS に、GET または POINT 要求によってアクセスされたレコード上で SHARE ロックを取得するように指示します。別のトランザクションによって加えられた未確約変更を読取装置が表示しないことを確実にする。その代わりに、GET/POINT は変更がコミットされるかバックアウトされ、レコード上の EXCLUSIVE ロックが解放されるのを待ちます。

3. CRE ― 明示一貫読み取り

これは、CR と同じですが、VSAM RLS は、トランザクションの終わりまでレコード上に SHARE ロックを保持します。このオプションは、 CICS またはDFSMStvs トランザクションにのみ使用可能です。 VSAM は、非 CICS または非 DFSMStvs 用途ではトランザクションの終わりを認識しません。

多くの場合、この機能は反復可能読み取りと呼ばれる。

CRE オプションを指定した VSAM RLS GET 要求によって取得されたレコード・ロックは、他の並行して実行されているトランザクションによってレコードが更新または消去されるのを禁止します。ただし、CRE 要求は、他のレコードが他のトランザクションによって挿入されるのを禁止しません。この機能を使用しているときは、次の事例を考慮する必要があります。

a. CRE オプションを指定した GET DIR (直接) または SKP (スキップ順次) 要求が「レコードが見付からない」応答を受け取る場合、VSAM RLS は、存在しないレコード上のロックを保存しません。レコードは、別のトランザクションによってなら挿入することができます。

b. CRE オプションを指定した一連の GET SEQ (順次) 要求により、戻された各レコード上でロックが保持されることになります。ただし、GET CRE 順次処理によってロックされたレコードの間に新しいレコードを挿入することを禁止するような追加のロックは保持されません。アプリケーションが以前に実行された一連の GET SEQ,CRE 要求を再実行するような場合、それは、新規に挿入されたレコードを調べることになります。トランザクション・リ

VSAM レコード・レベル共用の使用

第 14 章 VSAM レコード・レベル共用の使用 269

Page 294: DFSMS データ・セットの使用法

カバリー・コミュニティー内では、これらのレコードは「幻」のレコードと呼ばれます。 VSAM RLS CRE 機能は幻のレコードを禁止しません。

VSAM RLS と ESDS の併用VSAM RLS と ESDS を併用すると、非 RLS VSAM の場合よりもスケーラビリティーと可用性が大幅に高くなります。ただし、非 RLS VSAM の場合と比較して、VSAM RLS と ESDS の併用は、特定の稼働環境で性能低下につながる場合があります。

シスプレックスにわたって ESDS レコードの追加をシリアライズするために、VSAM RLS は、データ・セットの最後に追加される各レコードについて、排他的に『add-to-end』ロックを取得します。アプリケーションが同じ ESDS に対して頻繁にレコードを追加する場合、その要求は逐次的に処理されるため、性能低下が起こる場合があります。

これに対して、非 RLS VSAM には別の機能セットがあり、ESDS レコードの追加をシスプレックスにわたってシリアライズする必要がありません。ESDS がスレッド間で共有されている場合は、 ESDS と RLS の併用を慎重に設計し、ESDS と非RLS VSAM の併用の場合と比較して、起こりうるあらゆる性能的な影響を軽減するようにしてください。

注: VSAM RLS の場合、システムは、データ・セットに対する ESDS レコードの追加についてのみ、グローバルなデータ・セット・レベルのロックを取得し、既存の ESDS レコードの読み取りや更新についてはロックを取得しません。したがって、データ・セットのその他のレコードに対する GET 要求と PUT 更新では、 『add-to-end』ロックは取得されません。このような更新は、別のスレッドが『add-to-end』ロックを取得している間に処理可能です。

RLS の『add-to-end』ロックが保持される期間は、データ・セットがリカバリー可能であるかどうかと、レコードを追加した PUT 要求のタイプによって異なります。データ・セットがリカバリー可能である場合、RLS は暗黙的にロックを解放しません。ロックは、ENDREQ、IDAEADD、または IDALKREL によって明示的に解放されます。リカバリー不能なデータ・セットの場合、 PUT SEQ コマンドでは 2、3

のバッファーの書き込み後にロックが解放されるのに対して、 PUT DIR コマンドでは要求の最後にロックが解放されます。

読み取り保全性の指定RLS パラメーターの以下のいずれかのサブパラメーターを使用して、VSAM データ・セットに関する読み取り保全性オプションを指定することができます。

NRI読み取り保全性なし (NRI) を指定します。アプリケーションはすべてのレコードを読み取ることができます。

CR一貫読み取り (CR) を指定します。このサブパラメーターは、アプリケーションが読み取る各レコード上の SHARE ロックを VSAM が取得することを要求するためのものです。

VSAM レコード・レベル共用の使用

270 z/OS V1R10 DFSMS データ・セットの使用法

Page 295: DFSMS データ・セットの使用法

CRE明示一貫読み取り (CRE) を指定します。このサブパラメーターは、別のリカバリー単位によるレコードの更新または削除を使用したレコード・アクセスの逐次化を要求するためのものです。

CRE により、DFSMStvs は入力または出力用にオープンされる VSAM データ・セットにアクセスできます。 CR または NRI により、DFSMStvs は出力用にのみVSAM リカバリー可能データ・セットにアクセスできます。

関連資料:

v DFSMStvs アクセスに関するこれらの読み取り保全性オプションの使用法については、「z/OS DFSMStvs Planning and Operating Guide」を参照してください。

v 上記のサブパラメーターの詳細については、「z/OS MVS JCL 解説書」の中のRLS パラメーターの説明を参照してください。

ロック要求のタイムアウト値の指定JCL EXEC ステートメントの RLSTMOUT パラメーターを使用して、ロック要求のタイムアウト値を指定することができます。 VSAM RLS または DFSMStvs 要求は、要求がタイムアウトになり、デッドロック状態になったとみなされるまで、必要なロックに関して指定された秒数待ちます。

RLSTMOUT パラメーターについては、「z/OS MVS JCL 解説書」の中の EXEC ステートメントの説明を参照してください。

関連資料:

v デッドロックの回避およびタイムアウト値の指定に関する追加情報については、「z/OS DFSMStvs Planning and Operating Guide」を参照してください。

v z/OS MVS 初期設定およびチューニング ガイド.

索引トラップVSAM RLS の場合、索引トラップにより各索引レコードを書き込む前にそのレコードをチェックします。このトラップにより、以下の索引破壊を検知します。

v 最も高い位置に割り振られたレコードよりも、最も高い位置で使用されているレコードの方が高い場所にある

v 重複または無効な索引ポインター

v 索引レコードの順序間違い

v 無効なセクション・エントリー

v 無効なキー長

システム・プログラマーに対する VSAM RLS 索引トラップの詳細は、「z/OS

DFSMSdfp Diagnosis」を参照してください。

VSAM レコード・レベル共用の使用

第 14 章 VSAM レコード・レベル共用の使用 271

Page 296: DFSMS データ・セットの使用法

272 z/OS V1R10 DFSMS データ・セットの使用法

Page 297: DFSMS データ・セットの使用法

第 15 章 構造エラーについての VSAM キー順データ・セット・クラスターの検査

この章では以下のトピックを扱います。

トピック 該当ページ

EXAMINE コマンド 273

EXAMINE の実行方法 274

EXAMINE 実行からの出力の例 276

この章では、構造エラーについてキー順データ・セット (KSDS) クラスターを分析するために保守援助プログラム EXAMINE がどのように使用されるかを説明しています。

EXAMINE コマンドEXAMINE は、ユーザーがキー順データ・セット・クラスターの構造整合性に関する情報を分析および収集できるようにするアクセス方式サービス・プログラムです。この保守援助プログラムは、INDEXTEST および DATATEST の 2 つのテストから構成されます。

INDEXTEST は、索引制御インターバル内に含まれる垂直および水平ポインターをクロス検査することによって、および索引情報の分析を実行することによって、キー順データ・セット・クラスターの索引コンポーネントを検査します。これは、EXAMINE のデフォルト・テストです。

DATATEST は、すべてのデータ制御インターバルを、フリー・スペース・インターバルを含めて、順次読み取ることにより、キー順データ・セット・クラスターのデータ・コンポーネントを評価します。次に、レコードと制御インターバルの保全性、フリー・スペース状態、スパン・レコード更新容量、および制御インターバル内に含まれる内部 VSAM ポインターの保全性を保証するためにテストが実行されます。

EXAMINE コマンド構文の説明については、「z/OS DFSMS Access Method Services

for Catalogs」を参照してください。

データ・セットのタイプEXAMINE は、次のタイプのデータ・セットをテストできます。v キー順データ・セットv カタログ

EXAMINE のユーザーEXAMINE エンド・ユーザーは、2 つのカテゴリーに分かれます。

© Copyright IBM Corp. 1987, 2008 273

Page 298: DFSMS データ・セットの使用法

1. アプリケーション・プログラマー/データ・セット所有者。これらのユーザーは、データ・セット内の構造上の不整合について知ることを希望し、適切な要約メッセージによって IBM がサポートする対応するリカバリー方式に誘導されます。ユーザーの主な焦点は、データ・セットの状態です。したがって、ユーザーはEXAMINE の ERRORLIMIT(0) パラメーターを使用して、詳細なエラー・メッセージの印刷を抑止する必要があります。

2. システム・プログラマー/サポート要員。システム・プログラマーまたはサポート要員は、特定のデータ・セットでの問題を文書化するか修正するために詳細なエラー・メッセージからの情報を必要とします。

ユーザーは、それを検査するには、カタログへのマスター・レベル・アクセスまたはデータ・セットへの制御レベル・アクセスを持つ必要があります。マスター・カタログへのマスター・レベル・アクセスでも、ユーザー・カタログを検査するのに十分です。

EXAMINE の実行方法EXAMINE の実行中、データ・セットを共用するために次の考慮事項が適用されます。

v EXAMINE が実行されている間、ユーザーがデータ・セットに対してオープンになっていてはなりません。

v EXAMINE は、エラーを検出すると、メッセージ「IDC01723I ERRORS MAY BE

DUE TO CONCURRENT ACCESS」を発行します。データ・セットは、テスト中、出力用にオープンであった可能性があります。このメッセージは、報告されたエラーが並行アクセスのためであることを必ずしも示していません。

v カタログに対して EXAMINE を実行するとき、並行アクセスが発生してもメッセージが出されないことがあります。カタログへのシステム・アクセスは、停止するのが困難である場合があるので、カタログへの更新を生じさせるようなジョブは実行してはなりません。

データ・セット共用についての考慮事項について詳しくは、 221ページの『第 12

章 VSAM データ・セットの共用』を参照してください。

INDEXTEST、DATATEST、または両方のテストを実行する決定INDEXTEST は、KSDS クラスターの索引コンポーネント全体を読み取ります。

DATATEST は、索引コンポーネントからのシーケンス・セットおよび KSDS クラスターのデータ・コンポーネント全体を読み取ります。したがって、これはINDEXTEST よりかなり多くの時間とより多くのシステムを必要とします。

EXAMINE を使用してデータ・コンポーネント内のエラーを文書化している場合は、両方のテストを実行します。 EXAMINE を使用して索引コンポーネント内のエラーを文書化している場合は、通常は、DATATEST を実行する必要はありません。

EXAMINE を使用してデータ・セットの保全性を確認する場合、1 つまたは両方のテストを実行する決定は、使用可能な時間およびリソースによって決まります。

構造エラーについての VSAM キー順データ・セット・クラスターの検査

274 z/OS V1R10 DFSMS データ・セットの使用法

Page 299: DFSMS データ・セットの使用法

重大な INDEXTEST エラーでの DATATEST のスキップ両方のテスト (INDEXTEST および DATATEST) を実行するにした場合は、INDEXTEST を最初に実行します。 INDEXTEST が重大な構造上のエラーを検出する場合、DATATEST は、それを要求した場合であっても、実行されません。これによって INDEXTEST からの出力を検討し、DATATEST を実行する必要があるかどうか決定することができます。

DATATEST を無条件で実行したい場合は、INDEXTEST を迂回するためにEXAMINE コマンドで NOINDEXTEST パラメーターを指定する必要があります。

ユーザー・カタログの検査検査されているユーザー・カタログ、またはマスター・カタログに対してマスター・レベル・アクセスを持つ必要があります。マスター・カタログに対してマスター・レベル・アクセスを持つ場合は、オープン中はユーザー・カタログ内の自己記述レコードは読み取られません。検査されているユーザー・カタログに対してマスター・レベル・アクセスのみを持つ場合は、オープン中にカタログの自己記述レコードが読み取られます。

マスター・カタログが RACF または同等のプロダクトによって保護されており、変更権限を持たない場合は、上述の検査が行われるときに許可失敗を示すメッセージが出されることがあります。 これは正常であり、検査されているカタログに対してマスター・レベル・アクセスを持っている場合は、検査を継続することができます。

推奨: カタログを分析するとき、EXAMINE コマンドを使用する前に VERIFY コマンドを使用してください。

メッセージ階層の理解エラーまたは不整合を記述するメッセージは、EXAMINE 処理中その条件が検出されたときに生成されます。エラー条件が検出されると、多くのメッセージが生成されることがあります。 EXAMINE エラー・メッセージには、次の 5 つの特殊タイプがあります。

1. 状況および統計メッセージ。このタイプのメッセージは、各テストの開始や完了などの EXAMINE 操作の状況を知らせます。これは、データ・レコードの数、データ制御インターバル (CI) 内のフリー・スペースのパーセンテージ、および削除された CI の数などの、一般の統計データを提供します。 4 つの状況メッセージは、IDC01700I、IDC01701I、IDC01709I、および IDC01724I です。 5 つの統計メッセージは、IDC01708I、IDC01710I、IDC01711I、IDC01712I、およびIDC01722I です。

2. 支援 (通知) メッセージ。EXAMINE によって出される支援メッセージ (すべての残りの IDC0 タイプ・メッセージ) は、個別データ・セット構造エラーを明らかにし、エラーに関係した追加の情報を提供します。

3. 個別データ・セット構造エラー・メッセージ。エラーの識別は、常に個別データ・セット構造エラー (IDC1 タイプ) メッセージによって報告されます。これの直後に 1 つ以上の支援メッセージが続くことがあります。

4. 要約エラー・メッセージ。INDEXTEST または DATATEST の完了時に 1 つ以上の要約エラー (IDC2-type) メッセージが生成され、検査中に表示されるすべて

構造エラーについての VSAM キー順データ・セット・クラスターの検査

第 15 章 構造エラーについての VSAM キー順データ・セット・クラスターの検査 275

Page 300: DFSMS データ・セットの使用法

の個別データ・セット構造エラー (IDC1 タイプ) メッセージをカテゴリー化します。要約エラー・メッセージは、検出されたエラーの最終的な分析を表し、ユーザーは、ドキュメンテーションによって規定されたとおりのリカバリー・アクションの進行に従う必要があります。

5. 機能未実行メッセージ。機能未実行メッセージ (IDC3 タイプ・メッセージのすべて) は、要求した機能を EXAMINE が正常に実行できないことを示します。それぞれの場合に、テスト操作は、機能が完了する前に終了します。

機能未実行メッセージは、さまざまな理由で出されます。そのいくつかを下に挙げます。

v 無効な要求 (入力順データ・セット (ESDS) を検査するための試行など)

v データ・セット内の物理入出力エラー

v システム条件 (不十分なストレージなど)

v システム・エラー (OBTAIN DSCB が失敗したなど)

v INDEXTEST 中にエラーが検出された ( 275ページの『重大な INDEXTEST

エラーでの DATATEST のスキップ』を参照してください)

メッセージ印刷出力の制御EXAMINE コマンド内の ERRORLIMIT パラメーターを使用して、EXAMINE 実行中の支援および個別データ・セット構造エラー・メッセージを抑止します。このパラメーターは、印刷するこれらのエラー・メッセージの数を示しています。EXAMINE がこのエラー数に達すると、エラー・メッセージの発行を停止しますが、データ・セットのスキャンは継続します。 ERRORLIMIT (0) は、これらのメッセージがなにも印刷されないことを意味します。 ERRORLIMIT パラメーターを指定しないときは (デフォルト条件)、すべての支援および個別データ・セット構造エラー・メッセージが印刷されます。状況および統計メッセージ、要約メッセージ、および機能未実行メッセージは、ERRORLIMIT の制御の下になく、ERRORLIMIT

設定値とは無関係に印刷されます。 ERRORLIMIT パラメーターは、INDEXTEST

および DATATEST によって個別に使用されます。このパラメーターの使用について詳しくは、「z/OS DFSMS Access Method Services for Catalogs」を参照してください。

EXAMINE 実行からの出力の例このセクションでは、EXAMINE 実行からの出力の例を示します。

エラー・フリー・データ・セットの INDEXTEST およびDATATEST テスト

この実行では、INDEXTEST と DATATEST は両方ともエラー・フリー・データ・セットに対して正常に実行されます。最初の 4 つのメッセージは、エラーが検出されずに実行された 2 つの EXAMINE テストの状況を知らせます。次の 5 つのメッセージは、DATATEST によって明らかにされるようにコンポーネント統計を要約します。

IDCAMS SYSTEM SERVICES

EXAMINE NAME(EXAMINE.KD05) -INDEXTEST -

構造エラーについての VSAM キー順データ・セット・クラスターの検査

276 z/OS V1R10 DFSMS データ・セットの使用法

Page 301: DFSMS データ・セットの使用法

DATATEST

IDC01700I INDEXTEST BEGINSIDC01724I INDEXTEST COMPLETES NO ERRORS DETECTEDIDC01701I DATATEST BEGINSIDC01709I DATATEST COMPLETES NO ERRORS DETECTED

IDC01708I 45 CONTROL INTERVALS ENCOUNTEREDIDC01710I DATA COMPONENT CONTAINS 1000 RECORDSIDC01711I DATA COMPONENT CONTAINS 0 DELETED CONTROL INTERVALSIDC01712I MAXIMUM LENGTH DATA RECORD CONTAINS 255 BYTESIDC01722I 65 PERCENT FREE SPACE

IDC0001I FUNCTION COMPLETED, HIGHEST CONDITION CODE WAS 0

構造エラーを持つデータ・セットの INDEXTEST およびDATATEST テスト

ユーザーは INDEXTEST と DATATEST の両方のテストを実行しようとしましたが、INDEXTEST はシーケンス・セット内にエラーを検出しました。メッセージから、次のことがわかります。

v KSDS クラスターの索引コンポーネントで構造上の問題が検出されました。

v 現行の索引レベルは 1 です (これはシーケンス・セットです)。

v エラーが検出された索引制御インターバル (10 進数 23552 の相対バイト・アドレスの先頭) が表示されます。

v エラーは、制御インターバルへの相対位置 16 進数 10 に見つかります。

この重大な INDEXTEST エラーのため、DATATEST はこの特定の事例では実行されませんでした。

IDCAMS SYSTEM SERVICES

EXAMINE NAME(EXAMINE.KD99) INDEXTEST DATATESTIDC01700I INDEXTEST BEGINSIDC11701I STRUCTURAL PROBLEM FOUND IN INDEXIDC01707I CURRENT INDEX LEVEL IS 1IDC01720I INDEX CONTROL INTERVAL DISPLAY AT RBA 23552 FOLLOWS000000 01F90301 00000000 00005E00 00000000 02000021 010701BC 2D2C2B2A 29282726 X.9........;.....................X000020 25000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 X................................X000040 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 X................................X000060 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 X................................X000080 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 X................................X0000A0 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 X................................X0000C0 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 X................................X0000E0 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 X................................X000100 00000000 0000F226 01240007 F7F12502 23F82601 22F72601 21F42601 20F32601 X......2.....71...8...7...4...3..X000120 1FF6F025 021E001B F525011D F626011C F526011B F226011A F5F12502 19F82601 X.60.....5...6...5...2...51...8..X000140 18001CF4 F7250217 F4260116 F3260115 F4F02502 14260013 F6260112 001BF3F5 X...47...4...3...40......6.....35X000160 250211F2 260110F3 F125020F F826010E F726010D F426010C 001CF2F3 25020BF2 X...2...31...8...7...4.....23...2X000180 F025020A 260009F6 260108F5 260107F2 26010600 40F0F0F0 F0F0F0F0 F0F0F0F0 X0......6...5...2.... 00000000000X0001A0 F0F0F0F0 F0F0F0F0 F0F0F0F0 F0F0F0F0 F0F0F0F0 F0F0F0F0 F0F0F1F1 002705F8 X0000000000000000000000000011...8X0001C0 260104F7 260103F4 260102F3 260101F0 F0F0F0F0 F0F0F0F0 F0F0F0F0 F0F0F0F0 X...7...4...3...00000000000000000X0001E0 F0F0F0F0 F0F0F0F0 F0F0F0F0 F0F0F0F0 F0F0F0F0 F0F0F027 000001F9 01F90000 X0000000000000000000000.....9.9..XIDC01714I ERROR LOCATED AT OFFSET 00000010IDC21701I MAJOR ERRORS FOUND BY INDEXTESTIDC31705I DATATEST NOT PERFORMED DUE TO SEVERE INDEXTEST ERRORSIDC3003I FUNCTION TERMINATED. CONDITION CODE IS 12

IDC0002I IDCAMS PROCESSING COMPLETE. MAXIMUM CONDITION CODE WAS 12

構造エラーについての VSAM キー順データ・セット・クラスターの検査

第 15 章 構造エラーについての VSAM キー順データ・セット・クラスターの検査 277

Page 302: DFSMS データ・セットの使用法

複写キー・エラーを持つデータ・セットの INDEXTEST およびDATATEST テスト

ユーザーは、INDEXTEST と DATATEST の両方のテストを実行しようとしました。 INDEXTEST が開始され、正常に完了しました。 DATATEST は、KSDS クラスターのデータ・コンポーネントを調べ、「複写キー」エラーを検出しました。

EXAMINE は、次に前のキー (11)、相対バイト・アドレス 10 進数 512、および重複キーが検出されたデータ制御インターバルへの相対位置アドレス 16 進数 9F を表示しました。

IDCAMS SYSTEM SERVICES

EXAMINE NAME(EXAMINE.KD99) INDEXTEST DATATESTIDC01700I INDEXTEST BEGINSIDC01724I INDEXTEST COMPLETE NO ERRORS DETECTEDIDCC17OLI DATATEST COMPLETEIDC11741I DUPLICATE CONSECUTIVE KEYS FOUNDIDC01717I DATA KEYS FOLLOW000000 FOFOFOFO FOFOFOFO FOFOFOFO FOFOFOFO FOFOFOFO FOFOFOFO FOFOFOFO FOFOFOFO X00000000000000000000000000000000X000020 FOFOFOFO FOFOF1F1 X00000011 X

DIC01713I DATA CONTROL INTERVAL DISPLAY AT RBA 512 FOLLOWS000000 00000000 0000D0C1 AB33F0F0 F0F0F0F0 F0F0F0F0 F0F0F0F0 F0F0F0F0 F0F0F0F0 X.......A..0000000000000000000000X000020 F0F0F0F0 F0F0F0F0 F0F0F0F0 F0F0F0F0 F1F1C3C3 C3C3C3C3 C3C3C3C3 C3C3C3C3 X000000000000000011CCCCCCCCCCCCCCX000040 C3C3C3C3 C3C3C3C3 C3C3C3C3 C3C3C3C3 C3C3C3C3 C3C3C3C3 C3C3C3C3 C3C3C3C3 XCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCX000060 C3C3C3C3 C3C3C3C3 C3C3C3C3 C3C3C3C3 C3C3C3C3 C3C3C3C3 C3C3C3C3 C3C3C3C3 XCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCX000080 C3C3C3C3 C3C3C3C3 C3C3C3C3 C3C3C3C3 C3C3C3C3 C3000000 0000006E E065DEF0 XCCCCCCCCCCCCCCCCCCCCC......>...0X0000A0 F0F0F0F0 F0F0F0F0 F0F0F0F0 0F0F0F0F FOFOFOFO FOFOFOFO FOFOFOFO FOFOFOF0 X00000000000000000000000000000000X0000C0 F0F0F0F0 FOF1F1C4 C4C4C4C4 C4C4C4C4 C4C4C4C4 C4C4C4C4 C4C4C4C4 C4C4C4C4 X0000011DDDDDDDDDDDDDDDDDDDDDDDDDX0000E0 C4C4C4C4 C4C4C4C4 C4C4C4C4 C4C4C4C4 C4C4C4C4 00000000 000055E2 0706F0F0 XDDDDDDDDDDDDDDDDDDDD.......S..00X000100 F0F0F0F0 FOFOFOFO F0F0F0F0 OFOFOFOF F0F0F0F0 FOFOFOFO FOFOFOFO FOFOFOFO X00000000000000000000000000000000X000120 FOFOFOFO F3F1C1C1 C1C1C100 00000000 00000000 00000000 00000000 00000000 X000031AAAAA.....................X000140 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 X................................X000160 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 X................................X000180 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 X................................X0001A0 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 X................................X0001C0 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 X................................X0001E0 00000000 00000000 00000000 00000000 00000000 00370000 5F000095 012B00C8 X........................-......HXIDC01714I ERROR LOCATED AT OFFSET 00000C9FIDC21703I MAJOR ERRORS FOUND BY DATATESTIDC0001I FUNCTION COMPLETED. HIGHEST CONDITION CODE WAS 8

IDC0002I IDCAMS PROCESSING COMPLETE. MAXIMUM CONDITION CODE WAS 8

構造エラーについての VSAM キー順データ・セット・クラスターの検査

278 z/OS V1R10 DFSMS データ・セットの使用法

Page 303: DFSMS データ・セットの使用法

第 16 章 VSAM ユーザー作成出口ルーチンのコーディング

このセクションでは、VSAM ユーザー作成出口ルーチンをコーディングするための一般ガイドラインおよび以下のルーチンのコーディングに関する特定情報を扱います。

トピック 該当ページ

出口ルーチンのコーディングについてのガイドライン 279

データ終わりを処理するための EODAD 出口ルーチン 284

EXCEPTIONEXIT 出口ルーチン 285

トランザクションをジャーナル記録するための JRNAD 出口ルーチン 286

論理エラーを分析するための LERAD 出口ルーチン 294

RLSWAIT 出口ルーチン 295

物理エラーを分析するための SYNAD 出口ルーチン 296

ユーザー処理用の UPAD 出口ルーチン 299

ユーザー・セキュリティー検査ルーチン 302

出口ルーチンのコーディングについてのガイドラインVSAM 出口ルーチンは、次のタスクを行うために提供できます。v 論理エラーを分析するv 物理エラーを分析するv データ終わり処理を実行するv データ・セットに対して行われたトランザクションを記録するv 特別ユーザー処理を実行するv 待機ユーザー処理を実行するv ユーザー・セキュリティー検査を実行する

VSAM ユーザー作成出口ルーチンは、アクセス方式サービス・プログラム・コマンド内のマクロ・パラメーターによって識別されます。

EXLST VSAM マクロを使用して、出口リストを作成することができます。EXLST

パラメーター EODAD、JRNAD、LERAD、SYNAD、および UPAD は、ユーザー作成ルーチンのアドレスを指定するために使用されます。アクティブとマークされた出口のみが実行されます。

アクセス方式サービス・プログラム・コマンドを使用して、例外処理およびユーザー・セキュリティー検査処理を実行するためのユーザー作成ルーチンのアドレスを指定することができます。

関連資料:

v EXLST マクロについては、「z/OS DFSMS Macro Instructions for Data Sets」を参照してください。

v アクセス方式サービス・プログラム・コマンドからの出口については、「z/OS

DFSMS Access Method Services for Catalogs」を参照してください。

© Copyright IBM Corp. 1987, 2008 279

Page 304: DFSMS データ・セットの使用法

表 15 は、VSAM から使用可能な出口ロケーションを示しています。

表 15. VSAM ユーザー作成出口ルーチン

出口ルーチン 使用可能なとき 指定されている場所

バッチ指定変更 バックアウト処理を負ったときのIDCAMS SHCDS

PERMITNONRLSUPDATE コマンドの発行後

LINKLIB または LPALIB の中のIGW8PNRU 出口

データ・セットの終わり それ以上順次レコードまたはブロックが使用できないとき

EXLST マクロの EODAD パラメーター

例外出口 訂正不能な入出力エラーの後 アクセス方式サービス・プログラム・コマンドの EXCEPTIONEXIT パラメーター

データ・セットに対するトランザクションのジャーナル記録

入出力完了またはエラー、バッファー内容への変更、共用または非共用要求、プログラムによる GET、PUT、ERASE の発行、制御インターバル内でのデータのシフトの後

EXLST マクロの JRNAD パラメーター

論理エラーの分析 訂正不能な論理エラーの後 EXLST マクロの LERAD パラメーター

待機 RLS を使用した非クロスメモリー・モード呼び出し元の場合

EXLST マクロの RLSWAIT パラメーター

エラー分析 訂正不能な入出力エラーの後 EXLST マクロの SYNAD パラメーター

ユーザー処理 入出力完了または逐次再使用可能要求の場合は WAIT

EXLST マクロの UPAD パラメーター

ユーザー・セキュリティー検査 VSAM データ・セットをオープンするとき

アクセス方式サービス・プログラム・コマンドの AUTHORIZATION パラメーター

プログラミングに関するガイドライン通常、ルーチンのコーディングでは次のガイドラインを守る必要があります。

v ルーチンを再入可能になるようにコーディングします。

v レジスターを保管および復元します (他の要件については個々のルーチンを参照してください)。

v VSAM 要求マクロによって使用されたレジスターを覚えておきます。

v 出口ルーチンが制御を受け取る際のアドレッシング・モード (24 ビットまたは31 ビット) を覚えておきます。

v VSAM またはご使用のプログラムが出口ルーチンをロードする必要があるかどうかを判別します。

VSAM によってロードされるユーザー出口は、モジュールがリンク・エディットされたときに指定されたアドレッシング・モードで呼び出されます。VSAM によってロードされないユーザー出口は、出口が取られるようにする VSAM レコード管

VSAM ユーザー作成出口ルーチンのコーディング

280 z/OS V1R10 DFSMS データ・セットの使用法

Page 305: DFSMS データ・セットの使用法

理、OPEN、または CLOSE 要求の発行者と同じアドレッシング・モードで制御を受け取ります。出口が正しいアドレッシング・モードで書き込まれるようにするのは、ユーザーの責任です。

出口ルーチンは、ご使用のプログラム内で、または出口ルーチンのライブラリー・ロケーションを指すための DD ステートメントを指定した JOBLIB またはSTEPLIB を使用してロードすることができます。

関連資料: VSAM ユーザー出口ルーチンをコーディングする場合は、「 z/OS

DFSMS Macro Instructions for Data Sets」および「 z/OS DFSMS Access Method

Services for Catalogs」の資料を手元に置いて、その内容をよく理解しておく必要があります。

複数の要求パラメーター・リストまたはデータ・セット出口ルーチンが、複数の要求パラメーター・リスト (RPL) を使用して非同期処理を行っているプログラムによって使用される場合、または出口ルーチンが複数のデータ・セットによって使用される場合、直前の項目の処理が完了する前に生じた項目を出口ルーチンが処理できるようにコーディングする必要があります。出口ルーチンにレジスターを保管および復元するには、または出口ルーチンによって呼び出された他のルーチンによってレジスターを保管および復元するには、出口ルーチンを再入可能になるようにコーディングすることによって行うのが最良です。これを行う別の方法は、固有の保管域を各 RPL と関連付けるための技法を開発することです。

LERAD、EODAD、または SYNAD 出口ルーチンが、それに渡された RPL を再使用する場合、次のことを承知しておく必要があります。

v 再使用された RPL を発行する要求によって、出口ルーチンが当初入力される原因となったのと同じ例外条件が生じる場合、出口ルーチンは再び呼び出されます。

v 元のフィードバック・コードは、RPL に対して発行された最新の要求の状況を示すフィードバック・コードで置き換えられます。出口ルーチンが VSAM に戻る場合、VSAM は (それがユーザーのプログラムに戻るときに) レジスターを 15

に設定し、最新の要求の状況も示します。

v JRNAD、UPAD、および例外出口は、VSAM の拡張であり、したがって、それらが入った同じ処理モード (つまり、クロスメモリー・モード、SRB モード、またはタスク・モード) で VSAM に戻らなければなりません。

メインプログラムに戻るメインプログラムが VSAM 要求マクロ (GET、PUT、POINT、および ERASE) を発行し、マクロが完了していないとき、次の 6 つの出口ルーチンを入力することができます。LERAD、SYNAD、EODAD、UPAD、RLSWAIT、またはEXCEPTIONEXIT ルーチン。LERAD、SYNAD、EODAD、またはEXCEPTIONEXIT を入力すると、マクロが正常に完了しなかったことを示します。出口ルーチンがその処理を完了するとき、2 つの方法のいずれかでメインプログラムに戻ることができます。

VSAM ユーザー作成出口ルーチンのコーディング

第 16 章 VSAM ユーザー作成出口ルーチンのコーディング 281

Page 306: DFSMS データ・セットの使用法

v 出口ルーチンは、レジスター 14 のリターン・アドレスにより VSAM に戻ることができます。次に VSAM は、正常に完了しなかった VSAM 要求マクロに続く命令でプログラムに戻ります。これは、プログラムに戻るためのより簡単な方法です。

エラー・リカバリーおよび訂正プロセスが、失敗した要求を再試行するかそれを訂正するために RPL に対して失敗した VSAM マクロを再発行する必要がある場合、次のようにすることができます。

– 出口ルーチンは、RPL を (MODCB を使用して) 訂正してから、メインプログラムに RPL が再試行する準備ができていることを示すためにスイッチを設定することができます。出口ルーチンが処理を完了すると、VSAM に戻ることができます (レジスター 14 を介して)。これで、メインプログラムに戻ります。メインプログラムは、スイッチをテストして、VSAM マクロおよび RPL を再発行することができます。

– 出口ルーチンは、GENCB マクロを発行して RPL をビルドしてから、RPL (失敗した VSAM マクロについての) を新規にビルドされた RPL にコピーすることができます。この時点で、出口ルーチンは、新規にビルドされた RPL に対して VSAM マクロを発行することができます。出口ルーチンは、処理を完了すると、VSAM に戻ることができます (レジスター 14 を使用して)。これで、メインプログラムに戻ります。

v 出口ルーチンは、プログラム内の適切な戻りポイントを決定してから、そのポイントに直接分岐することができます。VSAM が出口ルーチンを入力するとき、どのレジスターも、失敗したマクロに続く命令のアドレスを含んでいないことに注意してください。

プログラムに戻るためにこの方式を使用する必要があるのは、エラー・リカバリーおよび訂正プロセス中に、出口ルーチンが、失敗した VSAM マクロによって参照された RPL を参照する GET、PUT、POINT、または ERASE マクロを発行した場合です。(つまり、RPL は出口ルーチンによって再発行されました。) この場合、VSAM は、メインプログラムへのリエントリー・ポイントを見失いました。出口ルーチンが VSAM に戻る場合、VSAM は、エラーの戻りコードを発行します。

バッチ指定変更用の IGW8PNRU ルーチンデータ・セットへの損傷を防ぐために、DFSMStvs は、インストール・システム出口、すなわちバッチ指定変更出口に特定のレコードをバックアウトするかどうかの決定を据え置きます。トランザクション VSAM は、IDCAMS SHCDS

PERMITNONRLSUPDATE コマンドによって影響を受けた可能性があるデータ・セットに関係するリカバリー単位 (UR) をバックアウトするときに、このオプショナル出口を呼び出します。この出口は、データ・セットの影響を受けたやり直しログ・レコードごとに 1 回呼び出されます。

この出口の目的は、バックアウトを適用すべきか否かの指示とともに DFSMStvs に戻ることです。入力は、やり直しログ・レコード (IGWUNLR によってマップされる) およびデータ・セット名です。出力は、バックアウトを行うか否かのブール応答 (レジスター 15 で戻される) です。

v 0 (ゼロ) は、このレコードをバックアウトしないことを意味します。

VSAM ユーザー作成出口ルーチンのコーディング

282 z/OS V1R10 DFSMS データ・セットの使用法

Page 307: DFSMS データ・セットの使用法

v 4 は、このレコードをバックアウトすることを意味します。

この出口には、以下の環境で制御が与えられます。

v INTERRUPTS 使用可能

v STATE および KEY 問題プログラム状態、キー 8

v ASC モード P=H=S、RLS アドレス・スペース

v AMODE、RMODE: 制限なし

v LOCKS: 保留なし

v 出口は再入可能である

レジスターの内容表 16 は、VSAM が IGW8PNRU ルーチンに出るときのレジスターの内容を示しています。

表 16. IGW8PNRU 出口ルーチンへの入り口でのレジスターの内容

レジスター 内容

0 適用外。

1 IGWUNLR のアドレス (キー 8 ストレージ内)。

オートデータ域として使用される区域のアドレス (キー 8 ストレージ内)。

3 オートデータ域の長さ。

4 から 13 予測不能。レジスター 13 は、規則により、処理プログラムの 72 バイトの保管域のアドレスを含みます。IGW8PNRU ルーチンが VSAM に制御を戻す場合は、ルーチンはこれを保管域として使用してはなりません。

14 VSAM への戻りアドレス。

15 IGW8PNRU ルーチンへの入り口アドレス。

プログラミングの考慮事項以下のプログラミングの考慮事項は、バッチ指定変更出口に適用されます。

v この出口の名前は IGW8PNRU でなければなりません。

v この出口は、別のシステムに対して対等リカバリーを行う可能性がある任意のシステムからロード可能でなければなりません。

v IGW8PNRU モジュールは DFSMStvs によってロードされるため、LINKLIB または LPALIB に常駐する必要があります。ロードが失敗した場合は、DFSMStvs はメッセージを出します。

v バッチ指定変更出口が見つからない場合は、DFSMStvs は、PERMITNONRLSUPDATE を介してアクセスされたデータ・セットに関する保留バックアウトを用いたすべての UR を中断します。

v ご使用のシステムがコード・エラーの修正または出口の機能の拡張を行う必要がある場合は、 DFSMStvs を再始動して新規出口を使用可能にする必要があります。

v この出口は SVC 命令を出すことができます。

DFSMStvs は、出口での障害から RLS アドレス・スペースを保護するために、出口を呼び出す前に ESTAE リカバリー環境を設定します。出口に障害が起こった場合

VSAM ユーザー作成出口ルーチンのコーディング

第 16 章 VSAM ユーザー作成出口ルーチンのコーディング 283

Page 308: DFSMS データ・セットの使用法

または出口を呼び出す試みが失敗した場合は、UR が中断されます。ダンプが取られ、次の DFSMStvs の再始動まで出口は使用不可となりますが、サーバーは再生されません。出口が異常終了した場合は、次のようなタイトルを含んだダンプが生じる可能性があります。

DUMP TITLE=COMPID=?????,CSECT=????????+FFFF,DATE=????????,MAINTID=????????,ABND=0C4,RC=00000000,RSN=00000004

この場合は、出口が異常終了した理由を調べてください。

推奨: この出口は他の処理を行うことはできますが、 IBM では、この出口がリカバリー可能リソースの更新を試みないようにすることを強くお勧めします。

IGW8PNRU ルーチンが処理を完了したら、 281ページの『メインプログラムに戻る』に説明されているように、メインプログラムに戻ります。

データ終わりを処理するための EODAD 出口ルーチンデータ・セット内の最後のレコード (キー・アクセスの場合は最高のキーを持つもので、アドレス・アクセスの場合は最高の RBA をもつもの) を超えてレコードを順次検索またはポイントする試みが行われるとき、VSAM は EODAD ルーチンに出ます。 VSAM は、終わりを超えたレコードを指定する直接要求に対しては出口を取りません。EODAD 出口が使用されない場合、状態は論理エラー (FDBK コード X'04') と見なされ、LERAD ルーチン (それが提供されている場合) によって処理することができます。 294ページの『論理エラーを分析するための LERAD 出口ルーチン』を参照してください。

レジスターの内容表 17 は、VSAM が EODAD ルーチンに出るときのレジスターの内容を示しています。

表 17. EODAD 出口ルーチンへの入り口でのレジスターの内容

レジスター 内容

0 予測不能。

1 VSAM がデータ・セットの終わりに到達する原因となった要求を定義するRPL のアドレス。VSAM に戻る場合、レジスターはこのアドレスを含む必要があります。

2 から 13 予測不能。レジスター 13 は、規則により、処理プログラムの 72 バイトの保管域のアドレスを含みます。EODAD ルーチンが VSAM に制御を戻す場合は、ルーチンはこれを保管域として使用してはなりません。

14 VSAM への戻りアドレス。

15 EODAD ルーチンへの入り口アドレス。

プログラミングの考慮事項EODAD ルーチンの典型的なアクションは、次のとおりです。v 必要な情報 (たとえば、データ・セットのタイプ) について RPL を調べるv 完了メッセージを出す。v データ・セットをクローズします。v VSAM に制御を戻すことなく処理を終了する

VSAM ユーザー作成出口ルーチンのコーディング

284 z/OS V1R10 DFSMS データ・セットの使用法

Page 309: DFSMS データ・セットの使用法

ルーチンが VSAM に制御を戻し、データ・セットへのアクセスのために別の GET

要求が発行される場合、VSAM は終了し LERAD ルーチンに制御が渡ります。

処理プログラムが、RPL のチェーンによって定義される要求を使用してレコードを順次検索する場合、EODAD ルーチンは、チェーンの最初の RPL についてデータ・セットの終わりに達したかどうか判別する必要があります。そうでない場合は、1 つ以上のレコードが検索されますが、まだ処理プログラムによって処理されていません。

終わりに到達したデータ・セットのタイプは、プログラムをデータ・セットに接続するアクセス方式制御ブロックのアドレスについて RPL を調べて、その属性特性をテストすることによって判別することができます。

出口ルーチンが GENCB、MODCB、SHOWCB、または TESTCB を発行して、VSAM に戻る場合、保管域を提供し、これらのマクロによって使用される、レジスター 13 および 14 を復元する必要があります。

EODAD ルーチンが処理を完了したら、 281ページの『メインプログラムに戻る』に説明されているように、メインプログラムに戻ります。

EXCEPTIONEXIT 出口ルーチン例外出口ルーチンを提供して、データ・セットと関連付けられた入出力エラーをモニターすることができます。ユーザー作成出口ルーチンの名前を指定するためのEXCEPTIONEXIT パラメーターを使用して、ルーチンの名前をアクセス方式サービス・プログラム DEFINE コマンドを介して指定します。

レジスターの内容表 18 は、VSAM が EXCEPTIONEXIT ルーチンに出るときのレジスターの内容を示しています。

表 18. EXCEPTIONEXIT ルーチンへの入り口でのレジスターの内容

レジスター 内容

0 予測不能。

1 フィードバック・戻りコードを含む RPL のアドレス、およびメッセージ域(ある場合) のアドレス。

2 から 13 予測不能。レジスター 13 は、規則により、処理プログラムの 72 バイトの保管域のアドレスを含みます。ルーチンが VSAM に制御を戻す場合は、ルーチンはそれを使用してはなりません。

14 VSAM への戻りアドレス。

15 例外出口ルーチンへの入り口アドレス。

プログラミングの考慮事項例外出口は、SYNAD 出口と同じエラー用に取られます。アクティブ SYNAD ルーチンおよび EXCEPTIONEXIT ルーチンがある場合、例外出口ルーチンが最初に処理されます。

VSAM ユーザー作成出口ルーチンのコーディング

第 16 章 VSAM ユーザー作成出口ルーチンのコーディング 285

Page 310: DFSMS データ・セットの使用法

例外出口は、データ・セットの属性 (DEFINE によって指定されたもの) と関連付けられ、呼び出しのたびにロードされます。出口は LINKLIB に常駐しなければならず、VSAM がクロスメモリー・モードにあるときは出口を呼び出せません。

例外出口ルーチンが処理を完了したら、 281ページの『メインプログラムに戻る』に説明されているようにメインプログラムに戻ります。

関連資料: 例外出口がどのように設定、変更、または無効にされるかについては、「z/OS DFSMS Access Method Services for Catalogs」を参照してください。

トランザクションをジャーナル記録するための JRNAD 出口ルーチンJRNAD 出口ルーチンは、データ・セットに対するトランザクションの記録、レコードの RBA での変更の追跡、および制御インターバル分割のモニターのために提供することができます。これは、VSAM 共用リソース・バッファー方式のためにのみ使用可能です。JRNAD 出口ルーチンを圧縮データ・セットと一緒に使用するとき、戻されるすべての RBA およびデータ長の値は、圧縮データを表します。共用リソースでは、JRNAD 出口ルーチンを使用して、制御インターバル分割用の要求を拒否できます。次のいずれかが発生するたびに、VSAM は JRNAD 出口を取ります。

v 処理プログラムが GET、PUT、または ERASE を発行する

v レコードが削除、挿入、短縮、または長くされるのに合わせて、データが制御インターバル内で右または左にシフトされるか、別の制御インターバルに移動される

v 入出力エラーが生じる

v 入出力完了が発生する

v 共用または非共用要求が受け取られる

v バッファー内容を変更することになる

制約事項: JRNAD 出口は、RLS によってサポートされていません。

レジスターの内容表 19 は、VSAM が JRNAD ルーチンに出るときのレジスターの内容を示しています。

表 19. JRNAD 出口ルーチンへの入り口でのレジスターの内容

レジスター 内容

0 バイト 0 ― BLDVRP 要求によって作成されたサブプール ID トークン。バイト 2 から 3 ― 相対バッファー番号、つまり、バッファー・プール内でのバッファー配列指標。

1 VSAM によってビルドされたパラメーター・リストのアドレス。

2 から 3 予測不能。

4 バッファー制御ブロック (BUFC) のアドレス。

5 から 13 予測不能。

14 VSAM への戻りアドレス。

15 JRNAD ルーチンへの入り口アドレス。

VSAM ユーザー作成出口ルーチンのコーディング

286 z/OS V1R10 DFSMS データ・セットの使用法

Page 311: DFSMS データ・セットの使用法

プログラミングの考慮事項JRNAD が入出力エラー用に取られる場合、ジャーナル出口は物理エラーの戻りコードをゼロにリセットするか、他の方法で変更できるので、操作のうち 1 つ以上のものが失敗する場合であっても、一連の操作を完了するまで続けることができます。

レジスター 1 によってポイントされる、VSAM によってビルドされたパラメーター・リストの内容は、JRNAD 出口ルーチンによって検査することができます。これについては、 291ページの表 20 で説明されています。

出口ルーチンが GENCB、MODCB、SHOWCB、または TESTCB を発行する場合、VSAM に戻る前に、これらのマクロによって使用される、レジスター 14 を復元する必要があります。

出口ルーチンがレジスター 1 を使用する場合、VSAM に戻る前に、それをパラメーター・リスト・アドレスと一緒に保管する必要があります。 (ルーチンは、VSAM

が終了させた要求の完了のために戻る必要があります。)

出口を使用しようとするデータ・セットがオープンされる前に、JRNAD 出口は、アクティブとして示される必要があり、処理中に出口を非アクティブにしてはなりません。データ・セット用に複数のアクセス方式制御ブロックを定義し、JRNAD ルーチンを持ちたい場合、データ・セット用にオープンする最初の ACB は、ルーチンを識別する出口リストを指定する必要があります。

処理中のデータ・セットがアドレス可能に拡張される場合、RBA を処理するJRNAD 出口は取られないか、RBA にアドレス可能度を提供するために必要なフィールドのサイズが大きくなるために (4 GB より大きくなることがあります) 制限されます。制約事項は、特定の RBA 値にではなくデータ・セット全体に適用されます。

トランザクションのジャーナル記録ジャーナル記録トランザクションでは (VSAM が GET、PUT、または ERASE のために終了するとき)、SHOWCB マクロを使用して、検索、保管、または削除されたレコードについての要求パラメーター・リスト (たとえば、FIELDS=(AREA,

KEYLEN,RBA,RECLEN)) を表示することができます。TESTCB マクロを使用して、GET または PUT が更新 (OPTCD=UPD) 用であったかどうか見つけ出すこともできます。

JRNAD ルーチンがトランザクションのみをジャーナル記録する場合は、理由 X'0C'

を無視して、VSAM に戻る必要があります。逆に、RBA 変更のみを記録する場合は X'00'、X'04'、および X'08' を無視する必要があります。

RBA 変更RBA 変更を記録するには、シフトまたは移動中のデータにレコードがいくつあるか計算し、それぞれについて新規 RBA を追跡できるようにしておく必要があります。すべてのレコードが同じ長さである場合、レコード長を、シフトされたデータのバイト数に分割することによって、数を計算します。レコード長が変化する場合は、レコードを識別する (レコードのキーをその RBA と関係付けることによって)

だけでなく、それらの長さも示すテーブルを使用して計算することができます。

VSAM ユーザー作成出口ルーチンのコーディング

第 16 章 VSAM ユーザー作成出口ルーチンのコーディング 287

Page 312: DFSMS データ・セットの使用法

制御インターバルおよび制御域分割によって生じた RBA 変更を追跡するルーチンを提供する必要があります。キー順データ・セットへのキー・アクセスを通じて発生する RBA 変更も、そのデータ・セットを後で直接アドレス・アクセスによって処理する予定の場合は、記録しておく必要があります。

制御インターバル分割一部の制御インターバル分割は、データが 2 つの新規制御インターバルに移動されることに関係し、制御域分割は通常、多くの制御インターバルの内容が移動されることに関係しています。これらの場合では、VSAM は、データが新規制御インターバルに移動するたびに JRNAD ルーチンに出ます。

JRNAD 出口を使用して、特定のデータまたは索引制御インターバルに対する共用または排他制御を保持することができます。また、場合によっては、出口ルーチンの中で制御インターバルの特定の処理に対する要求をリジェクトすることができます。たとえば、この出口を、共用環境でのデータ・セットについての情報を保持するのに使用したとすると、制御インターバルまたは制御域分割は、データ・セットの他のユーザーに不都合な影響を及ぼすことがあるので、分割に対する要求をリジェクトすることもできます。

図 33 は、ユーザー出口ルーチン USEREXIT を持つスケルトン・プログラムUSERPROG です。これは、制御インターバルまたは制御域分割に対する要求を取り消すための JRNAD 出口ルーチンの使用を示しています。

VSAM ユーザー作成出口ルーチンのコーディング

288 z/OS V1R10 DFSMS データ・セットの使用法

Page 313: DFSMS データ・セットの使用法

USERPROG CSECTSAVE(R14,R12) Standard entry code...BLDVRP BUFFERS=(512(3)), Build resource pool X

KEYLEN=4, XSTRNO=4, XTYPE=LSR, XSHRPOOL=1, XRMODE31=ALL

OPEN (DIRACB) Logically connect KSDS1...PUT RPL=DIRRPL This PUT causes the exit routine USEREXIT

to be taken with an exit code X’50’ ifthere is a CI or CA split

LTR R15,R15 Check return code from PUTBZ NOCANCEL Retcode = 0 if USEREXIT did not cancel

CI/CA split= 8 if cancel was issued, if

we know a CI or CA splitoccurred

.

. Process the cancel situation

.NOCANCEL . Process the noncancel situation

.

.CLOSE (DIRACB) Disconnect KSDS1DLVRP TYPE=LSR,SHRPOOL=1 Delete the resource pool...RETURN Return to caller....

DIRACB ACB AM=VSAM, XDDNAME=KSDS1, XBUFND=3, XBUFNI=2, XMACRF=(KEY,DDN,SEQ,DIR,OUT,LSR), XSHRPOOL=1, XEXLST=EXITLST

図 33. JRNAD 出口の例 (1/2)

VSAM ユーザー作成出口ルーチンのコーディング

第 16 章 VSAM ユーザー作成出口ルーチンのコーディング 289

Page 314: DFSMS データ・セットの使用法

パラメーター・リストVSAM によってビルドされたパラメーター・リストには、なぜ出口が取られたかを示す理由コードと、ルーチンから戻り次第 VSAM がアクションを取るか取らないかの戻りコードを指定することができるロケーションも含まれます。パラメーター・リストで提供される情報は、出口が取られた理由に応じて異なります。表 20

は、パラメーター・リストの内容を示しています。

パラメーター・リストは、VSAM 制御ブロックと同じ区域 (16MB 境界より上または下) に常駐します。たとえば、VSAM データ・セットがオープンされ、ACB がRMODE31=CB と示した場合、パラメーター・リストは 16 MB 境界より上に常駐します。16MB 境界より上に常駐するパラメーター・リストにアクセスするには、31 ビット・アドレッシングが必要になります。

*DIRRPL RPL AM=VSAM, X

ACB=DIRACB, XAREA=DATAREC, XAREALEN=128, XARG=KEYNO, XKEYLEN=4, XOPTCD=(KEY,DIR,FWD,SYN,NUP,WAITX), XRECLEN=128

*DATAREC DC CL128’DATA RECORD TO BE PUT TO KSDS1’KEYNO DC F’0’ Search key argument for RPLEXITLST EXLST AM=VSAM,JRNAD=(JRNADDR,A,L)JRNADDR DC CL8’USEREXIT’ Name of user exit routine

END End of USERPROG

USEREXIT CSECT On entry to this exit routine, R1 pointsto the JRNAD parameter list and R14 pointsback to VSAM.

.

. Nonstandard entry code -- need not save

. the registers at caller’s save area and,

. since user exit routines are reentrant for

. most applications, save R1 and R14 at some

. registers only if R1 and R14 are to be

. destroyed

.CLI 20(R1),X’50’ USEREXIT called because of CI/CA split?BNE EXIT No. Return to VSAMMVI 21(R1),X’8C’ Tell VSAM that user wants to cancel split...

EXIT . Nonstandard exit code -- restore R1 and. R14 from save registersBR R14 Return to VSAM which returns to USERPROG

if cancel is specifiedEND End of USEREXIT

図 33. JRNAD 出口の例 (2/2)

VSAM ユーザー作成出口ルーチンのコーディング

290 z/OS V1R10 DFSMS データ・セットの使用法

Page 315: DFSMS データ・セットの使用法

表 20. JRNAD 出口用に VSAM によってビルドされたパラメーター・リストの内容

オフセット バイト 説明

0(X'0') 4 VSAM がルーチンから出る原因となった要求を定義する RPL のアドレス。

4(X'4') 4 処理中のデータ・セットを識別する 5 バイト・フィールドのアドレス。このフィールドは次のフォーマットを持ちます。

4 バイトJRNAD 出口によって生じた要求を定義する RPL によって指定されるアクセス方式制御ブロックのアドレス。

1 バイトデータ・セットがデータ (X'01') または索引 (X'02') コンポーネントのどちらであるかの指示。

8(X'8') 4 変数、オフセット 20 での理由標識に応じて異なる。

オフセット 20

オフセット 8 での内容

X'0C' シフト中または移動中のデータの最初のバイトの RBA。

X'20' 分割されようとしている制御域の先頭の RBA。

X'24' データが読み込まれようとしている入出力バッファーのアドレス。

X'28' データが書き出されようとしている入出力バッファーのアドレス。

X'2C' 書き込まれようとしている制御インターバル内容を含む入出力バッファーのアドレス。

X'30' 排他制御のもとでデータが読み込まれようとしているバッファーをポイントするバッファー制御ブロック (BUFC) のアドレス。

X'34' 共用制御のもとでデータが読み込まれようとしているバッファーをポイントするBUFC のアドレス。

X'38' 排他制御で獲得されようとしているバッファーをポイントする BUFC のアドレス。バッファーはすでにバッファー・プールにあります。

X'3C' 排他制御でバッファー・プールにビルドされようとしているバッファーをポイントする BUFC のアドレス。

X'40' 排他制御が解放されたばかりのバッファーをポイントする BUFC のアドレス。

X'44' 内容が無効にされたバッファーをポイントする BUFC のアドレス。

X'48' READ 操作が完了したばかりのバッファーをポイントする BUFC のアドレス。

X'4C' WRITE 操作が完了したばかりのバッファーをポイントする BUFC のアドレス。

VSAM ユーザー作成出口ルーチンのコーディング

第 16 章 VSAM ユーザー作成出口ルーチンのコーディング 291

Page 316: DFSMS データ・セットの使用法

表 20. JRNAD 出口用に VSAM によってビルドされたパラメーター・リストの内容 (続き)

オフセット バイト 説明

12(X'C') 4 変数、オフセット 20 での理由標識に応じて異なる。

オフセット 20

オフセット 12 での内容

X'0C' シフトまたは移動されるデータのバイト数 (この数には、フリー・スペース (ある場合)、または制御情報 (制御域分割を除く) は含まれません。制御域分割では、制御インターバルの全内容は、新規制御インターバルに移動されます。)

X'20' 予測不能。

X'24' 予測不能。

X'28' ビット 0 から 31 はトランザクション ID 0 から 31 に対応しています。1 に設定されたビットは、発生したエラーが対応するトランザクションによって変更されたときにバッファーが書き込まれていることを示します。追加のビットを 1

に設定して、対応するトランザクションがバッファーを変更するまでバッファーの内容を保持するよう VSAM に知らせます。

X'2C' 内容が書き込まれようとしている制御インターバルのサイズ。

X'30' ゼロ。

X'34' ゼロ。

X'38' ゼロ。

X'3C' 排他制御でバッファー・プールにビルドされようとしているバッファーのサイズ。

X'48' READ 操作が完了したばかりのバッファーのサイズ。

X'4C' WRITE 操作が完了したばかりのバッファーのサイズ。

16(X'10') 4 変数、オフセット 20 での理由標識に応じて異なる。

オフセット 20

オフセット 16 での内容

X'0C' データがシフトまたは移動されている最初のバイトの RBA。

X'20' 分割されようとしている制御域の最後のバイトの RBA。

X'24' 4 番目のバイトには、RPL FDBK フィールドからの物理エラー・コードが含まれます。このフルワードを使用して、VSAM と通信します。これを 0 に設定することは、VSAM がエラーを無視し、エラー処理を迂回し、処理プログラムを継続させることを意味します。これを非ゼロにしておくことは、VSAM が通常どおり継続することを意味します。つまりエラーを生じさせた要求を終了し、物理エラー分析ルーチンに出ることを含むエラー処理を続行することになります。

X'28' X'24' と同様。

X'2C' 内容が書き込まれようとしている制御インターバルの RBA。

X'48' 予測不能。

X'4C' 予測不能。

VSAM ユーザー作成出口ルーチンのコーディング

292 z/OS V1R10 DFSMS データ・セットの使用法

Page 317: DFSMS データ・セットの使用法

表 20. JRNAD 出口用に VSAM によってビルドされたパラメーター・リストの内容 (続き)

オフセット バイト 説明

20(X'14') 1 VSAM が JRNAD ルーチンに出た理由の指示:

X'00' GET 要求。

X'04' PUT 要求。

X'08' ERASE 要求。

X'0C' RBA 変更。

X'10' 読み取りスパン・レコード・セグメント。

X'14' 書き込みスパン・レコード・セグメント。

X'18' 予約済み。

X'1C' 予約済み。

次のコードは、共用リソース専用です。

X'20' 制御域分割。

X'24' 入力エラー。

X'28' 出力エラー。

X'2C' バッファー書き込み。

X'30' データまたは索引制御インターバルが排他制御で読み取られようとしています。

X'34' データまたは索引制御インターバルが共用制御で読み取られようとしています。

X'38' すでにバッファー・プールにある制御インターバルの排他制御を獲得します。

X'3C' データ・セット用に新規制御インターバルをビルドし、排他制御でそれを保持します。

X'40' 指示された制御インターバルの排他制御がすでに解放されました。

X'44' 指示された制御インターバルの内容が無効にされました。

X'48' 読み取りが完了しました。

X'4C' 書き込みが完了しました。

X'50' 制御インターバルまたは制御域分割。

X'54' ~ X'FF'

予約済み。

21(X'15') 1 JRNAD 出口ルーチンによって設定された JRNAD 終了コード。JRNAD から制御を再開した後に VSAM によって取られるアクションの指示 (共用リソースの場合のみ):

X'80' 制御インターバルに書き込みません。

X'84' 入出力エラーをエラーなしとして扱います。

X'88' 制御インターバルを読み取りません。

X'8C' 制御インターバルまたは制御域分割の要求を取り消します。

VSAM ユーザー作成出口ルーチンのコーディング

第 16 章 VSAM ユーザー作成出口ルーチンのコーディング 293

Page 318: DFSMS データ・セットの使用法

論理エラーを分析するための LERAD 出口ルーチンLERAD 出口ルーチンは、要求パラメーター・リストでフィードバック・フィールドを調べ、どの論理エラーが発生したか判別します。ルーチンがエラーを判別した後に行うことは、処理プログラムでエラーを生じさせる可能性があるものの種類についてのユーザーの知識に応じて異なります。

RPL フィードバック・コードが 64 である場合は、VSAM は LERAD を呼び出しません。

レジスターの内容表 21 は、VSAM が LERAD 出口ルーチンに出るときのレジスターの内容を示しています。

表 21. LERAD 出口ルーチンへの入り口でのレジスターの内容

レジスター 内容

0 予測不能。

1 ルーチンが調べる必要があるフィードバック・フィールドを含む RPL のアドレス。VSAM に戻る場合、レジスターはこのアドレスを含む必要があります。

2 から 13 予測不能。レジスター 13 は、規則により、処理プログラムの 72 バイトの保管域のアドレスを含みます。LERAD ルーチンが VSAM に制御を戻す場合は、ルーチンはそれを保管域として使用してはなりません。

14 VSAM への戻りアドレス。

15 LERAD ルーチンへの入り口アドレス。レジスターは、論理エラー標識を含みません。

プログラミングの考慮事項LERAD ルーチンの典型的なアクションは、次のとおりです。1. RPL の中のフィードバック・フィールドを調べ、どのエラーが発生したかを判別する。

2. エラーに基づきどの処置を講じるかを判別する。3. データ・セットをクローズします。4. 完了メッセージを出す。5. 処理を終了し、VSAM を終了するか、VSAM に戻る。

LERAD 出口ルーチンが GENCB、MODCB、SHOWCB、または TESTCB を発行するか、VSAM に戻る場合、これらのマクロによって使用される、レジスター1、13、および 14 を復元する必要があります。これは、2 つの保管域も提供します。1 つでは、GENCB、MODCB、SHOWCB、または TESTCB が発行される前に、そのアドレスをレジスター 13 にロードしておく必要があり、2 番目のものでは、レジスター 1、13、および 14 に個別に保管する必要があります。

エラーを訂正できない場合は、データ・セットをクローズし、処理を終了するか、VSAM に戻ります。

VSAM ユーザー作成出口ルーチンのコーディング

294 z/OS V1R10 DFSMS データ・セットの使用法

Page 319: DFSMS データ・セットの使用法

論理エラーが発生し、LERAD 出口ルーチンが提供されない (または LERAD 出口が非アクティブである) 場合、VSAM は、レジスター 15 内または RPL のフィードバック・フィールド内にコードを戻し、エラーを識別します。

LERAD 出口ルーチンが処理を完了したら、 281ページの『メインプログラムに戻る』に説明されているようにメインプログラムに戻ります。

RLSWAIT 出口ルーチンRLSWAIT 出口は、レコード管理要求の開始時に実行され、要求は別個の VSAM

実行単位のもとで非同期に処理されます。UPAD が指定される場合、RLS はそれを無視します。

出口は、非同期に実行させているレコード管理要求に関連付けられるそれ自身の待機処理を行うことができます。レコード管理要求が完了するとき、VSAM は、ユーザーが RPL で指定した ECB をポストします。

RLS では、RLSWAIT 出口は、要求待機の場合だけ実行され、非 RLS VSAM

UPAD の場合のリソースまたは入出力待機またはポストの場合には実行されることはありません。

RLSWAIT 出口はオプショナルです。これは、最初のレコード管理要求を発行した実行単位を VSAM が中断するのを許容できないアプリケーションによって使用されます。クロスメモリー・モードで発行されるレコード管理要求には、RLSWAIT

出口が必要です。

RLSWAIT は、出口を必要とする各 ACB で指定する必要があります。出口がEXLST を介して ACBで指定されない場合、その ACB に関係付けられたレコード管理要求用の RLSWAIT 出口処理はありません。これは、非 RLS VSAM とは異なります。ここでは、UPAD 出口は制御ブロック構造と関係付けられるので、その構造に接続されるすべての ACB は、最初のコネクターの出口を継承します。

特定のレコード管理要求に対する RLSWAIT 出口処理を活動化するには、RPL はOPTCD=(SYN,WAITX) を指定する必要があります。要求が非同期 の場合は、RLSWAIT は無視されます。

レジスターの内容表 22 は、RLSWAIT が 31 ビット・モードで入力されるときのレジスターの内容を示しています。

表 22. RLSWAIT 出口ルーチン用のレジスターの内容

レジスター 内容

1 ユーザー RPL のアドレス。元のレコード管理要求で RPL のチェーンが渡された場合、これはチェーンにある最初の RPL です。

12 予約済みであり、出口でも入り口でも同じである必要があります。

13 予約済みであり、出口でも入り口でも同じである必要があります。

14 戻りアドレス。出口は、このレジスターを使用して VSAM に戻る必要があります。

15 RLSWAIT 出口のアドレス。

VSAM ユーザー作成出口ルーチンのコーディング

第 16 章 VSAM ユーザー作成出口ルーチンのコーディング 295

Page 320: DFSMS データ・セットの使用法

RLSWAIT 出口は、次の制約事項に適合する必要があります。

v 出口は、レジスター 14 を使用して VSAM に戻る必要があり、同じ入り口環境で戻る必要があります。つまり、入り口と同じ実行単位のもとで、入り口と同じクロスメモリー環境で行う必要があります。

v 出口は、レジスター 1 に渡される RPL を使用して要求を発行してはなりません。

v 出口を使用する複数のレコード管理要求が並行して未解決である可能性がある場合は、出口は再入可能である必要があります。

要求環境VSAM RLS レコード管理要求は、PRIMARY ASC モードで発行する必要があり、ホーム、2 次、または AR ASC モードで発行することはできません。ユーザーRPL、EXLST、 ACB は、1 次からアドレッシング可能でなければなりません。オープンは、同じ1 次アドレス・スペースから発行されている必要があります。VSAM RLS レコード管理要求タスクは、ACB をオープンしたタスクと同じでなければならないか、ACB をオープンしたタスクがタスク階層にある必要があります(つまり、レコード管理タスクは、ACB をオープンしたタスクによって、またはその ACB をオープンしたタスクによって付加されたタスクによって付加されていました)。VSAM RLS レコード管理要求は、SRB モードで発行されてはならず、有効な機能リカバリー・ルーチン (FRR) を持ってはなりません。

レコード管理要求がクロスメモリー・モードで発行される場合は、呼び出し元は監視プログラム状態になければならず、RLSWAIT 出口が要求 (RPLWAITX = ON) に関連付けられることを指定する必要があります。要求は同期でなければなりません。

RLSWAIT 出口は、非クロスメモリー・モード呼び出し元にはオプショナルです。

RLSWAIT 出口は、指定される場合は、要求の先頭に入力され、VSAM は個別の実行単位のもとで要求を非同期に処理します。VSAM RLS は、後処理の場合はRLSWAIT 出口を入力しません。

VSAM は、要求で提供された ECB がホームと 1 次からアドレッシング可能であり、ECB のキーがレコード管理呼び出し元とのキーと同じであると想定します。

物理エラーを分析するための SYNAD 出口ルーチンデータへのアクセスを要求するときに物理エラーが発生する場合、VSAM はSYNAD ルーチンに出ます。VSAM がバッファーの内容を直接アクセス記憶装置に書き出す間に物理エラーが発生する場合、データ・セットをクローズするときにも、VSAM は SYNAD ルーチンに出ます。

レジスターの内容297ページの表 23 は、VSAM が SYNAD ルーチンに出るときのレジスターの内容を示しています。

VSAM ユーザー作成出口ルーチンのコーディング

296 z/OS V1R10 DFSMS データ・セットの使用法

Page 321: DFSMS データ・セットの使用法

表 23. SYNAD 出口ルーチンへの入り口でのレジスターの内容

レジスター 内容

0 予測不能。

1 フィードバック・戻りコードを含む RPL のアドレス、およびメッセージ域(ある場合) のアドレス。要求マクロを発行する場合、RPL はマクロによってポイントされているものです。OPEN, CLOSE を発行したか、ボリュームの終わりが行われるようにした場合、内部要求を処理するために VSAM によって RPL がビルドされます。SYNAD ルーチンが VSAM に戻る場合、レジスター 1 はこのアドレスを含んでいる必要があります。

2 から 13 予測不能。レジスター 13 は、規則により、処理プログラムの 72 バイトの保管域のアドレスを含みます。SYNAD ルーチンが VSAM に制御を戻す場合は、ルーチンがそれを使用してはなりません。

14 VSAM への戻りアドレス。

15 SYNAD ルーチンへの入り口アドレス。

プログラミングの考慮事項SYNAD ルーチンは、一般的には次のことを行う必要があります。

v 要求パラメーター・リストのフィードバック・フィールドを調べ、発生した物理エラーのタイプを識別します。

v エラーに関する詳細情報についてメッセージを調べるために、メッセージ領域のアドレス (ある場合) を要求パラメーター・リストから入手します。

v 可能な場合には、データをリカバリーします。

v 訂正不能エラーの場合は、エラー・メッセージを印刷します。

v データ・セットをクローズします。

v 処理を終了します。

物理エラーでの主な問題は、データを失う恐れがあることです。データのリカバリーを試みてから、処理を継続してください。入力操作 (ACB MACRF=IN) エラーは、一般的には、出力操作または更新操作 (MACRF=OUT) エラーほど重大ではありません。ユーザーの要求はデータ・セットの内容を変更しようとはしていなかったからです。

ルーチンがエラーを訂正できない場合、物理エラー・メッセージを印刷し、データ・セットをクローズし、プログラムを終了することがあります。VSAM がデータ・セットをクローズしていた間にエラーが発生した場合、および出口ルーチンがCLOSE マクロを発行した後に別のエラーが発生した場合、VSAM は二度目に終了してルーチンに制御を渡しません。

SYNAD ルーチンが VSAM に戻る場合、エラーが訂正されていたかどうかにかかわらず、VSAM は要求を除去し、最後に実行された命令に続く命令の位置で処理プログラムに戻ります。エラーがなかったことを示すためにレジスター 15 がリセットされ、RPL のフィードバック・フィールドがそれを識別します。

物理エラーは位置決めに影響を及ぼします。GET が発行されて、VSAM を後続の順次 GET のために位置決めされるはずだったのに、エラーが発生する場合、VSAM は、エラーに関係した制御インターバルの後の次のキー (RPL OPTCD=KEY)

VSAM ユーザー作成出口ルーチンのコーディング

第 16 章 VSAM ユーザー作成出口ルーチンのコーディング 297

Page 322: DFSMS データ・セットの使用法

シーケンスまたはまたは入力 (OPTCD=ADR) シーケンスに位置決めされます。したがって、処理プログラムは、エラーを無視し、順次処理を続行します。直接処理の場合、エラーに関係した制御インターバルを再度検出する確率は、アプリケーションによって異なります。

出口ルーチンが GENCB、MODCB、SHOWCB、または TESTCB を発行して、VSAM に戻る場合、保管域を提供し、これらのマクロによって使用される、レジスター 13 および 14 を復元する必要があります。

SYNAD ルーチンによって作成できる物理エラー・メッセージのフォーマットについては、『SYNAD ユーザー作成出口ルーチンの例』を参照してください。

SYNAD 出口ルーチンが処理を完了したら、 281ページの『メインプログラムに戻る』に説明されているようにメインプログラムに戻ります。

論理エラーが発生し、SYNAD ルーチンが提供されない (または SYNAD 出口が非アクティブである) 場合、VSAM は、レジスター 15 内または RPL のフィードバック・フィールド内にコードを戻し、エラーを識別します。

関連資料:

v SYNAD 戻りコードの説明については、「z/OS DFSMS Macro Instructions for

Data Sets」を参照してください。

SYNAD ユーザー作成出口ルーチンの例299ページの図 34 の例は、ユーザー作成出口ルーチンを示しています。これは、

RPL の FDBK フィールドを調べて、終了の原因となった物理エラーのタイプを検査する SYNAD 出口ルーチンです。検査の後、必要に応じて、特殊な処理を行うことができます。ルーチンは、SYSPRINT で該当するエラー・メッセージを印刷した後、VSAM に戻ります。

VSAM ユーザー作成出口ルーチンのコーディング

298 z/OS V1R10 DFSMS データ・セットの使用法

Page 323: DFSMS データ・セットの使用法

ユーザー処理用の UPAD 出口ルーチンVSAM が UPAD ルーチンを呼び出すのは、要求の RPL が OPTCD=(SYN,

WAITX) を指定し、ACB が MACRF=LSR または MACRF=GSR、あるいはMACRF=ICI を指定する場合のみです。VSAM CLOSE は、VSAM 内部リソースに対して据え置かれたレコード管理要求をポストするために UPAD 出口が取られるようにすることもできます。VSAM は、入出力完了または逐次再使用可能リソースを待機するように UPAD 出口を取り、 300ページの表 24 にリストされている条件のもとで対応するポストプロセッシングを行うために UPAD も取ることができます。

ACB1 ACB EXLST=EXITS

EXITS EXLST SYNAD=PHYERRRPL1 RPL ACB=ACB1,

MSGAREA=PERRMSG,MSGLEN=128

PHYERR USING *,15 This routine is nonreentrant.* Register 15 is entry address.

.

. Save caller’s register(1, 13, 14).

LA 13,SAVE Point to routine’s save area... If register 1=address of RPL1,. then error did not occur for a

CLOSE.SHOWCB RPL=RPL1,

FIELDS=FDBK,AREA=ERRCODE,LENGTH=4

* Show type of physical error... Examine error, perform special. processing.PUT PRTDCB,ERRMSG Print physical error message... Restore caller’s registers. (1, 13, 14).

BR 14 Return to VSAM....

ERRCODE DC F’0’ RPL reason code from SHOWCB.PERRMSG DS 0XL128 Physical error message.

DS XL12 Pad for unprintable part.

ERRMSG DS XL116 Printable format part of message....

PRTDCB DCB ..... QSAM DCB.

SAVE DS 18F SYNAD routine’s save area.

SAVREG DS 3F Save registers 1, 13, 14.

図 34. SYNAD 出口ルーチンの例

VSAM ユーザー作成出口ルーチンのコーディング

第 16 章 VSAM ユーザー作成出口ルーチンのコーディング 299

Page 324: DFSMS データ・セットの使用法

クロスメモリー・モードで実行している場合は、UPAD ルーチンを持つ必要があり、RPL は WAITX を指定する必要があります。「z/OS MVS Programming:

Extended Addressability Guide」では、クロスメモリー・モードについて説明しています。UPAD ルーチンは、非クロスメモリー・モードにはオプショナルです。

表 24 は、共用リソースとの同期要求のために VSAM が UPAD ルーチンを呼び出す条件を説明しています。UPAD ルーチンは、共用リソースとの同期要求または改良制御インターバル処理 (ICI) 用にのみ取られます。

表 24. UPAD ルーチンへの出口が取られる場合の条件

XMM

抑止状態

必要とされるUPAD 入出力待機 入出力ポスト リソース待機 リソース・ポスト

あり あり あり UPAD が取られる

UPAD が取られる

UPAD が取られる

UPAD が取られる

なし あり なし 要求された場合UPAD が取られる

要求された場合であってもUPAD が取られない

要求された場合UPAD が取られる

リソース所有者または据え置き要求が XM モードで取られる場合、UPAD が取られる

なし なし なし 要求された場合UPAD が取られる

要求された場合であってもUPAD が取られない

要求された場合UPAD が取られる

リソース所有者または据え置き要求が XM モードで取られる場合、UPAD が取られる

注:

v クロスメモリー・モードまたは SRB モードにあるときは、監視プログラム状態になければなりません。

v UPAD が必要とされる場合は、RPL WAITX が必要です。UPAD ルーチンを取ることができるのは、RPL がWAITX を指定する場合のみです。

v VSAM は、VSAM レコード管理要求の同じ 1 次アドレス・スペースで UPAD 出口に制御を与えます。ただし、出口は OPEN 中にセットアップされたので、VSAM は VSAM レコード管理要求のものとは異なるホームおよび 2

次 ASID を持つ UPAD に制御を与えることができます。

v UPAD がポストプロセッシングを行うために取られるときは、ECB が「ポストされている」とマークされているのを確かめてから、VSAM に戻ります。VSAM は UPAD 戻りコードを検査せず、UPAD が取られた後もポストしません。クロスメモリー・タスク・モードのみでは、待機用に取られた UPAD 出口が ECB がポストされずに戻る場合、VSAM は WAIT SVC を発行します。

v UPAD 出口は、同じアドレス・スペース、モード、状態、およびアドレッシング・モードで、および UPAD 出口が呼び出された同じ TCB または SRB のもとで VSAM に戻ります。レジスター 1、13、および 14 は、UPAD 出口が VSAM に戻る前に復元する必要があります。

v ICI は、どのモードでも UPAD を必要としません。リソース待機およびポストプロセッシングは、ICI に適用されません。

RLS は UPAD 出口を無視します。

レジスターの内容301ページの表 25 は、UPAD 出口ルーチンが入力されるときに VSAM によって渡されるレジスターの内容を示しています。

VSAM ユーザー作成出口ルーチンのコーディング

300 z/OS V1R10 DFSMS データ・セットの使用法

Page 325: DFSMS データ・セットの使用法

表 25. UPAD 出口ルーチンへの入り口でのレジスターの内容

レジスター 内容

0 予測不能。

1 VSAM によってビルドされたパラメーター・リストのアドレス。

2 から 12 予測不能。

13 予約済み。

14 VSAM への戻りアドレス。

15 UPAD ルーチンの入り口アドレス。

プログラミングの考慮事項データ・セットがオープンされる前に、UPAD 出口ルーチンがアクティブになっている必要があります。出口は、処理中非アクティブにしてはなりません。UPAD 出口が必要であり、データ・セットを処理するのに複数の ACB が使用される場合、オープンされる最初の ACB は、UPAD 出口ルーチンを識別する出口リストを指定する必要があります。

UPAD 出口を使用して、レジスター 1 によってポイントされた、VSAM によってビルドされるパラメーター・リストの内容を検査することができます。表 26 は、このパラメーター・リストについて説明したものです。

表 26. UPAD ルーチンに渡されるパラメーター・リスト

オフセット バイト 説明

0(X'0') 4 ユーザーの RPL のアドレス。UPAD が CLOSE 処理用にまたはパスを通じての代替索引用に取られる場合は、システム生成 RPL のアドレス。

4(X'4') 4 5 バイト・データ・セット ID のアドレス。ID の最初の 4

バイトは、ACB アドレスです。最後のバイトは、コンポーネントを識別します。データ (X'01')、または索引 (X'02')。

8(X'8') 4 要求の ECB のアドレス。

12(X'0C') 4 予約済み。

12(X'10') 1 UPAD フラグ:

ビット 0 = ON: リソース待ちビット 0 = OFF: I/O 待ち

(ビット 0 は、待機処理用に取られた UPAD にのみ適用されます。)

下位 7 ビットは予約済みです。

16(X'11') 4 予約済み。

20(X'14') 1 理由コード:

X'00' VSAM 待機処理を行なうX'04' UPAD ポスト処理を行なうX'08'-X'FC' 予約済み

VSAM ユーザー作成出口ルーチンのコーディング

第 16 章 VSAM ユーザー作成出口ルーチンのコーディング 301

Page 326: DFSMS データ・セットの使用法

UPAD 出口ルーチンがレジスター 14 を変更する場合 (たとえば、TESTCB を発行することによって)、ルーチンは、VSAM に戻る前にレジスター 14 を復元する必要があります。レジスター 1 が使用される場合、UPAD 出口ルーチンは、VSAM に戻る前に、それをパラメーター・リスト・アドレスと一緒に保管する必要があります。

UPAD ルーチンは、VSAM を終了させることになった要求の完了が呼び出されたのと同じ TCB のもとで VSAM に戻る必要があります。UPAD 出口ルーチンは、最初にそれ自身の保管域を取得せずに、レジスター 13 を保管域ポインターとして使用することはできません。

UPAD 出口ルーチンは、LSR または GSR 処理中の WAIT の前に取られると、よりよい処理オーバーラップ (非同期処理に似ています) を入手するために他のVSAM 要求を発行することがあります。ただし、開始された要求は、開始する要求によって所有されるリソースに WAIT を発行することがあるので、UPAD ルーチンは、WAITX を指定しない同期 VSAM を発行してはなりません。

UPAD ルーチンが WAITX を指定する要求を開始する場合、UPAD ルーチンは再入可能でなければなりません。複数の要求が開始された後、特定の ECB または多くの ECB が完了とポストされるのを待機するのではなく、ECB のグループのうち 1

つの ECB が完了とポストされるのを待機することによって要求が同期される必要があります。(リスト内の一部の ECB をポストすることは、UPAD ルーチンに入った他の要求の一部を取り戻すことに依存していることがあります。)

クロスメモリー・モードで実行している場合は、UPAD ルーチンを持つ必要があり、RPL は WAITX を指定する必要があります。イベントの待機またはポストが必要な場合、UPAD ルーチンには、待機またはポストプロセッシングを行う制御が与えられます (UPAD パラメーター・リストでの理由コード 0 または 4)。

ユーザー・セキュリティー検査ルーチンVSAM パスワード保護を使用する場合、要求者の権限を検査するのにご自身のルーチンを使用することもできます。ルーチンは、出口リストを介してではなく、OPEN

から呼び出されます。要求者がマスター・パスワード以外の正しいパスワードを与えるとき、VSAM は、SYS1.LINKLIB に常駐しなければならないルーチンに制御を移動します。

推奨: VSAM パスワード保護は使用しないでください。その代わりに、 RACF または同等のプロダクトを使用してください。

AUTHORIZATION パラメーターを指定したアクセス方式サービス・プログラムDEFINE コマンドを通じて、ユーザー・セキュリティー検査ルーチン (USVR) を識別して、256 バイトものご自身のセキュリティー情報を、保護される各データ・セットに関連付けることができます。ルーチンが制御を入手すると、ユーザー・セキュリティー許可レコード (USAR) が USVR に使用可能にされます。データ・セットへのアクセスを、選択したとおりに制限することができます。たとえば、データ・セットの所有者がデータ・セットを定義するときに ID を与えるよう要求して、その所有者のみがデータ・セットにアクセスできるようにすることができます。

VSAM ユーザー作成出口ルーチンのコーディング

302 z/OS V1R10 DFSMS データ・セットの使用法

Page 327: DFSMS データ・セットの使用法

USVR が一度に複数のタスクによって使用される場合、USVR 再入可能をコーディングするか、同時入力を処理するための別の方法を開発する必要があります。

USVR が処理を完了するとき、それは (レジスター 15 で)、権限が付与されている場合は 0、権限がレジスター 15 で付与されていない場合は 0 以外の戻りコードをVSAM に戻す必要があります。表 27 は、VSAM が USVR に制御を与えるときのレジスターの内容を示しています。

VSAM ユーザー作成出口ルーチンのコーディング

第 16 章 VSAM ユーザー作成出口ルーチンのコーディング 303

Page 328: DFSMS データ・セットの使用法

表 27. ユーザー・セキュリティー検査ルーチンとの通信

レジスター 内容

0 予測不能。

1 次のフォーマットを持つパラメーター・リストのアドレス:

44 バイト 処理する権限を検査するデータ・セットの名前 (アクセス方式サービス・プログラムで定義したときに指定される名前)

8 バイト プロンプト・コード (またはすべて 0)。

8 バイト 所有者識別 (またはすべて 0)。

8 バイト 要求者が与えたパスワード (VSAM によって検査済み)。

2 バイト ユーザー・セキュリティー許可ルーチンの長さ (バイナリー)。

- ユーザー・セキュリティー許可。

2 から 13 予測不能。

14 VSAM への戻りアドレス。

15 USVR ルーチンへの入り口アドレス。ルーチンが VSAM に戻るとき、レジスター 15 にある次のコードによって、要求者がデータ・セットへのアクセスを行うことが許可されているかどうかを示します。

0 権限が付与されている。

0 以外 権限が付与されていない。

VSAM ユーザー作成出口ルーチンのコーディング

304 z/OS V1R10 DFSMS データ・セットの使用法

Page 329: DFSMS データ・セットの使用法

第 17 章 VSAM での 31 ビット・アドレッシング・モードの使用

この章では、VSAM を使用して 31 ビット・アドレッシングをインプリメントする場合に知っておく必要がある規則、ガイドライン、およびキーワード・パラメーターを扱います。

トピック 該当ページ

VSAM のオプション 305

VSAM のオプションVSAM を使用して、16 MB より上または下で、制御ブロック、バッファー、および複数のローカル共用リソース (LSR) プールを取得することができます。ただし、プログラムが 24 ビット・アドレスを使用する場合、16 MB より上にある制御ブロック、バッファー、または LSR プールを参照しようとすると、プログラム・チェックを生成します。24 ビット・アドレスでは、データ・バッファーへのアドレッシングができません。

制御ブロック、バッファー、またはプールが 16MB 境界より上に置くことが可能と指定し、24 ビット・モードにある間に位置指定モードを使用してレコードにアクセスしようとすると、プログラムは、プログラム・チェック (ABEND 0C4) を行います。

注: RLS 処理では、バッファーまたは制御ブロックのロケーションを指定できません。RLS は ACB RMODE31= keyword を無視します。

31 ビット・アドレスを使用するときは、次の規則を守ってください。

v アドレスを含む VSAM 制御ブロックにはすべて、有効な 31 ビット・アドレスが入っている必要があります。24 ビットまたは 31 ビット・アドレスを使用している場合は、31 ビット・アドレス・フィールドの高位バイトをユーザー定義のフラグ・フィールドとして使用しないでください。

v 入出力バッファーおよび制御ブロックは、ストレージ内の 16 MB より上または下で入手することができます。

– 入出力バッファーおよび制御ブロックは、ACB、GENCB、MODCB、またはBLDVRP マクロのデフォルトを取ることにより 16 MB より下で要求することができます。

– ACB、GENCB、MODCB、または BLDVRP マクロで RMODE31=BUFF パラメーターを使用することにより 入出力バッファーは 16 MB より上で、制御ブロックは 16 MB より下で要求することができます。

– ACB、GENCB、MODCB、または BLDVRP マクロで RMODE31=CB パラメーターを指定することによって、制御ブロックは 16 MB より上で、バッファーは 16 MB より下で要求することができます。

© Copyright IBM Corp. 1987, 2008 305

Page 330: DFSMS データ・セットの使用法

– ACB、GENCB、MODCB、または BLDVRP マクロで RMODE31=ALL パラメーターを指定することにより 制御ブロックを 16 MB より上で要求することができます。

– RMODE31=NONE または AMP パラメーターの CB サブパラメーターを指定することによりバッファーを 24 ビット・アドレス可能ストレージで入手することができます。

– RMODE31=NONE または AMP パラメーターの BUFF サブパラメーターを指定することにより制御ブロックを 24 ビット・アドレス可能ストレージで入手することができます。

v UPAD 出口ルーチンと JRNAD 出口ルーチンに渡されるパラメーター・リストは、VSAM 制御ブロックで指定される同じ区域に常駐しています。RMODE31=CB または RMODE31=ALL が指定されている場合、パラメーター・リストは 16 MB より上に常駐します。

v ACB、BLDVRP、および DLVRP マクロの指定を含むプログラムの部分を再コンパイルする必要があります。

v JCL で AMP=(RMODE31=) パラメーターを指定することにより、31 ビット・パラメーターを指定してください。

表 28 では、31 ビット・アドレス・キーワード・パラメーターおよび該当するVSAM マクロでのそれらの使用を要約しています。

表 28. 31 ビット・アドレス・キーワード・パラメーター

マクロ RMODE31= MODE= LOC=

ACB VSAM 制御ブロックおよび入出力バッファーの仮想記憶域ロケーション

無効 無効

BLDVRP VSAM LSR プール、VSAM 制御ブロック、および入出力バッファーの仮想記憶域ロケーション

BLDVRP パラメーター・リストのフォーマット (24 ビットまたは 31

ビット・フォーマット)

無効

CLOSE 無効 CLOSE パラメーター・リストのフォーマット(24 ビットまたは 31 ビット・フォーマット)

無効

DLVRP 無効 DLVRP パラメーター・リストのフォーマット(24 ビットまたは 31 ビット・フォーマット)

無効

GENCB 作成されている ACB に置かれる RMODE31

値。生成された ACB がオープンされると、RMODE31 値は VSAM 制御ブロックおよび入出力バッファーの仮想記憶域ロケーションを決めます。

無効 ACB、RPL、またはEXIT LIST 用に VSAM

によって入手された仮想記憶域のロケーション。

MODCB 指定された ACB に置かれる RMODE31 値 無効 無効

OPEN 無効 OPEN パラメーター・リストのフォーマット(24 ビットまたは 31 ビット・フォーマット)

無効

VSAM での 31 ビット・アドレッシング・モードの使用

306 z/OS V1R10 DFSMS データ・セットの使用法

Page 331: DFSMS データ・セットの使用法

関連資料:

v 16 MB より上に常駐するバッファーの作成とアクセスについての情報は、 190ページの『16 MB を超えるバッファーの入手』を参照してください。

v アドレス・スペースに複数の LSR プールをビルドすることについては、 239ページの『第 13 章 VSAM データ・セット間でのリソースの共用』を参照してください。

v AMP=(RMODE31=) パラメーターを使用した 31 ビット・パラメーターの指定については、「z/OS MVS JCL 解説書」を参照してください。

VSAM での 31 ビット・アドレッシング・モードの使用

第 17 章 VSAM での 31 ビット・アドレッシング・モードの使用 307

Page 332: DFSMS データ・セットの使用法

VSAM での 31 ビット・アドレッシング・モードの使用

308 z/OS V1R10 DFSMS データ・セットの使用法

Page 333: DFSMS データ・セットの使用法

第 18 章 VSAM 用のジョブ制御言語の使用

この章では以下のトピックを扱います。

トピック 該当ページ

JCL ステートメントとキーワードの使用 309

JCL での VSAM データ・セットの作成 310

既存の VSAM データ・セットの検索 318

JCL ステートメントとキーワードの使用すべての VSAM データ・セットは、可変長 RRDS を除き、ジョブ制御言語 (JCL)

を使用して定義、作成、および検索することができます。VSAM データ・セットを識別するのに JCL DD ステートメントが使用されるとき、DD ステートメントは、データ・セット名および後処理 (DISP) キーワードを含んでいる必要があります。該当するときは、DD ステートメントに他のキーワードを追加することができます。 310ページの『JCL での VSAM データ・セットの作成』および 318ページの『既存の VSAM データ・セットの検索』は、必要な JCL キーワードについて説明しています。すべての DD ステートメントの説明については、「z/OS MVS JCL

解説書」を参照してください。

データ・セット名データ・セット名 (DSNAME) パラメーターは、処理されているデータ・セットの名前を指定しています。新規データ・セットの場合、指定された名前がデータ・セットに割り当てられます。既存のデータ・セットでは、システムは名前を使用して、データ・セットを見つけます。

オプションにより、DSNAME パラメーターは、VSAM データ・セットのコンポーネントの 1 つを指定するのに使用できます。各 VSAM データ・セットは、1 つ以上のコンポーネントのクラスターとして定義されます。キー順データ・セットには、データ・コンポーネントと索引コンポーネントが含まれます。入力順データ・セットと線形データ・セットおよび固定長 RRDS には、データ・コンポーネントのみが含まれます。可変長 RRDS はクラスターとして処理します。各代替索引には、データ・コンポーネントと索引コンポーネントが含まれます。 クラスター名の指定について詳しくは、 120ページの『クラスターの命名』を参照してください。

後処理後処理 (DISP) パラメーターは、システムに対するデータ・セットの状況を記述し、ステップまたはジョブが終了した後にデータ・セットをどう処理するかシステムに指示します。

新規のシステム管理データ・セットおよび VSAM データ・セットは、DISP=(NEW,CATLG) が指定されていたかのように扱われます。それらはステップ開始時にカタログに入れられます。

© Copyright IBM Corp. 1987, 2008 309

Page 334: DFSMS データ・セットの使用法

共用環境で非システム管理データ・セットを保護するには、共用環境で不適切にアクセスすることが可能なデータ・セットに対して DISP=OLD と指定します。DISP=OLD と指定すると、そのデータ・セットには 1 つのジョブ・ステップしかアクセスできません。データ・セットの共用オプションがプログラムが予期する共用のタイプを許可する場合、別個のジョブの DD ステートメントの DISP=SHR を指定して、複数のジョブ・ステップがデータ・セットを共用できるようにすることができます。別個の DD ステートメントを使うと、クロス領域共用の場合と同じ規則のもとでいくつかのサブタスクがデータ・セットを共用できます。別個の DD ステートメントが使用され、1 つ以上のサブタスクが出力処理を実行する場合、DD ステートメントは DISP=SHR を指定する必要があります。データ・セットの共用について詳しくは、 221ページの『第 12 章 VSAM データ・セットの共用』を参照してください。

JCL での VSAM データ・セットの作成JCL DD ステートメントを RECORG パラメーターと一緒に指定して、永続または一時 VSAM データ・セットを作成することができます。SMS はアクティブでなければなりませんが、データ・セットはシステム管理される必要はありません。データ・セットが割り振られるとき、システムは永続 VSAM データ・セットをカタログに入れます。

SMS では、RECORG を含むデータ・クラスをオプションで指定することができます。ストレージ管理者が ACS ルーチンを通じて、RECORG を含むデフォルトのデータ・クラスを作成する場合、このデフォルトも選ぶオプションがあります。

次のリストには、VSAM データ・セットを割り振るのに使用される、RECORG を含むキーワードが記載されています。これらのキーワードの詳細な説明については、「z/OS MVS JCL 解説書」を参照してください。

AVGREC ― SPACE キーワードで平均レコード要求のスケール値を指定します。システムは、SPACE キーワードで指定された 1 次量および 2 次量にスケール値を指定します。SPACE キーワードが平均レコード要求以外のものを指定する場合、AVGREC キーワードは無視されます。

AVGREC キーワードについて可能な値は、次のとおりです。

U ― 1 のスケールを使用しますK ― 1024 のスケールを使用しますM ― 1 048 576 のスケールを使用します

DATACLAS ― データ・セット割り振りパラメーターおよびそれらのデフォルト値のリストです。ストレージ管理者は、DATACLAS 定義で KEYLEN、KEYOFF、LRECL、LGSTREAM、および RECORG を指定できますが、ユーザーはそれらを指定変更できます。

DSNTYPE― そのデータ・セットが拡張フォーマットであることが望ましいか、拡張フォーマットである必要があるかどうかを指定します。以下は VSAM に関連する値です。

v BASIC。拡張フォーマットではありません。

VSAM 用のジョブ制御言語の使用

310 z/OS V1R10 DFSMS データ・セットの使用法

Page 335: DFSMS データ・セットの使用法

v EXTPREF。そのデータ・セットが拡張フォーマットであることを選択しますが、それが不可能な場合は、非拡張フォーマットが要求されます。

v EXTREQ。拡張フォーマットが必須です。それが不可能な場合は、その要求は失敗に終わります。

EXPDT ― アクセス方式サービス・プログラム DELETE コマンドで PURGE キーワードを指定せずにデータ・セットを削除できない期限の日付を指定します。期限日付以降、データ・セットを削除したり、別のデータ・セットによって上書きすることができます。

KEYLEN ― キー長を指定します。

LGSTREAM ― 使用されるログ・ストリームを指定します。 LOG および BWO

パラメーターは、データ・クラスから派生させることができます。

KEYOFF ― キーへのオフセットを指定します。

LIKE ― 新規データ・セットを割り振るには、既存のカタログ式データ・セットの特性を使用する必要があることを指定します。コピーできる特性のリストについては、「z/OS MVS JCL 解説書」を参照してください。

LRECL ― 論理レコード長を指定します。システムが決定する制御インターバル・サイズを暗黙指定します。

MGMTCLAS ― 新規のシステム管理データ・セットの管理クラスの名前 (1 から8 文字) を指定します。ストレージ管理者は、MGMTCLAS パラメーターでユーザーが指定できる管理クラスの名前を定義します。データ・セットが割り振られた後、管理クラスの属性が次のものを制御します。

v データ・セットのマイグレーション。これには、1 次ストレージからマイグレーション・ストレージへの、および階層マイグレーション体系の 1 つのマイグレーション・レベルから別のマイグレーション・レベルへのマイグレーション基準が含まれます。

v データ・セットのバックアップ。これには、バックアップの頻度、バージョンの数、およびバックアップ・バージョンの保存基準が含まれます。

RECORG ― 希望するデータ・セットのタイプ (KS、ES、RR、LS) を指定します。

KS = キー順データ・セットES = 入力順データ・セットRR = 固定長相対レコード・データ・セットLS = 線形データ・セット

REFDD ― 新規データ・セットを割り振るには、JCL ステートメントでの特性、および直前の DD ステートメントのデータ・クラスからの特性を使用する必要があることを指定します。

RETPD ― アクセス方式サービス・プログラム DELETE コマンドで PURGE キーワードを指定することにより、データ・セットを削除できない日数を指定します。保存期間の後、データ・セットを削除したり、別のデータ・セットに上書きすることができます。

VSAM 用のジョブ制御言語の使用

第 18 章 VSAM 用のジョブ制御言語の使用 311

Page 336: DFSMS データ・セットの使用法

SECMODEL ― RACF がデータ・セット用の個別プロファイルを作成するのに使用する必要がある、「モデル」プロファイルの名前を指定できます。 モデル・プロファイルからコピーできる情報のリストについては、「z/OS MVS JCL 解説書」を参照してください。

STORCLAS ― 新規のシステム管理データ・セットのストレージ・クラスの名前 (1

から 8 文字) を指定します。

ストレージ管理者は、STORCLAS パラメーターでユーザーが指定できるストレージ・クラスの名前を定義します。 STORCLAS を指定するか、ACS ルーチンが新規データ・セットのストレージ・クラスを選択すると、ストレージ・クラスが割り当てられます。

ストレージ・クラスを使用して、SMS がデータ・セットのストレージに使用するストレージ・サービス・レベルを指定します。ストレージ・クラスは、非システム管理データ・セットの UNIT および VOLUME パラメーターで指定されたストレージ属性を置き換えます。

保証スペース・ストレージ・クラスがデータ・セット (クラスター) に割り当てられ、ボリューム通し番号が指定されている場合、次の条件が満たされると、指定されたすべてのボリュームにスペースが割り振られます。v 指定されたボリュームがすべて同じストレージ・グループに属している。v これらのボリュームが属しているストレージ・グループが、この割り振りについて ACS ルーチンによって選択されたストレージ・グループのリストに入っている。

VSAM 用のジョブ制御言語の使用

312 z/OS V1R10 DFSMS データ・セットの使用法

Page 337: DFSMS データ・セットの使用法

一時 VSAM データ・セット一時データ・セットは、ジョブ内で割り振られ、削除されます。また、一時 VSAM

データ・セットは、ストレージ管理サブシステムによって管理されるストレージにある必要があります。 SMS がデータ・セットを管理するのは、ユーザーがストレージ・クラスを指定する場合 (DD STORCLAS パラメーターを使用して) またはインストール先作成自動クラス選択 (ACS) ルーチンがデータ・セットの選択クラスを選択する場合です。

データ・セット名一時データ・セットを定義するときは、DSNAME を省略することができます。省略される場合、システムはデータ・セットの修飾名を生成します。DSNAME を指定する場合は、& または && で始める必要があります。DSNAME は単純であるか、修飾することができます。

&ABC&XYZ

割り振りRECORG=KS|ES|LS|RR を次のように指定して、VSAM 一時データ・セットを割り振ることができます。

v DD ステートメントの RECORG キーワードまたは動的割り振りパラメーターによって

v データ・クラスによって (選択されたデータ・クラスが RECORG 属性を持っている場合)

v ストレージ管理者によって設定されたデフォルトのデータ・クラスによって (デフォルトのデータ・クラスが存在し、RECORG 属性を持っている場合)

一時データ・セットを使用すると、次の問題が避けられます。

v データ・セットは、ユーザーが許可されていないカタログに定義できます。

v データ・セットは、RACF ユーザーに、または、ユーザーが許可されていないグループ ID に割り振ることができます。 データ・セットは、 RACF に定義されていない ID にも割り当てることができます。その場合、割り振りは、すべてのデータ・セットの保護を必要とする RACF オプションが有効な場合、またはデータ・セットが 個別 RACF プロファイルを必要とする場合に失敗します。

v その名前でカタログに入っているデータ・セットがすでにあるために割り振りが失敗することがあります。一時データ・セットと見なされるようなものに同じデータ・セット名を使用する多数のジョブがある場合も、このような失敗が発生することがあります。

一時 VSAM データ・セットの制約事項一時 VSAM データ・セットの使用に、次の制約事項が適用されます。

v マルチボリューム一時 VSAM データ・セットは許可されません。

v ジョブが完了すると、一時データ・セットを参照できません。

v VOL=SER および UNIT を使用しても、一時データ・セットを作成したジョブの外部ではそれを参照できません。

v EXPDT キーワードおよび RETPD キーワードは無視されます。

VSAM 用のジョブ制御言語の使用

第 18 章 VSAM 用のジョブ制御言語の使用 313

Page 338: DFSMS データ・セットの使用法

一時データ・セットの詳細については、「z/OS MVS JCL 解説書」および「z/OS

MVS プログラミング:アセンブラー・サービス ガイド」を参照してください。一時 VSAM データ・セットを作成する例については、 317ページの『例 4: 一時VSAM データ・セットの割り振り』を参照してください。

VSAM 用のジョブ制御言語の使用

314 z/OS V1R10 DFSMS データ・セットの使用法

Page 339: DFSMS データ・セットの使用法

JCL を使用して VSAM データ・セットを割り振る例以下の例には、割り振り情報が含まれています。

例 1: キー順データ・セットの割り振り次の例は、キー順データ・セットの割り振りを示しています。

//DDNAME DD DSNAME=KSDATA,DISP=(NEW,KEEP),// SPACE=(80,(20,2)),AVGREC=U,RECORG=KS,// KEYLEN=15,KEYOFF=0,LRECL=250

キーワードの説明:

v DSNAME はデータ・セット名を指定します。

v DISP は、このステップで新規データ・セットが割り振られること、およびこのステップが正常に終了する場合にデータ・セットがボリュームに保持されることを指定します。データ・セットがシステム管理されない場合、KEEP は、VSAM データ・セットに許可される唯一の正常な終了後処理サブパラメーターです。非システム管理 VSAM データ・セットは、パス、カタログ化、非カタログ化、または削除してはなりません。

v SPACE は、平均レコード長 80、1 次スペース量 20、および 2 次スペース量 2

を指定します。

v AVGREC は、SPACE キーワードで指定される 1 次スペース量および 2 次スペース量が単位 (1 の乗数) でのレコード数を表します。この例で DATACLAS が指定されたとすると、AVGREC はデータ・クラススペース割り振りを指定変更することになります。

v RECORG は、VSAM キー順データ・セットを指定します。

v KEYLEN は、データ・セットで使用されるキーの長さが 15 バイトであることを指定します。この例で、DATACLAS が指定されたとすると、KEYLEN は、データ・クラス・キー長割り振りを指定変更することになります。

v KEYOFF は、各レコードのキーの最初のバイトのゼロのオフセットを指定します。この例で、DATACLAS が指定されたとすると、KEYOFF は、データ・クラス・キー・オフセット割り振りを指定変更することになります。

v LRECL は、250 バイトのレコード長を指定します。この例で、DATACLAS が指定されたとすると、LRECL は、データ・クラス・レコード長割り振りを指定変更することになります。

v システムは、制御インターバル用の適切なサイズを決定します。

VSAM 用のジョブ制御言語の使用

第 18 章 VSAM 用のジョブ制御言語の使用 315

Page 340: DFSMS データ・セットの使用法

例 2: キーワードを使用してのシステム管理キー順データ・セットの割り振り次の例は、システム管理キー順データ・セットの割り振りを示しています。

//DDNAME DD DSNAME=KSDATA,DISP=(NEW,KEEP),// DATACLAS=STANDARD,STORCLAS=FAST,// MGMTCLAS=STANDARD

キーワードの説明:

v DSNAME はデータ・セット名を指定します。

v DISP は、このステップで新規データ・セットが割り振られること、およびこのステップが正常に終了する場合にデータ・セットがボリュームに保持されることを指定します。システム管理データ・セットが割り振られているので、VSAM データ・セットにすべての後処理が有効ですが、UNCATLG は無視されます。

v DATACLAS は、新規データ・セットにデータ・クラスを指定します。SMS がアクティブでない場合は、システムが構文チェックしてから、DATACLAS を無視します。 DATACLAS キーワードを既存のデータ・セット、または SMS がサポートしないデータ・セットに指定する場合も、SMS はそのキーワードを無視します。

このキーワードはオプションです。新規データ・セットに DATACLAS を指定せず、ストレージ管理者が ACS ルーチンを提供した場合、ACS ルーチンはそのデータ・セット用のデータ・クラスを選択することができます。

v STORCLAS は、新規データ・セットにストレージ・クラスを指定します。 SMS

がアクティブでない場合は、システムが構文チェックしてから、STORCLAS を無視します。 STORCLAS キーワードを既存のデータ・セットに指定する場合も、SMS はそのキーワードを無視します。

このキーワードはオプションです。新規データ・セットに STORCLAS を指定せず、ストレージ管理者が ACS ルーチンを提供した場合、ACS ルーチンはそのデータ・セット用のストレージ・クラスを選択することができます。

v MGMTCLAS は、新規データ・セットに管理クラスを指定します。 SMS がアクティブでない場合は、システムが構文チェックしてから、MGMTCLAS を無視します。 MGMTCLAS キーワードを既存のデータ・セットに指定する場合も、SMS

はそのキーワードを無視します。

このキーワードはオプションです。新規データ・セットに MGMTCLAS を指定せず、ストレージ管理者が ACS ルーチンを提供した場合、ACS ルーチンはそのデータ・セット用の管理クラスを選択することができます。

例 3: キーワード・デフォルトを使用しての VSAM データ・セットの割り振り次の例は、JCL により永続 VSAM データ・セットを割り振るために必要なキーワードの最小数を示しています。

//DDNAME DD DSNAME=DSVSAM,DISP=(NEW,CATLG)

キーワードの説明:

v DSNAME はデータ・セット名を指定します。

VSAM 用のジョブ制御言語の使用

316 z/OS V1R10 DFSMS データ・セットの使用法

Page 341: DFSMS データ・セットの使用法

v DISP は、このステップで新規データ・セットが割り振られること、およびシステムまたはユーザー・カタログ内のデータ・セットをポイントする入り口をシステムが置くことを指定します。

v ストレージ管理者がユーザーに代わって SMS クラスを選択する ACS ルーチンを提供したか、DATACLAS が RECORG を定義する場合、DATACLAS、STORCLAS、および MGMTCLAS は必要ありません。

例 4: 一時 VSAM データ・セットの割り振り次の例は、一時 VSAM データ・セットの割り振りを示しています。

//VSAM1 DD DSN=&CLUSTER,DISP=(NEW,PASS),// RECORG=ES,SPACE=(1,(10)),AVGREC=M,// LRECL=256,STORCLAS=TEMP

キーワードの説明:

v DSN はデータ・セット名を指定します。 一時データ・セット用のデータ・セット名を指定する場合は、& または && で始めなければなりません。ただし、このキーワードはオプションです。DSN を指定しない場合、システムは、一時データ・セット用に修飾されたデータ・セット名を生成します。

v DISP は、このステップで新規データ・セットが割り振られること、およびデータ・セットが同じジョブの後続のステップ用に渡されることを指定します。KEEP または CATLG が一時データ・セットに指定されている場合、システムは後処理を PASS に変更し、ジョブ終了時にデータ・セットを削除します。

v RECORG は、VSAM 入力順データ・セットを指定します。

v SPACE は、平均レコード長 1 および 1 次量 10 を指定します。

v AVGREC は、SPACE キーワードで指定された 1 次量 (10) は、メガバイト(1048576 の乗数) 単位でのレコード数を表します。

v LRECL は、256 バイトのレコード長を指定します。

v STORCLAS は、一時データ・セットにストレージ・クラスを指定します。

このキーワードはオプションです。新規データ・セット用の STORCLAS を指定しておらず、ストレージ管理者が ACS ルーチンを提供してある場合、ACS ルーチンはストレージ・クラスを選択することができます。

例 5: すべてのデフォルトを取る一時 VSAM データ・セットの割り振り次の例は、一時 VSAM データ・セットを割り振るために必要なキーワードの最小数を示しています。

//VSAM2 DD DISP=(NEW,PASS)

DSNAME 名が指定されない場合は、システムがそれを生成します。 STORCLAS

名が指定されておらず、ストレージ管理者が ACS ルーチンを提供してある場合は、ACS ルーチンがストレージ・クラスを選択することができます。キー順データ・セットのキー長は、デフォルトの DATACLAS で定義する必要があります。そうしない場合は、この例は失敗します。

VSAM 用のジョブ制御言語の使用

第 18 章 VSAM 用のジョブ制御言語の使用 317

Page 342: DFSMS データ・セットの使用法

既存の VSAM データ・セットの検索既存の VSAM データ・セットを検索するには、DD ステートメントを次の形式でコーディングします。

//ddname DD DSNAME=dsname,DISP=OLDまたは//ddname DD DSNAME=dsname,DISP=SHR

SMS がアクティブである場合は、ジョブ内で VSAM データ・セットを渡すことができます。システムは、永続 VSAM データ・セットで PASS を KEEP に置き換えます。ジョブで後にデータ・セットを参照するとき、システムはカタログからデータ・セット情報を入手します。SMS を使わないと、ジョブ内で VSAM データ・セットを渡せません。

マイグレーションの考慮事項DISP=(OLD,DELETE) で VSAM データ・セットを割り振る既存の JCL を持つとき、SMS が非アクティブである場合は、システムが DELETE を無視し、データ・セットを保持します。SMS がアクティブな場合、DELETE は有効であり、システムはデータ・セットを削除します。

VSAM データ・セットを処理するために使用されるキーワードVSAM データ・セットが検索されたら、次のキーワードを使用して VSAM データ・セットを処理します。新規 VSAM データ・セットを割り振るのではなく、既存の VSAM データ・セットを処理するには、これらのパラメーターを使用します。新規 VSAM データ・セットを割り振るために使用される JCL パラメーターについての情報は、 310ページの『JCL での VSAM データ・セットの作成』を参照してください。

AMP は VSAM データ・セットでのみ使用されます。DD ステートメントで定義されたデータ・セットがオープンされると、AMP が有効になります。

注: これは、RLS によってサポートされていません。

DDNAME では、データ・セットを定義するのをジョブ・ステップで後まで延期することができます。

DISP =(SHR|OLD[,PASS]) は、データ・セットの状況を記述し、ステップまたはジョブが終了した後にデータ・セットをどう処理するかシステムに指示します。

DSNAME は、データ・セットの名前を指定します。

DUMMY は、データ・セットで後処理が行われないことを指定します。データ・セットに装置または外部ストレージ・スペースが割り振られないことも指定します。

DYNAM は、再使用のために保持される動的割り振りリソースの制御値を 1 だけ増やします。

FREE は、システムがデータ・セット用のリソースの割り振りをいつ解除するかを指定します。

PROTECT は、RACF にデータ・セットを保護するよう指示します。

VSAM 用のジョブ制御言語の使用

318 z/OS V1R10 DFSMS データ・セットの使用法

Page 343: DFSMS データ・セットの使用法

UNIT =(device number|type|group,p|unitcount) は、データ・セットを特定の装置またはグループの装置に置きます。

VOLUME =(PRIVATE|SER) データ・セットが常駐するボリュームを識別します。

SMS では、既存の VSAM データ・セットを検索するのに、AMP、UNIT、およびVOLUMES パラメーターを必要としません。SMS では、VSAM データ・セットにDISP サブパラメーター MOD、 NEW、CATLG、KEEP、PASS、および DELETE

を使用できます。

VSAM データ・セットを処理するとき、特定の JCL キーワードは、使用してはならないか、慎重に使用する必要があります。これらのキーワードのリストについては、「z/OS MVS JCL ユーザーズ・ガイド」の VSAM データ・セットのセクションを参照してください。これらのキーワードについてのそのほかの説明は、「z/OS

MVS JCL 解説書」を参照してください。

VSAM 用のジョブ制御言語の使用

第 18 章 VSAM 用のジョブ制御言語の使用 319

Page 344: DFSMS データ・セットの使用法

320 z/OS V1R10 DFSMS データ・セットの使用法

Page 345: DFSMS データ・セットの使用法

第 19 章 キー順データ・セットの索引の処理

この章では以下のトピックを扱います。

トピック 該当ページ

キー順データ・セットへのアクセス 321

索引レコードのフォーマット 325

キー圧縮 329

VSAM では、キー順データ・セットの索引にアクセスして、索引の問題を診断するのに役立てることができます。索引が損傷した場合、またはポインターが失われ、索引に含まれるものを正確に知りたい場合、これが役立ちます。データ・レコードへの通常のアクセス中 VSAM によって行われた索引処理を重複または置換しようとしないでください。

キー順データ・セットへのアクセスキー順データ・セットの索引には、次の 2 つの方法のいずれかでアクセスできます。

v クラスターをオープンするか、GETIX および PUTIX マクロを使用することによって

v 索引コンポーネントのみをオープンして、通常のデータ処理 (GET、PUT、など)

にマクロを使用することによって

GETIX および PUTIX を使用しての索引へのアクセスGETIX および PUTIX を使用してキー順データ・セットの索引を処理するには、ACB MACRF=(CNV,...) を指定してクラスターをオープンする必要があります。specified. CNV は、索引コンポーネントにアクセスするために使用する、制御インターバル・アクセスを提供します。

GETIX および PUTIX を使用してのアクセスは、制御インターバル別に直接に行われます。 VSAM は RPL OPTCD=(CNV,DIR) を必要とします。GETIX の検索引数は、制御インターバルの RBA です。 1 つの制御インターバルの RBA から次のものへの増分は、索引についての制御インターバル・サイズです。

GETIX は、更新用または更新用でなしに発行できます。VSAM は、OPTCD=NUP

または UPD を認識しますが、OPTCD=NSP を NUP として解釈します。

制御インターバルの内容は、PUTIX を通じて挿入することはできません。VSAM

は OPTCD=UPD を必要とします。内容は、GETIX を通じて更新用に前もって検索しておく必要があります。

GETIX の場合は RPL OPTCD=MVE または LOC が指定できますが、PUTIX の場合は OPTCD=MVE のみが有効です。OPTCD=LOC を使用して検索する場合、保管

© Copyright IBM Corp. 1987, 2008 321

Page 346: DFSMS データ・セットの使用法

するには OPTCD を MVE に変更する必要があります。OPTCD=MVE を使用する場合、AREALEN は少なくとも索引制御インターバル・サイズである必要があります。

これらの制約事項を超える場合、GETIX および PUTIX を通じての索引へのアクセスは、 207ページの『第 11 章 制御インターバルの処理』にある規則に従います。

索引コンポーネントのみへのアクセスキー順クラスターの索引コンポーネントへのアドレス・アクセスまたは制御インターバル・アクセスを取得するには、索引コンポーネントのみをオープンして、通常のデータ処理用の要求マクロを使用します。索引コンポーネントのみをオープンするには、ACB (または GENCB) マクロで識別された DD ステートメントでDSNAME=indexcomponentname と指定します。

索引レコードへはアドレス・アクセスを使用して、索引制御インターバルへは制御インターバル・アクセスを使用してアクセスできます。索引の処理にこれら 2 つのタイプのアクセスを使用するのは、データ・コンポーネントの処理にそれらを使用するのとあらゆる点で同一です。

索引コンポーネントのみを処理することは、入力順データ・セットを処理するのと同一です。索引自体は、索引を持たないので、キー・アクセスによって処理できません。

基本索引キー順データ・セットには、キー値をデータ・セット内の論理レコードの相対ロケーションに関連付ける索引が常にあります。 この索引は、基本索引と呼ばれます。基本索引、または単に索引には、次の 2 つの用途があります。v レコードを挿入する際の照合位置を見つけるv 検索用のレコードを見つける

初期にデータ・セットをロードするとき、レコードはキー順で VSAM に提示しなければなりません。データ・セットにレコードがロードされるにつれ、キー順データ・セット用の索引が VSAM によって自動的に作成されます。索引は制御インターバルに保管されます。索引制御インターバルには、次の下位レベルにある索引制御インターバルへのポインター、または制御域内の各データ制御インターバルごとに 1 つの項目が含まれます。

データ制御インターバルが論理レコード、フリー・スペース、および制御情報で完全にロードされると、VSAM は索引内に項目を作成します。項目は、データ制御インターバル内の最高可能キーとその制御インターバルの先頭へのポインターから構成されます。データ制御インターバル内の最高可能キーは、次の順次データ制御インターバル内の最初のキーの値より 1 だけ小さくなります。

323ページの図 35 は、19 などの単一の索引項目が、データ制御インターバル内で論理レコードを見つけるために必要なすべての情報を含むことを示しています。

キー順データ・セットの索引の処理

322 z/OS V1R10 DFSMS データ・セットの使用法

Page 347: DFSMS データ・セットの使用法

図 36 は、単一の索引制御インターバルが、単一のデータ制御域でレコードを見つけるために必要なすべての情報を含むことを示しています。

索引には、次の項目が含まれます。

1. 使用可能なフリー・スペース制御インターバルを示す、フリー制御インターバル・ポインター・リスト。この制御域には、フリー・スペースとして予約された制御インターバルがあるので、VSAM は、フリー・スペース・ポインターを索引制御インターバルに置いて、フリー・スペース・データ制御インターバルを位置指定します。

2. 25、データ制御インターバル 1 内の最高可能キー。この項目は、データ制御インターバル 1 の先頭をポイントします。

3. 19、データ制御インターバル 2 内の最高可能キー。この項目は、データ制御インターバル 2 の先頭をポイントします。

索引レベルVSAM 索引は、複数の索引レベルから構成することができます。各レベルには、次の下位レベルにあるレコードのロケーションを示す項目が付いたレコードのセットが含まれます。

324ページの図 37 は、基本索引のレベルを示し、シーケンス・セット索引レコードと制御域の間の関係を示しています。シーケンス・セットは、順次処理に使用される水平ポインターとデータ・セットへの垂直ポインターの両方を示しています。キ

図 35. データ制御インターバルに対する索引項目の関係

図 36. データ制御インターバルに対する索引項目の関係

キー順データ・セットの索引の処理

第 19 章 キー順データ・セットの索引の処理 323

Page 348: DFSMS データ・セットの使用法

ーの値は索引で実際には圧縮されているとはいえ、図はフル・キー値を示しています。

シーケンス・セット。最下位レベルにある索引レコードは、シーケンス・セットです。データ・セット内の各制御域ごとに 1 つの索引シーケンス・セット・レベル・レコードがあります。このシーケンス・セットは、データ制御インターバルのロケーションを示します。シーケンス・セット・レコード内の項目は、データ・コンポーネントの制御インターバルへのポインターと対になった、その制御インターバル内の最高可能キーから構成されます。

索引セット。複数のシーケンス・セット・レベル・レコードがある場合、VSAM は別の索引レベルを自動的にビルドします。2 次レベル索引レコードにある各項目は、1 つのシーケンス・セット・レコードをポイントします。シーケンス・セットより上にある索引のシーケンス・セットより上にある索引のレベルのレコードは、索引セットと呼ばれます。 索引セット・レコード内の項目は、次の下位レベルにある索引レコード内の最高可能キーと、その索引レコードの先頭へのポインターから構成されます。索引の最高レベルには、常に単一レコードのみが含まれます。

図 37. 基本索引のレベル

キー順データ・セットの索引の処理

324 z/OS V1R10 DFSMS データ・セットの使用法

Page 349: DFSMS データ・セットの使用法

レコードに順次アクセスするときは、VSAM はシーケンス・セットのみを参照します。これは、水平ポインターを使用して、1 つのシーケンス・セット・レコードから照合シーケンス内の次のレコード到達します。レコードに直接 (順次ではなしに)

アクセスするとき、VSAM は、データへの垂直ポインターを見つけるのに、索引の最高位レベルから下がってシーケンス・セットまでの垂直ポインターに従います。

VSAM 索引トラップVSAM には、各索引レコードを書き込む前にそのレコードをチェックする索引トラップがあります。 トラップは、次の一般的な索引の破損箇所をキャッチしますが、すべての破損箇所をキャッチするわけではありません:

v 最も高い位置に割り振られたレコードよりも、最も高い位置で使用されているレコードの方が高い場所にある

v 重複または無効な索引ポインター

v 索引レコードの順序間違い

v 無効なセクション・エントリー

v 無効なキー長

システム・プログラマーに対する VSAM 索引トラップの詳細は、「z/OS DFSMSdfp

Diagnosis」を参照してください。

索引レコードのフォーマット索引レコードは、データ・レコードと同様に制御インターバルに保管されますが、制御インターバルには 1 つだけの索引レコードが保管され、レコードと制御情報の間にフリー・スペースがない点が異なります。したがって、フラグ X'00' とレコードの長さ (制御インターバルの長さから 7 を引いた数) を含む RDF は 1 つしかありません。 CIDF もレコードの長さ (制御インターバルの先頭から制御情報への変位) を含みます。その 2 番目の数は 0 (フリー・スペースなし) です。 RDF および CIDF の内容は、索引内で使用される各制御インターバルについて同じです。最後に使用された制御インターバルの後の制御インターバルは CIDF が 0 で埋められており、ソフトウェアのファイル終わり (SEOF) を表すために使用されます。

索引制御インターバルは、データ制御インターバルのように制御域にグループ化されません。新規の索引レコードが必要な場合、それは索引データ・セットの末尾の新規制御インターバルに保管されます。その結果、1 つの索引レベルのレコードは、シーケンス・セットが索引セットから離れている場合を除き、別のレベルのレコードから分離されません。各索引レコードのレベルは、索引ヘッダー内のフィールドによって識別されます ( 326ページの『ヘッダー部分』を参照してください)。

索引レコードがトラック上で複製される場合、レコードの各コピーは、他のコピーと同一です。複製は、レコードの内容に影響を及ぼしません。

図 38 は、索引レコードの各部分を示しています。

キー順データ・セットの索引の処理

第 19 章 キー順データ・セットの索引の処理 325

Page 350: DFSMS データ・セットの使用法

索引レコードには、次の部分が含まれます。

v レコードに関する制御情報を含む 24 バイトのヘッダー。

v フリー制御インターバルを持つ制御域を規定するシーケンス・セット索引レコードでは、それらのフリー制御インターバルをポイントする項目があります。

v 未使用スペース (ある場合)。

v 索引セット・レコードの場合、索引の次の下位レベルにある制御インターバルを、または、シーケンス・セット・レコードの場合、索引レコードによって規定される制御域にある使用済み制御インターバルを位置指定するために使用される索引項目のセット。

ヘッダー部分索引の最初の 24 バイトは、索引レコードに関する制御情報を示すヘッダーです。表 29 は、そのフォーマットを示しています。すべての長さと変位はバイト単位で示されます。次の 2 つのセクションでは、ヘッダー内のフィールドの一部の意味と用途について詳細に説明します。

表 29. 索引レコードのヘッダーのフォーマット

フィールドオフセット 長さ 説明

IXHLL 0(0) 2 索引レコード長。索引レコードの長さは、制御インターバルから 7 を引いた長さに等しくなります。

IXHFLPLN 2(2) 1 索引項目制御情報の長さ。これは、索引項目の 4 つのフィールドのうち最後の3 つのものの長さです。(最初のフィールドの長さは、可変です。) 制御情報の長さは、3、4、または 5 バイトです。

図 38. 索引レコードの一般フォーマット

キー順データ・セットの索引の処理

326 z/OS V1R10 DFSMS データ・セットの使用法

Page 351: DFSMS データ・セットの使用法

表 29. 索引レコードのヘッダーのフォーマット (続き)

フィールドオフセット 長さ 説明

IXHPTLS 3(3) 1 垂直ポインター長標識。

索引項目の 4 番目のフィールドは、制御インターバルへの垂直ポインターです。

索引セット・レコードでは、ポインターは、索引内の制御インターバルを指定する 2 進数です。数は、制御インターバルの RBA を制御インターバルの長さで除算することにより計算されます。場合によっては長い索引も許可するために、ポインターは常に 3 バイトです。

シーケンス・セット・レコードでは、ポインターは、索引セット・レコードの場合と同様に計算される 0 で始まる 2 進数であり、シーケンス・セット・レコードによって規定されるデータ制御域内の制御インターバルを指定します。フリー制御インターバル項目は、垂直ポインター以上のものではありません。シーケンス・セット・レコードには、制御域にある制御インターバルと同じ数の索引項目およびフリー制御インターバル項目があります。制御域内の制御インターバルの数に応じて、ポインターは 1、2、または 3 バイトです。

X'01' の IXHPTLS 値は、1 バイトのポインターを示し、X'03' は 2 バイトのポインターを示し、X'07' は 3 バイトのポインターを示します。

IXHBRBA 4(4) 4 基本 RBA。索引セット・レコードでは、これは、索引の先頭の RBA です。その値は 0 です。索引内の制御インターバルの RBA は、索引制御インターバル長に垂直ポインターを乗算して、結果を基本 RBA に加算することによって計算されます。

シーケンス・セット・レコードで、これは、レコードによって規定される制御域の RBA です。制御域内の制御インターバルの RBA は、データ制御インターバル長に垂直ポインターを乗算して、結果を基本 RBA に加算することによって計算されます。したがって、制御域内の最初の制御インターバルは、制御域と同じ RBA を持ちます (長さに 0 を掛け、基本 RBA を加えると、RBA

に等しくなります)。

例外: 拡張アドレス可能 KSDS の場合は、このフィールドは RBA の代わりに相対制御インターバル番号となります。

IXHHP 8(8) 4 水平ポインター RBA。これは、このレコードと同じレベルにある次の索引レコードの RBA です。次の索引レコードは、このレコード内のキーの後に昇順で次のキーを含んでいます。

例外: 拡張アドレス可能 KSDS の場合は、このフィールドは RBA の代わりに相対制御インターバル番号となります。

12(C) 4 予約済み。

IXHLV 16(10) 1 レベル番号。シーケンス・セットは第 1 レベルの索引であり、そのレコードはそれぞれ 1 の IXHLV を持ちます。次の高位レベルのレコードは 2 というようになります。

17(11) 1 予約済み。

キー順データ・セットの索引の処理

第 19 章 キー順データ・セットの索引の処理 327

Page 352: DFSMS データ・セットの使用法

表 29. 索引レコードのヘッダーのフォーマット (続き)

フィールドオフセット 長さ 説明

IXHFSO 18(12) 2 レコード内の未使用スペースへの変位。索引セット・レコードでは、これはヘッダーの長さ (24) です。フリー制御インターバル項目はありません。

シーケンス・セット・レコードでは、変位は 24 にフリー制御インターバル項目 (ある場合) の長さを加えたものに等しくなります。

IXHLEO 20(14) 2 最後の索引項目にある制御情報への変位。最後の (左端の) 索引項目には、索引レコード内の最高のキーが含まれています。検索では、検索引数が先行する索引レコード内の最高のキーより大きいが、この索引レコード内の最高のキーより小か等しい場合は、この索引レコードが、索引引数キーの範囲を持つ次の下位レベルにある索引レコード、または検索引数キーを持つデータ・レコードが保管されている制御域のいずれかを規定します。

IXHSEO 22(16) 2 最初 (右端) のセクションの最後 (左端) の索引項目にある制御情報への変位。索引項目は、高速検索を単純化するためにセクションに分割されます。個々の項目は、正しいセクションが見つかるまで、検査されません。

フリー制御インターバル項目部分シーケンス・セット・レコードによって規定される制御域にフリー制御インターバルがある場合、シーケンス・セット・レコードにはそれらのフリー制御インターバルをポイントする項目があります。各項目は 1、2、または 3 バイトの長さです(ヘッダーで IXHPTLS によって示されます。索引項目にあるポインターと同じ長さです)。

項目はヘッダーの直後に続きます。それらは右から左に使用されます。右端の項目は、未使用スペース (その変位は、ヘッダー内の IXHFSO で示されます) の直前にあります。フリー制御インターバルが使用される場合は、そのフリー項目はゼロに変換され、スペースが未使用スペースの一部になり、新規索引項目が、昇順キー配列によって決定される位置に作成されます。

したがって、フリー制御インターバルは左に収縮し、索引項目は左に拡張します。制御域でのフリー制御インターバルがすべて使用されると、制御域を規定するシーケンス・セット・レコードは、もはやフリー制御インターバル項目を持たず、索引項目の数は、制御域にある制御インターバルの数に等しくなります。索引制御インターバル・サイズが小さすぎる値を使って指定された場合、すべてのフリー制御インターバルが使用される前に未使用スペースが索引項目用に使い尽くされ、データ制御域内の制御インターバルが使用できなくなることになることに注意してください。

索引項目部分索引レコードの索引項目部分は、ヘッダー、フリー制御インターバル項目 (ある場合)、および未使用スペースの後に残されたレコードをすべて収納します。

図 39 は、索引レコードの索引項目部分のフォーマットを示しています。検索速度を高めるため、索引項目がセクションにグループ化されます。それらは、項目の数の平方根とほぼ同じだけあります。たとえば、索引レコード内に 100 の索引項目がある場合、それらはそれぞれ 10 の項目の 10 のセクションにグループ化されます。

キー順データ・セットの索引の処理

328 z/OS V1R10 DFSMS データ・セットの使用法

Page 353: DFSMS データ・セットの使用法

(索引項目の数はフリー制御インターバルが使用されていくにつれて増えるにもかかわらず、セクションの数は変化しません。)

セクション、およびセクション内の項目は、右から左に配列されます。ヘッダー内の IXHLEO は、索引レコードの先頭から左端の索引項目にある制御情報への変位を示しています。IXHSEO は、右端のセクションの左端の索引項目内の制御情報への変位を示しています。索引レコードの右端の索引項目 (最低のキーを持つ項目) の制御情報への変位を計算するには、ヘッダー内の IXHLL から IXHFLPLN を (レコードの長さから索引項目内の制御情報の長さを) 差し引きます。

各セクションに先行して 2 バイトのフィールドがあり、これはセクション内の左端にある制御情報から次のセクション (左側) の左端の索引項目にある制御情報までの変位を示します。最後 (左端) のセクションの 2 バイト・フィールドには 0 が含まれます。

図 40 は、索引項目のフォーマットを示しています。

キー圧縮VSAM はキーを圧縮するので、索引項目は、索引レコード内で長さが変化します。つまり、これは、キーの前後から余分なまたは不必要な文字を除去して、スペースを節約します。キーから除去できる文字の数は、そのキーと先行キーおよび後続キーとの間の関係によって決まります。

先行文字圧縮 (前部圧縮) では、VSAM は、索引内のキーを索引内の先行するキーと比較し、そのキーから先行するキーにある先行文字と同じである先行文字を除去します。たとえば、キー 12356 がキー 12345 に後続する場合、文字 123 が 12356

図 39. 索引レコードの索引項目部分のフォーマット

図 40. 索引レコードのフォーマット

キー順データ・セットの索引の処理

第 19 章 キー順データ・セットの索引の処理 329

Page 354: DFSMS データ・セットの使用法

から除去されます。それらは、先行するキーの最初の 3 つの文字と同じだからです。索引レコードにある最低のキーは、先行文字圧縮を持ちません。索引レコード内に先行キーがないからです。

セクション内の最高キーには例外があります。先行文字圧縮では、これは、先行するキーではなく、先行するセクションの最高キーと比較されます。索引レコードの右端のセクションにある最高キーは、先行文字圧縮を持ちません。索引レコード内に先行セクションがないからです。

キーの「後部圧縮」と呼ばれるものは、実際には、索引内のキーの末尾から無意味な値を除去するプロセスです。除去される値は、X'FF' によって表されます。VSAM

は、索引内のキーをデータ内の次のキーと比較し、そのキーから後続するキーの対応する文字と等しくない最初の文字の右にある文字を除去します。たとえば、キー12345 (索引内の) がキー 12356 (データ内の) に先行する場合、2 つのキーにある4 番目の文字が最初の等しくないペアであるため、文字 5 が 12345 から除去されます。

制御情報フィールドのうち最初のものは、キーの前部から除去される文字の数を示し、2 番目のフィールドは、残っている文字の数を示します。これらの 2 つの数の和がフル・キー長 (索引がオープンされるときにカタログから入手できます) から減算されるとき、結果は、後部から除去される文字の数です。3 番目のフィールドは、そのキーを持つレコードを含む制御インターバルを示しています。

332ページの図 41 にある例は、フル・キーのリストを示し、索引に入り込むキー(各データ制御インターバル内の最高キー) に対応する索引項目の内容を示しています。シーケンス・セット・レコードは、1 バイトの長さの垂直ポインターを持つと想定されています。図で上から下まで示される索引項目は、想定された索引レコード内で右から左まで配列されます。

キー 12345 は、索引レコード内の最初のキーであるため、先行文字圧縮を持ちません。キー 12356 は後部圧縮を持ちません。12356 と 12357 の間の比較では、後続するキーにある対応する文字に等しくない最初の文字である 6 に続く文字がないからです。

キーの前部からどの文字が除去されたかは、常に見つけ出すことができます。後部から除去されたものは見つけ出すことができません。後部圧縮は、実際には、項目にあるキーを、正確な高キーではなく、境界値として設定します。つまり、項目は、制御インターバル内の最高キーの正確な値を示すのではなく、キーのうちそれを次の制御インターバル内にある最低キーから区別するのに十分なだけを示します。たとえば、 332ページの図 41 では、後部圧縮の後の最後の 3 つの索引キーは12401、124、および 134 です。次の値の間のキー・フィールドを持つデータ・レコードは、次のように関連付けられます。v 12402 と 124FF の間は、索引キー 124 と関連付けられます。v 12500 と 134FF の間は、索引キー 134 と関連付けられます。

制御インターバル内の最後のデータ・レコードが削除される場合、および制御インターバルに制御域用の高キーが含まれない場合は、スペースはフリー・スペースとしてレクラメーション処理されます。スペース・レクラメーションを抑止するには、X'20' の等価値を持つ RPLNOCIR ビットを RPL の中でオフセット 43 に設定します。

キー順データ・セットの索引の処理

330 z/OS V1R10 DFSMS データ・セットの使用法

Page 355: DFSMS データ・セットの使用法

索引レベル内の最後の索引項目は、最高可能キーを示しています。この値を表すための規則は、その文字を何も示さず、前部か文字が除去されなかったことを示すことです。シーケンス・セット内の最後のレコードにある最後の索引は、次のように見えます。

検索では、2 つの 0 は、最高可能キー値を次のように表します。

v 前部から 0 文字が除去された事実は、キー内の最初の文字が先行するキーの最初の文字より大きいことを意味します。

v 長さ 0 は、検索が成功したかどうか判別するのに文字の比較が必要とされないことを示します。つまり、検索が最後の索引項目を見つけたとき、ヒットしたとされます。

キー順データ・セットの索引の処理

第 19 章 キー順データ・セットの索引の処理 331

Page 356: DFSMS データ・セットの使用法

制御インターバル分割に続く索引更新データ・セットが最初にロードされるとき、データ・レコードのキー順およびそれらの物理的順序は同じです。ただし、データ・レコードが挿入されるときに、制御インターバル分割が起こることがあり、制御インターバルがキー順と異なる物理順序を持つようになります。

333ページの図 42 は、 323ページの図 36 で示される制御域にキー 12 を持つレコードが挿入されるときに、制御インターバルがどのようにして分割され、索引が更

図 41. キー圧縮の例

キー順データ・セットの索引の処理

332 z/OS V1R10 DFSMS データ・セットの使用法

Page 357: DFSMS データ・セットの使用法

新されるかを示しています。

1. キー 12 を持つレコードを挿入しなければならない、データ制御インターバル 1

で制御インターバル分割が発生します。

2. データ制御インターバル 1 にあるレコードの半分は、VSAM によってフリー・スペース制御インターバル (データ制御インターバル 3) に移動されます。

3. 索引項目は、データ制御インターバル 3 をポイントしてキー順で挿入されます。ここには、データ制御インターバル 1 から移動されたデータ・レコードが入ります。

4. 制御インターバル分割の後、最高可能キーは 14 なので、データ制御インターバル 1 用に新規索引項目が作成されます。これで、データ制御インターバル 3 にはデータが入ったので、この制御インターバルへのポインターは、フリー・リストから除去され、索引にある新規キー項目と関連付けられます。索引にあるキー値は、正しい昇順になっているが、データ制御インターバルはもはや物理シーケンスになっていないことに注意してください。

スパン・レコード用の索引項目キー順データ・セットには、スパン・レコードのセグメントを含む各制御インターバル用の索引項目があります。スパン・レコードにあるすべての索引項目は、同じセクション内で一緒にグループ化されます。これらは、セグメントの順序 (1 番目、2 番目、3 番目、など) に従って、右から左に配列されます。

スパン・レコードの最後の (左端の) 索引項目のみが、レコードのキーを含んでいます。キーは、上記の規則に従って圧縮されます。レコード用の他のすべての索引項目は、次のように見えます。

図 42. 制御インターバル分割と索引更新

キー順データ・セットの索引の処理

第 19 章 キー順データ・セットの索引の処理 333

Page 358: DFSMS データ・セットの使用法

334 z/OS V1R10 DFSMS データ・セットの使用法

Page 359: DFSMS データ・セットの使用法

第 3 部 データ・セットと UNIX ファイルへの非 VSAM アクセス第 20 章 非 VSAM データ・セット用のレコード・フォーマットの選択 . . . . . . . . . 341フォーマットの選択 . . . . . . . . . . . 341固定長レコード・フォーマット . . . . . . . 342標準フォーマット . . . . . . . . . . . 343制約事項 . . . . . . . . . . . . . . 343

可変長レコード・フォーマット . . . . . . . 344フォーマット V レコード . . . . . . . . 344ブロック記述子ワード (BDW) . . . . . . 345レコード記述子ワード (RDW) . . . . . . 346

スパン・フォーマット VS レコード (順次アクセス方式). . . . . . . . . . . . . . 346

QSAM でのスパン・レコードの処理の制約事項 . . . . . . . . . . . . . . . 348セグメント記述子ワード . . . . . . . . 34832,756 バイトより長いレコード . . . . . 349ヌル・セグメント . . . . . . . . . . 350

スパン・フォーマット V レコード (基本直接アクセス方式) . . . . . . . . . . . . . 350

不定長レコード・フォーマット . . . . . . . 352ISO/ANSI テープ . . . . . . . . . . . . 353文字データ変換 . . . . . . . . . . . . 353フォーマット F レコード . . . . . . . . 354フォーマット D レコード . . . . . . . . 357ISO/ANSI フォーマット DS およびフォーマットDBS レコード . . . . . . . . . . . . 359セグメント記述子ワードの変換 . . . . . 36032 760 バイトより長いレコードの処理 . . . 361QSAM での DS/DBS テープの処理 . . . . 362BSAM での DS/DBS テープの処理 . . . . 362

フォーマット U レコード . . . . . . . . 362レコード・フォーマット - 装置タイプの考慮事項 363オプショナル制御文字の使用 . . . . . . . 363直接アクセス記憶装置 (DASD) の使用 . . . . 365磁気テープの使用 . . . . . . . . . . . 365プリンターの使用 . . . . . . . . . . . 366テーブル参照文字 . . . . . . . . . . 366レコード・フォーマット . . . . . . . . 367

カード読取装置およびパンチの使用 . . . . . 368紙テープ読取装置の使用 . . . . . . . . . 369

第 21 章 データ制御ブロックの指定および初期化 371順次および区分データ・セットの処理 . . . . . 372処理用のデータ・セットを準備するための OPENの使用 . . . . . . . . . . . . . . . . 378

DCB への書き込み . . . . . . . . . . 379マクロの形式、バッファリング要件定義、およびアドレスの指定 . . . . . . . . . . . . 382処理方法のコーディング . . . . . . . . . 382

データ・セット・オプションの選択 . . . . . . 383ブロック・サイズ (BLKSIZE) . . . . . . . 384大規模ブロック・インターフェース (LBI) 384システム決定ブロック・サイズ . . . . . 386

データ・セット編成 (DSORG) . . . . . . . 391キー長 (KEYLEN) . . . . . . . . . . . 391レコード長 (LRECL) . . . . . . . . . . 392レコード・フォーマット (RECFM) . . . . . 392書き込み妥当性検査オプション (OPTCD=W) . . 392DD ステートメント・パラメーター . . . . . 393

DCB および DCBE の変更および検査 . . . . . 394DCBD マクロの使用 . . . . . . . . . . 395DCB でのアドレスの変更 . . . . . . . . 395IHADCBE マクロの使用 . . . . . . . . . 396

CLOSE を使用したデータ・セットの処理の終了 396CHECK マクロの発行 . . . . . . . . . 396データ・セットの一時的クローズ . . . . . . 396順次データ・セットでの CLOSE TYPE=T の使用 . . . . . . . . . . . . . . . . 397スペースの解放 . . . . . . . . . . . . 399データ・セットをクローズするときのバッファー・プールの管理 . . . . . . . . . . . 400

データ・セットのオープンおよびクローズ: 考慮事項 . . . . . . . . . . . . . . . . . 400

31 ビット・アドレスを使用したパラメーター・リスト . . . . . . . . . . . . . . . 400同時に複複数のデータ・セットのオープンおよびクローズ . . . . . . . . . . . . . . 401直接アクセス・データ・セットを割り振るときに考慮する事項 . . . . . . . . . . . . 401データ・セットのオープンおよびクローズに関する指針 . . . . . . . . . . . . . . . 401オープン/クローズ/EOV エラー . . . . . . 402インストール・システム出口 . . . . . . . 403

ボリュームの位置決め . . . . . . . . . . 404データ・セットおよびボリュームの解放 . . . 404ボリュームの終わりの処理 . . . . . . . . 404ボリュームの終わりの位置決め . . . . . . 405

OPEN マクロを使用したテープ・ボリュームの位置決め . . . . . . . . . . . . 406DISP パラメーターを使用したボリュームの位置決め . . . . . . . . . . . . . . 406

ボリュームの終わりの強制 . . . . . . . . 407SAM バッファー・スペースの管理 . . . . . . 407バッファー・プールの組み立て . . . . . . . 408バッファー・プールのビルド . . . . . . . 410バッファー・プールおよびレコード域のビルド 410バッファー・プールの入手 . . . . . . . . 411バッファー・プールの自動的な組み立て . . . 411

© Copyright IBM Corp. 1987, 2008 335

||

Page 360: DFSMS データ・セットの使用法

バッファー・プールの解放 . . . . . . . . 412バッファー・プールの組み立て: 例 . . . . . 412

バッファーの制御 . . . . . . . . . . . . 413待機アクセス方式 . . . . . . . . . . . 413基本アクセス方式 . . . . . . . . . . . 414アプリケーションでの QSAM . . . . . . . 414交換バッファー方式 . . . . . . . . . . 418

バッファリング技法および GET/PUT 処理モードの選択 . . . . . . . . . . . . . . . . 418待機アクセス方式でのバッファリング・マクロの使用 . . . . . . . . . . . . . . . . . 418

RELSE - 解放および入力バッファー. . . . . 418TRUNC - 出力バッファーの切り捨て . . . . 419

バッファリング・マクロと基本アクセス方式の併用 419GETBUF - プールからのバッファーの入手 . . 419FREEBUF - バッファーをプールに戻す. . . . 420

第 22 章 レコードへのアクセス . . . . . . . 421READ および WRITE を使用してのデータへのアクセス . . . . . . . . . . . . . . . . 421データ・イベント制御ブロック (DECB) の使用 421ページング環境での関連した制御ブロックのグループ化 . . . . . . . . . . . . . . . 421BSAM でのオーバーラップ入出力の使用 . . . 422ブロックの読み取り . . . . . . . . . . 423ブロックの書き込み . . . . . . . . . . 424TRUNC マクロでの入出力開始の保証 . . . . 425読み取りまたは書き込み操作の完了のテスト . . 425読み取りまたは書き込み操作の完了の待ち . . . 425テープでの例外条件の取り扱い . . . . . . 426

GET および PUT を使用してのデータへのアクセス 427GET - レコードの検索 . . . . . . . . . 427PUT - レコードの書き込み . . . . . . . . 428PUTX - 更新済みレコードの書き込み . . . . 428PDAB - 並列入力処理 (QSAM のみ) . . . . 429並列データ・アクセス・ブロック (PDAB) の使用 . . . . . . . . . . . . . . 429並列処理のテスト . . . . . . . . . . 431

入出力エラーの分析 . . . . . . . . . . . 431SYNADAF - SYNAD 分析機能の実行 . . . . 431SYNADRLS - SYNADAF メッセージおよび保管域の解放 . . . . . . . . . . . . . . 432装置サポート機能 (ICKDSF): 入出力問題の診断 433

SRB モードまたはクロスメモリー・モードに関する制約事項 . . . . . . . . . . . . . . 433

第 23 章 非 VSAM データ・セットの共用 . . . 435共用順次データ・セット向け拡張データ保全機能 439拡張データ保全機能のセットアップ . . . . . 439複数のシステムにおける拡張データ保全機能の同期化 . . . . . . . . . . . . . . . 441START IFGEDI コマンドの使用 . . . . . . 442アプリケーションに即した拡張データ保全機能の迂回 . . . . . . . . . . . . . . . 442データ保全の警告と違反の診断 . . . . . . 443データ保全メッセージ . . . . . . . . 443

データ保全違反 . . . . . . . . . . . 445PDSE . . . . . . . . . . . . . . . . 446直接データ・セット (BDAM) . . . . . . . . 446データ・セットをオープンおよびクローズするときに考慮する事項 . . . . . . . . . . . . . 447共用 DASD ボリュームでのチェックポイント・データ・セットの制御 . . . . . . . . . . . 448入力操作用の検索ダイレクトのシステム使用 . . . 449

第 24 章 データ・セットのスプーリングおよびスケジューリング . . . . . . . . . . . . 451ジョブ入力サブシステム . . . . . . . . . . 451SYSIN データ・セット . . . . . . . . . . 452SYSOUT データ・セット . . . . . . . . . 453

第 25 章 順次データ・セットの処理 . . . . . 455順次データ・セットの作成 . . . . . . . . . 455

DASD 順次データ・セットのタイプ . . . . . 456順次データ・セットの検索 . . . . . . . . . 457データ・セットの順次連結 . . . . . . . . . 458類似データ・セットの連結 . . . . . . . . 459順次類似データ・セットの規則 . . . . . 459OPEN/EOV 終了処理 . . . . . . . . . 461DCB および DCBE フィールドの永続性 . . 461類似連結を持つ SMS 管理データ・セット 462類似連結を持つ BSAM ブロック・サイズ 462

非類似データ・セットの連結 . . . . . . . 464順次データ・セットの変更 . . . . . . . . . 467同所更新 . . . . . . . . . . . . . . 467オーバーラップ操作の使用 . . . . . . . . 467データ・セットの拡張 . . . . . . . . . 468マルチボリューム DASD データ・セット 468拡張フォーマット順次データ・セット . . . 469

装置独立性の実現 . . . . . . . . . . . . 469装置依存のマクロ . . . . . . . . . . . 470DCB および DCBE サブパラメーター . . . . 470

順次データ・セットのパフォーマンスの改善 . . . 471非 DASD データ・セットでのチェーン・スケジューリングの使用に関する制限事項 . . . . . 472DASD およびテープに関するパフォーマンス 473

BSAM、BPAM、または BDAM での読み取り時のブロックの長さの決定 . . . . . . . . . . 475BSAM または BPAM での短いフォーマット FBブロックの書き込み . . . . . . . . . . . 477Hiperbatch の使用 . . . . . . . . . . . . 477拡張フォーマット順次データ・セットの処理 . . . 478拡張フォーマット・データ・セットの特性 . . . 478拡張フォーマット・データ・セットの割り振り 479圧縮フォーマット・データ・セットの割り振り 480圧縮のタイプ . . . . . . . . . . . 480圧縮フォーマット・データ・セットの特性 481

拡張フォーマット・データ・セットのオープンおよびクローズ . . . . . . . . . . . . 482BSAM および QSAM を使用した拡張フォーマット・データ・セットの読み取り、書き込み、および更新 . . . . . . . . . . . . . . 482

336 z/OS V1R10 DFSMS データ・セットの使用法

Page 361: DFSMS データ・セットの使用法

拡張フォーマット・データ・セットと他のデータ・セットとの連結 . . . . . . . . . . 482ストライピング順次データ・セットの拡張 . . . 482拡張フォーマット・データ・セットへのマイグレーション . . . . . . . . . . . . . . 483既存の BSAM および QSAM アプリケーションの変更 . . . . . . . . . . . . 483使用済みの DASD スペースの計算 . . . . 484

ラージ・フォーマット・データ・セットの処理 . . 484ラージ・フォーマット・データ・セットの特性 485ラージ・フォーマット・データ・セットの割り振り . . . . . . . . . . . . . . . . 486ラージ・フォーマット・データ・セットのオープンおよびクローズ . . . . . . . . . . . 486ラージ・フォーマット・データ・セットへのマイグレーション . . . . . . . . . . . . 487既存の BSAM、QSAM、および EXCP アプリケーションの変更 . . . . . . . . . 487使用済みの DASD スペースの計算 . . . . 488

第 26 章 区分データ・セット (PDS) の処理 . . 489PDS の構造 . . . . . . . . . . . . . . 489PDS ディレクトリー . . . . . . . . . . . 490PDS 用のスペースの割り振り . . . . . . . . 493スペースの計算 . . . . . . . . . . . . 494SPACE および AVGREC を使用したスペースの割り振り . . . . . . . . . . . . . . 495

PDS の作成 . . . . . . . . . . . . . . 495BSAM または QSAM を使用した PDS メンバーの作成 . . . . . . . . . . . . . . 495標準外 PDS メンバー名の作成 . . . . . 496

PDS の変換 . . . . . . . . . . . . . 497PDS またはメンバーの別のデータ・セットへのコピー . . . . . . . . . . . . . . . 497メンバーの追加 . . . . . . . . . . . . 497

PDS のメンバーの処理 . . . . . . . . . . 500BLDL - ディレクトリー項目リストの構成 . . . 500DESERV . . . . . . . . . . . . . . 501

FUNC=GET . . . . . . . . . . . . 501FUNC=GET_ALL . . . . . . . . . . 503

FIND - メンバーの開始アドレスへの位置決め 504STOW - ディレクトリーの更新 . . . . . . 505

PDS のメンバーの検索 . . . . . . . . . . 506PDS の変更 . . . . . . . . . . . . . . 510同所更新 . . . . . . . . . . . . . . 510

BSAM および BPAM を使用する場合 . . . 511オーバーラップ操作を使用する場合 . . . . 511QSAM を使用する場合 . . . . . . . . 512

メンバーの再書き込み . . . . . . . . . 513PDS の連結 . . . . . . . . . . . . . . 513順次連結 . . . . . . . . . . . . . . 513区分連結 . . . . . . . . . . . . . . 513

PDS ディレクトリーを順次に読み取る . . . . . 514

第 27 章 拡張区分データ・セット (PDSE) の処理 515PDSE の利点 . . . . . . . . . . . . . 515

PDSE と PDS の類似点 . . . . . . . . . 517PDSE と PDS の相違点 . . . . . . . . . 517

PDSE の構造 . . . . . . . . . . . . . 518PDSE 論理ブロック・サイズ . . . . . . . 519スペースの再使用 . . . . . . . . . . . 519ディレクトリー構造 . . . . . . . . . . 520相対トラック・アドレス (TTR) . . . . . . 520

PDSE レコードの処理 . . . . . . . . . . 521PDSE での BLKSIZE の使用 . . . . . . . 523PDSE での KEYLEN の使用 . . . . . . . 523PDSE レコードのブロック化し直し . . . . . 523短ブロックの処理 . . . . . . . . . . . 524SAM ヌル・セグメントの処理 . . . . . . . 524

PDSE 用のスペースの割り振り . . . . . . . 525PDSE スペースの考慮事項 . . . . . . . . 525不連続スペースの使用 . . . . . . . . 525組み込まれたディレクトリー . . . . . . 526フル・ブロック割り振り . . . . . . . . 526PDSE の未使用スペース . . . . . . . . 526データ・セット圧縮の頻度 . . . . . . . 527エクステントの増加 . . . . . . . . . 527論理ブロック・サイズ . . . . . . . . 527物理ブロック・サイズ (ページ・サイズ) . . 527フリー・スペース . . . . . . . . . . 528フラグメント . . . . . . . . . . . 528

PDSE ストレージ要件の要約 . . . . . . . 528PDSE の定義 . . . . . . . . . . . . . 529PDSE メンバーの作成 . . . . . . . . . . 530

BSAM または QSAM を使用しての PDSE メンバーの作成 . . . . . . . . . . . . . 530標準外 PDSE メンバー名の作成 . . . . . 531

PDSE メンバーを連続して追加または置換する 532複数の PDSE メンバーを並行して追加または置換する . . . . . . . . . . . . . . . 533PDSE またはメンバーの別のデータ・セットへのコピー . . . . . . . . . . . . . . . 534

PDSE のメンバーの処理 . . . . . . . . . . 534メンバーへの接続の確立 . . . . . . . . . 535BLDL マクロを使用してのディレクトリー項目リストの構成 . . . . . . . . . . . . 535BSP マクロを使用して物理レコードをバックスペースする . . . . . . . . . . . . . 536ディレクトリー項目サービスの使用 . . . . . 537

FUNC=GET . . . . . . . . . . . . 538FUNC=GET_ALL . . . . . . . . . . 540FUNC=GET_NAMES . . . . . . . . . 541FUNC=RELEASE . . . . . . . . . . 542FUNC=UPDATE . . . . . . . . . . 543

FIND マクロを使用してメンバーの先頭に位置決めする . . . . . . . . . . . . . . . 544ISITMGD を使用してデータ・セットがシステム管理されているかどうかを判別する . . . . . 545NOTE マクロを使用して相対位置を提供する 546POINT マクロを使用してブロックに位置決めする . . . . . . . . . . . . . . . . 547メンバー間の切り替え . . . . . . . . . 547

第 3 部 データ・セットと UNIX ファイルへの非 VSAM アクセス 337

Page 362: DFSMS データ・セットの使用法

STOW マクロを使用してディレクトリーを更新する . . . . . . . . . . . . . . . 548

PDSE のメンバーの検索 . . . . . . . . . . 549PDSE の共用 . . . . . . . . . . . . . 551コンピューター・システム内での共用 . . . . 552違反の共用 . . . . . . . . . . . . . 552PDSE を共用する複数システム . . . . . . 553バッファーに入れたデータの無効化 - VARYOFFLINE . . . . . . . . . . . . . 554DFP 共用属性の呼び出し可能サービス(IGWLSHR) . . . . . . . . . . . . 554シスプレックス環境での PDSE 用ボリュームの選択 . . . . . . . . . . . . . . 555

通常または拡張 PDSE 共用 . . . . . . . 555単一システム環境における PDSE の共用 . . 555複数システム環境における通常の PDSE 共用の指定 . . . . . . . . . . . . . . 556複数システム環境における拡張 PDSE 共用の指定 . . . . . . . . . . . . . . 556

PDSE のメンバーの変更 . . . . . . . . . . 557同所更新 . . . . . . . . . . . . . . 557

BSAM および BPAM を使用する場合 . . . 557オーバーラップ操作を使用する場合 . . . . 558QSAM を使用する場合 . . . . . . . . 558

PDSE メンバーの拡張 . . . . . . . . . 558PDSE メンバーの削除 . . . . . . . . . 558PDSE メンバーの名前変更 . . . . . . . . 559

PDSE ディレクトリーの読み取り . . . . . . . 559PDSE の連結 . . . . . . . . . . . . . 560順次連結 . . . . . . . . . . . . . . 560区分連結 . . . . . . . . . . . . . . 560

PDS を PDSE に変換、および元に戻す . . . . 561PDSE から PDS への変換 . . . . . . . . 562PDSE の変換に関する変換 . . . . . . . . 562

パフォーマンスの改善 . . . . . . . . . . 562フラグメント化された PDSE でのスペースのリカバリー . . . . . . . . . . . . . . . . 563PDSE アドレス・スペース . . . . . . . . . 563

PDSE アドレス・スペースのチューニング . . . 564

第 28 章 z/OS UNIX ファイルの処理 . . . . . 567z/OS UNIX ファイル・システムへのアクセス . . 567

UNIX ディレクトリーおよびファイルの特性 . . 568使用されるアクセス方式 . . . . . . . . . 569

HFS データ・セットの使用 . . . . . . . . . 569HFS データ・セットの作成 . . . . . . . . 570追加のディレクトリーの作成 . . . . . . . 571

z/OS UNIX ファイルの作成 . . . . . . . . 572BSAM または QSAM を使用した UNIX ファイルの作成 . . . . . . . . . . . . . . 572レコード処理に関する考慮事項 . . . . . 573処理上の制約 . . . . . . . . . . . 574

JCL を使用した UNIX ファイルの作成 . . . . 574UNIX ファイルに使用する JCL パラメーター 576UNIX ディレクトリー内のマクロ・ライブラリーの作成 . . . . . . . . . . . . . . . 577

UNIX ファイルおよびディレクトリーの管理 . . . 579UNIX ファイルとディレクトリーのためのセキュリティー設定値の指定 . . . . . . . . . 579

UNIX ファイルとディレクトリーの許可 . . 579UNIX ファイルの RACF 許可 . . . . . . 580

UNIX ファイルの編集 . . . . . . . . . 580ISHELL を使用した UNIX ファイルとディレクトリーの管理 . . . . . . . . . . . . 580UNIX ファイルまたはディレクトリーのコピー 582

PDS の UNIX ディレクトリーへのコピーまたは UNIX ディレクトリーの PDS へのコピー . . . . . . . . . . . . . . . 582OPUT コマンドを使用したメンバーの PDSまたは PDSE から UNIX ファイルへのコピー . . . . . . . . . . . . . . . 582OPUTX コマンドを使用したメンバーの PDSまたは PDSE から UNIX ディレクトリーまたはファイルへのコピー . . . . . . . . 583OCOPY コマンドを使用した PDS、PDSE、または UNIX メンバーの他のメンバーへのコピー . . . . . . . . . . . . . . . 583OGET コマンドを使用した UNIX ファイルのz/OS データ・セットへのコピー . . . . . 583OGETX コマンドを使用した UNIX ディレクトリーの PDS または PDSE へのコピー . . 584

UNIX ファイル用のサービスとユーティリティー 584サービスとユーティリティーが UNIX ファイルと一緒に使用できないこと . . . . . . . . 584z/OS UNIX シグナル . . . . . . . . . . 585z/OS UNIX fork サービス . . . . . . . . 585SMF レコード . . . . . . . . . . . . 585

BPAM を使用した UNIX ファイルの読み取り . . 585UNIX ファイルのためのマクロの使用 . . . . 586BLDL によるディレクトリー項目リストの構成 586CHECK による入出力完了の検査 . . . . . . 587CLOSE による DCB のクローズ . . . . . . 587FIND によるファイルの開始アドレス位置の設定 587READ による UNIX ファイルの読み取り . . . 588STOW DISC による UNIX ファイルのクローズ 588

UNIX ファイルおよびディレクトリーの連結 . . . 589順次連結 . . . . . . . . . . . . . . 589区分連結 . . . . . . . . . . . . . . 589

第 29 章 世代別データ・グループの処理 . . . . 591世代別データ・セットのデータ・セット編成 . . . 592絶対世代およびバージョン番号 . . . . . . . 592相対世代番号 . . . . . . . . . . . . . 593複数ステップ・ジョブに関するプログラミングの考慮事項 . . . . . . . . . . . . . . . . 594世代別データ・グループのカタログ化 . . . . 594世代別データ・グループを更新するための複数ジョブの実行依頼 . . . . . . . . . . . . 595

ISO/ANSI バージョン 3 またはバージョン 4 のラベル用の世代別データ・グループの命名 . . . . 595新規世代の作成 . . . . . . . . . . . . . 596世代別データ・セットの割り振り . . . . . . 596

338 z/OS V1R10 DFSMS データ・セットの使用法

Page 363: DFSMS データ・セットの使用法

カタログ式データ・セットの参照 . . . . . 597モデル DSCB の作成 . . . . . . . . . 598DATACLAS および LIKE キーワードの使用 599

世代別データ・セットのパス . . . . . . . 600世代別データ・セットのロールイン . . . . . 600ロールオフされた世代別データ・セットの有効期限の制御 . . . . . . . . . . . . . . 601

世代別データ・セットの検索 . . . . . . . . 601世代別データ・セットのレクラメーション . . . . 601

GDS 再利用処理をオンにする . . . . . . . 602GDS 再利用処理をオフにする . . . . . . . 602

世代別データ・グループ索引のビルド . . . . . 603

第 30 章 入出力装置制御マクロの使用 . . . . 605CNTRL マクロを使用して入出力装置を制御する 605PRTOV マクロを使用してプリンター・オーバーフローをテストする . . . . . . . . . . . . 606SETPRT マクロを使用してプリンターをセットアップする . . . . . . . . . . . . . . . . 606BSP マクロを使用して磁気テープまたは直接アクセス・ボリュームをバックスペースする . . . . . 607NOTE マクロを使用してブロックの相対アドレスを戻す . . . . . . . . . . . . . . . . 608POINT マクロを使用してブロックに位置決めする 609SYNCDEV マクロを使用してデータを同期する . . 611

第 31 章 非 VSAM ユーザー作成出口ルーチンの使用 . . . . . . . . . . . . . . . . 613一般的なガイダンス . . . . . . . . . . . 613プログラミングの考慮事項 . . . . . . . . 614入出力操作に続く状況情報 . . . . . . . . 614データ・イベント制御ブロック . . . . . 615イベント制御ブロック . . . . . . . . 617

EODAD データ・セットの終わり出口ルーチン . . 622レジスターの内容 . . . . . . . . . . . 622プログラミングの考慮事項 . . . . . . . . 622

SYNAD 同期エラー・ルーチン出口 . . . . . . 623レジスターの内容 . . . . . . . . . . . 627プログラミングの考慮事項 . . . . . . . . 629待機アクセス方式 . . . . . . . . . . 629基本アクセス方式 . . . . . . . . . . 630SYNAD ルーチンから戻る . . . . . . . 630ISAM . . . . . . . . . . . . . . 631

DCB 出口リスト . . . . . . . . . . . . 631EXLST からの出口用のレジスターの内容 . . . 633逐次化 . . . . . . . . . . . . . . . 634

割り振り検索リスト . . . . . . . . . . . 634プログラミング規則 . . . . . . . . . . 635制約事項 . . . . . . . . . . . . . . 635

DCB アベンド出口 . . . . . . . . . . . 636リカバリー要件 . . . . . . . . . . . . 639DCB アベンド・インストール・システム出口 640

DCB OPEN 出口 . . . . . . . . . . . . 640順次連結用の DCB OPEN 出口への呼び出し 641インストール・システム DCB OPEN 出口 . . 641

据え置き標準外入力トレーラー・ラベル出口リスト項目 . . . . . . . . . . . . . . . . 642ブロック数不等出口 . . . . . . . . . . . 642順次データ・セット用の EOV 出口 . . . . . . 643FCB イメージ出口. . . . . . . . . . . . 644JFCB 出口 . . . . . . . . . . . . . . 645JFCBE 出口 . . . . . . . . . . . . . . 646オープン / クローズ /EOV 標準ユーザー・ラベル出口 . . . . . . . . . . . . . . . . 647Open/EOV 非特定テープ・ボリューム・マウント出口 . . . . . . . . . . . . . . . . . 651Open/EOV ボリューム・セキュリティーおよび検査出口 . . . . . . . . . . . . . . . . 655QSAM 並列入力出口 . . . . . . . . . . . 657BSAM および QSAM でのユーザー合計 . . . . 657

第 3 部 データ・セットと UNIX ファイルへの非 VSAM アクセス 339

Page 364: DFSMS データ・セットの使用法

340 z/OS V1R10 DFSMS データ・セットの使用法

Page 365: DFSMS データ・セットの使用法

第 20 章 非 VSAM データ・セット用のレコード・フォーマットの選択

この章では以下のトピックを扱います。

トピック 該当ページ

フォーマットの選択 341

固定長レコード・フォーマット 342

可変長レコード・フォーマット 344

不定長レコード・フォーマット 352

ISO/ANSI テープ 353

レコード・フォーマット - 装置タイプの考慮事項 363

この章では、非 VSAM データ・セットのレコード・フォーマットおよび装置タイプの考慮事項について説明します。 レコードは、次の 4 つのフォーマットのいずれかで保管されます。v 固定長 (RECFM=F)

v 可変長 (RECFM=V)

v ASCII 可変長 (RECFM=D)

v 不定長 (RECFM=U)

ディスク・フォーマットについての情報は、9 ページの『直接アクセス記憶装置(DASD) ボリューム』を参照してください。

フォーマットの選択レコード・フォーマットを選択する前に、次のことを考慮する必要があります。

v プログラムが受け取ることができるデータ型 (たとえば、EBCDIC) およびそれが生成することができる出力の型

v データ・セットを入れる入出力装置

v レコードを読み書きするのに使用するアクセス方式

v レコードをブロック化することができるかどうか

ブロック化は、ボリュームに書き込む前にレコードをブロックにグループ化するプロセスです。ブロックは、1 つ以上の論理レコードから構成されます。各ブロックは、連続するブロック間ギャップの間に書き込まれます。ブロック化は、データ・セット内のブロック間ギャップの数を減らすことによりボリュームのストレージ・スペースを節約し、データ・セットを処理するのに必要な入出力操作の数を減らすことにより処理効率を改善します。

ブロック・サイズを指定しない場合、データ・セットが割り振られる装置に最適なブロック・サイズは、システムによって通常決定されます。 386ページの『システム決定ブロック・サイズ』を参照してください。

© Copyright IBM Corp. 1987, 2008 341

Page 366: DFSMS データ・セットの使用法

データ制御ブロック (DCB) でのレコード・フォーマットを選択するには、DCB マクロでのオプション、DD ステートメント、動的割り振り、自動クラス選択ルーチン、またはデータ・セット・ラベルを使用します。プログラムを実行する前に、オペレーティング・システムにレコード・フォーマット (RECFM)、およびデータ・クラス、DCB マクロ、 DD ステートメント、またはデータ・セット・ラベルにある装置依存の情報を提供する必要があります。 DD ステートメント・キーワードの完全な記述、および DCB サブパラメーターのグロッサリーは、「z/OS MVS JCL 解説書」に含まれています。

U を除くすべてのレコード・フォーマットは、ブロック化することができます。可変長レコードは、スパンできます (RECFM=DS または VS)。スパン・レコードは、複数のブロックをスパンできます。固定長レコード (RECFM=F または FB) は、標準 (RECFM=FS または FBS) として指定できます。標準フォーマットは、最後のブロックまたはトラックを除き、データ・セット内に短ブロックまたは空のトラックがないことを意味します。

固定長レコード・フォーマット図 43 に示される固定長 (フォーマット F または FB) レコードのサイズは、データ・セット内のすべてのレコードについて一定です。

レコードは、ブロック化または非ブロック化することができます。データ・セットが、非ブロック化フォーマット F レコードを含む場合、1 つのレコードが 1 つのブロックを構成します。データ・セットにブロック化フォーマット F レコードが含まれる場合、ブロック内のレコードの数は、一般に、データ・セット内のどのブロックについても定数です。データ・セットには、切り捨て (短) ブロックが含まれる

図 43. 固定長レコード

非 VSAM データ・セット用のレコード・フォーマットの選択

342 z/OS V1R10 DFSMS データ・セットの使用法

Page 367: DFSMS データ・セットの使用法

ことがあります。システムは、ブロック化または非ブロック化フォーマット F レコードで長さを自動的に検査します (カード読取装置を除く)。切り捨てられるブロックを見込んでおきます。

フォーマット F レコードは、不特定型のデータ・セットで使用できます。

スタッカー選択または紙送り制御に使用される、オプショナル制御文字 (a) は、印刷またはパンチされる各レコードに組み込むことができます。オプショナル・テーブル参照文字 (b) は、ページ・プリンター上でレコードを印刷するフォントを選択するためのコードです。 363 ページの『オプショナル制御文字の使用』および 366

ページの『テーブル参照文字』を参照してください。

標準フォーマット固定長レコードを持つ順次データ・セット (BSAM または QSAM によって処理されます) の作成中、DCB マクロの RECFM サブパラメーターは、標準フォーマット(RECFM=FS または FBS) を指定できます。標準フォーマットのレコード (フォーマット -FS または -FBS) を持つ順次データ・セットは、時には、フォーマット F

または FB レコードを持つデータ・セットより効率的に読み取ることができます。このように効率的にできるのは、各トラックに同じ数のブロックが含まれるため、読み取られる各レコードのアドレスをシステムが決定できるからです。

標準フォーマットのデータ・セットは、次の仕様に適合する必要があります。

v データ・セットにあるすべてのレコードがフォーマット F のレコードである。

v 最後のブロックを除き、ブロックは切り捨てられない。(BSAM では、この仕様が満たされていることを確認する必要があります。) 最後のブロックが切り捨てられる場合、システムは、フルサイズ・ブロックが書き込まれていたはずの場所にそれを書き込みます。

v 最後のものを除く各トラックには、同じ数のブロックが含まれる。

v 最後のものを除く各トラックは、装置について設定されたトラック容量数式によって決定されるように埋められる。

v データ・セット編成は、物理的に順次である。PDS または PDSE にはフォーマット FS を使用できません。

制約事項最後のブロックが切り捨てられる場合は、次のものをコーディングすることによって標準フォーマットのデータ・セットを拡張してはなりません。

v OPEN マクロでの EXTEND または OUTINX

v 割り振りで DISP=MOD を指定した OPEN マクロでの OUTPUT、OUTIN、または INOUT

v CLOSE LEAVE、TYPE=T、続いて WRITE

v POINT を最後のブロックの後に、続いて WRITE

v 最後のブロックの後にテープの CNTRL、続いて WRITE

データ・セットが拡張されると、そのデータ・セットには、最後のブロックでない切り捨てられたブロックが入ります。この状態をもつ拡張データ・セットを読み取

非 VSAM データ・セット用のレコード・フォーマットの選択

第 20 章 非 VSAM データ・セット用のレコード・フォーマットの選択 343

Page 368: DFSMS データ・セットの使用法

ると、切り捨てられたブロックが読み取られたときに、データの終わり状態になるのが早すぎるため、この切り捨てられたブロックに続くブロックが存在しないように見えます。

磁気テープ上で短ブロックで終わる標準フォーマットのデータ・セットは、データ・セットが切り捨てられたブロックで始まるので、逆方向に読み取ってはなりません。

次のことを行う場合、フォーマット F データ・セットは、標準フォーマットのデータ・セットの要件を満たしません。

v 最後のブロックが切り捨てられたとき、固定長のブロック化標準データ・セットを拡張します。

v POINT マクロを使用して、最後のもの以外のトラックを BSAM が埋めないようにします。データ・セットに書き込むときは、トラックをスキップしないでください。

標準以外のレコード・フォーマットを使用して作成されたデータ・セットからレコードを読み取るのに、標準レコードは使用しないでください。他のレコード・フォーマットは、標準によって必要とされる正確なフォーマットを作成しない場合があるからです。

データ・セットの特性が、随時上記の仕様から変更される場合、データ・セットは、もはや標準フォーマットの仕様で処理してはなりません。

可変長レコード・フォーマット可変長レコード・データ・セットでは、各レコードまたはレコード・セグメントは異なる長さを持つことがあります。可変長レコードは、すべての型のデータ・セットと一緒に使用することができます。可変長レコード・フォーマットは、フォーマット V およびフォーマット D です。それらは、スパン・フォーマット (VS または DS)、ブロック化フォーマット (VB または DB)、あるいは両方のフォーマット(VBS および DBS) にすることもできます。フォーマット D、DS、および DBS レコードは、ISO/ANSI テープ・データ・セットに使用されます。

フォーマット V レコード345ページの図 44 は、スパンを持たないブロック化および非ブロック化可変長 (フォーマット V) レコードを示しています。非ブロック・レコードを含むデータ・セットにあるブロックは、ブロック・レコードを含むデータ・セットにあるブロックと同じフォーマットです。唯一の違いは、ブロック・レコードでは、各ブロックが複数のレコードを含むことができることです。

非 VSAM データ・セット用のレコード・フォーマットの選択

344 z/OS V1R10 DFSMS データ・セットの使用法

Page 369: DFSMS データ・セットの使用法

システムは、ブロック化と非ブロック化にレコード長またはセグメント長の情報を使用します。各レコード、レコード・セグメント、またはブロックの最初の 4 バイトは、制御情報を含む記述子ワードを構成します。これらの追加の 4 バイトを、入力バッファーと出力バッファーの両方で見込んでおく必要があります。

ブロック記述子ワード (BDW)可変長ブロックは、ブロック記述子ワード (BDW) と後続の 1 つ以上の論理レコードまたはレコード・セグメントから構成されます。ブロック記述子ワードは、ブロックを記述する 4 バイトのフィールドです。これは、BDW 用の 4 バイト・ブロックの長さにブロック内のすべてのレコードまたはセグメントの合計長を加えたものを指定します。

2 つのタイプの BDW があります。ビット 0 がゼロである場合、これは非拡張BDW です。ビット 1 から 15 には、ブロック長が含まれています。ビット 16 から 31 はゼロです。ブロック長は 8 から 32 760 バイトにすることができます。すべてのアクセス方式および装置タイプは、非拡張 BDW をサポートしています。

図 44. 非スパン、フォーマット V レコード

非 VSAM データ・セット用のレコード・フォーマットの選択

第 20 章 非 VSAM データ・セット用のレコード・フォーマットの選択 345

Page 370: DFSMS データ・セットの使用法

BDW のビット 0 が 1 である場合、BDW は拡張 BDW であり、BDW ビット 1

から 31 にはブロック長が含まれます。拡張 BDW は、現在、テープでのみサポートされます。

書き込んでいるとき、BSAM アプリケーションは BDW を提供します。QSAM では、アクセス方式は BDW を作成します。BSAM が拡張 BDW を受け入れるのは、大規模ブロック・インターフェース (LBI) 処理が選択され (DCBE 制御ブロックの DCBESLBI がオンに設定されます)、出力装置が磁気テープである場合です。拡張 BDW が検出され、LBI を使用していないか、出力装置が磁気テープでない場合、ABEND 002 が出されます。拡張 BDW は SAM が下位レベル DFSMS システムにあるデータを読み取れなくすることがあるので、ブロック長が 32 760 より大きくない限り、BSAM ユーザーは拡張 BDW を提供しないよう IBM はお勧めします。 データ・セットを読み取る他のプログラムは、拡張 BDW をサポートしないこともあります。QSAM が拡張 BDW を作成するのは、長さが 32 760 より大きいブロックの場合のみであり、それ以外では、非拡張フォーマットが使用されます。BSAM または QSAM で読み取る場合、アクセス方式は BDW の情報を調べてそのフォーマットを決定します。

384ページの『大規模ブロック・インターフェース (LBI)』を参照してください。

レコード記述子ワード (RDW)可変長論理レコードは、レコード記述子ワード (RDW) と後続のデータから構成されます。レコード記述子ワードは、レコードを記述する 4 バイト・フィールドです。最初の 2 バイトには、論理レコード (4 バイトの RDW を含む) の長さ (LL)

が入っています。長さは、4 から 32 760 にすることができます。 3 番目と 4 番目のバイトのすべてのビットは 0 でなければなりません。他の値は、スパン・レコードで使用されているからです。

出力では、スパン・レコード用のデータ・モード ( 413ページの『バッファーの制御』に説明されています) の場合を除き、RDW を提供する必要があります。データ・モードでの出力では、DCB の物理レコード長フィールド (DCBPRECL) で合計データ長を提供する必要があります。

入力では、オペレーティング・システムは、データ・モードの場合を除き、RDW

を提供します。データ・モードでは、システムは、DCB の論理レコード長フィールド (DCBLRECL) に入れてプログラムにレコード長を渡します。

オプショナル制御文字 (a) は、各レコードの 5 番目のバイトとして指定することができます。OPTCD=J が指定された場合、データの最初のバイトは、テーブル参照文字 (b) です。RDW、オプショナル制御文字、およびテーブル参照文字は、パンチまたは印刷されません。

スパン・フォーマット VS レコード (順次アクセス方式)347ページの図 45 は、待機順次アクセス方式と基本順次アクセス方式のスパン機能によって、1 物理ブロックより大きい可変長論理レコードをどのように作成および処理できるかを示しています。また、これにより、レコードをセグメントに分割して、複数のブロックに書き込めるようにすることにより、可変長レコードを持つブロックをパックすることもできます。

非 VSAM データ・セット用のレコード・フォーマットの選択

346 z/OS V1R10 DFSMS データ・セットの使用法

Page 371: DFSMS データ・セットの使用法

BDW のフォーマットは、 345ページの図 44 に説明されているとおりです。

スパンがすべてのブロック・レコードについて指定されている場合、QSAM は、すべてのブロックを埋めようとします。非ブロック・レコードの場合、ブロック・サイズより大きいレコードは分割され、複数のブロックに書き込まれます。プログラムが大規模ブロック・インターフェースを使用していない場合、各ブロックには、1

つのレコードまたはレコード・セグメントのみが含まれます。したがって、ブロック・サイズは、所定の装置または処理状況で最良のブロック・サイズに設定することができます。これは、データ・セットの最大レコード長によって制限されません。したがって、レコードはいくつかのブロックをスパンでき、ボリュームであってもスパンできます。

スパン・レコード・ブロックは、拡張 BDW を持つことができます。 345ページの『ブロック記述子ワード (BDW)』を参照してください。

ユニット・レコード装置をスパン・レコードと一緒に使用する場合、システムは、それが非ブロック・レコードを処理しており、ブロック・サイズが 1 つの印刷行ま

図 45. スパン・フォーマット VS レコード (順次アクセス方式)

非 VSAM データ・セット用のレコード・フォーマットの選択

第 20 章 非 VSAM データ・セット用のレコード・フォーマットの選択 347

Page 372: DFSMS データ・セットの使用法

たは 1 枚のカードと同等でなければならないと想定します。システムは、一度に 1

セグメントずつブロックをスパンするレコードを書き込みます。

スパン可変長レコードは、SYSIN データ・セットには指定できません。

QSAM でのスパン・レコードの処理の制約事項QSAM を使用しているとき、スパン・レコードがボリュームをスパンする際に、読み取りエラーが発生することがあるのは、中間または最後のセグメントで始まるボリュームが最初にマウントされるか、FEOV マクロに後続して別の GET が発行される場合です。QSAM は、レコードの中間から読み取りを開始することはできません。エラーには、重複レコード、ユーザーのプログラムでのプログラム・チェック、およびスパン・レコード・データ・セットからの無効な入力が含まれます。

3 つ以上のボリュームをスパンする論理レコードは、QSAM によって更新モード( 413ページの『バッファーの制御』に説明されています) で処理することはできません。ブロック・レコードでは、ブロックはレコードとレコード・セグメントの組み合わせを含むことができますが、プログラムが LBI を使用していない限り、同じレコードの複数のセグメントを含むことはできません。レコードがデータ・セットに追加されるか、データ・セットから削除されるとき、またはデータ・セットが別のブロック・サイズ・パラメーターまたはレコード・サイズ・パラメーターで再び処理されるとき、レコードのセグメント化が変化します。

QSAM が UPDAT モードでスパン・レコード・データ・セットをオープンするとき、それは論理レコード・インターフェース (LRI) を使用してスパン・レコードのすべてのセグメントを単一の論理入力レコードにアセンブルするか、単一の論理レコードを出力データ・ブロック用の複数のセグメントに逆アセンブルします。レコード域は、BUILDRCD マクロを使用することによって、または DCB で BFTEK=A

を指定することによって提供される必要があります。

BFTEK=A を指定する場合、オープン・ルーチンは、LRECL 指定に等しいレコード域を提供します。これは、バイト単位の最大長である必要があります。(LRECL=0

は無効です。)

セグメント記述子ワード各レコード・セグメントは、セグメント記述子ワード (SDW) と後続のデータから構成されます。セグメント記述子ワードは、レコード記述子ワードと同様、セグメントを記述する 4 バイトのフィールドです。最初の 2 バイトには、4 バイト SDW

を含むセグメントの長さ (LL) が入っています。長さは 5 から 32 756 バイトにすることができるか、テープで WRITE を使用している場合は、18 から 32 756 バイトにすることができます。SDW の 3 番目のバイトには、論理レコード内のセグメントの相対位置を指定するセグメント制御コードが入っています。セグメント制御コードは、バイトの右端の 2 ビットです。セグメント制御コードは、表 30 に示されています。

非 VSAM データ・セット用のレコード・フォーマットの選択

348 z/OS V1R10 DFSMS データ・セットの使用法

Page 373: DFSMS データ・セットの使用法

表 30. セグメント制御コード

バイナリー・コード セグメントの相対位置

00 論理レコード全体

01 複数セグメント・レコードの最初のセグメント

10 複数セグメント・レコードの最後のセグメント

11 複数セグメント・レコードのうち、最初または最後以外のセグメント

3 番目のバイトの残りのビットおよび 4 番目のバイトのすべてのビットは、将来起こり得るシステムの使用に備えて予約済みであり、0 である必要があります。

レコードがセグメント化された後、最初のセグメントの SDW は、レコードのRDW を置き換えます。どのアクセス方式が使用されているかに応じて、ユーザーまたはオペレーティング・システムが SDW を作成できます。

v 基本順次アクセス方式では、スパン・レコードをご自分で作成して、解釈する必要があります。

v 待機順次アクセス方式の移動モードでは、RDW を含む論理レコード全体は、作業域で処理されます。GET は、セグメントを論理レコードに統合し、RDW を作成します。PUT は、必要に応じてセグメントを形成し、各セグメントごとにSDW を作成します。

データ・モードは、移動モードに似ていますが、作業域で論理レコードのデータ部分のみ (つまり、1 つのセグメント) を参照することができます。論理レコード長は、データ制御ブロックの DCBLRECL フィールドを通じてユーザーに渡されます。

位置指定モードでは、GET と PUT の両方が一度に 1 つのセグメントを処理します。ただし、位置指定モードでは、BUILDRCD マクロを使用してご自身のレコードを提供する場合、または BFTEK=A を指定することによりシステムにレコード域を提供するよう依頼する場合は、GET、PUT、および PUTX は一度に 1 つの論理レコードを処理します。

32,756 バイトより長いレコードスパン・レコード (RECFM=VS または RECFM=VBS) は、任意の数のセグメントを含むことができるので、任意の長さの論理レコードを含むことができます。各セグメントは 32,756 より短くなければならないので、一緒に論理レコードに連結されたセグメントは、32,756 バイトより長くすることができます。ここに、32,756 バイトより長いレコードを処理するためのいくつかの技法を挙げます。

1. アセンブリー域を作成するのに、BFTEK=A を指定して QSAM を使用するが、BUILDRCD マクロは使用しない場合、最大 32,756 バイトの長さのレコードを作成することができます。

2. QSAM 位置指定モードを使用して、DCB マクロで LRECL=X を指定する場合、32,756 バイトを超える論理レコードを処理することができます。レコード・セグメントを 1 つの論理レコードにアセンブルする代わりに、QSAM は一度に1 つのセグメントを提供します。次に、セグメントを一緒に 1 つの論理レコードに連結する必要があります。

非 VSAM データ・セット用のレコード・フォーマットの選択

第 20 章 非 VSAM データ・セット用のレコード・フォーマットの選択 349

|

|

|

|

|

Page 374: DFSMS データ・セットの使用法

3. BSAM を使用して、DCB マクロで LRECL=X を指定する場合、32,756 バイトを超える論理レコードを処理することができます。セグメントを一緒に 1 つの論理レコードに連結する必要があります。

論理レコードが 32,756 バイトを超えるときは、BFTEK=A または BUILDRCD マクロを使用することはできません。

ヌル・セグメントSDW のビット位置 0 にある 1 は、ヌル・セグメントを示します。ヌル・セグメントは、ブロックにそれ以上セグメントがないことを意味します。SDW のビット 1

から 7 およびブロックの残りは、2 進ゼロでなければなりません。ヌル・セグメントは、論理レコード終わりの区切り文字ではありません。(ヌル・セグメントを使用してデータ・セットを作成したのでない限り、ヌル・セグメントについて気にする必要はありません。)

ヌル・セグメントは PDSE では再作成されません。詳しくは、 521ページの『PDSE レコードの処理』を参照してください。

スパン・フォーマット V レコード (基本直接アクセス方式)BDAM のスパン機能により、トラックをスパンする可変長非ブロック化論理レコードを作成し、処理することができます。また、この機能により、レコードをセグメントに分割して、可変長レコードを持つトラックをパックすることができます。図46 は、その後これらのセグメントを複数のトラックにどのように書き込めるかを示しています。

非 VSAM データ・セット用のレコード・フォーマットの選択

350 z/OS V1R10 DFSMS データ・セットの使用法

|

|

Page 375: DFSMS データ・セットの使用法

基本直接アクセス方式でスパン非ブロック・レコード・フォーマットを指定するとき、および論理レコード全体がトラックに収まらないとき、システムは、レコード・セグメントでトラックを埋めようとします。したがって、データ・セットの最大レコード長は、トラック容量によって制限されません。レコードをセグメント化すると、レコードがいくつかのトラックをスパンし、レコードの各セグメントが異なるトラックに入るようにできます。ただし、システムはレコードがボリュームをスパンすることを許可しないので、直接データ・セットにある論理レコードのすべてのセグメントは同じボリュームにあります。

推奨: 基本直接アクセス方式 (BDAM) を使用しないでください。

図 46. 直接データ・セット用のスパン・フォーマット V レコード

非 VSAM データ・セット用のレコード・フォーマットの選択

第 20 章 非 VSAM データ・セット用のレコード・フォーマットの選択 351

Page 376: DFSMS データ・セットの使用法

不定長レコード・フォーマットフォーマット U は、F または V フォーマットに適合しないレコードの処理を許可します。図 47 は、各ブロックがどのようにレコードとして扱われるかを示しています。したがって、必要とされる非ブロック化は、プログラムによって実行しなければなりません。各レコードの最初のバイトには、オプションの制御文字を使用することができます。システムはフォーマット U レコードでは長さ検査を行わないので、プログラムが完全ブロックに満たないものを仮想記憶域に読み込むよう設計することができます。ただし、拡張フォーマット・データ・セットでは、システムが最大長のレコードを書き込むので、少なくともデータ・セットのブロック・サイズと同じ大きさの区域を提供する必要があります。BSAM では、システムは、DCB

または DCBE にある BLKSIZE の現行値によって示されると同じだけ多くのデータを読み取ろうとします。拡張フォーマット・データ・セットを読み取っているときは、DCB または DCBE BLKSIZE フィールド値が、読み取ろうとしている区域の長さを超えないことを確認します。次のブロックが短いことが分かっているので短い区域を提供する場合、BSAM は、現行の BLKSIZE 値で設定された長さ限度までストレージをオーバーレイすることができます。

フォーマット U レコードでは、WRITE、PUT、または PUTX マクロを発行するときに、レコード長を指定する必要があります。システムは長さ検査を実行しないので、指定された長さがバッファー・サイズまたは物理レコード・サイズに一致しない場合にエラー通知が与えられません。

更新モードでは、直接アクセス記憶装置にあるデータ・セットに PUTX またはWRITE マクロを発行する前に、GET または READ マクロを発行する必要があります。PUTX または WRITE マクロを発行するときにレコード長を変更する場合、レコードはゼロで埋め込まれるか、GET または READ マクロが発行されたときに受け取ったレコードの長さに合わせるための切り捨てられます。エラー通知は与えられません。

図 47. 不定長レコード。

非 VSAM データ・セット用のレコード・フォーマットの選択

352 z/OS V1R10 DFSMS データ・セットの使用法

Page 377: DFSMS データ・セットの使用法

ISO/ANSI テープISO/ANSI テープ・レコードは、フォーマット F、フォーマット D、フォーマットS、またはフォーマット U で書き込まれます。

文字データ変換ISO/ANSI 磁気テープを使用しているときに 1 つの文字表現から別の文字表現に変換することができます。次の技法のいずれかにしたがって変換が発生します。

v Coded Character Set Identifier (CCSID) 変換。 CCSID 変換は、テープにあるレコードのデータの文字表現を定義する 1 つの CCSID とアプリケーション・プログラムによって使用されるレコードにあるデータの文字表現を定義する別のCCSID の間でレコードを変換するためのデータ管理変換を提供します。JOB ステートメント、EXEC ステートメント、または DD ステートメントの CCSID パラメーター、および、動的割り振りまたは TSO ALLOCATE を通じて CCSID を指定することにより、BSAM または QSAM が ISO/ANSI V4 テープについてこのタイプの変換を実行するよう要求できます。ISO/ANSI V4 テープ以外について指定された場合、CCSID は無視されます。

テープに常駐するデータを記述する CCSID は、次のものから取られます (優先順位の順)。

1. DD ステートメント、動的割り振り、または TSO ALLOCATE で提供されるCCSID。

2. 磁気テープ・ラベルに保管される CCSID フィールド。

3. アプリケーション・プログラムに CCSID が提供されている場合は、デフォルト (7 ビット ASCII を表す 367 である CCSID)。

アプリケーション・プログラムが使用するデータを記述する CCSID は、次のものから取られます (優先順位の順)。

1. EXEC ステートメント上で提供される CCSID。

2. JOB ステートメント上で提供される CCSID。

3. テープ・データに CCSID が提供されている場合は、デフォルト (国際EBCDIC を表す 500 である CCSID)。

データ・レコードは、それが作成された CCSID によって定義されるように任意の文字データを含むことができます。

65535 の特別な CCSID を提供することによってアクセス方式変換を防ぐことができます。この場合、データ管理は、変換を使わずに、テープとアプリケーション・プログラム間でデータを転送します。

サポートされる CCSID の組み合わせのリストについては、 735ページの『付録F. 文字セットの変換』を参照し、CCSID 処理規則の説明については、 747ページの『CCSID デシジョン・テーブル』を参照してください。

非 VSAM データ・セット用のレコード・フォーマットの選択

第 20 章 非 VSAM データ・セット用のレコード・フォーマットの選択 353

Page 378: DFSMS データ・セットの使用法

制約事項: CCSID 変換が使用されるときは、次の制約事項が適用されます。

– SBCS から SBCS へ、または DBCS から DBCS へだけがサポートされます。 2 バイト文字セット (DBCS) について詳しくは、 667ページの『付録B. 2 バイト文字セット (DBCS) の使用』を参照してください。

– 1 つの CCSID から別のものに変換するとき、データ・レコードの長さの変更はサポートされず、エラーが発生します。

– すべてのデータ管理呼び出し (OPEN、READ/WRITE、GET/PUT、CLOSE)

は、タスク (TCBPKF) のオリジナル・キーで行う必要があります。キー切り替えはサポートされず、エラーが発生します。

– すべてのデータ管理呼び出しは、DCB がオープンされたタスクで行う必要があります。サブタスクはサポートされず、エラーが発生します。

– どのデータ管理呼び出しについても監視プログラム状態呼び出し側がサポートされず、エラーが発生します。

v デフォルト文字変換。データ管理は、次のどの事例でも入力時は ASCII からEBCDIC への変換、出力時は EBCDIC から ASCII への変換を提供します ( 754

ページの『デフォルト変換コードのテーブル』を参照)。

– ISO/ANSI V1 および V3 テープ

– CCSID のない ISO/ANSI V4 テープ

– OPTCD=Q を指定したラベルなしテープ

関連資料: ASCII 7 ビット・コードへ、またはそれから変換するこのタイプの変換のためにシステムが提供する変換ルーチンについての情報は、「z/OS DFSMS

Using Magnetic Tapes」を参照してください。

ASCII から EBCDIC に変換するとき、ソース文字が高位桁のビットを含む場合、7 ビットの変換は、同等の文字を生成しません。その代わりに、変換での損失を示すために置換文字が生成されます。これは、たとえば、システムが ASCII

7 ビット・コードでランダム・バイナリー・データ (ダンプなど) を記録できないことを意味します。

DISP=OLD でない限り、デフォルトの文字変換を使用して作成された既存のデータ・セットを読み書きするのに、システムは CCSID 変換を使用できません。

CCSID を使用するとき、デフォルト文字変換に最も近い同等のものは、7 ビットASCII を表す 367 の CCSID と、国際 EBCDIC を表す 500 の CCSID の間の文字変換です。

フォーマット F レコードISO/ANSI テープでは、フォーマット F レコードは、制御文字、ブロック接頭語、および曲折アクセント記号文字を除き、 342ページの『固定長レコード・フォーマット』で説明されているのと同じです。

制御文字。制御文字 (ある場合) は、ISO/ANSI 制御文字である必要があります。制御文字について詳しくは、「z/OS DFSMS Macro Instructions for Data Sets」を参照してください。

非 VSAM データ・セット用のレコード・フォーマットの選択

354 z/OS V1R10 DFSMS データ・セットの使用法

Page 379: DFSMS データ・セットの使用法

ブロック接頭語。レコード・ブロックは、ブロック接頭語を含むことができます。ブロック接頭語は、0 から 99 バイトの範囲で変化することができますが、長さは、処理されているデータ・セットについて一定でなければなりません。ブロック・レコードでは、ブロック接頭語は、最初の論理レコードに先行します。非ブロック・レコードでは、ブロック接頭語は、各論理レコードに先行します。

ブロック接頭語が付いたレコードを読み取るために QSAM および BSAM を使用するには、DCB で BUFOFF パラメーターを指定します。QSAM を使用しているときは、入力時にブロック接頭部へのアクセスを持ちません。BSAM を使用しているときは、入力と出力の両方でブロック接頭語を示す必要があります。 QSAM またはBSAM を使用しているときは、DCB の BLKSIZE パラメーターと BUFL パラメーターでブロック接頭語の長さを示す必要があります。

出力レコードで BSAM を使用するとき、オペレーティング・システムはブロック接頭語を識別しません。したがって、ブロック接頭語が必要な場合、それはレコードの一部でなければなりません。 QSAM 出力レコードにはブロック接頭語を組み込めないことに注意してください。

ブロック接頭語は、128 の 7 ビット ASCII 文字に対応する EBCDIC 文字のみを含むことができます。したがって、いつでも ASCII に変換できるわけではない、バイナリー、パック 10 進、および浮動小数点などのデータ型を使用するのは避ける必要があります。これは、ISO/ANSI V4 テープに書き込むときに CCSID が使用される場合にも当てはまります。

関連資料: ASCII 7 ビット・コードに変換するこのタイプの変換のためにシステムが提供する変換ルーチンについては、「z/OS DFSMS Using Magnetic Tapes」を参照してください。

図 48 は、ISO/ANSI テープ用の固定長レコードのフォーマット、および制御文字とブロック接頭語 (それらが存在する場合) がどこに位置するかを示しています。

非 VSAM データ・セット用のレコード・フォーマットの選択

第 20 章 非 VSAM データ・セット用のレコード・フォーマットの選択 355

Page 380: DFSMS データ・セットの使用法

図 48. ISO/ANSI テープ用の固定長レコード

非 VSAM データ・セット用のレコード・フォーマットの選択

356 z/OS V1R10 DFSMS データ・セットの使用法

Page 381: DFSMS データ・セットの使用法

曲折アクセント記号文字。GET ルーチンは、すべての曲折アクセント記号文字(X'5E') について各レコード (最初のものを除く) をテストします。曲折アクセント記号文字で完全に埋められたレコードが検出される場合、QSAM はそのレコードおよびブロックの残りを無視します。固定長レコードは、曲折アクセント記号文字のみで構成してはなりません。ブロックに含まれるレコードが最大数より少なくなり、ブロックが切り捨てられないときは、レコードのブロックを埋め込むために曲折アクセント記号文字が使用されるので、この制約事項が必要です。

フォーマット D レコードISO/ANSI テープ・データ・セットには、フォーマット D、フォーマット DS、およびフォーマット DBS のレコードが使用されます。ISO/ANSI レコードは、フォーマット V レコードと同じですが、3 つの例外があります。v ブロック接頭語v ブロック・サイズv 制御文字

ブロック接頭語。レコード・ブロックは、ブロック接頭語を含むことができます。ブロック接頭語を指定するには、DCB マクロに BUFOFF をコーディングします。ブロック接頭部は、長さが 0 から 99 バイトの範囲で変化することができますが、その長さは処理されているデータ・セットにあるすべてのレコードについて一定でなければなりません。ブロック・レコードでは、ブロック接頭語は各ブロック内の最初または唯一の論理レコードの RDW に先行します。非ブロック・レコードでは、ブロック接頭語は各論理レコードの RDW に先行します。

出力時にフォーマット D またはフォーマット DS レコードについてブロック接頭語がデータ管理によって BDW として扱われることを指定するには、DCB パラメーターとして BUFOFF=L をコーディングします。ブロック接頭語は 4 バイトの長さでなければならず、ブロック接頭語を含む、ブロックの長さを含んでいる必要があります。ブロックが書き込まれるとき、長さ (ユーザーによって 2 進数で示されます) は ISO/ANSI テープで 4 バイトの ASCII 文字 10 進数フィールドに変換されるので、フォーマット D、フォーマット DS、BUFOFF-L ブロックの最大長は9999 です。これは、ブロックが読み取られるときに、2 進数で 2 バイトの長さフィールドに変換して戻され、2 バイトのゼロが後続します。

QSAM を使用してレコードを書き込む場合、データ管理はユーザーに代わってブロック接頭語を埋めます。BSAM を使用してレコードを書き込む場合は、ブロック接頭語をご自身で埋める必要があります。チェーン・スケジューリングを使用してブロック化 DB または DBS レコードを読み取る場合は、DCB で BUFOFF=絶対式をコーディングすることはできません。その代わりに、BUFOFF=L が必要です。これは、アクセス方式は、レコードを非ブロック化するのに 2 進 RDW と有効なブロック長を必要とするからです。

QSAM を使用する場合、入力でブロック接頭語をレコード域に読み込むことはできません。 BSAM を使用しているときは、入力と出力の両方でブロック接頭語を示す必要があります。 QSAM または BSAM を使用しているときは、BLKSIZE パラメーターと BUFL パラメーターでブロック接頭語の長さを示す必要があります。

QSAM を使用して DB または DBS レコードにアクセスしており、BUFOFF=0 が指定されるとき、BUFL の値 (指定されている場合) は 4 だけ大きくする必要があ

非 VSAM データ・セット用のレコード・フォーマットの選択

第 20 章 非 VSAM データ・セット用のレコード・フォーマットの選択 357

Page 382: DFSMS データ・セットの使用法

ります。BUFL が指定されていない場合は、BLKSIZE を 4 だけ大きくする必要があります。これにより、システムがバッファーを取得したときに、4 バイトのQSAM 内部処理域を組み込むことができます。これらの 4 バイトは、ユーザーのブロックの一部にはなりません。

出力レコードで BSAM を使用するとき、オペレーティング・システムはブロック接頭語を識別しません。 したがって、ブロック接頭語が必要な場合、それはレコードの一部でなければなりません。

ブロック接頭語は、128 の 7 ビット ASCII 文字に対応する EBCDIC 文字のみを含むことができます。 したがって、いつでも ASCII に変換できるわけではないデータ型 (バイナリー、パック 10 進、および浮動小数点など) を使用するのは避ける必要があります。 DB および DBS レコードの場合、ブロック接頭部がバイナリー・データを含むことができる唯一の場合は、BUFOFF=L をコーディングしたときです。これは、データ管理に接頭部が BDW であることを通知します。ブロック接頭語と異なり、RDW は常にバイナリーでなければなりません。これは、バージョン4 のテープについて、CCSID で変換または非変換のどちらが指定される場合でも当てはまります。

ブロック・サイズ。バージョン 3 のテープは、最大ブロック・サイズが 2048 です。この限度は、ラベル検証インストール・システム出口によって指定変更されます。バージョン 4 のテープの場合、最大サイズは 32 760 です。

可変長ブロックを作成するときに 18 以上の最大データ・セット・ブロック・サイズを指定する場合、個々のブロックは 18 バイトより短くすることができます。それらの場合、ブロックが ISO/ANSI 磁気テープの上に書き込まれたときに、データ管理はそれぞれを 18 バイトまで埋め込みます。使用される埋め込み文字は、X’5E’

である ASCII 曲折アクセント記号文字です。

制御文字。制御文字 (ある場合) は、ISO/ANSI 制御文字である必要があります。制御文字について詳しくは、「z/OS DFSMS Macro Instructions for Data Sets」を参照してください。

図 49 は、ISO/ANSI テープの非スパン可変長レコードのフォーマット、レコード記述子ワード (RDW) が配置される場所、およびブロック接頭語および制御文字が使用されるときそれらを置く場所を示します。

非 VSAM データ・セット用のレコード・フォーマットの選択

358 z/OS V1R10 DFSMS データ・セットの使用法

Page 383: DFSMS データ・セットの使用法

ISO/ANSI フォーマット DS およびフォーマット DBS レコードISO/ANSI テープでは、可変長スパン・レコードは、DCB RECFM パラメーターでDCB RECFM=DS または DBS として指定される必要があります。フォーマットDS およびフォーマット DBS レコードは、フォーマット VS またはフォーマットVBS レコードと似ています。例外は、 360ページの『セグメント記述子ワードの変換』および 361ページの『32 760 バイトより長いレコードの処理』で説明されています。

360ページの図 50 は、ISO/ANSI テープ用のスパン可変長レコードがどのように見えるかを示しています。

図 49. プログラムによって見られた ISO/ANSI テープの非スパン・フォーマット D レコード

非 VSAM データ・セット用のレコード・フォーマットの選択

第 20 章 非 VSAM データ・セット用のレコード・フォーマットの選択 359

Page 384: DFSMS データ・セットの使用法

図 50 は、セグメント記述子ワード (SDW) を示しています。ここに、レコード記述子ワード (RDW) が位置指定され、ブロック接頭語が使用されるときはそれらがここに置かれる必要があります。IBM アクセス方式を使用していない場合は、ISO/ANSI レコード制御ワードおよびセグメント制御ワードの説明については、「z/OS DFSMS Macro Instructions for Data Sets」を参照してください。

セグメント記述子ワードの変換DS/DBS レコードで、各 SDW に先行する追加のバイトがあります。ISO/ANSI

SDW (セグメント制御ワードと呼ばれます) は 5 バイトの長さなので、SDW をIBM から ISO/ANSI フォーマットに変換するのに、この追加の 5 バイトが必要です。 そのほかは、DS/DBS レコード用の SDW は、VS/VBS レコード用の SDW

と同じです。 SDW LL カウントは、追加のバイトを除外します。

QSAM または BSAM は、ISO/ANSI セグメント制御ワード (SCW) フォーマットとIBM セグメント記述子ワード (SDW) フォーマットの間で変換します。 出力では、

図 50. プログラムによって見られた ISO/ANSI テープ用のスパン可変長 (フォーマット DS) レコード

非 VSAM データ・セット用のレコード・フォーマットの選択

360 z/OS V1R10 DFSMS データ・セットの使用法

Page 385: DFSMS データ・セットの使用法

2 進 SDW LL 値 (BSAM を使用しているときはユーザーによって、QSAM を使用しているときはアクセス方式によって提供されます) は、追加のバイトのために 1

だけ大きくされ、4 つの ASCII 数字に変換されます。 2 進 SDW LL 値は 4 つの数字になるので、2 進値は 9998 より大きくてはなりません。どのセグメント・タイプ (論理レコード全体、最初のセグメント、最後のセグメント、または中間セグメント) が処理されているか指定するには、5 番目の文字が使用されます。

入力では、セグメント長を指定する 4 つの数字は、2 つのバイナリー SDW LL バイトに変換され、未使用バイトのために 1 だけ小さくされます。 ISO/ANSI セグメント制御文字は、DS/DBS SDW 制御フラグにマップされます。この変換は、各SDW の先頭に未使用バイトを残します。これは X'00' に設定されます。この処理については詳しくは、「z/OS DFSMS Macro Instructions for Data Sets」を参照してください。

テープでは、レコードにある他のバイトが ASCII でない場合であっても、SDW バイトは ASCII 数字です。

32 760 バイトより長いレコードの処理スパン・レコード (RECFM=VS または RECFM=VBS) は、任意の数のセグメントを含むことができるので、任意の長さの論理レコードを含むことができます。各セグメントは 32 760 より短くなければならないので、一緒に論理レコードに連結されたセグメントは、32 760 バイトより長くすることができます。可変長 ISO/ANSI テープ・レコード (RECFM=D) は、32 760 バイトより長くすることができます。ここに、32 760 バイトより長いレコードを処理するためのいくつかの技法を挙げます。

フォーマット D、フォーマット DS、またはフォーマット DBS レコード(ISO/ANSI テープ) の処理技法は次のとおりです。

v QSAM または BSAM を使用し、LRECL=X を指定する場合、ISO/ANSI テープでは 32 760 バイトより長いレコードを処理することができます。ISO/ANSI テープの最大ブロック長は 2048 であることに注意してください。

v QSAM を XLRI と一緒に使用し、LRECL=nnnnnK または 0K を指定する場合、可変長スパン ISO/ANSI テープについて 32 760 バイトより長いレコードを処理することができます。

32 760 バイトを超えるレコード長を持つ DS/DBS レコードは、XLRI を使用して処理することができます。(XLRI は、ISO/ANSI テープでは QSAM 位置指定モードでのみサポートされます。) ISO/ANSI について LRECL=X を使用すると 013-DC

ABEND が発生します。

XLRI を使用するには、DCB マクロで LRECL=0K または LRECL=nK を指定します。DCBLRECL を K 接尾部を付けて指定すると、DCBBFTK ビットが設定されます。これは、LRECL が K 単位でコーディングされ、DCB が XLRI モードで処理されることを示します。

DCB マクロでの LRECL=0K は、LRECL 値がファイル・ラベルまたは JCL から取られることを指定します。LRECL がラベルからの場合は、ファイルは入力ファイルとしてオープンする必要があります。LRECL 用のラベル (HDR2) 値は、K バイトに変換され、XLRI が有効な場合は切り上げられます。LRECL で ISO/ANSI ラベ

非 VSAM データ・セット用のレコード・フォーマットの選択

第 20 章 非 VSAM データ・セット用のレコード・フォーマットの選択 361

Page 386: DFSMS データ・セットの使用法

ル値が 00 000 であり、最大レコード長が 99 999 より大きくなる可能性があることを示す場合、JCL または DCB で LRECL=nK を使用して最大レコード長を指定する必要があります。

LRECL 値は JCL により絶対形式で、または K 表記を付けて表すことができます。 DCB が XLRI を指定するとき、システムは 1024 の整数倍に切り上げて、絶対値を K バイトに変換します。絶対値は、5 から 32 760 でのみ許容されます。

DD ステートメントでレコード域サイズを示すには、LRECL=nK をコーディングするか、データ・クラスが、ユーザーの必要とする LRECL 属性を持つように指定します。値 nK の範囲は 1K から 16 383K (1024 バイトの倍数で表されます) です。ただし、使用可能なバッファー・サイズに応じて、ほとんどのシステムで指定できる値は、16 383K バイトよりはるかに小さくなります。この値は、スパン・フォーマット・ファイルの最大論理レコード長を入れるのに必要なレコード域を決定するのに使用されます。

XLRI を使用するとき、正確な LRECL サイズは、レコード域にある RDW の下位3 桁のバイトで示されます。この特殊な RDW フォーマットは、書き込まれるか読み取られる論理レコード (4 バイトの RDW を含む) の長さを示すために、レコード域にのみ存在します。 ( 360ページの図 50 にある XLRI フォーマットを参照してください。) DCB LRECL は、レコード域の 1024 の倍数のサイズ (次の最も近い K バイトに切り上げられます) を示しています。他のすべての場合には、変換の前に標準の DS/DBS SDW フォーマットが使用されます。

QSAM での DS/DBS テープの処理QSAM を使用するときは、DS/DBS テープ・ファイルを処理するには、VS/VBS テープ・ファイルを処理するために使用できるのと同じアプリケーションが使用されます。ただし、ブロック・サイズ制限、テープ・デバイス、および 128 の 7 ビット ASCII 文字に対応する EBCDIC 文字への制限などの、ISO/ANSI 要件を満たしていることを確認する必要があります。 SCW/SDW 変換およびバッファー位置決めは、GET/PUT ルーチンによって処理されます。

ISO/ANSI バージョン 4 テープでは、特殊文字 !*″%&’()+,-./:;<=>?_ および数字 0

から 9 も許可されます。

BSAM での DS/DBS テープの処理BSAM を使用して DS/DBS テープ・ファイルを処理するときは、各 SDW の先頭で追加のバイトを見込む必要があります。SDW LL は、追加のバイトを除外する必要があります。入力では、各 SDW に先行する未使用のバイトを無視する必要があります。出力では、各 SDW に追加のバイトを割り振る必要があります。

フォーマット U レコードISO/ANSI バージョン 1 テープ (ISO 1001-1969 および ANSI X3.27-1969) では、データはフォーマット U のみとすることができます。これらのレコードは入力にのみ使用することができます。それらは、 352ページの『不定長レコード・フォーマット』で説明されるフォーマット U と同じですが、制御文字が ISO/ANSI 制御文字でなければならないことと、ブロック接頭語を使用できる点が異なります。

非 VSAM データ・セット用のレコード・フォーマットの選択

362 z/OS V1R10 DFSMS データ・セットの使用法

Page 387: DFSMS データ・セットの使用法

フォーマット U レコードは、バージョン 3 またはバージョン 4 の ISO/ANSI テープ用にはサポートされていません。バージョン 3 またはバージョン 4 のテープからフォーマット U レコードを処理しようとすると、ラベル検証インストール・システム出口に入ることになります。

レコード・フォーマット - 装置タイプの考慮事項このセクションでは、特定の装置について受け入れ可能なレコード・フォーマットについて説明します。

DASD ― フォーマット F、フォーマット U、フォーマット V

磁気テープ ― フォーマット D、フォーマット F、フォーマット U、フォーマット V

プリンター ― フォーマット F、フォーマット U、フォーマット V

カード読取装置およびパンチ ― フォーマット F、フォーマット U

SYSIN および SYSOUT ― フォーマット F、フォーマット U、フォーマットV

詳しくは、 451ページの『第 24 章 データ・セットのスプーリングおよびスケジューリング』を参照してください。

DCB マクロの装置依存の (DEVD) パラメーターは、データ・セットのボリュームが常駐する装置のタイプを指定します。

DA 直接アクセス記憶装置TA 磁気テープPR プリンターRD カード読取装置PC カード・パンチ

注: DEVD オプションは、DCB マクロ拡張のみに影響を及ぼすので、そのデフォルトを DEVD=DA にし、装置依存のパラメーターをコーディングしないことによって、最大の装置柔軟性が保証されます。

オプショナル制御文字の使用DD ステートメントで、DCB マクロ、またはオプショナル制御文字がデータ・セットの各レコードの部分であるデータ・セット・ラベルを指定することができます。データ・セットが印刷されるときの紙送り制御機能、またはデータ・セットがパンチされるときのスタッカー・ビンを示すために 1 バイトの文字が使用されます。この文字はストレージにあるレコードの一部であるにもかかわらず、これが印刷またはパンチされることはありません。バッファー域は、この文字が入るだけ十分に大きくなければなりません。

データ・セットの直接の宛先が、この制御文字を認識しない、ディスクまたはテープなどの装置である場合、システムは、制御文字がレコードのデータ部分の最初のバイトであると想定します。データ・セットの宛先がプリンターまたはパンチであり、制御文字の存在が示されていない場合、システムは制御文字をデータの最初のバイトと見なします。データ・セットの宛先が SYSOUT である場合、制御文字の効果は、データ・セットの最終宛先で判別されます。制御文字のリストについては、「z/OS DFSMS Macro Instructions for Data Sets」を参照してください。

非 VSAM データ・セット用のレコード・フォーマットの選択

第 20 章 非 VSAM データ・セット用のレコード・フォーマットの選択 363

Page 388: DFSMS データ・セットの使用法

制御文字の存在は、データ制御ブロックの RECFM フィールドで M または A によって示されます。M はマシン・コードを表し、A は米国規格協会 (ANSI) コードを表します。M または A が指定され、この文字が各レコードに存在しなければならない場合、DCB のプリンター・スペース (PRTSP) フィールドまたはスタッカー選別 (STACK) フィールドは無視されます。

オプショナル制御文字は、フォーマット F およびフォーマット U のレコードの最初のバイトの中、および BUFOFF=L であるフォーマット V レコードおよびフォーマット D レコードの 5 番目のバイトの中になければなりません。データ・セットの直接の宛先が順次 DASD データ・セットまたは IBM 標準あるいは ISO/ANSI

標準のラベルが付いたテープである場合、OPEN は、制御文字の存在およびタイプをデータ・セット・ラベルに記録します。これは、データ・セットをコピーしてデータ・セットを印刷、パンチ、または SYSOUT するプログラムが RECFM を伝達することにより、制御文字のタイプを制御できるようにするためです。

非 VSAM データ・セット用のレコード・フォーマットの選択

364 z/OS V1R10 DFSMS データ・セットの使用法

Page 389: DFSMS データ・セットの使用法

直接アクセス記憶装置 (DASD) の使用直接アクセス記憶装置は、フォーマット F、フォーマット V、またはフォーマットU のレコードを受け入れます。キーを使用してレコードを読み書きするには、キー長 (KEYLEN) を指定する必要があります。そのほかに、オペレーティング・システムでは、すべての直接アクセス・ボリュームについて標準のトラック・フォーマットがあります。トラック・フォーマットの完全な説明については、 9ページの『トラックのフォーマット』を参照してください。各トラックには、データ情報と特定の制御情報が含まれています。たとえば、次の情報があります。

v トラックのアドレス

v 各レコードのアドレス

v 各レコードの長さ

v 区域間のギャップ

PDSE または圧縮フォーマット・データ・セットを除き、ブロックのサイズは、システムがトラックに書き込める量を超えることはできません。PDSE および圧縮フォーマット・データ・セットでは、アクセス方式はブロックをシミュレートし、BLKSIZE の値は、トラック長とは無関係に選択することができます。圧縮フォーマット・データ・セットは、アクセス方式が圧縮したレコードを入れることができるデータ・フォーマットに保管される拡張フォーマット・データ・セットのタイプです。

磁気テープの使用フォーマット F、フォーマット V、フォーマット D、およびフォーマット U のレコードは、磁気テープ用に受け入れ可能です。データ変換機能が使用できない場合は、フォーマット V レコードは 7 トラック・テープでは受け入れ不能です。ASCII レコードは、7 トラック・テープでは受け入れ不能です。

可変長レコードのフォーマット V またはフォーマット D を使ってテープ・データ・セットを作成するとき、制御プログラムは 18 バイトより短いデータ・ブロックを埋めます。フォーマット V レコードでは、右に 2 進ゼロを埋め、データ・ブロック長が 18 バイトに等しくなるようにします。フォーマット D (ASCII) レコードでは、埋め込みは、X'5E' と同等の ASCII 曲折アクセント記号から構成されます。

ブロック・サイズには最小所要量がありません。ただし、非ゼロ復帰反転モードでは、磁気テープ・デバイスでデータ・チェックが発生する場合、読み取り操作で 12

バイトより短いレコードは、ノイズ・レコードとして扱われ、失われます。データ・チェックが発生しない限り、ノイズの検査は行われません。

表 31 は、テープ密度 (DEN) が、トラック当たりのビット / インチによる記録密度をどのように指定するかを示しています。

表 31. テープ密度 (DEN) 値

DEN 7 トラックのテープ 9 トラックのテープ

1 556 (NRZI) 該当なし

2 800 (NRZI) 800 (NRZI)1

3 該当なし 1600 (PE)2

非 VSAM データ・セット用のレコード・フォーマットの選択

第 20 章 非 VSAM データ・セット用のレコード・フォーマットの選択 365

Page 390: DFSMS データ・セットの使用法

表 31. テープ密度 (DEN) 値 (続き)

DEN 7 トラックのテープ 9 トラックのテープ

4 該当なし 6250 (GCR)3

注:

1. NRZI は、非ゼロ復帰反転モード用です。

2. PE は、位相エンコード・モード用です。

3. GCR は、グループ・コード化記録モード用です。

DEN が指定されない場合、装置によって可能な最高の密度が使用されます。 DEN

パラメーターは、18 トラックまたは 36 トラックのテープ・カートリッジに影響を与えません。

7 トラックのテープ用のトラック記録技法 (TRTCH) は、次のように指定することができます。

C データ変換を使用します。データ変換では、7 トラックに 8 バイナリー・ビットのデータを書き込むことを可能にします。それ以外の場合、8 ビットのバイトのうち6 ビットのみが記録されます。フォーマット V レコードの長さフィールドには、バイナリー・データが含まれ、データ変換を使用しないと正しく記録されません。

E 偶数パリティーを使用します。E が省略される場合は、奇数パリティーが想定されます。

T BCDIC から EBCDIC への変換が必要です。

改良データ記録機能を持つ磁気テープ・ドライブのトラック記録技法 (TRTCH)

は、次のように指定することができます。

COMP データは、短縮されたフォーマットで書き込まれます。

NOCOMP データは、標準フォーマットで書き込まれます。

システム・プログラマーは、SYS1.PARMLIB の DEVSUPxx メンバーで COMP または NOCOMP 用の 3480 デフォルトを設定します。

プリンターの使用BSAM または QSAM 使用してプリンターに直接または間接に書き込むデータ・セットのレコードは、制御文字を含むことができます。 363ページの『オプショナル制御文字の使用』を参照してください。レコードが制御文字を含んでいるかどうかとは無関係に、それらはテーブル参照文字を含むことができます。

テーブル参照文字テーブル参照文字は、CHARS キーワードを使用して文字配列テーブル名を指定した順序に対応する数字です。システムは、印刷中の文字配列の選択にテーブル参照文字を使用します。

数値テーブル参照文字 (0 など) は、文字が対応するフォントを選択します。文字の番号値は、CHARS パラメーターを使用してフォント名を指定した順序を表します。CHARS パラメーターで指定されたフォント名に対応するテーブル参照文字を使用するほかに、PAGEDEF 制御構造で指定されたフォント名に対応するコード・

非 VSAM データ・セット用のレコード・フォーマットの選択

366 z/OS V1R10 DFSMS データ・セットの使用法

Page 391: DFSMS データ・セットの使用法

テーブル参照文字をコーディングすることができます。CHARS では、有効なテーブル参照文字は変化し、0 ~ 3 の範囲を取ります。PAGEDEF では、それらは、0

~ 126 の範囲を取ります。システムは、限界より大きい値を持つテーブル参照文字を 0 (ゼロ) として扱います。

テーブル参照文字の存在を示すには、DCB マクロ、DD ステートメント、または動的割り振り呼び出しに OPTCD=J をコーディングします。

DD ステートメントで CHARS および PAGEDEF パラメーターをサポートするIBM 3800 や IBM 3900 などのプリンターで、システムはテーブル参照文字を処理します。 装置が CHARS または PAGEDEF をサポートしないプリンターである場合、システムはテーブル参照文字を破棄します。これは、ジョブ・ステップに直接割り振られるプリンターと SYSOUT データ・セットの両方について当てはまります。これによって、プリンターがテーブル参照文字をサポートしているかどうかをプログラムが知る必要はなくなります。

OPTCD=J が指定されたデータ・セットの直接の宛先が DASD である場合は、システムはテーブル参照文字をデータの一部として扱います。システムは、データ・セット・ラベルでも OPTCD 値を記録します。直接の宛先がテープである場合、システムはデータ・セット・ラベルに OPTCD 値を記録しません。

レコード・フォーマットプリンターは、フォーマット F、フォーマット V、およびフォーマット U のレコードを受け入れることができます。システムは、フォーマット V レコードまたはレコード・セグメントの最初の 4 バイト (レコード記述子ワードまたはセグメント記述子ワード) を印刷しません。フォーマット V のレコードでは、少なくとも 1 バイトのデータの後にレコードまたはセグメント記述子ワードあるいは紙送り制御文字が続く必要があります。 RECFM パラメーターで紙送り制御文字を指定する場合、システムはそれを印刷しません。紙送り制御文字を使用してこの位置を指定しない限り、システムは、最初のレコードについてプリンターをチャネル 1 に位置付けません。

プリントの各行は 1 つのレコードに対応しているので、レコード長は、プリンターの 1 行の長さを超えてはなりません。可変長スパン・レコードでは、各行は 1 つのレコード・セグメントに対応するので、ブロック・サイズがプリンターの 1 行の長さを超えてはなりません。

紙送り制御文字を指定しない場合、プリンター・スペーシング (PRTSP) を 0、1、2、または 3 として指定できます。PRTSP を指定しない場合、システムは 1 を想定します。

すべての QSAM RECFM=FB プリンター・データ・セットについて、システムはDCB にあるブロック・サイズを論理レコード長に等しくなるように調整します。システムはこのデータ・セットを RECFM=F として扱います。システムがこのデータ・セット用のバッファーを作成する場合、BUFL パラメーターはバッファー長を決定します。BUFL パラメーターを指定しない場合、システムはバッファー長に調整されたブロック・サイズを使用します。

論理レコード長より大きなブロック・サイズを指定して DCB を再使用するには、DCB で DCBBLKSI をリセットして、バッファーが最大のブロック・サイズを入れ

非 VSAM データ・セット用のレコード・フォーマットの選択

第 20 章 非 VSAM データ・セット用のレコード・フォーマットの選択 367

Page 392: DFSMS データ・セットの使用法

るのに十分なだけ大きいようにする必要があります。バッファー・サイズを確保するには、データ・セットの最初のオープンの後に BUFL パラメーターを指定します。あるいは各 CLOSE マクロの後に FREEPOOL マクロを発行して、システムがデータ・セットをオープンするたびに新規バッファー・プールを作成するようにすることができます。

カード読取装置およびパンチの使用フォーマット F およびフォーマット U レコードは、読取装置とパンチの両方に受け入れ可能です。フォーマット V レコードは、パンチにのみ受け入れ可能です。装置制御文字は、RECFM パラメーターで指定されている場合は、スタッカーを選択するために使用されます。パンチはされません。制御文字情報については、 363ページの『オプショナル制御文字の使用』を参照してください。フォーマット V レコードまたはレコード・セグメントの最初の 4 バイト (レコード記述子ワードまたはセグメント記述子ワード) は、パンチされません。フォーマット V のレコードでは、少なくとも 1 バイトのデータの後にレコードまたはセグメント記述子ワードあるいは紙送り制御文字が続く必要があります。

80 バイトのレコード・サイズは、EBCDIC モード (E) と呼ばれ、160 バイトのレコード・サイズは、カラム・バイナリー・モード (C) と呼ばれます。パンチされた各カードは 1 つの物理レコードに相当します。したがって、最大レコード・サイズを EBCDIC モード (80 バイト) またはカラム・バイナリー・モード (160 バイト)

に制限する必要があります。カード・パンチにカラム・バイナリー・モードが使用される場合、PUT を使用していない限り、BLKSIZE は 160 でなければなりません。その場合、BLKSIZE を 160 または 160 の倍数に指定することができ、システムは、 428ページの『PUT - レコードの書き込み』で説明されているようにこれを扱います。読み取り / パンチ・モードの操作 (MODE) パラメーターは、カード・イメージ・カラム・バイナリー・モード (C) または EBCDIC モード (E) として指定します。この情報が省略される場合は、E が想定されます。スタッカー選択パラメーター (STACK) は、1 または 2 として指定して、どのビンがカードを受け取るか示すことができます。STACK が指定されない場合は、1 が想定されます。

すべての QSAM RECFM=FB カード・パンチ・データ・セットについて、DCB にあるブロック・サイズは、システムによって論理レコード長に等しくなるように調整されます。このデータ・セットは、RECFM=F として扱われます。システムがこのデータ・セット用のバッファーを作成する場合、バッファー長は BUFL パラメーターによって決定されます。BUFL パラメーターが指定されなかった場合、調整されたブロック・サイズがバッファー長に使用されます。

論理レコード長より大きなブロック・サイズを指定して DCB を再使用するには、DCB で DCBBLKSI をリセットして、バッファーが予期される最大のブロック・サイズを入れるのに十分なだけ大きいようにする必要があります。 バッファー・サイズを確保するには、データ・セットを最初にオープンする前に BUFL パラメーターを指定するか、データ・セットがオープンされるたびにシステムが正しいサイズの新規バッファー・プールをビルドするように 各 CLOSE マクロの後で FREEPOOL

マクロを発行します。

IBM 2540 カード読取パンチでのパンチ・エラー訂正は行われません。

非 VSAM データ・セット用のレコード・フォーマットの選択

368 z/OS V1R10 DFSMS データ・セットの使用法

Page 393: DFSMS データ・セットの使用法

IBM 3525 カード・パンチは、プリントおよび関連するデータ・セットにフォーマット F レコードのみを受け入れます。 読み取りデータ・セット、パンチ・データ・セット、および解釈パンチ・データ・セットには、他のレコード・フォーマットが許可されます。

紙テープ読取装置の使用システムは、紙テープ読取装置 (IBM 2671) をもはやサポートしていません。

非 VSAM データ・セット用のレコード・フォーマットの選択

第 20 章 非 VSAM データ・セット用のレコード・フォーマットの選択 369

Page 394: DFSMS データ・セットの使用法

370 z/OS V1R10 DFSMS データ・セットの使用法

Page 395: DFSMS データ・セットの使用法

第 21 章 データ制御ブロックの指定および初期化

この章では以下のトピックを扱います。

トピック 該当ページ

順次および区分データ・セットの処理 372

処理用のデータ・セットを準備するための OPEN の使用 378

データ・セット・オプションの選択 383

DCB および DCBE の変更および検査 394

CLOSE を使用したデータ・セットの処理の終了 396

データ・セットのオープンおよびクローズ: 考慮事項 400

ボリュームの位置決め 404

SAM バッファー・スペースの管理 407

バッファー・プールの組み立て 408

バッファーの制御 413

バッファリング技法および GET/PUT 処理モードの選択 418

待機アクセス方式でのバッファリング・マクロの使用 418

バッファリング・マクロと基本アクセス方式の併用 419

処理しようとする各データ・セットごとに、対応するデータ制御ブロック (DCB) およびデータ定義 (DD) ステートメントまたはその動的割り振りの等価物がなければなりません。データ・セットおよび装置依存の情報は、どちらのソースによっても提供することができます。「z/OS MVS JCL ユーザーズ・ガイド」および「z/OS

MVS JCL 解説書」で指定されているように、DD ステートメントもデータ・セット識別を提供する必要があります。プログラム、SMS、および出口ルーチンは、装置特性、スペース割り振り要求、および関連情報を提供することができます。DCB とDD ステートメント間の論理接続を確立するには、DCB マクロの DDNAME フィールドで DD ステートメントの名前を指定するか、データ・セットをオープンする前にご自身でフィールドを完成させます。

以下の手順に従うことにより、非 VSAM データ・セットを処理して、データを読み取り、更新、または追加することができます。

1. データ制御ブロック (DCB) を作成して、オープンするデータ・セットを示します。DCB は、各データ・セットごとに必要であり、DCB マクロによって処理プログラムに作成されます。

プログラムが実行されるとき、データ・セット名およびその他の重要な情報 (データ・セットの後処理など) が、データ定義 (DD) ステートメントと呼ばれるJCL ステートメントで、または動的割り振りの呼び出しで指定されます。

2. オプションで、データ制御ブロック拡張 (DCBE) を提供します。オプションを提供し、システムが DCBE に保管するデータ・セット特性をテストすることができます。

© Copyright IBM Corp. 1987, 2008 371

Page 396: DFSMS データ・セットの使用法

3. OPEN マクロを使用して、処理したいデータ・セットにプログラムを接続します。また、OPEN マクロは、ボリュームを位置付け、データ・セット・ラベルを書き込み、仮想記憶域を割り振ります。さまざまなバッファリング・マクロおよびオプションについて検討することができます。

4. データ・セットへのアクセスを要求します。たとえば、BSAM を使用して順次データ・セットを処理している場合は、READ、WRITE、NOTE、または POINT

マクロを使用することができます。

5. CLOSE マクロを使用して、プログラムをデータ・セットから切断します。また、CLOSE マクロは、ボリュームを位置付け、データ・セット・ラベルを作成し、待機出力バッファーを書き込み、仮想記憶域および補助記憶域を解放します。

データ制御ブロックに置く情報の基本ソースは、DCB マクロ、データ定義 (DD) ステートメント、動的割り振り SVC 99 パラメーター・リスト、データ・クラス、およびデータ・セット・ラベルです。データ・クラスを使用して、データ・セット名と後処理を除く、データ・セットの属性をすべて指定することができます。また、DCB または DCBE の適切なフィールドに該当するデータを保管することにより、実行中に情報の一部を提供または変更することができます。

順次および区分データ・セットの処理データ管理は、使いやすさ、新規リリースへのマイグレーション、さまざまなレベルのソフトウェアとハードウェアの間の共存、装置独立性、ハードウェア・フィーチャーの利用、およびパフォーマンスの間でバランスを取るように設計されています。時には、これらの考慮事項が矛盾することがあります。プログラムが特定のモデルのフィーチャーを活用して、パフォーマンスが最大化するようにしている場合、新規テクノロジーを十分に利用できない恐れがあります。

文書化されたプログラミング・インターフェースを使用して、システムの現行レベルで作動するプログラムが、将来のレベルのシステムで少なくとも同様によく実行されるということが、IBM の意図です。 ただし、IBM はそれを保証することはできません。 「z/OS DFSMSdfp Diagnosis」にのみ文書化されている特定の理由コードは、意図されたプログラミング・インターフェースの一部ではありません。起こり得る問題の例としては、次のものがあります。

v プログラムには、READ または WRITE マクロが別のイベントの前に完了するというような時間依存性があります。一部の場合では、READ または WRITE がプログラムと同期です。

v プログラムは、意図されたプログラミング・インターフェースの一部でないフィールドまたは制御ブロックをテストします。例としては、 621ページの図 114 には文書化されていない状況表示があります。

v プログラムは、システムが何かの最大値などの制限を実施することに依存しています。たとえば、DASD の最大ブロック・サイズは、32 760 バイト未満であり、BSAM の最大 NCP 値は 99 であり、テープ上の最大ブロック・サイズは 32 760

でした。

v 新規リリースは、システム機能について新規戻りコードおよび理由コードを導入することになります。

データ制御ブロック (DCB)

372 z/OS V1R10 DFSMS データ・セットの使用法

Page 397: DFSMS データ・セットの使用法

これらの理由から、オペレーティング・システムには多くのオプションがあります。アセンブリー言語のプログラミングに広範囲の研修を要求するのは、 IBM の意図ではありません。このセクションの目的は、使いやすさ、マイグレーションの可能性、共存の見込み、および装置独立性を最大限に生かして適切なパフォーマンスを得ながら、順次データ・セットを高水準アセンブラーで簡単に読み書きする方法を示すことです。

このセクションの例を使用して、順次データ・セットおよび区画に分割されたメンバーの読み書きを行うことができます。これらには、通常のディスク・データ・セット、拡張フォーマット・データ・セット、圧縮フォーマット・データ・セット、PDS メンバー、PDSE メンバー、 UNIX ファイル、UNIX FIFO、スプール・データ・セット (SYSIN および SYSOUT)、実ユニット・レコードまたは VM シミュレート・ユニット・レコード、TSO/E 端末、磁気テープ、ダミー・データ・セット、および連結におけるそれらのほとんどの組み合わせが含まれます。

推奨:

v QSAM の方が簡単なのでそれを使用します。BSAM を使用するには、非順次で読み書きする必要があるか、入出力完了をさらに制御する必要がある場合です。BSAM では、NOTE、POINT、CNTRL、および BSP マクロを発行できます。これらのマクロは、さまざまな装置クラスで異なる働き方をします。 363ページの『レコード・フォーマット - 装置タイプの考慮事項』および 469ページの『装置独立性の実現』を参照してください。PDS または PDSE の複数のメンバーにアクセスする必要がある場合は、BPAM を使用します。

v プログラムのロジックがレコード長およびレコード・フォーマットに依存している場合は、DCB マクロで LRECL および RECFM を指定します。それらのどちらかを省略する場合、プログラムはより多くの型のデータを処理できますが、さらに多くのコードを書き込む必要があります。 341ページの『第 20 章 非VSAM データ・セット用のレコード・フォーマットの選択』を参照してください。

v フォーマット F またはフォーマット V のレコードを使用し、ブロック化(RECFM=FB または VB) を指定します。これによりブロックを長くすることができます。フォーマット U では、一般に効率がより低くなります。フォーマット D は、特定のタイプのテープでのみ働きます。

v DCB マクロでブロック・サイズを省略します。DCBE マクロに BLKSIZE=0 をコーディングして、大規模ブロック・インターフェースを使用します。プログラムが読み取り中のときは、これにより、データ・セット用に適切なブロック・サイズに適応することができます。データ・セットにラベルがないとき (ラベルなしテープの場合など)、ユーザーは、DD ステートメントまたは動的割り振りでブロック・サイズを指定できます。一部のデータ・セット・タイプ(PDSE、UNIX

ファイルなど) では、実ブロック・サイズがありません。つまり、システムが有効なブロック・サイズをシミュレートし、デフォルトがあります。

プログラムが書き込み中で、DCB BLKSIZE を省略し、DCBE BLKSIZE=0 をコーディングするとき、これにより、ユーザーは DD ステートメントまたは動的割り振りでブロック・サイズを選択することができます。ユーザーがこれを行うのは、読み取りプログラムが大規模ブロックを受け入れることができない場合のみにしてください。ユーザーがブロック・サイズを指定しない場合、OPEN はLRECL および RECFM 用に有効で、装置用に最適なものを選択します。大規模

データ制御ブロック (DCB)

第 21 章 データ制御ブロックの指定および初期化 373

Page 398: DFSMS データ・セットの使用法

ブロック・インターフェース (LBI) 処理が使用されている場合は、DCBE マクロに BLKSIZE=0 をコーディングすると、OPEN が 32 760 バイトを超えるブロック・サイズを選択できるようになるので、ランタイムを大幅に短縮できることがあります。OPEN が、読み取りプログラムが扱うことができるより大きなブロック・サイズを選択するような場合、ユーザーは、DD ステートメントまたは同等の動的割り振りで BLKSZLIM キーワードをコーディングするか、データ・クラスまたは DEVSUPxx PARMLIB メンバーに依存することができます。

BLKSIZE にご自身のデフォルトを提供することを希望し、OPEN にそれをさせたくない場合、DCB OPEN 出口ルーチンを提供することができます。 640ページの『DCB OPEN 出口』を参照してください。インストール・システムの OPEN

出口は、プログラムが選択した DCB パラメーターを指定変更する場合があります。

v BUFL (バッファー長) は、BLKSIZE および KEYLEN の和の値に依存し、32 760

を超えることができないので、これを省略します。

v QSAM、BSAM、および BPAM の場合は BUFNO (バッファーの数) を省略し、BSAM または BPAM を使用している場合は NCP を省略します。OPEN にQSAM BUFNO を選択させます。これは、ストライピング・データ・セットでは特に重要です。ユーザーは、QSAM BUFNO にさまざまな値を入れてみて、ランタイムを改善できるかどうか調べることができます。

BSAM および BPAM では、DCBE マクロに MULTSDN および MULTACC をコーディングします。 471ページの『順次データ・セットのパフォーマンスの改善』を参照してください。

QSAM、BSAM、および BPAM では、これは、SMF タイプ 14、15、21、および30 のレコードで報告される EXCP カウントに一般に影響を及ぼしません。DASD では、これはチャネル・プログラムの数ではなく、転送済みのブロックをカウントします。これにより、カウントが反復可能になり、システム内のランダム係数に依存しなくなります。

v BUFOFF は、ISO/ANSI 標準ラベルが付いたテープまたはラベルが付かないテープと一緒にのみ働きます。

v 31 ビット・アドレッシング・モードで BSAM または BPAM を選択する場合は、BUILD または GETPOOL マクロを使用せず、バッファー・プールをビルドするのに OPEN を要求しないでください。非ゼロ BUFNO 値をコーディングする場合、OPEN にバッファー・プールをビルドするよう要求しています。そのようなバッファー・プールは、境界より下になければなりません。ご自身のコードを使用して、境界より上にデータ域を割り振ります。

v RECFM には A または M をコーディングするか、プログラムのロジックが制御文字の読み取りまたは書き込みを必要とする場合のみ、OPTCD=J をコーディングします。これらは、復帰、改行、または改ページなどの EBCDIC またはASCII 制御文字ではありません。

v KEYLEN、DEVD、DEN、TRTCH、MODE、STACK、および FUNC は、装置に依存するので、それらは省略します。なお、KEYLEN は、KEYLEN=0 をコーディングしない限り、プログラムの実行速度を遅くします。ユーザーは、それらのほとんどを、必要に応じて DD ステートメントにコーディングすることができます。

データ制御ブロック (DCB)

374 z/OS V1R10 DFSMS データ・セットの使用法

Page 399: DFSMS データ・セットの使用法

v BFALN、BFTEK、BUFCB、EROPT、および OPTCD は、OPTCD=J を除き便利でないことが多いので、それらを省略します。OPTCD=J は、レコードがテーブル参照文字を含むことを指定します。 366ページの『テーブル参照文字』を参照してください。

v LOCATE モード (MACRF=(GL,PL)) は、移動モードより効率的な場合があります。これは、プログラムのロジックによって決まります。移動モードでは、QSAM がデータに余分の時間を移動する必要があります。

v プログラムが 31 ビット・アドレッシング・モード (AMODE) で実行している場合は、DCBE に RMODE31=BUFF をコーディングし、QSAM バッファーが 16

MB 境界より上になるようにします。再入不可の RMODE 24 プログラム (16

MB 境界より下にあります) は、再入可能 RMODE 31 プログラムより単純です。DCB は、各オープン・データ・セットごとに別個であるストレージ内で境界より下になければならないからです。

v SYNAD (入出力エラー) ルーチンをコーディングして、データ・セットが入出力エラーを持つときにシステムが発行する 001 ABEND を防ぎます。SYNAD ルーチンでは、SYNADAF マクロを発行し、メッセージを書き込み、プログラムを終了します。ダンプは便利でないようなので、これはメッセージを書き込み、ダンプを回避します。

v ストライピングを使用していない場合であっても、拡張フォーマット・データ・セットを使用します。それらはより効率的になってきており、OPEN は、BUFNO

に対しより効率的なデフォルトを提供します。短ブロックはディスク・スペースを浪費するので、データ・セットの最大サイズより小さいブロックを多く書き込むことは避けてください。

データ制御ブロック (DCB)

第 21 章 データ制御ブロックの指定および初期化 375

Page 400: DFSMS データ・セットの使用法

図 51 は、順次データ・セットを読み取る最も簡単な方法を示しています。

OPEN (INDCB,INPUT) Open to readLTR R15,R15 Branch if DD name seems notBNZ ... to be defined

* Loop to read all the recordsLOOP GET INDCB Get address of a record in R1

... Process a recordB LOOP Branch to read next record

* I/O error routine for INDCBIOERROR SYNADAF ACSMETH=QSAM Get message area

MVI 6(R1),X'80' Set WTO MCS flagsMVC 8(16,R1),=CL16’I/O Error’ Put phrase on binary fieldsMVC 128(4,R1),=X'00000020' Set ROUTCDE=11 (WTP)WTO MF=(E,4(R1)) Write message to userSYNADRLS Release SYNADAF area, fall through

* The GET macro branches here after all records have been readEOD CLOSE (INDCB) Close the data set

FREEPOOL INDCB Free the QSAM buffer pool... Rest of program

INDCB DCB DDNAME=INPUT,MACRF=GL,RECFM=VB, Must be format-V *DCBE=INDCBE

INDCBE DCBE EODAD=EOD,SYNAD=IOERROR,BLKSIZE=0 Request LBI

図 51. 順次データ・セットの読み取り

データ制御ブロック (DCB)

376 z/OS V1R10 DFSMS データ・セットの使用法

Page 401: DFSMS データ・セットの使用法

図 52 は、 376ページの図 51 と同じですが、再入可能に変換され、16 MB 境界より上にあります。

COPYPROG CSECTCOPYPROG RMODE ANYCOPYPROG AMODE 31

GETMAIN R,LV=Arealen,LOC=(BELOW,64)LR R11,R1USING MYAREA,R11USING IHADCB,InDCBUSING DCBE,INDCBEMVC IHADCB(AreaLen),MYDCB Copy DCB and DCBELA R0,DCBE Point DCB copy toST R0,DCBDCBE DCBE copyOPEN (IHADCB,),MF=(E,INOPEN) Open to readLTR R15,R15 Branch if DDname seems notBNZ ... to be defined

* Loop to read all the recordsLOOP GET INDCB Get address of a record in R1

... Process a recordB LOOP Branch to read next record

* I/O error routine for INDCBIOERROR SYNADAF ACSMETH=QSAM Get message area

MVI 6(R1),X'80' Set WTO MCS flagsMVC 8(16,R1),=CL16’I/O Error’ Put phrase on binary fieldsMVC 128(4,R1),=X'00000020' Set ROUTCDE=11 (WTP)WTO MF=(E,4(R1)) Write message to userSYNADRLS Release SYNADAF area, fall through

* The GET macro branches here after all records have been readEOD CLOSE MF=(E,INOPEN) Close the data set* FREEPOOL not needed due to RMODE31=BUFF

... Rest of programMYDCB DCB DDNAME=INPUT,MACRF=GL,RECFM=VB, *

DCBE=MYDCBEMYDCBE DCBE EODAD=EOD,SYNAD=IOERROR,BLKSIZE=0,RMODE31=BUFF

OPEN (,INPUT),MF=L,MODE=24AreaLen EQU *-MYDCB

DCBD DSORG=QS,DEVD=DAIHADCBE Could be above 16 MB line

MYAREA DSECTINDCB DS XL(DCBLNGQS)INDCBE DS XL(DCBEEND-DCBE)INOPEN OPEN (,),MF=L

図 52. 再入可能 ― 16 MB 境界より上

データ制御ブロック (DCB)

第 21 章 データ制御ブロックの指定および初期化 377

Page 402: DFSMS データ・セットの使用法

処理用のデータ・セットを準備するための OPEN の使用OPEN マクロは、データ・セットの DCB を完了し、入出力操作に必要な指定を提供するために使用します。したがって、プログラムの作成時ではなく、ジョブの実行時に該当するデータを提供することができます ( 379ページの図 53 を参照してください)。

OPEN マクロの実行時に、OPEN ルーチンは、次のことを行います。v DCB を完了するv DCB でアクセス方式ルーチン・アドレスを保管するv ラベルおよび制御情報を読み取りまたは書き込むことによりデータ・セットを初期化する

v 必要なシステム制御ブロックをビルドする

オペレーティング・システムは、DD ステートメントまたはジョブ・ファイル制御ブロック (JFCB) での動的割り振りから情報を保管します。オープン機能は、JFCB

を使用します。

DCB には、DCB マクロ、JFCB、または既存のデータ・セット・ラベルからの情報が埋め込まれます。特定のフィールドに対して複数のソースが情報を指定している場合は、ソースは 1 つのみ使用されます。DD ステートメントは、データ・セット・ラベルより優先され、DCB マクロはそれら両方より優先されます。

ほとんどの DCB フィールドは、データ・セットがオープンされる前、またはオペレーティング・システムがプログラムに制御を戻すときに (DCB OPEN ユーザー出口で) 変更できます。一部のフィールドは、処理中に変更することができます。データ・セット編成などの DCB フィールドを、データ・セットがシステム管理ボリュームに割り振られるようにできるものから、データ・セットをシステム管理されるために不適格にするものに変更しようとしないでください。たとえば、DD ステートメントにあるデータ・セット編成を物理順次に指定したり、データ・セットがシステム管理ボリュームに割り振られた後に、データ・セットを物理順次で移動不能であると指定する DCB を持つデータ・セットをオープンしようとしないでください。システム管理できないデータ・セットのタイプは、 31ページの『第 2 章 ストレージ管理サブシステムの使用』にリストされています。

データ制御ブロック (DCB)

378 z/OS V1R10 DFSMS データ・セットの使用法

Page 403: DFSMS データ・セットの使用法

DCB への書き込み図 53 は、さまざまなソースから DCB に書き込むプロセスとシーケンスを示しています。

次の項目は、図 53 にある枠で囲んだ番号に対応します。

1. 基本ソースはプログラムです。つまり、DCB および DCBE マクロまたはコンパイラーです。通常、正しい処理を保証するためには、これらの DCB およびDCBE パラメーターのみが必要とされます。他のパラメーターは、プログラムの実行時に埋め込むことができます。

2. JCL DD ステートメントまたは動的割り振りへの呼び出し (SVC 99) は、ジョブ・ファイル制御ブロック (JFCB) を作成します。DD または SVC 99 は、データ・クラス (DATACLAS) 名を提供することができます。ご使用のシステムのデータ・クラス ACS ルーチンは、データ・クラス名を提供または指定変更することができます。結果として得られるデータ・クラスは、DD または SVC 99

から省略された特定のパラメーターにデフォルトを提供します。データ・クラスからのパラメーターは、DD または SVC 99 を指定変更しません。DD ステートメントまたは動的割り振りへの呼び出しが、32 760 を超える BLKSIZE 値を持つ場合、その値は、JFCB への論理拡張であるシステム制御ブロックにあり、JFCB BLKSIZE フィールドにはゼロの値があります。

3. DASD データ・セットがオープンされている (または、標準ラベルを持つ磁気テープが INPUT、RDBACK、または INOUT 用にオープンされているか、拡張されている) 場合、DD ステートメントまたはデータ・クラスによって完成されていない JFCB 内のフィールドは、データ・セット・ラベル (存在する場合) の情報が書き込まれます。新規 DASD データ・セットをオープンするとき、システムはそれ以前に最適なブロック・サイズを計算して、データ・セット・ラベルに

図 53. ソースおよび DCB を完成させるための操作のシーケンス

データ制御ブロック (DCB)

第 21 章 データ制御ブロックの指定および初期化 379

Page 404: DFSMS データ・セットの使用法

それを保管している場合があります。RECFM、LRECL、および DSORG が使用可能である場合に、システムはそれを行います。

出力用に磁気テープをオープンする場合、通常 OPEN 機能はテープ・ラベルが存在しないか、現行データ・セットに適用されることを前提とします。ただし、DD ステートメントの DISP=MOD または動的割り振りでそれに相当するものを指定した場合や、 OPEN マクロで EXTEND または OUTINX オプションが指定され、ボリューム通し番号が存在する場合は例外です。ボリューム通し番号が存在するのは、以下のいずれかに当てはまる場合です。

v データ・セットがカタログされている。

v DD ステートメントの VOLUME パラメーターまたは動的割り振りにボリューム通し番号が存在する。

v DD ステートメントに、ボリューム通し番号を持つ別の DD ステートメントを参照する VOL=REF があり、それが VOL=REF を持つ DD ステートメントのオープン前に解決される。

OPEN は、データ・セット間で変換を行っているときに、「類似」順次連結に対してデータ・セット・ラベルから JFCB へのマージを行いません。マージを必要とする場合、DCB で非類似属性ビット (DCBOFPPC) をオンにしません。非類似属性は、システムを各データ・セットごとに OPEN を通じて連結するよう強制します。ここで、ラベルから JFCB へのマージが行われます。 464ページの『非類似データ・セットの連結』を参照してください。

4. JFCB から、OPEN は、DCB または DCBE で完成されていないフィールドに書き込みます。これにより、正方向マージと呼ばれるものが完成されます。

5. これで、DCB または DCBE にある特定のフィールドを、ご自分の DCB ユーザー出口ルーチンまたは JFCBE 出口ルーチンによって完成または変更することができます。DCB および DCBE マクロ・フィールドは、「z/OS DFSMS Macro

Instructions for Data Sets」で説明されています。これらの出口については、 640

ページの『DCB OPEN 出口』および 646ページの『JFCBE 出口』に説明されています。

6. OPEN がユーザーのオプションの DCB OPEN 出口または JFCBE 出口を呼び出した後、インストール・システムのオプションの OPEN 出口ルーチンを呼び出します。どちらかのタイプの出口または両方は、DCB および DCBE に対して特定の変更を加えることができます。

大規模ブロック・インターフェース (LBI) を使用していない場合、ブロック・サイズ・フィールド (BLKSIZE) は、DCB にある 2 つのバイトです。その最大値は 32 760 です。 LBI を使用している場合は、ブロック・サイズ・フィールドは DCBE にある 4 バイトです。これらの出口を呼び出した後、OPEN は、ブロック・サイズ・フィールドがゼロであるか、またはシステムがブロック・サイズを計算した後、DASD データ・セット・スペースが割り振られたときに出口がLRECL または RECFM を変更したかどうかをテストします。どちらの場合でも、RECFM が U でないときは、OPEN は装置タイプに従って最適ブロック・サイズを計算します。

7. データ・セットが出力用にオープンしている場合、すべての DCB フィールドは、対応する JFCB フィールドに無条件にマージされます。これが、逆マージと

データ制御ブロック (DCB)

380 z/OS V1R10 DFSMS データ・セットの使用法

Page 405: DFSMS データ・セットの使用法

呼ばれるものの開始です。DCB フィールドのマージは、OPEN マクロでOUTPUT、OUTIN、EXTEND、または OUTINX を指定することによって発生します。

DSORG フィールドがマージされるのは、それが JFCB にゼロを含んでいる場合のみです。データ・セットが入力用にオープンされている (OPEN マクロでINPUT、INOUT、RDBACK、または UPDAT が指定されている) 場合、対応する JFCB フィールドがゼロを含んでいない限り、DCB フィールドはマージされません。

8. データ・セットが OUTPUT、OUTIN、OUTINX、または EXTEND 用にオープンしていた場合は、オープン・ルーチンは、更新済み JFCB および関連した制御ブロックを使用して、DASD データ・セット・ラベルに書き込みます。標準ラベル・テープでは、データ・セットが拡張されていないときは、オープン・ルーチンは OUTPUT または OUTIN オプション用にのみラベルを書き込みます。OPEN オプションが OUTPUT または DISP=MOD を指定した OUTIN であるか、OPEN オプションが OUTINX、EXTEND、または INOUT である場合は、拡張していることになります。標準ラベル・テープ・データ・セットを拡張している場合は、EOV および CLOSE 機能は更新済み JFCB および関連した制御ブロックを使用して、トレーラー・ラベルを書き込みます。プログラムが終了するときに、データ・セットがクローズされない場合、オペレーティング・システムはそれを自動的にクローズします。

データ・セットがクローズされるとき、RMODE31=BUFF をコーディングしてOPEN がそれを受け入れた場合を除き、DCB は、データ・セットがオープンされる前の状態に復元します (バッファー・プールが解放されない場合を除く)。

データ制御ブロック (DCB)

第 21 章 データ制御ブロックの指定および初期化 381

Page 406: DFSMS データ・セットの使用法

マクロの形式、バッファリング要件定義、およびアドレスの指定オペレーティング・システムは、入出力操作の正しい制御を確保するためにいくつかのタイプの処理情報を必要とします。プログラムの組み立て中または実行中に、プログラムにあるマクロの形式、バッファリング要件定義、および特殊な処理ルーチンのアドレスを指定する必要があります。バッファー要件定義を指定する DCB

パラメーターについては、 407ページの『SAM バッファー・スペースの管理』で説明されています。

マクロはプログラムの組み立て中に拡張されるので、関連付けられた DCB マクロの各データ・セットを処理する際に使用されるマクロの形式を提供する必要があります。バッファリング要件および関連情報は、DCB および DCBE マクロ、DD ステートメントで、または DCB 出口ルーチンの終わりの前に DCB または DCBE の適切なフィールドに該当するデータを保管することによって提供することができます。特殊な処理ルーチン (EODAD、SYNAD、またはユーザー出口) のアドレスがDCB および DCBE マクロから省略される場合、それらが必要とされる前に DCB

または DCBE でそれらを完成させる必要があります。

処理方法のコーディングOPEN マクロで処理メソッドをコーディングすることにより、データ・セットを入力、出力、または更新することができます。処理メソッド・パラメーターが OPEN

マクロから省略されている場合は、INPUT が想定されます。

INPUT―BDAM、BPAM、BSAM、QSAM

OUTPUT―BDAM、BPAM、BSAM、QSAM

EXTEND―BDAM、BPAM (PDSE のみ)、BSAM、QSAM

UPDAT―BDAM、BPAM、BSAM、QSAM

RDBACK―BSAM、QSAM

INOUT―BSAM

OUTIN―BSAM

OUTINX―BSAM

データ・セットが直接アクセス・ボリュームにある場合、処理メソッド・パラメーターに UPDAT をコーディングして、レコードを更新できることを示すことができます。

RDBACK は、磁気テープ用にだけサポートされます。RDBACK をコーディングすることで、フォーマット F またはフォーマット U レコードを含む磁気テープ・ボリュームが逆方向に読み取られることを指定できます。(可変長レコードは逆方向に読み取ることはできません。)

制約事項: 改良データ記録機能 (IDRC) モードで記録されているテープが逆方向に読み取られる場合、重大なパフォーマンス低下が生じます。

「z/OS MVS JCL 解説書」で説明されているように、DD ステートメントの LABEL

パラメーターの IN または OUT オプションを使用して、実行時に INOUT、OUTIN、UPDAT、または OUTINX を指定変更できます。IN オプションは、INOUT 用にオープンされた BSAM データ・セットまたは UPDAT 用にオープンさ

データ制御ブロック (DCB)

382 z/OS V1R10 DFSMS データ・セットの使用法

Page 407: DFSMS データ・セットの使用法

れた直接データ・セットが読み取り専用であることを示します。OUT オプションは、OUTIN または OUTINX 用にオープンされた BSAM データ・セットが書き込み専用であることを示します。

制約事項: ラベル検証インストール・システム出口によって許可されない限り、DISP=MOD を指定した OUTPUT または OUTIN 用の OPEN、INOUT、EXTEND、または OUTINX 要求は、ISO/ANSI バージョン 3 テープまたは非 IBM

フォーマットのバージョン 4 テープの場合は処理できません。この種の処理は、ファイルの終了ラベルのみを更新し、ラベル対称の矛盾を生じさせるからです。アンマッチ・ラベルは、ファイルのもう一方の端にフレームを付けないからです。この制約事項は、IBM フォーマットの ISO/ANSI バージョン 4 テープには適用されません。

関連資料: ラベル検証インストール・システム出口については、「z/OS DFSMS

Installation Exits」を参照してください。

SYSIN、SYSOUT、およびサブシステム・データ・セットの処理。 INOUT は、INPUT として扱われます。OUTIN、EXTEND、または OUTINX は、OUTPUT として扱われます。UPDAT および RDBACK は使用できません。SYSIN およびSYSOUT データ・セットは、それぞれ INPUT および OUTPUT 用にオープンされる必要があります。

PDSE の処理。PDSE の場合、INOUT は INPUT として扱われます。OUTIN、EXTEND、および OUTINX は、OUTPUT として扱われます。

圧縮フォーマット・データ・セットの処理。圧縮フォーマット・データ・セットは、UPDAT の場合はオープンしてはなりません。

図 54 では、3 つの DCB と関連付けられたデータ・セットが同時にオープンされます。

TEXTDCB には処理メソッド・パラメーターが指定されていないので、システムはINPUT を想定します。CONVDCB と PRINTDCB の両方は出力用にオープンされます。ボリューム位置決めオプションは指定されません。したがって、DD ステートメント DISP パラメーターによって示された後処理が使用されます。

データ・セット・オプションの選択DCB および DCBE マクロでデータ・セット特性を指定した後、実行中に DCB または DCBE を変更することによってのみそれらを変更することができます。 394ページの『DCB および DCBE の変更および検査』を参照してください。以下のセクションで説明する DCB のフィールドは、ほとんどのデータ編成およびアクセス方式に共通です。DCBE は、BSAM、BPAM、QSAM、および BDAM 用です。DCB

および DCBE フィールドの詳細については、「z/OS DFSMS Macro Instructions for

Data Sets」を参照してください。

OPEN (TEXTDCB,,CONVDCB,(OUTPUT),PRINTDCB, X(OUTPUT))

図 54. 同時に 3 つのデータ・セットをオープン

データ制御ブロック (DCB)

第 21 章 データ制御ブロックの指定および初期化 383

Page 408: DFSMS データ・セットの使用法

ブロック・サイズ (BLKSIZE)フォーマット F およびフォーマット V のレコード: BLKSIZE は、データ・ブロックの最大長をバイト単位で指定するためのものです。レコードがフォーマット F の場合、ブロック・サイズは、SYSOUT データ・セットを除き、レコード長の整数倍でなければなりません。( 451ページの『第 24 章 データ・セットのスプーリングおよびスケジューリング』を参照してください。) レコードがフォーマット V である場合は、最大ブロック・サイズを指定する必要があります。フォーマット V レコードが非ブロック化されている場合、ブロック・サイズはレコード長 (LRECL) より 4 バイトだけ大きくなければなりません。大規模ブロック・インターフェース(LBI) を使用しない場合、最大ブロック・サイズは 32 760 です。ただし、ISO/ANSI

バージョン 3 レコードでは、最大ブロック・サイズは 2048 です。2048 バイトの限度は、ラベル検証インストール・システム出口によって指定変更できます (「z/OS

DFSMS Installation Exits」を参照してください)。LBI を使用する場合、最大ブロック・サイズは 32 760 です。ただし、磁気テープでは、最大値はそれより大きくなります。

拡張フォーマット・データ・セット: 拡張フォーマット・データ・セットでは、システムは、32 バイトの接尾部を各ブロックに追加します。ご使用のプログラムはこの接尾部を認識しません。この接尾部は、ご使用のバッファーには現れません。この接尾部の長さを BLKSIZE または BUFL の値の中に組み込んではなりません。

圧縮フォーマット・データ・セット: DBB 圧縮を含んだ圧縮データ・セット、PDSE、または UNIX ファイルから BSAM または BPAM を使用してブロック化フォーマット F またはフォーマット V のレコードを読み取る場合は、レコードが書き込まれた場合とは異なり、レコードは各ブロック間で配布される可能性があります。 圧縮フォーマット・データ・セットでは、BLKSIZE 値はディスク上のブロックの実際のサイズとは関連がありません。 BLKSIZE 値は、圧縮解除ブロックの最大長を示します。

システム決定ブロック・サイズ: システムは、DASD、テープ、およびスプール・データ・セットの最良のブロック・サイズを派生させることができます。BDAM、旧、または移動不能データ・セットの場合、または RECFM が U の場合は、システムはブロック・サイズを派生させません。DASD およびテープ・データ・セットの場合のシステムで決定されるブロック・サイズについて詳しくは、 386ページの『システム決定ブロック・サイズ』を参照してください。

最小ブロック・サイズ: ゼロ以外のブロック・サイズを指定する場合、フォーマット V ブロックの最小ブロック・サイズが 8 であることを除いて、ブロック・サイズの最小必要要件はありません。ただし、磁気テープ・デバイスでデータ・チェックが行われる場合、読み取り操作では 12 バイト、書き込み操作では 18 バイトより小さいブロックは、ノイズ・レコードとして扱われ、失われます。データ・チェックが行われない限り、ノイズのチェックは行われません。

大規模ブロック・インターフェース (LBI)大規模ブロック・インターフェース (LBI) により、プログラムは、BSAM またはQSAM を使うよりはるかに大きなブロックを処理できます。現行のレベルのシステムでは、ユニット・レコードまたは TSO/E 端末を除くどの種類のデータ・セットに

データ制御ブロック (DCB)

384 z/OS V1R10 DFSMS データ・セットの使用法

Page 409: DFSMS データ・セットの使用法

も、LBI を BSAM、BPAM、および QSAM と一緒に使用できます。現在、テープおよびダミー・データ・セットでのみ、32 760 バイトを超えるブロックがサポートされています。

LBI を要求するには、DCBE マクロで BLKSIZE 値 (0 でもよい) をコーディングするか、DCB OPEN 出口が完了する前に DCBEULBI ビットをオンにすることにより行います。BLKSIZE をコーディングすると、ビットがオンになります。OPEN マクロを発行する前に、このビットがオンになっているのが最良です。これにより、OPEN が大きなブロック・サイズを DCBE にマージできます。

DCB OPEN 出口は、ビット DCBESLBI を検査して、アクセス方式が LBI をサポートしているか知ることができます。プログラムが、OPEN を発行する前に非類似属性処理を (ビット DCBOFPPC をオンにすることによって) 要求しなかった場合は、DCBESLBI がオンであることは、連結にあるすべてのデータ・セットが LBI

をサポートしていることを意味します。プログラムが OPEN の前に非類似 属性処理を要求した場合は、システムが DCB OPEN 出口または JFCBE 出口を呼び出すたびに DCBESLBI がオンであることは、次のデータ・セットが LBI をサポートしていることを示しているにすぎません。出口の後、DCBEULBI もオンである場合のみ、OPEN は DCBESLBI をオンのまま残します。出口ルーチンは、DCBEULBI を変更することができます。DCBESLBI は決して変更しないでください。

データ・セット型が LBI をサポートしているかどうか知るもう 1 つの方法は、INFO=AMCAP を指定して DEVTYPE マクロを発行することです。「z/OS

DFSMSdfp Advanced Services」を参照してください。DCB OPEN 出口の後、DCBESLBI がオンである場合は、次の項目が適用されます。

v OPEN は、LBI に対するユーザーの要求を有効にします。

v DCB では BLKSIZE フィールドを使用しないでください。システムがこのフィールドを使用します。DCBE にある BLKSIZE フィールドを使用します。DCBE フィールドの説明について詳しくは、「z/OS DFSMS Macro Instructions for Data

Sets」を参照してください。

v フォーマット V レコードでは拡張 BDW を使用できます。32 760 バイトより長いフォーマット V ブロックは、拡張 BDW を必要とします。 345ページの『ブロック記述子ワード (BDW)』を参照してください。

v BSAM または BPAM で読み取っているとき、プログラムはブロックの長さを異なるように判別します。 475ページの『BSAM、BPAM、または BDAM での読み取り時のブロックの長さの決定』を参照してください。

v BSAM または BPAM で書き込んでいるとき、プログラムは各ブロックの長さを異なるように設定します。 477ページの『BSAM または BPAM での短いフォーマット FB ブロックの書き込み』を参照してください。

v QSAM を使用して不定長レコード読み取っているとき、プログラムはブロックの長さを異なるように判別します。「z/OS DFSMS Macro Instructions for Data

Sets」の中の GET マクロの説明を参照してください。

BUFOFF=L を指定せずにフォーマット U またはフォーマット D のブロックを書き込むには、WRITE マクロの長さフィールドに「S」パラメーターをコーディングする必要があります。詳しくは、を参照してください。 z/OS DFSMS Macro

Instructions for Data Sets.

データ制御ブロック (DCB)

第 21 章 データ制御ブロックの指定および初期化 385

Page 410: DFSMS データ・セットの使用法

v QSAM で不定長レコードを書き込んでいるとき、各 PUT を発行する前にレコード長を DCBE に保管します。「z/OS DFSMS Macro Instructions for Data Sets」を参照してください。

v 入出力エラーの後、レジスター 0 および SYNAD ルーチンの状況域が多少異なり、SYNADAF マクロによって戻される領域の先頭が異なります。 621ページの図 114 および「z/OS DFSMS Macro Instructions for Data Sets」を参照してください。

v ブロック・サイズが 32 760 を超える場合、BUILD、GETPOOL、またはBUILDRCD マクロあるいは BUFL パラメーターを使用できません。

v プログラムは、交換バッファー方式 (BFTEK=E)、OPTCD=H (VSE 組み込みチェックポイント) を要求したり、UPDAT オプションでオープンすることはできません。

v LBI では、32 760 バイトより大きい固定長非ブロック・レコードは、QSAM によってサポートされません。

ブロック長が 32767 を超える場合、BSAM および QSAM は、z/VSE オペレーティング・システムによって作成されたフォーマット V (可変長) ブロックの読み取りをサポートしません。それらは、フォーマット U ブロックとして読み取ることができます。ブロックが z/OS プログラムによって作成された場合、z/VSE プログラムでは 32767 より長いフォーマット V ブロックを読み取ることができません。

システム決定ブロック・サイズデータ・セットの作成についてブロック・サイズを指定しない場合、システムがブロック・サイズを決定しようとします。システム決定ブロック¥サイズを使用するのには、次の利点があります。

v ユーザーまたはプログラムが最適ブロック・サイズを計算することなく、プログラムが DASD、テープ、または SYSOUT を書き込むことができます。DASD トラック容量の計算は複雑です。最適ブロック・サイズは、さまざまなモデルのDASD およびテープで異なっています。

v データ・セットが後で、 DFSMShsm などの異なる DASD タイプに移動される場合、システムは適切なブロック・サイズを再計算して、データをブロック化し直します。

システムは、データ・セット用のブロック・サイズを次のようにして決定します。

1. OPEN がブロック・サイズを計算します。

注: ブロック・サイズは、DASD データ・セットの初期割り振り時に決定される場合もあります。OPEN は、このブロック・サイズを使用するか、データ・セットのなんらかの特性 (LRECL、RECFM) が初期割り振り時に指定された値から変更されている場合は、新しいブロック・サイズを計算します。

2. OPEN は、計算されたブロック・サイズをブロック・サイズ限度と比較します。限度の最小値は 32 760 なので、これはテープにあるデータ・セットにしか影響を及ぼしません。

3. OPEN は、計算されたブロック・サイズを限度以下に減らそうとします。

ブロック・サイズ限度は、次の項目からの最初の非ゼロ値です。

1. DD ステートメントにある BLKSZLIM 値または動的割り振り。

データ制御ブロック (DCB)

386 z/OS V1R10 DFSMS データ・セットの使用法

|

|

|

|

|

Page 411: DFSMS データ・セットの使用法

2. データ・クラスでのブロック・サイズ限度。SMS データ・クラス ACS ルーチンは、データ・セットにデータ・クラスを割り当てます。データ・クラス名は、DD ステートメントにある DATACLAS キーワードまたは動的割り振りの同等物を使用して要求できます。データ・セットは、SMS 管理される必要はありません。

3. SYS1.PARMLIB の DEVSUPxx メンバーの TAPEBLKSZLIM 値データ・ファシリティー域 (DFA) でであるこの値はシステム・プログラマーが設定します(「z/OS DFSMSdfp Advanced Services」を参照してください)。

4. 最小ブロック・サイズ限度は、32 760 です。

X'13' コードを指定して RDJFCB マクロを発行することによって、プログラムは、有効な BLKSZLIM 値を入手できます (「z/OS DFSMSdfp Advanced Services」を参照してください)。

ブロックを大きくすると、平均データ転送速度が速くなるので、なぜそれを制限しようとするのですか? 考えられるいくつかの理由を以下に示します。

v ユーザーはテープを、希望する大きなサイズをサポートしていないオペレーティング・システムまたは旧式の z/OS システムまたはアプリケーション・プログラムへと持っていこうとします。他のオペレーティング・システムは、災害時リカバリーにのみ使用されるバックアップ・システムであるかもしれません。バージョン 2 リリース 10 より前の OS/390® システムは、32 760 より長いブロックを必要とする大規模ブロック・インターフェースをサポートしていません。

v テープをブロック化し直すことなく、異なるタイプのテープまたは DASD にコピーしようとし、宛先の最大ブロック・サイズが希望するサイズ未満です。例としては、最大ブロック・サイズが 65 535 である、IBM 3480 磁気テープ・サブシステムがあります。 IBM 3590 の最適ブロック・サイズは、ハードウェアのレベルに応じて 224 KB または 256 KB です。 最適化された 3590 から 3480 または 3490 にコピーするには、データをブロック化し直す必要があります。

v データ・セットを読み取るか書き込み、24 ビット・アドレッシング・モードで実行されるプログラムは、超大規模ブロックに十分なバッファー・スペースを持っていない場合があります。

表 32 は、ブロック・サイズ・サポートを説明しています。

表 32. サポートされる最適および最大のブロック・サイズ

装置タイプ 最適 最大

DASD ハーフ・トラック (通常) 32 760

リール・テープ 32 760 32 760

3480、3490 65 535 65 535

3590 262 144 (256 KB) ただし、一部の旧式モデルでは 229 376

(224 KB)

262 144 (256 KB)

DUMMY 16 5 000 000

DASD データ・セット: 新規 DASD データ・セットを作成する (スペースを割り振る) とき、システムは最適ブロック・サイズを導き、以下の条件がすべて真である場合は、それをデータ・セット・ラベルに保管します。

データ制御ブロック (DCB)

第 21 章 データ制御ブロックの指定および初期化 387

Page 412: DFSMS データ・セットの使用法

v ブロック・サイズが利用できないか、ソースから指定されていません。BLKSIZE=0 を指定することができます。

v LRECL を指定するか、それがデータ・クラスにあります。データ・セットは、SMS 管理される必要はありません。

v RECFM を指定するか、それがデータ・クラスにあります。固定または可変である必要があります。

v DSORG を PS または PO として指定するか、DSORG を省略し、それがデータ・クラスで PS または PO です。

システム以外のソースがブロック・サイズを提供しなかった場合は、DCB OPEN 出口が、計算されたブロック・サイズを DCB または DCBE で検査することができます。

DASD データ・セットが作成されてから初めての書き込みのためにプログラムがそのデータ・セットをオープンする場合、 OPEN は、次のすべてが真の場合に、オプションの DCB OPEN 出口を呼び出した後、最適ブロック・サイズを再び導出します。

v 次のいずれかの条件があてはまります。

– DCB (または LBI を指定した DCBE) でのブロック・サイズはゼロです。

– データ・セットが作成されたときに、システムがブロック・サイズを決定し、DCB の RECFM または LRECL がデータ・セット・ラベルと異なります。

v LRECL は DCB にあります。

v RECFM は DCB にあり、固定または可変です。

v アクセス方式は、BSAM、BPAM、または QSAM です。

順次または PDS では、戻されたシステム決定ブロック・サイズは、DASD スペース使用効率に関して最適です。PDSE では、システム決定ブロック・サイズは、入出力バッファー・サイズに関して最適です。これは、DASD での PDSE 物理ブロック・サイズが、PDSE によって決定される固定サイズであるからです。

圧縮フォーマット・データ・セットでは、システムはトラック長を考慮しません。アクセス方式は、長さが実際の物理ブロック・サイズから独立しているブロックをシミュレートします。システム決定ブロック・サイズは、入出力バッファー・サイズに関して最適です。システムは、BLKSIZE パラメーターの値を 390ページの表33 のように IBM 標準ラベル・テープではそうであるように選択し、常にそれを32 760 に制限します。 この値は、DSCB 内の DCB または DCBE およびDS1BLKL に保管されます。ただし、DCB および DSCB にあるブロック・サイズとは無関係に、DASD に書き込まれる物理ブロックの実際のサイズは、装置に最適であるようにシステムによって計算されます。

システムは、次のタイプのデータ・セットの場合は、ブロック・サイズを決定しません。

v 移動不能データ・セット

v U のレコード・フォーマットを持つデータ・セット

v DISP=OLD の既存のデータ・セット (OPEN マクロで、INPUT、 OUTPUT、または UPDAT オプションを使用してオープンされたデータ・セット)

v 直接データ・セット

データ制御ブロック (DCB)

388 z/OS V1R10 DFSMS データ・セットの使用法

Page 413: DFSMS データ・セットの使用法

v データ・セットを拡張する場合

移動不能データ・セットは、システム管理することができません。ただし、例外があり、すでにシステム管理されているデータ・セットの移動不能属性を、チェックポイント/リスタート機能で設定してある場合は除きます。この設定により、前にチェックポイントを取られたアプリケーションによってオープンされたデータ・セットは、そのアプリケーションでそれ以上リスタートを実行したくなくなるまで、移動できなくすることができます。

テープ・データ・セット: システムは、テープ・データ・セットの最適なブロック・サイズを決定できます。システムは、次の条件が満たされる場合に、DCB

OPEN 出口およびインストール・システムの DCB OPEN 出口から戻るときにOPEN でブロック・サイズを設定します。

v DCBBLKSI でのブロック・サイズがゼロである (または LBI を使用している場合は DCBEBLKSI)。

v レコード長がゼロでありません。

v レコード・フォーマットが固定または可変である。

v テープ・データ・セットが OUTPUT または OUTIN についてオープンである。

v アクセス方式が BSAM または QSAM である。

注: プログラム言語では、プログラムは、テープ・システム決定ブロック・サイズを得るために、ファイルがブロック化されていることを指定する必要があります。たとえば、COBOL では、プログラムは BLOCK CONTAINS 0 RECORDS と指定する必要があります。

データ制御ブロック (DCB)

第 21 章 データ制御ブロックの指定および初期化 389

Page 414: DFSMS データ・セットの使用法

システム決定ブロック・サイズは、テープ・データ・セットのレコード・フォーマットによって異なります。表 33 は、テープ・データ・セット用に設定されたブロック・サイズを示しています。

表 33. テープ・データ・セットまたは圧縮フォーマット・データ・セット用のブロック・サイズを設定するための規則

RECFM ブロック・サイズ・セット

F または FS LRECL

FB または FBS (ラベル・タイプ =AL バージョン 3)

LRECL ≤ 2048 である場合は、≤ 2048 である LRECL の最高可能倍数

LRECL > 2048 である場合は、≤ 32 760 である LRECL の最高可能倍数

FB または FBS (ラベル・タイプ =AL バージョン 4 または AL でない)

テープでも LBI でもない: ≤ 32 760 である LRECL の最高可能倍数

テープにある LBI: 装置の最適ブロック・サイズより ≤ である LRECL の最大可能倍数

V (AL でない) LRECL + 4 (LRECL は 32 756 より小か等しくなければなりません)

VS (AL でない) LRECL ≤ 32 756 である場合は、LRECL + 4

LRECL > 32 756 である場合は 32 760

VB または VBS (AL でない) テープでも LBI でもない: 32 760

テープにある LBI: 装置の最適ブロック・サイズ

D (ラベル・タイプ =AL) LRECL + 4 (LRECL は ≤ 32 756 でなければなりません)

DBS または DS (ラベル・タイプ =AL バージョン 3)

2048 (インストール・システム出口がそれを許可しない限り、最大ブロック・サイズが許可されます)

D または DS (ラベル・タイプ NL または NSL またはラベル・タイプ =AL バージョン 4)

LRECL + 4 (LRECL は ≤ 32 756 でなければなりません)

DB または DBS (ラベル・タイプ NL、または NSL、または AL バージョン 4)

32 760

DB スパンなし (ラベル・タイプ =AL バージョン 3)

LRECL ≤ 2044 の場合は 2048

LRECL > 2044 である場合は、DCBBLKSI = 32 760 (AL バージョン 3 について、このブロック・サイズをラベル検証インストール・システム出口で受け入れるオプションがあります)

データ制御ブロック (DCB)

390 z/OS V1R10 DFSMS データ・セットの使用法

Page 415: DFSMS データ・セットの使用法

表 33. テープ・データ・セットまたは圧縮フォーマット・データ・セット用のブロック・サイズを設定するための規則 (続き)

RECFM ブロック・サイズ・セット

ラベル・タイプ:AL = ISO/ANSI ラベルNL = ラベルなしNSL = 標準外ラベルSL = IBM 標準ラベルNot AL = NL、NSL、または SL ラベル

RECFM の許容度:

v RECFM=D は、SL テープには許可されませんv RECFM=V は、AL テープには許可されません

データ・セット編成 (DSORG)DSORG は、データ・セット編成を、物理順次 (PS)、区分 (PO)、または直接 (DA)

として指定します。データ・セットが相対アドレスではなく、絶対アドレスを使用して処理される場合、DSORG パラメーターに U を追加することによって (たとえば、DSORG=PSU をコーディングすることによって) それを移動不能としてマークを付ける必要があります。データ・セット編成は DCB マクロで指定する必要があります。そのほかに、次の説明があります。

v 直接データ・セットを作成しているとき、DCB マクロの DSORG では PS または PSU と指定し、DD ステートメントは DA または DAU を指定する必要があります。

v PS は順次および拡張フォーマット DSNTYPE 用です。

v PO は、PDSE と PDS の両方のデータ・セット編成です。DSNTYPE は、PDSE

と PDS を区別するために使用されます。

移動不能データ・セットと IS データ・セットは、システム管理することができません。

キー長 (KEYLEN)KEYLEN は、直接アクセス記憶装置で各ブロックに先行するオプションのキーのバイト単位の長さ (0 から 255) を指定します。KEYLEN の値は、BLKSIZE またはLRECL には含まれませんが、バッファー長が指定されている場合は、BUFL に含める必要があります。したがって、BUFL=KEYLEN+BLKSIZE です。PDSE を使用した KEYLEN パラメーターの使用についての情報は、 523ページの『PDSE でのKEYLEN の使用』を参照してください。

注: PDSE または出力用の拡張フォーマット・データ・セットをオープンしているときは、非ゼロのキー長を指定しないでください。

IBM は、KEYLEN をコーディングしたり、KEYLEN=0 をコーディングしたりしないことをお勧めします。非ゼロ値は、一般にプログラムをより低速で実行させることになります。

データ制御ブロック (DCB)

第 21 章 データ制御ブロックの指定および初期化 391

Page 416: DFSMS データ・セットの使用法

レコード長 (LRECL)LRECL は、データ・セット内の各レコードの長さをバイト単位で指定します。レコードが可変長または不定長である場合、最大レコード長を指定する必要があります。入力の場合、フィールドは不定長 (フォーマット U) レコードに対して影響を及ぼしません。LRECL の値およびいつそれを指定するかは、レコードのフォーマットによって異なります。

v 固定長非ブロック・レコードの場合、LRECL は BLKSIZE に等しくなければなりません。

v PDSE または固定長ブロック・レコードを持つ圧縮フォーマット・データ・セットでは、データ・セットが出力用にオープンされたときに LRECL を指定する必要があります。

v ISO/ANSI 可変スパン・レコード用の拡張論理レコード・インターフェース(XLRI) の場合、LRECL は LRECL=0K または LRECL=nK として指定する必要があります。

レコード・フォーマット (RECFM)RECFM は、データ・セット内のレコードの特性を、固定長 (F)、可変長 (V)、ASCII 可変長 (D)、または非定義長 (U) として指定します。ブロック・レコードは、FB、VB、または DB として指定されます。スパン・レコードは、VS、VBS、DS、または DBS として指定されます。レコードは、FS または FBS を使用して固定長標準としても指定できます。RECFM パラメーターに T を追加することによって (たとえば、FBT をコーディングすることによって)、標準フォーマット以外のレコードに対してトラック・オーバーフローを要求することができます。PDSE の場合は、トラック・オーバーフローが無視されます。

印刷制御のタイプは、ANSI フォーマット A、またはマシン・コード・フォーマット M で指定することができます。制御文字については、 363ページの『オプショナル制御文字の使用』および「z/OS DFSMS Macro Instructions for Data Sets」を参照してください。

書き込み妥当性検査オプション (OPTCD=W)書き込み妥当性検査オプションは、DD ステートメントの DCB パラメーター、動的割り振りテキスト・ユニット、または DCB マクロで指定できます。ブロックが主記憶域から補助記憶域に転送された後、システムは保管されたブロックを (データ転送を使わずに) 読み取り、入出力装置からのデータ・チェックについて検査することによって、ブロックが正しく書き込まれたことを確認します。書き込み妥当性検査プロセスでは、各ブロックごとに装置の追加の回転が必要です。システムがエラーを検出する場合、その標準エラー・リカバリー手順を開始します。

バッファー付きテープ・デバイスでは、書き込み妥当性検査オプションは、データが物理的にテープ上に入るまで装置終了割り込みを遅らせます。書き込み妥当性検査オプションを使用すると、バッファリングによるパフォーマンス上の利点を何も得られず、平均データ転送速度がはるかに遅くなることがあります。

注: OPTCD=W は、PDSE および拡張フォーマット・データ・セットの場合無視されます。

データ制御ブロック (DCB)

392 z/OS V1R10 DFSMS データ・セットの使用法

Page 417: DFSMS データ・セットの使用法

DD ステートメント・パラメーターDCB の各データ・セット記述フィールドは、直接データ・セットの場合を除き、ジョブの実行時に指定することができます。同様に、データ・セット識別と後処理、および装置特性も、そのときに指定できます。データ・セットを割り振るには、DD

ステートメントでデータ・セット名および後処理を指定する必要があります。DD

ステートメントでは、データ・クラス、ストレージ・クラス、および管理クラス、ならびに他の JCL キーワードを指定することができます。クラスは、JCL キーワード DATACLAS、STORCLAS、および MGMTCLAS を使用して指定することができます。データ・クラス、ストレージ・クラス、または管理クラスを指定しない場合、 ACS ルーチンは、ストレージ管理者によって定義されるデフォルトに基づいてクラスを割り当てます。ストレージ・クラスおよび管理クラスは、システム管理されるデータ・セットにのみ割り当てることができます。

ACS ルーチン。 ストレージ管理者は、ACS ルーチンを使用して、どのデータ・セットがシステム管理されるかを決定します。DD ステートメントで指定できるか、ACS ルーチンによって割り当てることができる有効なクラスは、ストレージ管理者により SMS 構成の中で定義されます。ACS ルーチンは JCL を分析し、使用することが許可されていないクラスまたは存在しないクラスを指定する場合、割り振りは失敗します。DD ステートメントでのデータ・クラス、ストレージ・クラス、および管理クラスについて詳しくは、「z/OS MVS JCL ユーザーズ・ガイド」を参照してください。

データ・クラス。 データ・クラスは、システム管理および非システム管理データ・セットの両方で指定できます。これは、DASD およびテープ・データ・セットの両方で指定できます。データ・セット・クラスは、テープ・データ・セットで JCL キーワード LIKE と一緒に一緒に使用できます。これは、システム管理ストレージへの、またはそれからのマイグレーションを単純化します。データ・セットを割り振るとき、ACS ルーチンはデータ・セットにデータ・クラスを割り振ります。これは、DD ステートメントでユーザーが指定するデータ・クラスまたはストレージ管理者によってデフォルトとして定義されたデータ・クラスのいずれかです。データ・セットは、割り当てられたデータ・クラスに含まれる情報を使用して割り振ります。ご使用のシステムで使用可能なデータ・クラスについての情報は、ストレージ管理者に問い合わせ、システム管理データ・セットの割り振りおよび SMS クラスの使用について詳しくは、「z/OS DFSMS Storage Administration Reference」を参照してください。

データ制御ブロック (DCB)

第 21 章 データ制御ブロックの指定および初期化 393

Page 418: DFSMS データ・セットの使用法

データ・クラスに含まれる情報は、DD ステートメントまたは動的割り振りで必要な値を指定することによって指定変更できます。データ・クラスは、次の情報を含むことができます。

データ・セット特性 指定変更するために使用される JCL キーワードデータ・セット編成 DSORGデータ・セット・タイプ DSNTYPEキー長 KEYLENキー・オフセット KEYOFFレコード・フォーマット RECFMレコード長 LRECLブロック・サイズ BLKSIZEブロック・サイズ限度 BLKSZLIMレコード編成 RECORG保存期間 RETPDスペース割り振り SPACE, AVGREC

関連資料: データ・クラス情報を指定変更する JCL キーワードについて詳しくは、「z/OS MVS JCL ユーザーズ・ガイド」および「z/OS MVS JCL 解説書」を参照してください。

DD ステートメントまたは動的割り振り呼び出しでは、データ・セットを拡張フォーマット・データ・セットにすることを DSNTYPE 値を通じて直接に指定することはできません。

最も簡単なデータ・セット割り振りは、ストレージ管理者によって定義されたデータ・クラス、ストレージ・クラス、および管理クラスのデフォルトを使用するものです。次の例は、システム管理データ・セットを割り振る方法を示しています。

//ddname DD DSNAME=NEW.PLI,DISP=(NEW,KEEP)

JCL DD ステートメント内でキーワード DSNTYPE をキーワード RECORG と一緒に指定することはできません。それらは相互に排他的です。

DCB および DCBE の変更および検査特定の制約事項のもとで、プログラムの実行中に DCB または DCBE を完成または変更することができます。データ・セット特性は、データ・セット・ラベルによって提供される情報から判別することもできます。データ・セットをオープンする前、それをクローズする後、DCB OPEN 出口ルーチン中、またはデータ・セットがオープンしている間に、変更または追加を行うことができます。DCB OPEN 出口ルーチンの使用についての情報は、 640ページの『DCB OPEN 出口』および 379ページの『DCB への書き込み』を参照してください。DCB フィールドの変更については、「z/OS DFSMS Macro Instructions for Data Sets」も参照してください。(もちろん、情報は、それが必要になる前に提供しておく必要があります。)

システム管理データ・セットのデータ・セット特性は、それをシステム管理されるのに不適格にする特性に変更しようとしてはなりません。たとえば、DD ステートメントにあるデータ・セット編成を PS として指定したり、データ・セットがシステム管理ボリュームに割り振られた後に DCB を変更して DSORG=PSU を指定したりしないでください。それによって、プログラムの異常終了が発生します。

データ制御ブロック (DCB)

394 z/OS V1R10 DFSMS データ・セットの使用法

Page 419: DFSMS データ・セットの使用法

DCBD マクロの使用データ制御ブロック DSECT (DCBD) マクロを使用して、DCB フィールド名をシンボルで識別します。基底レジスターに DCB アドレスをロードすると、任意のフィールドをシンボルで参照することができます。すべての DCB を記述するためにDCBD マクロを一度にコーディングすることができます。

DCBD マクロは、IHADCB という名前付きのダミー制御セクション (DSECT) を生成します。各フィールド名のシンボルは、DCB に続いて DCB マクロ用のキーワード・サブパラメーターの最初の 5 文字が付いたものから構成されます。たとえば、ブロック・サイズ・パラメーター・フィールドのシンボル名は、DCBBLKSI です。(他の DCB フィールド名については、「z/OS DFSMS Macro Instructions for Data

Sets」を参照してください。)

各 DCB フィールドの属性は、ダミー制御セクションで定義されます。DCB マクロのアセンブラー・リストを使用して、各 DCB フィールドの長さ属性および桁合わせを決定します。

DCB でのアドレスの変更図 55 は、DCB でフィールドを変更する方法を示しています。

データ制御ブロック TEXTDCB によって定義されるデータ・セットは、入力と出力の両方にオープンされています。アプリケーション・プログラムがそれを入力用にもはや必要としない場合は、EODAD ルーチンは、データ・セットを一時的にクローズし、出力用のボリュームを位置変更します。次に、EODAD ルーチンは、ダミー制御セクション IHADCB を使用し、エラー出口アドレス (SYNAD) をINERROR から OUTERROR に変更します。

EODAD ルーチンは、アドレス TEXTDCB を、IHADCB 用の基底レジスターである、レジスター 10 にロードします。次に、アドレス OUTERROR を DCB のDCBSYNAD フィールドに移動します。DCBSYNAD は、フルワード・フィールドであり、高位バイトに重要な情報を含んでいるとはいえ、このフィールドでは 下位3 バイトのみを変更してください。

DCB マクロが展開されるとき、DCB にあるすべての未使用アドレス・フィールド(DCBEXLST を除く) は 1 に設定されます。多くのシステム・ルーチンは、アドレ

...OPEN (TEXTDCB,INOUT),MODE=31...

EOFEXIT CLOSE (TEXTDCB,REREAD),MODE=31,TYPE=TLA 10,TEXTDCBUSING IHADCB,10MVC DCBSYNAD+1(3),=AL3(OUTERROR)B OUTPUT

INERROR STM 14,12,SYNADSA+12...

OUTERROR STM 14,12,SYNADSA+12...

TEXTDCB DCB DSORG=PS,MACRF=(R,W),DDNAME=TEXTTAPE, CEODAD=EOFEXIT,SYNAD=INERROR

DCBD DSORG=PS...

図 55. DCB でのフィールドの変更

データ制御ブロック (DCB)

第 21 章 データ制御ブロックの指定および初期化 395

Page 420: DFSMS データ・セットの使用法

ス・フィールドにある 1 の値を、アドレスが指定されていないことを意味するとして解釈するので、必要としないフィールドをリセットするには、それを使用してください。

IHADCBE マクロの使用IHADCBE マッピング・マクロを使用して、DCB 拡張フィールド名をシンボルで識別します。基底レジスターに DCBE アドレスをロードすると、任意のフィールドをシンボルで参照することができます。すべての DCBE を記述するために IHADCBE

マクロを一度にコーディングすることができます。

IHADCBE マクロは、DCBE という名前付きのダミー制御セクション (DSECT) を生成します。生成されたシンボルについては、「z/OS DFSMS Macro Instructions for

Data Sets」を参照してください。

DCBE にあるアドレス・フィールドはすべて、4 バイトです。未定義アドレスはすべて 0 に設定されます。

CLOSE を使用したデータ・セットの処理の終了CLOSE マクロを使用して、データ・セットの処理を終了し、それを DCB から解放します。データ・セットをクローズすることから生じるボリューム位置決め (テープのみ) も指定できます。ボリューム位置決めの定義については、 404ページの『ボリュームの位置決め』を参照してください。ボリューム位置決めオプションは、OPEN マクロまたは DD ステートメントにあるボリュームの終わり条件で指定できるものと同じです。追加のボリューム位置決めオプションである REWIND が選択でき、磁気テープ・ボリュームについての CLOSE マクロで指定できます。REWIND は、処理の方向とは無関係に、テープをロード開始点に位置決めします。

CHECK マクロの発行CLOSE マクロを発行する前に、WRITE マクロからの未解決の入出力を持つすべての DECB に対して CHECK マクロを発行する必要があります。CLOSE TYPE=T

を指定する場合、EODAD から発行される場合を除き、WRITE または READ マクロからの未解決の入出力を持つすべての DECB に対して CHECK マクロを発行する必要があります。

図 56 では、3 つの DCB と関連付けられたデータ・セットが同時にクローズされます。ボリューム位置決めパラメーター (LEAVE、REWIND) は指定されないので、DD ステートメントの DISP パラメーターで示された位置決めが使用されます。

データ・セットの一時的クローズCLOSE TYPE=T をコーディングして、磁気テープの順次データ・セットおよびBSAM で処理される直接アクセス・ボリュームを一時的にコーディングすることができます。TYPE=T を使用するとき、データ・セットを処理するために使用される

CLOSE (TEXTDCB,,CONVDCB,,PRINTDCB)

図 56. 同時に 3 つのデータ・セットをクローズ

データ制御ブロック (DCB)

396 z/OS V1R10 DFSMS データ・セットの使用法

Page 421: DFSMS データ・セットの使用法

DCB は、そのオープン状況を保持します。同じデータ・セットの処理を継続するのに別の OPEN マクロを発行する必要はありません。CLOSE TYPE=T は、SYNAD

ルーチンで使用することはできません。

TYPE=T パラメーターにより、通常の CLOSE マクロが行うのとほぼ同じ方法で、システム制御プログラムがラベルを処理し、そのデータ・セットについてシステム制御ブロックにあるフィールドの一部を変更し、ボリューム (またはマルチボリューム・データ・セットの場合は現行ボリューム) を位置変更することになります。TYPE=T をコーディングするとき、そのボリュームがデータの末尾に位置決めされるのか (LEAVE オプション)、データの先頭に位置変更されるのか (REREAD オプション) を指定することができます。磁気テープ・ボリュームは、最初のデータ・レコードの直前または最後のデータ・レコードの直後に位置変更されます。磁気テープ・ラベルの存在は、位置変更に影響を及ぼしません。

DCB が複数のタスクの間で共用されるときは、TYPE=T が指定されない限り、データ・セットをオープンしたタスクのみがそれをクローズできます。

1000 のブロックを含むサンプル・データ・セットを想定する図 57 は、各位置決めオプションと、一時クローズを発行した後でデータ・セットの処理を再開するポイントとの間の関係を示しています。

順次データ・セットでの CLOSE TYPE=T の使用BSAM で処理されるデータ・セットでは、CLOSE TYPE=T を次の制約事項のもとで使用できます。

v 直接アクセス装置で処理しているデータ・セット用の DCB では、入力処理の場合は DSORG=PS または DSORG=PSU を、出力処理の場合は DSORG=PS、

図 57. CLOSE TYPE=T で LEAVE または REREAD が指定されているときに処理されるレコード

データ制御ブロック (DCB)

第 21 章 データ制御ブロックの指定および初期化 397

Page 422: DFSMS データ・セットの使用法

DSORG=PSU、DSORG=PO、または DSORG=POU を指定する必要があります。DSORG=PO または DSORG=POU が指定されている場合は、REREAD オプションを指定できません。REREAD の制約事項は、BSAM MACRF=WL を指定することによって割り振られる BDAM データ・セットのビルドに続いて、またはビルド中に一時クローズを使用するのを禁止しています。

v DCB は、PDS のメンバーに対して未記入フィールドがあってはなりません。

v データ・セットを入力用にオープンし、LEAVE オプションを指定して CLOSE

TYPE=T を発行するとき、ボリュームが位置変更されるのは、データ・セットがDSORG=PS または DSORG=PO を指定している場合のみです。

v CLOSE TYPE=T は、ダミー・データ・セットの場合無視されます。

データ制御ブロック (DCB)

398 z/OS V1R10 DFSMS データ・セットの使用法

Page 423: DFSMS データ・セットの使用法

スペースの解放次の条件がすべて真である場合は、クローズ機能が、未使用のトラックまたはシリンダーをデータ・セット用に解放しようとします。

v SMS 管理クラスが部分的解放属性で YI または CI を指定するか、ユーザーが、DD ステートメントの SPACE パラメーターで RLSE、または TSO ALLOCATE

コマンドで RELEASE と指定した。

v CLOSE マクロで TYPE=T を指定しなかった。

v DCB が、OUTPUT、OUTIN、OUTINX、INOUT、または EXTEND オプションを指定してオープンされ、CLOSE より前の最後の操作が WRITE (およびCHECK)、STOW、または PUT であった。

v アドレス・スペースでこのデータ・セット用の他の DCB がオープンしていなかった。

v システム内の他のアドレス・スペースがデータ・セットに割り振られていない。

v データ・セットが順次または区分データ・セットである。

v 動的割り振りの特定の機能が、現在、アドレス・スペースで実行中ではない。

拡張フォーマット状態でないマルチボリューム・データ・セット、またはストライプ・カウントが 1 の拡張フォーマット状態のマルチボリューム・データ・セットでは、CLOSE は現行ボリューム上でのみスペースを解放します。

DFSMShsm がスペース管理を実行しているか、許可プログラムが PARTREL マクロを発行するときにも、スペースを解放することができます。

最後のレコードを含むエクステントが、トラックの単位で、または平均レコードまたはブロック長の単位で (ROUND を指定せずに) 割り振られる場合、スペースがトラック境界で解放されます。最後のレコードを含むエクステントが、シリンダーの単位で、または平均ブロック長の単位で (ROUND を指定して) 割り振られる場合、スペースがシリンダー境界で解放されます。 ただし、次の場合には、シリンダー境界エクステントをトラック境界で解放することができます。

v データ・セットにアクセスするために使用される DD ステートメントに、トラックの単位または ROUND を指定せずに平均ブロック長の単位を指定するスペース・パラメーターが含まれている。または

v DD ステートメントでスペース・パラメーターが提供されていないか、データ・セット用のデータ・セット・ラベルに 2 次スペース値が保管されていない。

シリンダー境界エクステントをトラック境界エクステントに変更すると、一般に、シリンダー境界で可能なパフォーマンスの利点が失われることがあります。最新のディスク・ドライブでは、シリンダー境界のパフォーマンスの利点はありません。

データ制御ブロック (DCB)

第 21 章 データ制御ブロックの指定および初期化 399

Page 424: DFSMS データ・セットの使用法

データ・セットをクローズするときのバッファー・プールの管理データ・セットをクローズした後、FREEPOOL マクロを発行してバッファー・プールに使用される仮想記憶域を解放する必要があります。ただし、QSAM を使用してDCBE マクロで RMODE31=BUFF を指定した場合、またはそれが BSAM であり、BUFNO がどのソースからも提供されなかった場合は、その限りではありません。他のデータ・セットを処理することを計画している場合は、FREEPOOL を使用して、バッファー・プール・ストレージ・スペースを回復します。同じ DCB を使用してデータ・セットを再オープンすることを予期している場合は、データ・セットが最初にオープンされたときに作成されたバッファー・プールが、データ・セットを再オープンするときにユーザーのニーズを満たさない限り、FREEPOOL を使用します。FREEPOOL については、 408ページの『バッファー・プールの組み立て』でさらに詳しく説明します。

データ・セットがクローズされた後、DCB を別のデータ・セットに使用することができます。タスクが完了する前にデータ・セットをクローズしない場合は、オペレーティング・システムがそれを自動的にクローズしようとします。その時点で DCB

がシステムに使用できない場合は、オペレーティング・システムがタスクを異常終了し、データの結果が予測不能になる場合があります。ただし、オペレーティング・システムは、動的ストレージ (プログラムの外) で、またはローダーによって仮想記憶域に入れられたプログラムの正常な終了の後では、DCB を自動的にクローズすることはできません。したがって、再入可能またはロードされたプログラムは、すべてのオープン・データ・セットに CLOSE マクロを組み込む必要があります。

データ・セットのオープンおよびクローズ: 考慮事項ここでは、OPEN および CLOSE の考慮事項について説明します。

31 ビット・アドレスを使用したパラメーター・リストMODE=31 を指定して OPEN および CLOSE をコーディングして、31 ビット・アドレスを入れることができる長い書式のパラメーター・リストを指定することができます。デフォルトの MODE=24 は、24 ビット・アドレスを持つ簡易書式のパラメーター・リストです。TYPE=J が指定されている場合、簡易書式のパラメーター・リストを使用する必要があります。

簡易書式パラメーター・リストは、16 MB より下に常駐する必要がありますが、呼び出し側プログラムは、 16 MB より上にあることができます。長い書式のパラメーター・リストは、16 MB の上または下に常駐することができます。VSAM および VTAM® アクセス制御ブロック (ACB) は、16 MB より上に常駐することができます。

DCB では OPEN または CLOSE 呼び出しで MODE=31 をコーディングできますが、DCB は 16 MB より下に常駐する必要があります。したがって、4 バイトのDCB アドレスの先頭バイトは、ゼロを含む必要があります。バイトにゼロ以外のものが含まれる場合、エラー・メッセージが出されます。OPEN が試行された場合、データ・セットはオープンされません。CLOSE が試行された場合、データ・セットはクローズされません。どちらのタイプのパラメーター・リストでも、実アドレスは 2 GB 境界より上にすることができます。したがって、GETMAIN またはSTORAGE マクロで LOC=(xx,64) をコーディングできます。

データ制御ブロック (DCB)

400 z/OS V1R10 DFSMS データ・セットの使用法

Page 425: DFSMS データ・セットの使用法

OPEN マクロの MF=L および MF=E バージョンで指定されたモードは、一貫性を持たせる必要があります。CLOSE マクロについても同じことが言えます。OPEN または CLOSE マクロの MF=L バージョンで MODE=31 が指定された場合、類似のMF=E バージョンのマクロでも MODE=31 をコーディングする必要があります。指定されたモードに一貫性がないと、予測不能な結果が発生します。

同時に複複数のデータ・セットのオープンおよびクローズOPEN または CLOSE マクロを使用して、複数のデータ・セットの処理を開始または終了できます。同時にオープンまたはクローズすると、別個のマクロを発行するより速く済みます。ただし、指定される各データ・セットごとに、追加のストレージ・スペースが必要です。 383ページの図 54 および 396ページの図 56 の例は、同時のオープンおよびクローズ操作をコーディングする方法を示しています。

直接アクセス・データ・セットを割り振るときに考慮する事項システムが DSORG=PS を指定して、または DSORG を指定せずに新規 SMS データ・セットを割り振るとき、アクセス方式は、データ・セットがヌルである、つまりデータを持たないとして扱います。プログラムは、データがそこに書き込まれる前に、データ・セットを安全に読み取ることができます。これは、READ にEODAD ルーチンを呼び出させるための最初の GET または最初の CHECK です。

DSORG=PS またはヌルを指定した、システム管理以外のデータ・セットの場合、プログラムは、以前のユーザーからの残余データの読み取り、入出力エラー、またはABEND になるなどの予測不能な結果を受け取ります。残余データを読み取ると、プログラムは正しく実行されているように見えるようになりますが、残余データから予期しない出力を入手することがあります。次の方法の 1 つを使用して、データ・セットがヌルに見えるようにすることができます。

1. 割り振り時に、ゼロの 1 次割り振り値を指定します。たとえば、SPACE=(TRK,(0,10)) または SPACE=(CYL,(0,50)) とします。この技法は、VIO

データ・セットを扱えません。生成には、2 次 スペース量がインクルードされているからです。

2. 割り振り時の後、出力のためのデータ・セットをオープンし、何も書き込まずにそれをクローズするプログラムを実行することによって、データ・セットの先頭にファイル・マークを書き込みます。

機密データを含むデータ・セットを削除した後、 72ページの『DASD データの消去』に説明されている消去機能を使用する場合に、別のユーザーが残余データを読み取ることがないことを確信できます。

データ・セットのオープンおよびクローズに関する指針データ・セットをオープンおよびクローズするときは、次の指針を検討してください。

v DASD にあるデータ・セットは、複数のタスクまたは複数の DCB によって共用できます。詳しくは、 435ページの『第 23 章 非 VSAM データ・セットの共用』および 551ページの『PDSE の共用』を参照してください。

v OPEN または CLOSE マクロで指定されるボリュームの後処理は、必要な場合は、システムによって指定変更することができます。ただし、ユーザーは心配する必要はありません。システムは、特定の時点での装置の可用性に応じて、ボリ

データ制御ブロック (DCB)

第 21 章 データ制御ブロックの指定および初期化 401

Page 426: DFSMS データ・セットの使用法

ュームのマウントおよびデマウントを自動的に要求します。ボリュームの後処理の詳細については、「z/OS MVS JCL ユーザーズ・ガイド」を参照してください。

v 新規ボリュームに拡張される可能性があるデータ・セットのジョブ・ステップごとに DD ステートメントを 1 つだけ使用します。

重要: DASD 上の SMS 管理データ・セットに対する同じジョブ・ステップで複数の DD ステートメントを指定し、さらに DISP=MOD を指定するかまたはオプション EXTEND または OUTINX を指定した OPEN マクロを発行した場合は、データ・セットの追加ボリュームへの拡張時にデータ保全性が露わになります。この新規ボリューム情報は、同じデータ・セットのジョブ・ステップの中の他の DD ステートメントには使用できません。したがって、データ・セットが同じジョブ・ステップの中の他の DD ステートメントの 1 つを使用して出力処理用にオープンされ、そのデータ・セットが拡張される場合は、新規ボリューム上のデータはオーバーレイされます。

オープン/クローズ/EOV エラーオープン、クローズ、およびボリュームの終わりの処理中に発生することがある、2

つのクラスのエラーがあります。限定エラーは、OPEN、CLOSE、または EOV によって発行された ABEND に関連するエラーです。たとえば、オープンされているデータ・セットにデータ・セット・ラベルが見つからなかったことを示す、戻りコード 04 を持つ 213 完了コードに関連付けられる条件が、オープン処理中に検出されることがあります。一般に、 OPEN、CLOSE、およびその他のシステム機能は、エラーに戻りコードおよび限定アベンドで反応しようとしますが、場合によっては、結果は、プログラム・チェックなどの非限定エラーになります。そのような場合、プログラムによって取られた最後のアクションを検査する必要があります。プログラムまたはオーバーレイされたストレージによって提供される間違ったアドレスに特に注意を払ってください。

処理中に並行する OPEN または CLOSE マクロから起因する限定エラーが発生する場合、システムは、所定の OPEN または CLOSE に関連付けられた DCB を強制的にクローズしようとします。即時終了オプションを示す、DCB ABEND ユーザー出口ルーチンをコーディングすることにより、タスクを即時に異常終了することもできます。DCB ABEND 出口について詳しくは、 636ページの『DCB アベンド出口』を参照してください。DELAY オプションも要求することができます。その場合、すべてのオープンおよびクローズ処理が完了すると、異常終了処理が開始されます。異常終了は、所定の OPEN または CLOSE マクロに関係付けられたすべてのDCB を強制的にクローズさせることによって、すべてのストレージ・デバイスおよび DCB に関係した他のリソースを解放することを伴います。

オープン、クローズ、または EOV 処理中に非限定エラー (プログラム・チェックなど) が発生する場合、システム制御プログラムが並行オープンまたはクローズ処理を完了するための試行は行われません。OPEN または CLOSE に関連付けられるDCB は、可能な場合は、状況を強制的にクローズし、各 DCB に関連するリソースが解放されます。

データ制御ブロック (DCB)

402 z/OS V1R10 DFSMS データ・セットの使用法

Page 427: DFSMS データ・セットの使用法

エラーの後任意の DCB の状況を判別するには、レジスター 15 で OPEN (またはCLOSE) 戻りコードを検査するか、DCBOFOPN をテストします。「z/OS DFSMS

Macro Instructions for Data Sets」を参照してください。

タスク終了時に、システムは、まだオープンしているデータ・セットごとに CLOSE

マクロを発行します。テープ上の出力 QSAM データ・セットについて限定システム ABEND のためにタスクが異常終了する場合、通常なら処理バッファーを終了するであろうクローズ・ルーチンが迂回されます。未解決の入出力要求がパージされます。したがって、テープ上の QSAM 出力データ・セットの場合に最終データ・レコードが失われる可能性があります。

ただし、データ・セットが DASD 上にある場合は、クローズ・ルーチンがバッファー・フラッシュを行います。このバッファー・フラッシュは、最終レコードをデータ・セットに書き込みます。このタスクを取り消すと、バッファーは失われます。

インストール・システム出口ISO/ANSI バージョン 3 または 4 のテープでは、異常終了のために 4 つのインストール・システム出口ルーチンが提供されています。

v 無効なラベル状態が検出され、ラベル検証が抑止されていない場合は、OPEN/EOV 中にラベル検証出口に入ります。無効な状態には、誤った英数字フィールド、非標準値 (たとえば、RECFM=U、2048 より大きなブロック・サイズ、またはゼロ世代番号)、無効なレベル・シーケンス、非対称ラベル、無効な期限日付シーケンス、および重複するデータ・セット名が含まれます。ただし、バージョン 4 テープでは、2048 より大きなブロック・サイズ、無効な期限日付シーケンス、および重複するデータ・セット名が許可されます。

v OPEN/EOV 中に検証抑止出口に入るのは、ボリューム・セキュリティー検査が抑止されている場合、ボリューム・ラベル・アクセス可能性フィールドに ASCII スペース文字が含まれている場合、または RACF がボリュームを含み、アクセス可能性フィールドが大文字 A から Z を含んでいない場合です。

v OPEN/EOV 中、ボリューム・アクセス出口に入るのは、ボリュームが RACF 保護されておらず、ボリューム・ラベルにあるアクセス可能性フィールドが ASCII

大文字 A から Z を含んでいる場合です。

v HDR1 ラベルにあるアクセス可能性フィールドが ASCII 大文字 A から Z を含む場合は、要求されたデータ・セットを位置決めした後に、ファイル・アクセス出口に入ります。

ISO/ANSI バージョン 4 テープでは、特殊文字 !*″%&’()+,-./:;<=>?_ および数字 0

から 9 も使用できます。

関連資料: ISO/ANSI バージョン 3 またはバージョン 4 インストール・システム出口についての追加情報は、「z/OS DFSMS Installation Exits」を参照してください。

データ制御ブロック (DCB)

第 21 章 データ制御ブロックの指定および初期化 403

Page 428: DFSMS データ・セットの使用法

ボリュームの位置決めボリューム位置決めとは、DASD またはテープ・ボリュームを解放すること、またはテープ・ボリュームを回転して、読み取り/書き込みヘッドがテープ上の特定のポイントに来るようにすることです。以下のセクションでは、ボリューム位置決めのステップについて説明します。それらは、ボリュームの解放、ボリュームの終わりの処理、ボリュームの位置決めです。

データ・セットおよびボリュームの解放タスクがもはやそれらを使用していないときに、データ・セット、およびデータ・セットが常駐しているボリュームを解放できるオプションが提供されています。データ・セットを共用していない場合、それらをオープンしたジョブ・ステップが終了するまで、これらのデータ・セットは、いずれにしても他のタスクによって使用できない状態になっています。

データ・セット、およびそのデータ・セットがクローズされる時点でその上にあるボリュームを解放させることができるように CLOSE マクロをコーディングする 2

とおりの方法があります。

1. 非 VSAM データ・セットの場合は、FREE=CLOSE パラメーターを使用して次のようにコーディングすることができます。

CLOSE (DCB1,DISP) またはCLOSE (DCB1,REWIND)

DD ステートメントの FREE=CLOSE パラメーターの使用およびコーディングについては、「z/OS MVS JCL 解説書」を参照してください。

2. DD ステートメントで FREE=CLOSE をコーディングしない場合は、次のようにコーディングできます。

CLOSE (DCB1,FREE)

どちらの場合でも、テープ・データ・セットおよびボリュームが、別のジョブ・ステップによって使用できるように解放されます。直接アクセス記憶装置でデータ・セットが解放され、それらの上にあったボリュームが解放されます (ボリューム上で他のデータ・セットがオープンしていない場合)。CLOSE マクロに関するボリューム後処理およびコーディング制限の追加情報については、「z/OS MVS JCL ユーザーズ・ガイド」を参照してください。

TYPE=T パラメーターを指定して CLOSE マクロを発行する場合、システムはデータ・セットまたはボリュームを解放しません。それらは、TYPE=T を指定しない後続の CLOSE を使用して、またはデータ・セットの割り振り解除によって解放することができます。

ボリュームの終わりの処理別のボリュームまたは連結データ・セットが存在し、次のいずれかの条件が検出される場合、アクセス方式は制御をデータ管理ボリューム終了 (EOV) ルーチンに渡します。

v テープ・マーク (入力テープ・ボリューム)。

v ファイル・マークまたは最後のエクステントの終わり (入力直接アクセス・ボリューム)。

データ制御ブロック (DCB)

404 z/OS V1R10 DFSMS データ・セットの使用法

Page 429: DFSMS データ・セットの使用法

v データ終了標識 (磁気テープまたは直接アクセス・ボリューム以外の入力装置)。これについての例は、カード読取装置で読み取られた最後のカードです。

v リールまたはカートリッジの終わり (出力テープ・ボリューム)。

v 最後に割り振られたエクステントの終わり (出力直接アクセス・ボリューム)。

v FEOV マクロで発行されたアプリケーション・プログラム。

関連付けられた DD ステートメントの LABEL パラメーターが標準ラベルを示す場合、 EOV ルーチンは、標準トレーラー・ラベルを検査または作成します。SUL または AUL を指定した場合は、システムは、制御を適切なユーザー・ラベル・ルーチンに渡します (このルーチンが出口リストの中に指定されている場合)。

DD ステートメントに複数のボリューム・データ・セットが指定されている場合は、EOV ルーチンが自動的にボリュームを切り替えます。 EOV 条件が出力データ・セット上に存在するときは、システムは DD ステートメントで示されているように追加のスペースを割り振ります。それ以上ボリュームが指定されないか、指定したよりも多くのボリュームが必要な場合、ストレージは、同じタイプの装置上で使用可能なボリュームから入手されます。そのようなボリュームが使用可能でない場合、システムが ABEND を発行します。

テープの終わり反映マーカーの領域にユーザー・データを書き込まずに、オープンおよびクローズを繰り返し実行する場合は、ヘッダーおよびトレーラー・ラベルがマーカーを超えて書き込まれます。アクセス方式が、マーク文字を検出します。空のデータ・セットの作成にはアクセス方式が必要ないので、テープ終了マーカーは検出されず、そのためテープがリールの終わりから外れることがあります。

例外: 以下のすべての条件があてはまる場合は、システムが、オプションの EOV

出口ルーチンではなくオプションの DCB OPEN 出口ルーチンを呼び出します。

v 連結を読み取り中である。

v 最後のデータ・セット以外のデータ・セットの終わりを読み取ったか、その最後のボリュームで FEOV マクロを発行した。

v DCB「非類似」属性ビットをオンにした。 464ページの『非類似データ・セットの連結』を参照してください。

推奨: EOV 処理により、DASD 出力用に同じボリュームまたは新規ボリューム上のデータ・セットを拡張する場合は、 EXTEND が SYSVTOC に関するエンキューを発行します。(SYSVTOC は GRS リソースのエンキュー大分類名です。) システムが、アプリケーションがすでに SYSVTOC エンキューを保持しているボリューム上のデータ・セットに対して EOV 要求を出すと、この要求は異常終了します。この問題が生じないようにするには、次のいずれかのステップを実行してください。

v ボリューム上に 2 次エクステントを必要としないほど十分大きい出力データ・セットを割り振る。

v SYSVTOC エンキューを保持するボリュームとは異なるボリューム上に出力データ・セットを配置する。

ボリュームの終わりの位置決めテープのボリュームの終わり条件が検出され、システムが別のテープ用のドライブを必要としない場合、ボリュームの後処理が OPEN マクロで指定されていない限り、システムは、DD ステートメントで指定されている後処理に従ってボリューム

データ制御ブロック (DCB)

第 21 章 データ制御ブロックの指定および初期化 405

Page 430: DFSMS データ・セットの使用法

を位置決めします。磁気テープにある順次データ・セットへのボリューム位置決め命令は、LEAVE または REREAD として指定することができます。

OPEN マクロを使用したテープ・ボリュームの位置決めテープが最後に正方向で読み取られた場合、LEAVE および REREAD は、次の効果を持ちます。

LEAVE ― ラベル付きテープを、データ・セット・トレーラー・ラベル・グループに後続するテープ・マークに続くポイントに位置決めします。ラベルなしボリュームを、データ・セットの最後のブロックに続くテープ・マークに続くポイントへと位置決めします。

REREAD ― ラベル付きテープを、データ・セット・ヘッダー・ラベル・グループに先行するポイントへと位置決めします。ラベルなしテープを、データ・セットの最初のブロックに先行するポイントに位置決めします。

テープが最後に逆方向に読み取られた場合、LEAVE および REREAD は、次の効果を持ちます。

LEAVE ― ラベル付きテープをデータ・セット・ヘッダー・ラベル・グループに先行するポイントに位置決めし、ラベルなしテープをデータ・セットの最初のブロックに先行するポイントに位置決めします。

REREAD ― ラベル付きテープを、データ・セット・トレーラー・ラベル・グループに後続するテープ・マークに続くポイントに位置決めします。ラベルなしテープを、データ・セットの最後のブロックに後続するテープ・マークに続くポイントに位置決めします。

DISP パラメーターを使用したボリュームの位置決めただし、DD ステートメントの DISP パラメーターで指定されるオプションに従って現行ボリュームを位置決めしたい場合は、OPEN マクロに DISP をコーディングします。

DISP は、テープ・ボリュームが、データ・セットに関連付けられた DD ステートメントによって暗黙指定された方法で処理されることを指定します。直接アクセス・ボリューム位置決めおよび後処理は、OPEN マクロのこのパラメーターによって影響を受けません。DD ステートメントの DISP パラメーターで指定できる、いくつかの後処理があります。DISP は、PASS、DELETE、KEEP、CATLG、またはUNCATLG です。

ボリュームの終わり状態が発生するときに生じるアクションは、(1) データ・セットに何台のテープ装置が割り振られたか、および (2) DD ステートメントのデータ・セットでいくつのボリュームが指定されているかに応じて決まります。データ・セットに関連付けられた DD ステートメントの UNIT および VOLUME パラメーターは、割り振られた装置の数および指定されたボリュームの数を決定します。ボリュームの数が割り振られた装置の数より大きい場合、現行ボリュームが巻き戻し・アンロードされます。ボリュームの数が装置の数より小さいか等しい場合、現行ボリュームは巻き戻されるだけです。

データ制御ブロック (DCB)

406 z/OS V1R10 DFSMS データ・セットの使用法

Page 431: DFSMS データ・セットの使用法

アンロードされていない磁気テープ・ボリュームについては、位置決めは、最後の入力操作の方向および磁気テープ・ラベルの存在によって決まります。 PASS のJCL 後処理または RETAIN が指定されている場合、結果は OPEN または CLOSE

LEAVE オプションと同じです。CLOSE 後処理オプションは、OPEN オプションより優先され、OPEN および CLOSE 後処理は JCL より優先されます。

ボリュームの終わりの強制FEOV マクロは、現行のボリュームの物理終わりに到達する前にボリュームの終わり処理の開始をオペレーティング・システムに指示します。データ・セットに別のボリュームが指定されているか、現行データ・セットの後にデータ・セットが連結されている場合、ボリューム切り替えが自動的に行われます。REWIND およびLEAVE ボリューム位置決めオプションが選択可能です。

QSAM を使用して読み取り中のスパン・マルチボリューム・データ・セットに対して FEOV マクロが発行される場合、次の GET マクロが発行されるときにエラーが発生することがあります。各ボリュームが論理レコードの最初の (または唯一の) セグメントから始まることを確認してください。入力ルーチンは、論理レコードの中間から読み取りを開始することはできません。

FEOV マクロは、BSAM または QSAM を使用しているときのみ使用できます。FEOV は、SYSOUT データ・セットに対して発行された場合は、無視されます。FEOV をスプール入力データ・セットに対して発行すると、制御はデータ終わり(EODAD) ルーチンに渡されるか、プログラムが連結にある次のデータ・セットを読み取るよう位置決めされます。

SAM バッファー・スペースの管理オペレーティング・システムは、バッファー獲得および制御についていくつかの方法を提供します。各バッファー (入出力データの中間記憶装置に使用される仮想記憶域) は、通常、処理されているデータ・セットにあるブロックのサイズに対応する長さを持ちます。

バッファーをバッファー・プールに関連付けることにより、データ・セットに複数のバッファーに割り当てることができます。バッファー・プールは、所定の長さの所定の数のバッファーに割り振られる仮想記憶域内に構成する必要があります。

データ・セットに割り当てるバッファーの数は、各バッファーを参照する頻度に対するトレードオフにする必要があります。かなり長期間参照されないバッファーは、ページアウトすることもできます。これの多くのものが許された場合、スループットが低下する場合もあります。

QSAM を使用する場合、バッファー・プール内のバッファー・セグメントおよびバッファーは、システムによって自動的に制御されます。ただし、入力用のリリース(RELSE) マクロ、または出力用の切り捨て (TRUNC) マクロを発行することによって、バッファーにあるデータの処理を終了したことをシステムに通知することができます。この単純バッファー方式を使用して、順次データ・セットを処理できます。IBM は、RELSE または QSAM TRUNC マクロは使用しないことをお勧めします。それらは、プログラムを各ブロックのサイズに従属するようにさせることがあるからです。

データ制御ブロック (DCB)

第 21 章 データ制御ブロックの指定および初期化 407

Page 432: DFSMS データ・セットの使用法

QSAM を使用して、32 760 バイトより大きいテープ・ブロックを処理するときは、OPEN 中にシステムにバッファー・プールを自動的にビルドさせる必要があります。マクロ GETPOOL、BUILD、および BUILDRCD は、大規模ブロック・サイズまたはバッファー・サイズをサポートしません。QSAM OPEN 中、または非ゼロBUFNO を指定しての BSAM OPEN 中に、DCB がバッファー・プールを持つこと、およびバッファー長がデータ・セット・ブロック・サイズより小さいことをシステムが検出する場合、ABEND 013 が発行されます。

QSAM では、OPEN 中にシステムがバッファー・プールを自動的にビルドし、BUFL パラメーターを省略するよう、 IBM はお勧めします。 これにより、プログラムが単純化されます。これにより、データ・セットを任意の順序のブロック・サイズで連結することができます。DCBE マクロに RMODE31=BUFF をコーディングすると、システムは、バッファーを境界より上で入手しようとします。

BSAM または BPAM を使用するとき、BUFNO について非ゼロの値をコーディングする場合のみ、OPEN がバッファー・プールをビルドします。OPEN が ABEND

013-4C を発行するのは、BUFL がゼロ以外であり、LBI を使用しているかどうかに応じて、DCB または DCBE で BLKSIZE より小さい場合です。システムが BSAM

ユーザーについてバッファー・プールをビルドしている場合、バッファー・プールは、16MB 境界より下にあります。

基本アクセス方式を使用している場合、バッファーを、中間記憶装置としてではなく、作業域として使用することができます。GETBUF および FREEBUF マクロを使用することにより、バッファー・プール内のバッファーを直接制御することができます。

BSAM では、データ域またはバッファーの割り振りは、GETMAIN、STORAGE、または CPOOL マクロを通じて行い、BUILD、GETPOOL を通じて、または OPEN

中にシステムによって行わないよう、 IBM はお勧めします。 割り振られた領域は、境界より上にあることができます。割り振る領域は、他の領域と一緒に統合した方がより場合があります。

バッファー・プールの組み立てバッファー・プールの構造は、次の技法の 1 つを使用して行うことができます。v ユーザーの提供する領域で、BUILD マクロを使用して静的にv GETPOOL マクロを使用して、サブプール 0 で明示的にv データ・セットがオープンされるときに、システムによって自動的に

推奨: QSAM では、システムが連結データ・セットを使用するときにプールを自動的に再ビルドできるように、自動技法を使用してください。

基本アクセス方式では、これらの技法では、16 MB 境界より上にバッファーをビルドしたり、32 760 バイトより長いバッファーをビルドできません。

QSAM が使用される場合、データ・セットがクローズされるときに、バッファーはプールに自動的に戻されます。BUILD マクロを使用しなかった場合で、DCBE マクロの RMODE31=BUFF によりバッファー・プールが 16MB 境界より上にない場合、FREEPOOL マクロを使用して、システムに仮想記憶域を戻す必要があります。

データ制御ブロック (DCB)

408 z/OS V1R10 DFSMS データ・セットの使用法

Page 433: DFSMS データ・セットの使用法

DCBE マクロで RMODE31=BUFF をコーディングする場合は、FREEPOOL は、効果を持たず、オプショナルです。システムは、バッファー・プールを自動的に解放します。

以下は、DASD、大部分の磁気テープ装置、スプール・データ・セット、サブシステム・データ・セット、ダミー・データ・セット、TSO/E 端末、および UNIX ファイルに当てはまります。データ域と、16 MB より大きいか 16 MB より小さい仮想アドレスを持つバッファーの両方で、実アドレスが 2 GB を超えることがあります。つまり、バッファーの実アドレスが 64 ビットになる場合があります。 GETMAIN

または STORAGE を使用してバッファーまたはデータ域用のストレージを入手するとき、実アドレスが 2 GB のバーより上にあることができることを指定することを、IBM はお勧めします。 したがって、LOC=(xx,64) をコーディングしてもかまいません。2 GB バーを超えない実アドレスを持つストレージを得る場合は、LOC=(xx,ANY) または LOC=(xx,31) をコーディングできます。このコーディングは、アプリケーション・プログラムが実ストレージ・アドレスを扱っているというまれな場合を除いては、アプリケーション・プログラムに影響を及ぼしません。

64 ビット IDAW をサポートしていないテープ・デバイスの場合、プログラムは 64

ビット実アドレスのストレージを使うことができません。これらのドライブの場合、ビット UCBEIDAW はゼロです。これらのドライブは、リール・テープ・ドライブ (IBM 3420) といくつかの IBM 製以外のカートリッジ・ドライブです。リール・テープのデバイスに加えて、実アドレスは 24 ビットでなければなりません。すべてのテープ・ドライブで、UCBTBYT3 にある値は X’80’ です。リールの付いたテープ・ドライブでは、 UCBTBYT4 にある値は X’80’ 未満です。

一部のまれなアプリケーションでは、バッファーにあるブロックのフルワードまたはダブルワードの桁合わせが重要です。DCB で、バッファーが、ダブルワード境界またはダブルワード境界ではないフルワード境界のどちらで始まるかを、(BFALN=D または F をコーディングすることによって) 指定することができます。フォーマット V レコードにダブルワード境界が指定されている場合、ブロックにある最初のレコードの 5 番目のバイトが桁合わせされます。その理由から、ダブルワード境界にある可変長レコードの最初のバイトを桁合わせするためには、フルワード合せを要求する必要があります。ブロックにある最初のレコードに後続するレコードの桁合わせは、それより前のレコードの長さによって決まります。

バッファー合わせは、バッファーのみの桁合わせを行います。ASCII 磁気テープからのレコードが読み取られ、レコードがブロック接頭語を使用する場合、バッファー内の論理レコードの境界合わせは、ブロック接頭語の長さによって決まります。長さが 4 の場合、論理レコードはフルワード境界にあります。長さが 8 である場合、論理レコードはダブルワード境界にあります。

BUILD マクロを使用して、バッファー・プールを構成する場合、桁合わせは、予約ストレージ域の最初のバイトの桁合わせによって決まります。

QSAM で RMODE31=BUFF をコーディングするとき、バッファー・プールのサイズの理論上限は 2 GB です。これは、バッファー・サイズに限度を課します。したがってブロック・サイズの限度は、2 GB をバッファー数で除算したものになります。システムがバッファー・プールをビルドすることになっており、算出されたバッファー・プール・サイズが 2 GB を超える場合、ABEND 013 が発行されます。

データ制御ブロック (DCB)

第 21 章 データ制御ブロックの指定および初期化 409

Page 434: DFSMS データ・セットの使用法

実際には、最大バッファー・プール・サイズは、装置の最大ブロック・サイズのために 2 GB より小さくなることが予期できます。

バッファー・プールのビルドプログラムの組み立ての前に所定のデータ・セットに必要なバッファーの数とサイズの両方を知りたい場合、バッファー・プールとして使用される適切なサイズの領域を予約することができます。任意のタイプの領域を使用することができます。たとえば、事前定義ストレージ域またはもはや必要でないコーディング域などがあります。

プログラムの実行中に発行された BUILD マクロは、バッファー・プールをビルドするのに予約ストレージ域を使用します。バッファー・プールのアドレスは、DCB

でバッファー・プール制御ブロック (BUFCB) に指定されたものと同じでなければなりません。BUFCB パラメーターは、16MB 境界より上にある領域を参照することはできません。バッファー・プール制御ブロックは、バッファー・プールにあるバッファーに先行する 8 バイトのフィールドです。バッファーの数 (BUFNO) および長さ (BUFL) も、指定する必要があります。BUFL の長さは、少なくともブロック・サイズでなければなりません。

バッファー・プールを使用するデータ・セットがクローズされるとき、必要に応じて領域を再使用することができます。また、BUILD マクロを再発行して、別のデータ・セットによって使用される新規バッファー・プールに領域を再構成することもできます。

バッファー・プールを、同じ長さのバッファーを必要とする複数のデータ・セットに割り当てることができます。これを行うには、実行中の任意の時点に必要とされるバッファーの合計数を入れるのに十分なだけ大きな領域を構成する必要があります。つまり、2 つのデータ・セットのそれぞれが 5 つのバッファーを (BUFNO=5)

を必要とする場合、BUILD マクロは 10 のバッファーを指定する必要があります。領域は、8 バイトのバッファー・プール制御ブロックを入れるのにも十分なだけ大きくなければなりません。

BUILD マクロは、31 ビット・モードで発行することができますが、バッファー域は、境界より上にあったり、DCB と関連付けたりすることはできません。いかなる場合も、実アドレスは、2 GB バーより上をポイントすることができます。

バッファー・プールおよびレコード域のビルドBUILDRCD マクロは、BUILD マクロと同様、ユーザーが提供する仮想記憶域でバッファー・プールが構成されるようにします。また、BUILDRCD では、可変長スパン・レコードに、セグメントとしてでなく、完全論理レコードとしてアクセスすることができます。

可変長スパン・レコードに論理レコードとしてアクセスしたい場合は、QSAM を使用して位置指定モードで処理中であるか、VS/VBS または DS/DBS レコードを処理中である必要があります。BUILDRCD マクロを、データ・セットがオープンされる前に、または DCB 出口ルーチン中に発行すると、スパン・レコードのセグメントではなく、論理レコードを自動的に入手します。

データ制御ブロック (DCB)

410 z/OS V1R10 DFSMS データ・セットの使用法

Page 435: DFSMS データ・セットの使用法

いくつのバッファーが指定されている場合であっても、論理レコード・ストレージ域は 1 つだけビルドされるので、バッファー・プールを、同時にオープンされることのある他のデータ・セットと共用することはできません。

BUILDRCD マクロは、31 ビット・モードで発行することができますが、バッファー域は、境界より上にあったり、DCB と関連付けたりすることはできません。

バッファー・プールの入手指定された領域がバッファー・プールとして使用されるように予約されていない場合、またはプログラムが実行されるまでバッファーの数と長さの指定を遅らせたい場合、GETPOOL マクロを使用することができます。このマクロでは、処理中のデータ・セットの必要に合わせてバッファーのサイズおよび数を変更することができます。ストレージは、サブプール・ゼロの境界の下にあります。

GETPOOL マクロにより、システムはバッファー・プールに仮想記憶域を割り振ることになります。システムは、バッファー・プール制御ブロックをビルドし、そのアドレスをデータ・セットの DCB に保管します。GETPOOL マクロを発行することにした場合は、データ・セットをオープンする前、または DCB の OPEN 出口ルーチン中に、それを発行します。

QSAM で GETPOOL を使用するときは、少なくともブロック・サイズと同じだけ大きいバッファー長 (BUFL) を指定するか、BUFL パラメーターを省略します。

バッファー・プールの自動的な組み立てバッファー・プールを要求したが、DCB 出口ルーチンの終了まで DCB に BUILD

または GETPOOL マクロを使用しなかった場合、システムはバッファー・プール用の仮想記憶スペースを自動的に割り振ります。バッファー・プール制御ブロックも同様に割り当てられ、プールが特定の DCB に関連付けられます。BSAM では、バッファー・プールは、BUFNO を指定することによって要求されます。QSAM では、BUFNO は、次のように指定し、デフォルトにするよう許可することができます。

n ― 拡張フォーマットだが、圧縮フォーマットでなく、かつ LBI でない (n = 2 ×

トラック当たりブロック数 × ストライプの数)

1 ― 圧縮フォーマット・データ・セット、PDSE、SYSIN、SYSOUT、SUBSYS、UNIX ファイル

2 ― ブロック・サイズ > 32 760

3 ― 2540 カード読取装置またはパンチ

5 ― 他のすべて

基本アクセス方式を使用して直接データ・セットを処理している場合、動的バッファー制御を指定する必要があります。それ以外の場合は、システムはバッファー・プールを自動的に構成しません。

データ制御ブロック (DCB)

第 21 章 データ制御ブロックの指定および初期化 411

Page 436: DFSMS データ・セットの使用法

特定の DCB に GET、PUT、PUTX、RELSE、および TRUNC マクロが 31 ビット・モードで発行される場合は、RMODE31=BUFF を指定した DCBE マクロを提供することを考慮する必要があります。

システムが DCBE マクロで RMODE31=BUFF とするユーザーの指定を認識しない限り、自動的に取得されたバッファー・プールは、CLOSE マクロを発行するときに自動的に解放されることはないので、FREEPOOL または FREEMAIN マクロも発行する必要があります (『バッファー・プールの解放』を参照してください)。

バッファー・プールの解放DCB に割り当てられるバッファー・プールで、OPEN マクロによって自動的に (動的バッファー制御が使用されるか、システムが DCBE マクロで RMODE31=BUFF

を引き受ける場合を除く)、または GETPOOL マクロによって明示的に割り当てられるものは、プログラムが完了する前に解放する必要があります。バッファーがもはや必要でないときは、仮想記憶域を解放するために FREEPOOL マクロを発行する必要があります。待機アクセス技法を使用しているときは、データ・セットを最初にクローズする必要があります。待機アクセス方式を使用していない場合でも、データ・セットを最初にクローズするのが賢明です。

問題プログラム状態で、プロテクト・キーがゼロで実行している間に OPEN マクロを発行した場合、OPEN によって入手されたバッファー・プールは、FREEPOOL マクロではなく、FREEMAIN マクロを発行することによって解放する必要があります。これが必要であるのは、これらの条件のもとで獲得されたバッファー・プールが、サブプール 252 (ユーザー・キー・ストレージの中) に割り当てられたストレージに入るからです。

バッファー・プールの組み立て: 例図 58 および 413ページの図 59 は、バッファー・プールを組み立てるために考えられるいくつかの方法を示しています。これらは、プールにあるバッファーを処理または制御する方法を考慮していません。

図 58 では、INPOOL という名前が付いた静的ストレージ域がプログラム・アセンブリー中に割り振られます。

実行中に発行される BUILD マクロは、バッファー・プールを、それぞれ 52 バイトの長さの 10 のバッファーに入れて配置します。それぞれについて DCB マクロ

... ProcessingBUILD INPOOL,10,52 Structure a buffer poolOPEN (INDCB,,OUTDCB,(OUTPUT))... Processing

ENDJOB CLOSE (INDCB,,OUTDCB)... ProcessingRETURN Return to system control

INDCB DCB BUFNO=5,BUFCB=INPOOL,EODAD=ENDJOB,---OUTDCB DCB BUFNO=5,BUFCB=INPOOL,---

CNOP 0,8 Force boundary alignmentINPOOL DS CL528 Buffer pool

...

図 58. 静的ストレージ域からのバッファー・プールの組み立て

データ制御ブロック (DCB)

412 z/OS V1R10 DFSMS データ・セットの使用法

Page 437: DFSMS データ・セットの使用法

で指定されているように、INDCB には 5 つのバッファーが、OUTDCB には 5 つのバッファーが割り当てられます。2 つのデータ・セットは、バッファー・プールを共用します。両方とも INPOOL をバッファー・プール制御ブロックとして指定しているからです。バッファー・プールには、バッファー・プール制御ブロックを入れるために追加の 8 バイトが割り振られています。

図 59 では、GETPOOL マクロによって 2 つのバッファー・プールが明示的に構成されています。

1 つの固定長レコードを入れるために、それぞれ 52 バイトの長さの 10 の入力バッファーが提供されます。2 つのブロック・レコードに加えて 8 バイト・カウント・フィールドを入れるために、各 112 バイトの長さである、5 つの出力バッファーが提供されます。. バッファー・プールが FREEPOOL マクロによって解放される前に両方のデータ・セットがクローズされていることに注意してください。バッファー・プールが OPEN マクロによって自動的に構成される場合も、同じプロシージャーを使用する必要があります。

バッファーの制御プログラムによってどのバッファーが使用されるかを制御するのにいくつかの技法を使用することができます。それぞれの技法の利点は、大部分はユーザーが実行しているジョブのタイプに応じて決まります。待機アクセス方式は、単純バッファー方式を許可します。基本アクセス方式は、直接または動的バッファー方式を許可します。

待機アクセス方式待機アクセス方式は、仮想記憶域でのデータ移動のエクステントを決定する 3 つの処理モード (移動、データ、および位置指定モード) を提供します。移動、データ、および位置指定モードの処理は、GET または PUT マクロに対して指定できます。(置換モードは、もはやサポートされません。システム・デフォルトは移動モードになります。) レコードの移動は、次のモードによって決定されます。

移動モード。 システムはレコードをシステム入力バッファーから作業域へ、または作業域から出力バッファーへと移動します。

...GETPOOL INDCB,10,52 Construct a 10-buffer poolGETPOOL OUTDCB,5,112 Construct a 5-buffer poolOPEN (INDCB,,OUTDCB,(OUTPUT))...

ENDJOB CLOSE (INDCB,,OUTDCB)FREEPOOL INDCB Release buffer pools after all

* I/O is completeFREEPOOL OUTDCB...RETURN Return to system control

INDCB DCB DSORG=PS,BFALN=F,LRECL=52,RECFM=F,EODAD=ENDJOB,---OUTDCB DCB DSORG=IS,BFALN=D,LRECL=52,KEYLEN=10,BLKSIZE=104, C

... RKP=0,RECFM=FB,---

図 59. GETPOOL および FREEPOOL を使用したバッファー・プールの組み立て

データ制御ブロック (DCB)

第 21 章 データ制御ブロックの指定および初期化 413

Page 438: DFSMS データ・セットの使用法

データ・モード (QSAM フォーマット V スパン・レコードのみ)。 データ・モードは、移動モードと同様に働きますが、レコードのデータ部分のみが移動されます。

位置指定モード。 システムはレコードを移動しません。その代わりに、アクセス方式のマクロは、次の入力または出力バッファーのアドレスをレジスター 1 に入れます。QSAM フォーマット V スパン・レコードでは、BFTEK=A を指定するか、BUILDRCD マクロを発行することによって論理レコードを指定した場合、レジスター 1 に戻されたアドレスは、スパン・レコードがアセンブルされたか、セグメント化されたレコード域を指します。

PUT-位置指定モード。 PUT-位置指定ルーチンは、DCBLRECL フィールドにある値を使用して、別のレコードがバッファーに収まるかどうか判別します。したがって、短レコードを書き込むとき、短レコードのバッファー・セグメントを入手するために PUT-位置指定を発行する前に DCBLRECL フィールドを変更することによってブロック当たりの最大レコード数を入手することができます。次のステップを行ってください。1. 次の (短) レコードの長さを DCBLRECL に記録します。2. PUT-位置指定を発行します。3. 短レコードをバッファー・セグメントに移動します。

GET-位置指定モード。 PUTX マクロの 2 つの処理モードは、GET-位置指定マクロと一緒に使用できます。更新モードは、更新済みレコードをそれが読み取られたデータ・セットに戻します。出力モードは、更新済みレコードを出力データ・セットに転送します。仮想記憶域では、データの実際の移動はありません。PUTX マクロのパラメーターによって指定された処理モードについては、「z/OS DFSMS Macro

Instructions for Data Sets」を参照してください。

基本アクセス方式基本アクセス方式を使用しており、システムがバッファー制御を支援するようにしたい場合、構成されたバッファーを検索するために GETBUF マクロを使用することによってバッファーを直接制御することができます。次に、バッファーはFREEBUF マクロによってプールに戻すことができます。GETBUF は、16MB 境界より上にあるバッファー・プールをサポートしないので、バッファーを境界より上に割り振るには独自のルーチンを作成することを IBM は提案します。

アプリケーションでの QSAM用語単純バッファー方式 は、バッファー内でのセグメントの関係を示します。単純バッファー方式にあるすべてのセグメントは、ともにストレージの中にあり、常に同じデータ・セットに関連付けられます。各レコードは、入力バッファー・セグメントから出力バッファー・セグメントに物理的に移動する必要があります。レコードは、セグメント内で、または作業域で処理することができます。

単純バッファー方式を使用する場合、任意のフォーマットのレコードを処理できます。新規データ・セットを作成するために必要に応じて、新規レコードを挿入して、古いレコードを削除することができます。以下の QSAM の使用例は、前述したように構成することもできたバッファーを使用しています。

データ制御ブロック (DCB)

414 z/OS V1R10 DFSMS データ・セットの使用法

Page 439: DFSMS データ・セットの使用法

GET-位置指定、PUT-移動、PUTX-出力。 入力バッファー内で処理されてから、出力バッファーに移動されます。

GET-移動、PUT-位置指定。 入力バッファーから出力バッファーに移動され、そこでそれを処理することができます。

GET-移動、PUT-移動。 入力バッファーから作業域に移動されます。その作業域でレコードを処理し、さらに出力バッファーに移動することができます。

GET-位置指定、PUT-位置指定。 入力バッファーで処理され、出力バッファーにコピーされ、そして多くの場合さらに処理されます。

GET-位置指定、PUTX-更新。 入力バッファーで処理され、同じデータ・セットに戻されます。

GET-位置指定、PUT-移動 /PUTX-出力。 GET マクロ (ステップ A、図 60) は、処理される次の入力レコードを位置指定します。

GET はレジスター 1 内のレコード・アドレスを戻します。このアドレスは、DCB

について次の GET または CLOSE まで有効のままになります。プログラムは、アドレスをレジスター 0 にある PUT マクロに渡します。PUT はレコードを同期でコピーします。

PUTX-出力マクロは、PUT-移動マクロの代わりに使用することができます。

GET-移動、PUT-位置指定。 PUT マクロは、次の使用可能な出力バッファーのアドレスを位置指定します。PUT は、そのアドレスをレジスター 1 に戻し、プログラムがそれをレジスター 0 にある GET マクロに渡します。

GET マクロで、システムが次の入力レコードを移動する出力バッファーのアドレスを指定します。

埋められた出力バッファーは、次の PUT マクロが発行されるまで書き込まれません。PUT は、GET がレコードを移動する前にバッファー・アドレスを戻します。これは、すべてのデータが読み取られたために、GET がデータ終わりルーチンへと枝分かれするとき、出力バッファーはまだレコードを必要としていることを意味し

図 60. MACRF=GL および MACRF=PM を指定した単純バッファー方式

データ制御ブロック (DCB)

第 21 章 データ制御ブロックの指定および初期化 415

Page 440: DFSMS データ・セットの使用法

ます。プログラムは、予測不能の出力バッファー内容を別のレコードで置き換える必要があり、そのレコードはブランクまたはゼロに設定します。次の PUT またはCLOSE マクロは、レコードを書き込みます。

GET-移動、PUT-移動。 GET マクロ (ステップ A、図 61) は、システムが入力バッファーからの次のレコードを移動する作業域のアドレスを指定します。

PUT マクロ (ステップ B、図 61) は、システムがレコードを次の出力バッファーに移動する作業域のアドレスを指定します。

GET-位置指定、PUT-位置指定。 GET マクロ (ステップ A、 417ページの図 62)

は、次の使用可能な入力バッファーのアドレスを位置指定します。GET はアドレスをレジスター 1 に戻します。

図 61. MACRF=GM および MACRF=PM を指定した単純バッファー方式

データ制御ブロック (DCB)

416 z/OS V1R10 DFSMS データ・セットの使用法

Page 441: DFSMS データ・セットの使用法

PUT マクロ (ステップ B、図 62) は、次の使用可能な出力バッファーのアドレスを位置指定します。PUT は、そのアドレスをレジスター 1 に戻します。次に、レコードを入力バッファーから出力バッファーに移動します (ステップ C、図 62)。プログラムは、各レコードを移動操作の前または後に処理することができます。

埋められた出力バッファーは、次の PUT、TRUNC、または CLOSE マクロが発行されるまで書き込まれません。

CLOSE または FEOV を発行する前に余分な PUT を発行しないよう注意してください。それ以外の場合は、CLOSE または FEOV マクロが最後のレコードを書き込もうとするときに、余分な PUT は、無意味なレコードを書き込み、シーケンス・エラーを生成します。

UPDAT モード。 UPDAT が指定された状態でデータ・セットがオープンされる場合 (図 63)、GET-位置指定および PUTX-更新のみがサポートされます。

GET マクロは、処理される次の入力レコードをロケーション指定し、そのアドレスをレジスター 1 に戻します。レコードを更新し、PUTX マクロを発行します。このマクロは、そのブロック内のすべての論理レコードが処理された後、ブロックがデータ・セット内のその元のロケーションに書き戻されるようにします。

図 62. MACRF=GL および MACRF=PL を指定した単純バッファー方式

図 63. MACRF=GL および MACRF=PM-UPDAT モードでの単純バッファー方式

データ制御ブロック (DCB)

第 21 章 データ制御ブロックの指定および初期化 417

Page 442: DFSMS データ・セットの使用法

バッファーの内容は変更するが、そのレコードに対して PUTX マクロを発行しない場合、システムは変更されたレコード・ブロックをデータ・セットに書き込むことができます。これは、バッファー内の 1 つ以上のレコードに対して PUTX マクロを発行するときに、ブロック・レコードで発生します。

交換バッファー方式交換バッファー方式は、もはやサポートされていません。その要求はシステムによって無視され、移動モードが代わりに使用されます。

バッファリング技法および GET/PUT 処理モードの選択前の例からお分かりのように、最も効率的なコードは、単純バッファー方式を指定して自動バッファー・プール構造、GET-位置指定、および PUTX-出力を使用することによって得られます。表 34 は、使用することができるバッファリング技法と処理モードの組み合わせです。

表 34. バッファリング技法および GET/PUT 処理モード

単純入力バッファー方式

アクションGET-移動PUT-位置指定

GET-移動PUT-移動

GET-位置指定PUT-位置指定

GET-位置指定PUT-移動

GET-位置指定(論理レコード)、PUT-位置指定

プログラムはレコードを移動しなければならない

X X

システムがレコードを移動する

X X X

システムがレコード・セグメントを移動する

X

作業域が必要 X

PUTX 出力を使用できる

X

待機アクセス方式でのバッファリング・マクロの使用このセクションでは、RELSE および TRUNC マクロの使用法について説明します。

RELSE - 解放および入力バッファーQSAM を使用してブロック・レコードを読み取るとき、システムに処理中の入力バッファーの残りのレコードを無視するよう指図することができます。次の GET マクロは、別のバッファーからレコードを検索します。フォーマット V スパン・レコードが使用されている場合、入手される次の論理レコードは、後続のブロックにある任意のセグメントで開始することができます。

データ制御ブロック (DCB)

418 z/OS V1R10 DFSMS データ・セットの使用法

Page 443: DFSMS データ・セットの使用法

位置指定モードを使用しているときは、最新の GET マクロから戻されたレコード・アドレスは、次の GET を発行するまで有効のままになります。RELSE マクロを発行しても、前の PUTX マクロの効果を変更します。

TRUNC - 出力バッファーの切り捨てQSAM を使用してブロック・レコードを書き込んでいるとき、TRUNC マクロを発行して、システムが短ブロックを書き込むよう指図することができます。次のバッファー内の最初のレコードは、 PUT-出力または PUTX-出力モードによって処理される次のレコードです。

位置指定モードが使用されている場合、システムは、最後の PUT マクロによって指されるバッファー・セグメントにレコードが置かれると想定します。

データ・セットの最後のブロックは、CLOSE ルーチンによって切り捨てられます。切り捨てられたブロックを持つフォーマット F レコードを含むデータ・セットは、一般に、標準フォーマット F と同様に効率的には、読み取ることができません。

ブロック境界は出力では保管されないので、PDSE に対して発行された TRUNC マクロは、短ブロックを作成することができません。入力では、システムは、PDSE

の読み取り用に DCB または DCBE で指定されるブロック・サイズを使用します。論理レコードは、PDSE メンバーが作成されたときに指定されたブロック・サイズにかかわらず、ユーザー・バッファーにパックされます。

ストレージ管理者が PDSE 用の QSAM TRUNC マクロを発行するプログラムを検出するのに役立つように、SMF タイプ 15 レコード (「z/OS MVS システム管理機能 (SMF)」を参照) には、プログラムがこのマクロを発行したことを示す標識が含まれています。

推奨: QSAM TRUNC マクロの使用は避けてください。データ・セットをコピーおよびバックアップする多くのプログラムは、レコードをブロック化し直します。これは、ユーザーのプログラムが設定させることができるブロック境界を保持しないことを意味します。

バッファリング・マクロと基本アクセス方式の併用このセクションでは、GETBUF および FREEBUF マクロの使用法について説明します。

GETBUF - プールからのバッファーの入手BUILD、GETPOOL、または OPEN マクロによって構成されたバッファー・プールからバッファーを要求するために、GETBUF マクロを基本アクセス方式とともに使用することができます。BUILD、GETPOOL、または OPEN を 31 ビット・モードで発行する場合であっても、そのバッファー・プールは 16MB 境界より下にあります。バッファーのアドレスは、マクロを発行するときに指定するレジスターに、システムによって戻されます。バッファーを使用できない場合は、レジスターにはアドレスでなく、0 が入っています。

データ制御ブロック (DCB)

第 21 章 データ制御ブロックの指定および初期化 419

Page 444: DFSMS データ・セットの使用法

FREEBUF - バッファーをプールに戻すFREEBUF マクロは、基本アクセス方式では、バッファーを、それが GETBUF マクロによって入手されたバッファー・プールに戻すために使用されます。バッファーは、それらが入手された順序で戻される必要はないとはいえ、後でそれらをGETBUF マクロに使用可能にさせたい場合は、それらが戻される必要があります。

データ制御ブロック (DCB)

420 z/OS V1R10 DFSMS データ・セットの使用法

Page 445: DFSMS データ・セットの使用法

第 22 章 レコードへのアクセス

この章では以下のトピックを扱います。

トピック 該当ページ

READ および WRITE を使用してのデータへのアクセス 421

GET および PUT を使用してのデータへのアクセス 427

入出力エラーの分析 431

READ および WRITE を使用してのデータへのアクセス基本順次アクセス方式 (BSAM) および基本区分アクセス方式 (BPAM) は、データを仮想記憶域と補助記憶域間で伝送するための READ、WRITE、および TRUNC マクロを提供します。これらのマクロは、24 ビットまたは 31 ビット・アドレッシング・モードで発行できます。これらのマクロは、バッファーを管理するのを助けるため、またはオーバーラップ入出力を行うために提供されます。

READ および WRITE マクロは、レコードではなくブロックを処理します。したがって、レコードをブロック化および非ブロック化できます。ユーザーまたはオペレーティング・システムによって割り振られたバッファーは、READ または WRITE

マクロが発行されるたびに、埋められるか、空にされます。 READ および WRITE

マクロは、入出力操作を開始するだけです。操作が正常に完了したことを確認するために、CHECK、WAIT、または EVENTS マクロを発行して、データ・イベント制御ブロック (DECB) をテストする必要があります。唯一の例外は、SYNAD または EODAD ルーチンが入力されるときに、未解決の READ または WRITE 要求に対して CHECK、WAIT、または EVENTS マクロを発行してはならないことです。

データ・イベント制御ブロック (DECB) の使用データ・イベント制御ブロックは、各 READ または WRITE によって予約される20 から 32 バイトの領域です。これには、ECB、制御情報、および制御ブロックへのポインターが含まれます。これは、16MB 境界より下にあります。DECB については、「z/OS DFSMS Macro Instructions for Data Sets」および 615ページの『データ・イベント制御ブロック』に説明されています。ECB については、 617ページの『イベント制御ブロック』に説明されています。

訂正不能エラーまたは例外条件が存在するかどうか判別するために入出力操作が完了するときに、DECB が CHECK ルーチンによって検査されます。それが行われると、 CHECK は SYNAD ルーチンに制御を渡します。SYNAD ルーチンがない場合は、タスクが異常終了します。

ページング環境での関連した制御ブロックのグループ化関連した制御ブロック (DCB と DECB) およびデータ域 (バッファーおよびキー・アドレス) を、それらがプログラムの同じ領域に常駐するようにコーディングしま

© Copyright IBM Corp. 1987, 2008 421

Page 446: DFSMS データ・セットの使用法

す。これによって、データ・セットから読み取り、データ・セットに書き込むために必要なページング操作の数が減ります。

注: DCB および DECB は 16 MB より下に常駐なければなりませんが、それらの中央記憶装置アドレスは 2 GB バーより上にあることができます。

BSAM でのオーバーラップ入出力の使用BSAM をオーバーラップ入出力 (一度に複数の入出力要求が未解決) とともに使用するときは、複数の DECB を使用する必要があります。各入出力要求ごとに異なるDECB を指定します。たとえば、データ・セット用の DCB で NCP=3 と指定し、データ・セットからレコードを読み取っている場合、プログラムで次のマクロをコーディングできます。

...READ DECB1,...READ DECB2,...READ DECB3,...CHECK DECB1CHECK DECB2CHECK DECB3...

こちらの方が効率的な技法です。

READ DECB1,...READ DECB2,...READ DECB3,...CHECK DECB1 Beginning of loopREAD DECB1,...CHECK DECB2READ DECB2,...CHECK DECB3READ DECB3,...(Repeat the previous six macros until aCHECK macro causes entry to EODAD routine.)

これは、NCP について任意の値をサポートする一般化された技法です。

1. 非ゼロ MULTSDN および非ゼロ MULTACC を指定して DCBE を提供します。最適化のために、 MULTACC 値を MULTSDN 値の半分にするよう選択することができます。

2. OPEN マクロを発行します。OPEN は NCP 値を計算します。テープ・データ・セットを処理するために LBI を使用しており、ブロック・サイズが 32 768 より大きい場合、計算された NCP の最小値は 2 であり、最大値は 16 です。

3. NCP 値に等しいデータ域の数、および等しい数の DECB にストレージを割り振ります。それらは隣接している必要はありません。 DECB は 16 MB 境界より下になければなりませんが、データ域は 16MB 境界より上にあることができます。中央記憶装置アドレスは、2 GB より上にあることができます。各 DECB

の後に、次の DECB を指すワードを追加し、最後のものが最初の DECB をポイントするようにします。これによって DECB の検索が単純化されます。

4. 各 DECB 領域ごとに、1 つの DECB をそれにコピーし、適切なデータ域アドレスを提供してそれに READ または WRITE マクロを発行します。

DECB コピーのソースは、16MB 境界の上または下にあることができますが、宛先は 16MB 境界より下になければなりません。

レコードへのアクセス

422 z/OS V1R10 DFSMS データ・セットの使用法

Page 447: DFSMS データ・セットの使用法

5. READ の CHECK マクロによってデータ終わり出口 (EODAD) ルーチンに入るまで、またはもう書き込むものがなくなるまで、各 DECB ごとに以下のステップを繰り返します。

a. CHECK マクロを (最も古い未解決の READ または WRITE に対して) 発行します。

b. 読み取っている場合はデータをブロック単位で処理し、書き込んでいるときはデータ域にブロックを作成します。

c. DECB に READ または WRITE マクロを発行します。

d. 次の DECB にポインターをロードします (最も古い未解決の READ またはWRITE を入手するため)。

6. 書き込んでいる場合は、WRITE の順番で残っている未解決の各 DECB ごとにCHECK マクロを発行します。読み取っている場合は、別の CHECK を発行しないでください。

7. CLOSE マクロを発行して、ストレージを解放します。

509ページの図 84 は、この技法を示しています (FIND マクロおよび DCB マクロの DSORG=PO を除く)。順次データ・セットを処理するためには、DSORG=PS をコーディングします。この技法は、WRITE または READ を使用するために簡単に改作できます。

ブロックの読み取りREAD マクロは、入力データ・セットからデータ・ブロックを検索し、それを仮想記憶域の指定された領域に置きます。入力操作を処理とオーバーラップできるようにするため、システムは、読み取り操作が完了する前に、プログラムに制御を戻します。正常に完了するには、ブロックが処理されるか、DECB が再使用される前に、読み取り操作のために作成された DECB を検査する必要があります。

BSAM で READ マクロを使用して、スパン・レコードおよびキーを持つ直接データ・セットを読み取り、DCB で BFTEK=R を指定するとき、データ管理ルーチンは、レコード・セグメントをキー長分だけレコード内の最初のものの後に変位させます。これは、オフセット読み取り と呼ばれます。オフセット読み取りでは、レコードの最初のセグメント (バッファー内でそのキーが先行します)、または後続のセグメント (キーを持ちません) を読み取る場合であっても、ブロック記述子ワードおよびセグメント記述子ワードがバッファー内の同じロケーションにあると予期できます。

処理中のデータ・セットの編成およびシステムによって行われる処理のタイプに従って、 READ マクロの変形を次のように指定することができます。

順次および区分

SF データ・セットを順次に読み取ります。

SB データ・セットを逆方向に読み取ります (磁気テープ、フォーマット F、およびフォーマット U のみ)。 RECFM=FBS のとき、最後のブロックが切り捨てられたデータ・セットは逆方向に読み取ることはできません。

直接

D 直接アクセス方式を使用します。

レコードへのアクセス

第 22 章 レコードへのアクセス 423

Page 448: DFSMS データ・セットの使用法

I ブロック識別を使用してブロックを位置指定します。

K キーを使用して、ブロックを位置指定します。

F 装置位置のフィードバックを提供します。

X ブロックの排他制御を保持します。

R 次のアドレスのフィードバックを提供します。

U 次のアドレスは、容量レコードまたは論理レコードのうち、どちらか早く起きた方にすることができます。

ブロックの書き込みWRITE マクロは、仮想記憶域の指定された領域から出力データにデータ・ブロックを置きます。また WRITE マクロは、更新されたデータ・ブロックをデータ・セットに戻すのにも使用することできます。出力操作を処理とオーバーラップできるようにするため、システムは、書き込み操作が完了する前に、プログラムに制御を戻します。正常に完了するには、DECB を再使用する前に、書き込み操作用に作成された DECB を検査する必要があります。 ASCII テープ・データ・セットでは、同じブロック上で複数の WRITE を発行しないでください。WRITE マクロによって、レコード域のデータが EBCDIC から ASCII に変換されるようになるからです。または、ISO/ANSI V4 テープで CCSID が指定されている場合は、アプリケーション・プログラムに指定されている CCSID から、テープ上のデータ・レコードの CCSID に変換されます。

READ マクロの場合と同様、データ・セットの編成およびシステムによって行われる処理のタイプに従って、 WRITE マクロの変形を次のように指定することができます。

順次

SF データ・セットを順次書き込みます。

直接

SD ダミー固定長レコードを書き込みます。(BDAM ロード・モード)

SZ 容量レコード (R0) を書き込みます。システムはデータを提供し、容量レコードを書き込み、次のトラックに進みます。(BDAM ロード・モード)

SFR データ・セットに次のアドレスのフィードバックを順次書き込みます。(BDAM ロード・モード、変数はスパンされる)

D 直接アクセス方式を使用します。

I 検索引数はブロックを識別します。

K 検索引数がキーです。

A 新規ブロックを追加します。

F レコード・ロケーション・データ (フィードバック) を提供します。

X 排他制御を解放します。

レコードへのアクセス

424 z/OS V1R10 DFSMS データ・セットの使用法

Page 449: DFSMS データ・セットの使用法

TRUNC マクロでの入出力開始の保証TRUNC マクロは、BSAM または BPAM には必要ありません。これが必要なのは、 DCBE にゼロ以外の MULTACC 値を提供し、CHECK マクロを発行する代わりに、DECB に WAIT または EVENTS を発行しようとしている場合のみです。『読み取りまたは書き込み操作の完了の待ち』および 473ページの『DASD およびテープに関するパフォーマンス』を参照してください。

読み取りまたは書き込み操作の完了のテストデータ・セットを処理しているとき、CHECK マクロを発行することによって、READ または WRITE 要求の完了をテストすることができます。システムは、データ・イベント制御ブロック (DECB) でのエラーおよび例外条件をテストします。同じデータ・セットについて発行された連続する CHECK マクロは、関連付けられたREAD および WRITE マクロと同じ順序で発行する必要があります。

チェック・ルーチンは、DCB または DCBE で指定された適切な出口ルーチン、つまりエラー分析では (SYNAD)、または順次または PDS ではデータ終わり(EODAD) に制御を渡します。これは、ボリュームの終わりプロシージャー (ボリューム切り替えまたは出力データ・セットの拡張) を自動的に開始します。

DCB で OPTCD=Q を指定する場合、CHECK は、入力データを ASCII からEBCDIC に変換させるか、または ISO/ANSI V4 テープで CCSID が指定されている場合は、テープ上のデータ・レコードの CCSID からアプリケーション・プログラムについて指定されている CCSID に変換させます。

システムが SYNAD または EODAD ルーチンを呼び出す場合、その DCB の他のすべての入出力要求は終了されます。ただし、それらが、必ずしもポストされている必要はありません。それらが完了しているか検査したり、それらに CHECK を発行する必要はありません。

読み取りまたは書き込み操作の完了の待ちデータ・セットを処理しているとき、WAIT または EVENTS マクロを発行することによって、 READ または WRITE 要求の完了をテストすることができます。 関連しない複数のイベントを待つことができるように、これを行うことができます。どちらのイベントが完了しても処理することができます。入出力操作は、処理とオーバーラップされますが、DECB はエラーまたは例外条件について検査されず、ボリュームの終わりプロシージャーが開始されることもありません。プログラムはこれらの操作を実行する必要があります。

オーバーラップした BSAM または BPAM の READ または WRITE マクロを使用する場合、プログラムは DCBE マクロで MULTACC パラメーターを使用する場合より速く実行されます。それを行い、DCB で WAIT または EVENTS を使用する場合、TRUNC マクロも使用する必要があります。 『TRUNC マクロでの入出力開始の保証』および 473ページの『DASD およびテープに関するパフォーマンス』でTRUNC の情報を参照してください。

BDAM の場合、MACRF=C が関連の DCB でコーディングされていない場合、各READ または WRITE マクロごとに WAIT マクロを発行する必要があります。MACRF=C がコーディングされる場合、CHECK マクロを各 READ または WRITE

レコードへのアクセス

第 22 章 レコードへのアクセス 425

Page 450: DFSMS データ・セットの使用法

マクロごとに発行する必要があります。CHECK マクロが WAIT マクロの機能を取り込む場合、WAIT は通常は必要ありません。とはいえ、EVENTS マクロ、またはWAIT マクロの ECBLIST 形式は、いくつかの未解決のイベントのうちどれを最初に検査するか選択するのに、便利です。その後、各操作を個別に検査またはテストする必要があります。

テープでの例外条件の取り扱いこのセクションでは、正常に完了しなかった READ または WRITE マクロが例外条件です。

ほとんどのプログラムは、各ボリュームにあるデータ・セットにどれだけ多くのデータがあるかは問題にせず、障害がある場合は、どのような障害であったかを問題にしません。人はそれよりは、障害の原因について知りたがるようです。

場合によっては、システムの通常のいくつかの例外条件処理の前に特別なアクションを取りたいことがあります。1 つのそのような例外条件は、テープ・マークを読み取ることであり、もう 1 つのそのような例外条件はテープの終わりに書き込むことです。

BSAM では、プログラムは、磁気テープの終わりに到達したか検出し、 BSAM の通常の処理の前に何らかの処理を行って別のボリュームに進むことができます。それを行うには、次のようにします。

1. CHECK マクロを発行する代わりに、WAIT または EVENTS マクロを発行します。DECB の最初のワードである ECB を使用します。最初のバイトは、通知コードと呼ばれます。通知コードの 2 番目のビットがすでに 1 である場合は、小さなパフォーマンス改善として、 3 つのマクロをすべてスキップすることができます。

2. 通知コードを検査します。次のいずれかを行います。

a. 通知コードが X'7F' である: READ または WRITE が正常に行われます。読み取り中であり、テープ・ラベル・タイプが AL であるか OPTCD=Q が有効である場合は、 ASCII と EBCDIC の間で変換するために CHECK マクロを発行する必要があります。それ以外の場合は、CHECK はオプションであり、プログラムが CHECK マクロを発行したかのように通常の処理を継続することができます。

b. 通知コードが X'7F' でない: 次のアクションの 1 つを取らない限り、READ

または WRITE を正常に発行することができません。DCB に対してそれ以降発行したすべての READ または WRITE は、予測できない通知コードを持ちますが、それらが開始されていないことは保証されています。WAIT または EVENTS を発行する唯一の理由は、複数のイベントを待ってから、CHECK を発行して、例外条件を取り扱うことです。目的の一部またはすべてが、ボリュームがいっぱいなどの特定の例外条件を取り扱うことであった場合は、次のアクションのいずれかを取ります。

v 通知コードが X'41' であり、状況表示が装置例外およびエラー状況を示している場合、テープ・マークを読み取るか、ボリュームの終わりに書き込みました。しかし、同時に入力または出力エラーを受け取り、ブロックの読み取りまたは書き込みができなくなりました。それでもなお、前述のアクションのいずれかを取ることができます。 CHECK を発行すると、

レコードへのアクセス

426 z/OS V1R10 DFSMS データ・セットの使用法

Page 451: DFSMS データ・セットの使用法

SYNAD ルーチンに入るか、ABEND が発行されます。 CLOSE を発行して、SYNAD ルーチンを迂回することができますが、CLOSE は、別の入力または出力エラーを検出し、ABEND を発行することができます。

v 通知コードおよび状況表示が上述のものと異なる場合は、システムは、データ・ブロックを読み取るか書き込むことはしなかったようです。CHECK

または CLOSE を発行します。 CHECK によって、SYNAD ルーチンに入るか、ABEND を発行することになります。システムは、予測不能な通知コードまたは非通知コードを持つ他のすべての WRITE を破棄します。

GET および PUT を使用してのデータへのアクセス待機アクセス方式は、仮想記憶域内でデータを送信するための GET および PUT

マクロを提供します。GET および PUT マクロは、24 ビットまたは 31 ビット・アドレッシング・モードで発行できます。QSAM GET および PUT マクロは、保管され、検索されたレコードを自動的にブロック化および非ブロック化できます。待機アクセス方式は、必要なバッファー方式を予期し、入出力操作を命令ストリーム処理とオーバーラップします。

オペレーティング・システムは、バッファー処理を制御するので、バッファーを埋めたり、空にするため GET または PUT マクロを再発行せずに、必要なだけの入出力バッファーを使用することができます。通常、ストレージには一時点で複数の入力ブロックが存在するので、入出力操作はレコード処理を遅らせません。

オペレーティング・システムは、入出力を処理とオーバーラップさせるので、完了、エラー、または例外条件をテストする必要はありません。GET または PUT マクロが発行された後、入力域が埋まるか、出力域が入手可能になるまで、プログラムに制御が戻りません。エラー分析 (SYNAD) およびボリュームの終わりまたはデータ終わり (EODAD) ルーチンへの出口は、必要に応じて自動的に取られます。

GET - レコードの検索GET マクロは、入力データ・セットからレコードを入手します。これは、論理順次および装置から独立した形で働きます。GET マクロは、入力バッファーの埋め込みをスケジュールし、レコードを非ブロック化し、入力エラー・リカバリー手順を指示します。スパン・レコード・データ・セットの場合、レコード・セグメントも論理レコードにマージします。

すべてのレコードが処理され、GET マクロがデータ終わり指示を検出する場合、システムは順次データ・セットにあるラベルを自動的に検査し、制御をデータ終わり出口 (EODAD) ルーチンに渡します。順次データ・セットでボリュームの終わり条件が検出される場合、データ・セットがいくつかのボリュームにわたって拡張されているか、連結データ・セットが処理されている場合、システムは自動的にボリュームを切り替えます。

DCB または DD ステートメントで OPTCD=Q と指定する場合、または DD ステートメントの LABEL パラメーターが ISO/ANSI ラベルを指定している場合、GET

マクロは入力データを ASCII から EBCDIC に変換します。ISO/ANSI V4 テープでCCSID が指定されている場合、それは入力データを、テープ上のデータ・レコード

レコードへのアクセス

第 22 章 レコードへのアクセス 427

Page 452: DFSMS データ・セットの使用法

の CCSID からアプリケーション・プログラムで指定されている CCSID に変換します。このパラメーターは、IBM 標準ラベルが付いていない磁気テープにのみサポートされます。

PUT - レコードの書き込みPUT マクロは、レコードを出力データ・セットに書き込みます。GET マクロと同様、これは論理順次と装置独立の方法で働きます。必要に応じて、 PUT マクロは、レコードをブロック化し、出力バッファーを空にすることをスケジュールし、出力エラー訂正プロシージャーを取り扱います。順次データ・セットでは、これは、自動ボリューム切り替えおよびラベル作成も開始し、スパンのためにレコードもセグメント化します。

DCB または DD ステートメントで OPTCD=Q と指定する場合、または DD ステートメントの LABEL パラメーターが ISO/ANSI ラベルを指定している場合、PUT

マクロは出力が EBCDIC から ASCII に変換されるようにします。 ISO/ANSI V4

テープで CCSID が指定されている場合、それは、出力がアプリケーション・プログラムで指定されている CCSID からテープにあるデータ・レコードの CCSID に変換されるようにします。このパラメーターは、IBM 標準ラベルが付いていない磁気テープにのみサポートされます。 テープに ISO/ANSI ラベル (LABEL=(,AL)) がある場合、システムは OPTCD=Q を想定します。

PUT マクロがカード・パンチまたはプリンターに送信される場合、システムは、フォーマット F またはフォーマット V のブロック当たりのレコードまたはレコード・セグメントの数を自動的に 1 に調整します。したがって、レコードが磁気テープまたは直接アクセス・ボリュームに一時的に置かれる場合に最適なブロック・サイズを提供するためにレコード長 (LRECL) およびブロック・サイズ (BLKSIZE) を指定することができます。

スパン可変長レコードでは、ブロック・サイズは、1 つのカードまたは 1 印刷行の長さに等しくなければなりません。この場合、レコード・サイズはブロック・サイズより大きくてもかまいません。

PUTX - 更新済みレコードの書き込みPUTX マクロは、データ・セットを更新したり、入力データ・セットからのレコードをベースとして使用して新規の出力データ・セットを書き込むのに使用します。PUTX は、既存のデータ・セットからのレコードを更新、置き換え、または挿入しますが、レコードを作成することはしません。

PUTX マクロを使用して更新するとき、各レコードは、前の位置指定モード GET

マクロによって参照されるデータ・セットに戻されます。更新レコードを含むバッファーはフラグを立てられ、それが読み取られた直接アクセス記憶装置と同じロケーションに書き戻されます。ブロックは、スパン・レコードが更新されるときを除き、次のバッファー用に GET マクロが発行されるまで書き込まれません。この場合、ブロックは、次の GET マクロを使用して書き込まれます。

PUTX マクロを使用して新規出力データ・セットを書き込むとき、PUT マクロを使用して新規レコードを追加することができます。必要に応じて、PUTX マクロは、レコードをブロック化し、出力バッファーをスケジュールし、出力エラー訂正プロシージャーを取り扱います。

レコードへのアクセス

428 z/OS V1R10 DFSMS データ・セットの使用法

Page 453: DFSMS データ・セットの使用法

PDAB - 並列入力処理 (QSAM のみ)QSAM 並列入力処理を使用して、複数の入力データ・セットを並行して処理する(たとえは、同時にいくつかデータ・セットをソートまたはマージする) ことができます。 QSAM 並列入力処理では、処理される各 DCB に個別の GET マクロを発行する必要がなくなります。並列入力処理用の GET ルーチンは、レディー・レコードを持つ DCB を選択してから、制御を通常の GET ルーチンに移動します。レディー・レコードを持つ DCB がない場合、GET ルーチンは複数の WAIT マクロを発行します。

並列入力処理は、等しい優先順位を持つデータ・セットのキューからの論理入力レコードを提供します。この機能は、QSAM を入力処理、単純バッファー方式、位置指定または移動モード、および固定長、可変長、または不定長レコードでサポートします。スパン・レコード、トラック・オーバーフロー・レコード、ダミー・データ・セット、および SYSIN データ・セットは、サポートされません。

並列入力処理は、特定のデータ・セットからレコードを検索するため、または特定のデータ・セットに対して制御命令を発行するために、随時割り込むことができます。検索プロセスが完了したら、並列入力処理を再開することができます。

データ・セットは、随時データ・セット・キューに追加するか、それから削除することができます。ただし、各データ・セットがデータ終わり条件に達するにつれて、キューに後続の GET マクロが発行される前に、CLOSE マクロを使用してデータ・セットをキューから除去する必要があります。それ以外の場合は、タスクは異常終了することがあります。

並列データ・アクセス・ブロック (PDAB) の使用DCB 出口リストに並列データ・アクセス・ブロック (PDAB) のアドレスを組み込むことによって並列入力処理に対する要求を指定できます。DCB 出口リストについて詳しくは、 631ページの『DCB 出口リスト』を参照してください。

PDAB マクロは、一度に処理できる DCB の最大数を識別する作業域を作成およびフォーマット設定するのに使用します。OPEN マクロを使用してキューに DCB を追加しているとき、 PDAB マクロで指定された項目の最大数を超える場合、データ・セットは並列入力処理に使用可能ではありません。ただし、順次処理には使用可能です。

並列 GET マクロを発行するとき、レジスター 1 は常に PDAB を指している必要があります。レジスターをロードするか、GET マクロにそれをユーザーに代わって行わせることができます。制御がユーザーに戻されるとき、レジスター 1 には、キュー内のデータ・セットの 1 つからの論理レコードのアドレスが含まれています。レジスター 2 ~ 13 には、GET マクロが発行された時点での元の内容が入っています。レジスター 14、15、および 0 は変更されます。

PDAB を通じて、レコードが検索されたデータ・セットを見つけることができます。 PDAB (PDADCBEP) のフルワード・アドレスは、DCB のアドレスをポイントします。このポインターは、CLOSE マクロが発行された時点から次の並列 GET マクロの発行までは無効である可能性があることに注意してください。

レコードへのアクセス

第 22 章 レコードへのアクセス 429

Page 454: DFSMS データ・セットの使用法

図 64 では、一度に 3 つを超えないデータ・セット (PDAB マクロでのMAXDCB=3) が並列処理のためにオープンしています。

PDAB に必要なバイと数は 24 + 8n に等しくなります。ここで、n はキーワードMAXDCB の値です。

データ定義ステートメントおよびデータ・セットが提供される場合、入力処理OPEN マクロに指定されるように、DATASET1、DATASET2、および DATASET3

が並列入力処理のためにオープンされています。各データ・セットの他の属性は、QSAM (MACRF=G)、デフォルトでの単純バッファー方式、位置指定または移動モード (MACRF=L または M)、固定長レコード (RECFM=F)、および PDAB の出口リスト項目 (X'92') です。位置指定および移動モードは、同じデータ・セット・キューで使用できます。マッピング・マクロ DCBD および PDABD は、それぞれ DCB

および PDAB を参照するために使用されます。

...OPEN (DATASET1,(INPUT),DATASET2,(INPUT),DATASET3, X

(INPUT),DATASET4,(OUTPUT))TM DATASET1+DCBQSWS-IHADCB,DCBPOPEN Opened for

* parallel processingBZ SEQRTN Branch on no to

* sequential routineTM DATASET2+DCBQSWS-IHADCB,DCBPOPENBZ SEQRTNTM DATASET3+DCBQSWS-IHADCB,DCBPOPENBZ SEQRTN

GETRTN GET DCBQUEUE,TYPE=PLR 10,1 Save record pointer...... Record updated in place...PUT DATASET4,(10)B GETRTN

EODRTN L 2,DCBQUEUE+PDADCBEP-IHAPDABL 2,0(0,2)CLOSE ((2))CLC ZEROS(2),DCBQUEUE+PDANODCB-IHAPDAB Any DCBs left?BL GETRTN Branch if yes...

DATASET1 DCB DDNAME=DDNAME1,DSORG=PS,MACRF=GL,RECFM=FB, XLRECL=80,EODAD=EODRTN,EXLST=SET3XLST

DATASET2 DCB DDNAME=DDNAME2,DSORG=PS,MACRF=GL,RECFM=FB, XLRECL=80,EODAD=EODRTN,EXLST=SET3XLST

DATASET3 DCB DDNAME=DDNAME3,DSORG=PS,MACRF=GL,RECFM=FB, XLRECL=80,EODAD=EODRTN,EXLST=SET3XLST

DATASET4 DCB DDNAME=DDNAME4,DSORG=PS,MACRF=PM,RECFM=FB, XLRECL=80

DCBQUEUE PDAB MAXDCB=3SET3XLST DC 0F’0’,AL1(EXLLASTE+EXLPDAB),AL3(DCBQUEUE)ZEROS DC X'0000'

DCBD DSORG=QSPDABDIHAEXLST , DCB exit list mapping...

図 64. 3 つのデータ・セットの並列処理

レコードへのアクセス

430 z/OS V1R10 DFSMS データ・セットの使用法

Page 455: DFSMS データ・セットの使用法

並列処理のテストOPEN マクロに後続して、DCB が並列処理のためにオープンされていたかどうかを判別するためにテストが行われます。行われない場合は、順次処理ルーチンに制御が与えられます。

430ページの図 64 では、1 つ以上のデータ・セットが並列処理のためにオープンされているとき、GET ルーチンがレコードを検索し、ポインターをレジスター 10 に保管し、レコードを処理し、それを DATASET4 に書き込みます。このプロセスは、入力データ・セットの 1 つでデータ終わり条件が検出されるまで継続します。データ終わりルーチンは、完了した入力データ・セットを位置指定し、CLOSE マクロを使用してそれをキューから除去します。次に、キューにデータ・セットが残っていないか判別するためにテストが行われます。キューが空になるまで、処理がこの方法で継続されます。

入出力エラーの分析基本および待機アクセス方式は両方とも、入出力エラーを分析するための特殊なマクロを提供します。これらのマクロは、SYNAD ルーチンまたはエラー分析ルーチンで使用することができます。ご使用のプログラムが SYNAD ルーチンをもっていない場合は、アクセス方式が ABEND 001 を出します。

SYNADAF - SYNAD 分析機能の実行SYNADAF マクロは、エラー分析ルーチンに使用できる状況、センス、および例外条件コード・データを分析します。これは、ルーチンが適切なデータ・セットに書き込むことができるエラー・メッセージを生成します。メッセージは、非ブロック化可変長レコードの形式になっていますが、メッセージ・テキストに先行するブロック長およびレコード長を省略することにより、それらを固定長レコードとして書き込むこともできます。

SYNADAF メッセージは、2 つの部分に分かれており、各メッセージは非ブロック化可変長レコードになっています。分析されるデータ・セットが PDSE、拡張フォーマット・データ・セット、または UNIX ファイルでない場合、最初のメッセージのみが入力されます。 データ・セットが PDSE、拡張フォーマット・データ・セット、または UNIX ファイルである場合、両方のメッセージが入力されます。 最初のメッセージの最後のバイトにある ’S’ は、2 番目のメッセージが存在することを意味します。この 2 番目のメッセージは、最初のメッセージの末尾から 8 バイト過ぎたところに位置指定されます。

最初のメッセージのテキストは 120 文字の長さであり、36、42、または 20 のブランクからなるフィールドで始まります。ブランクのフィールドは、メッセージにご自身の注釈を追加するために使用することができます。2 番目のメッセージのテキストは、128 文字の長さであり、後で使用するために予約済みの 76 のブランクのフィールドで終わります。この 2 番目のメッセージは、メッセージ・バッファーの5 番目のバイトで始まります。

例: ブランクのフィールドを省略したテープ・データ・セットの典型的なメッセージは次のとおりです。

,TESTJOBb,STEP2bbb,0283,T,MASTERbb,READb,DATA CHECKbbbbb,0000015,BSAMb

レコードへのアクセス

第 22 章 レコードへのアクセス 431

|

Page 456: DFSMS データ・セットの使用法

上記の例で、’b’ はブランクを意味します。

そのメッセージは、BSAM を使って処理されるデータ・セットの 15 番目のブロックの読み取り中にデータ・チェックが発生したことを示しています。データ・セットは、MASTER という名前が付いた DD ステートメントによって識別され、ユニット 283 にある磁気テープ・ボリュームにありました。ジョブの名前は TESTJOB

でした。ジョブ・ステップの名前は STEP2 でした。

例: ブロック・フィールドを省略した PDSE の典型的なメッセージは次のとおりです。

,PDSEJOBb,STEP2bbb,0283,D,PDSEDDbb,READb,DATA CHECKbbbbb,00000000100002,BSAMS

,003,000005,0000000002,00000000,00000000,00 ... (76 blanks)

そのメッセージは、BSAM によって処理されている PDSE の X'00000000100002'

の BBCCHHR によって示されるブロックの読み取り中にデータ・チェックが発生したことを示しています。 BBCCHHR の説明については、 763ページの『用語集』の実アドレスを参照してください。 データ・セットは、PDSEDD という名前が付いた DD ステートメントによって識別され、ユニット 283 にある DASD にありました。 ジョブの名前は PDSEJOB でした。ジョブ・ステップの名前は STEP2 でした。アクセス方式 ’BSAM’ に続く ’S’ は、2 番目のメッセージが入力されたことを意味します。2 番目のメッセージは、エラーが発生したレコードを示しています。データ・セットの連結番号は 3 (連結の 3 番目のデータ・セット) であり、メンバーの TTR は X'000005' であり、相対レコード番号は 2 です。SMS の戻りコードと理由コードはゼロで、SMS でエラーが発生しなかったことを示しています。

入力エラーのためにエラー分析ルーチンに入る場合は、最初のメッセージ (オフセット 8) の最初の 6 または 16 バイトはバイナリー情報を含んでいます。データが送信されなかった場合、これらの先頭バイトはブランクです。エラーがデータ伝送を妨げなかった場合、これらの最初のバイトには、入力バッファーのアドレスおよび読み取られたバイト数が入っています。この情報は、ブロックからのレコードを処理するのに使用することができます。たとえば、エラー・メッセージを印刷した後に各レコードを印刷することができます。ただし、メッセージを印刷する前に、バイナリー情報を EBCDIC 文字に置き換える必要があります。

SYNADAF マクロは、それ自身の保管域を提供し、この領域がエラー分析ルーチンに使用可能であるようにします。SYNAD ルーチンのエントリー・ポイントで使用されるときは、それは保管域を提供するというルーチンの責任を果たします。SYNADAF マクロについて詳しくは、「z/OS DFSMS Macro Instructions for Data

Sets」を参照してください。

SYNADRLS - SYNADAF メッセージおよび保管域の解放SYNADRLS マクロは、SYNADAF マクロによって提供されるメッセージおよび保管域を解放します。エラー分析ルーチンから戻る前に、このマクロを発行する必要があります。

レコードへのアクセス

432 z/OS V1R10 DFSMS データ・セットの使用法

|

|

Page 457: DFSMS データ・セットの使用法

装置サポート機能 (ICKDSF): 入出力問題の診断ディスク・ドライブでの問題またはボリュームに保管されるデータの読み取りまたは書き込みの問題があるかどうか判別するには、装置サポート機能 (ICKDSF) リリース 9 またはそれ以降を使用します。装置サポート機能は、ボリュームの保守検査も行います。装置サポート機能プログラムの INSPECT コマンドは、代替トラックを割り当てることができます。「Device Support Facilities User’s Guide and

Reference」を参照してください。

SRB モードまたはクロスメモリー・モードに関する制約事項サービス要求ブロック (SRB) モードまたはクロスメモリー・モードと非 VSAM アクセス方式を併用することはできません。

レコードへのアクセス

第 22 章 レコードへのアクセス 433

Page 458: DFSMS データ・セットの使用法

434 z/OS V1R10 DFSMS データ・セットの使用法

Page 459: DFSMS データ・セットの使用法

第 23 章 非 VSAM データ・セットの共用

この章では以下のトピックを扱います。

トピック 該当ページ

PDSE 446

直接データ・セット (BDAM) 446

データ・セットをオープンおよびクローズするときに考慮する事項 447

共用 DASD ボリュームでのチェックポイント・データ・セットの制御 448

入力操作用の検索ダイレクトのシステム使用 449

共用順次データ・セット向け拡張データ保全機能 439

次のものの間で非 VSAM データ・セットを共用することができます。

v 単一のオペレーティング・システム内での異なるジョブ

v タスクまたは異なるサブタスク内での複数の DCB

v タスクまたは異なるサブタスク内での 1 つの DCB

v オペレーティング・システムの異なるインスタンス。異なるシステム間で安全に共用するには、グローバル・リソースの逐次化 (GRS) または同等のプロダクトが必要です。 GRS またはそれと同等のものを使用しないと、データ・セットとVTOC の両方とも壊れることがあります。詳しくは、「z/OS MVS 計画: グローバル・リソース逐次化」を参照してください。

直接アクセス装置にあるデータ・セットを複数のタスクによって共用できる条件には、次の 2 つのものがあります。

v 複数の DCB がオープンされており、同じ共用されたデータ・セットを参照するタスクによって並行して使用される (複数の DCB)。

v 1 つの DCB のみがオープンされており、単一のジョブ・ステップで複数のタスクによって並行して使用される (単一の共用 DCB)。

PDSE を除き、複数の DCB が出力用にオープンしており、DCB が同じジョブ・ステップ内のデータ・セットにアクセスするとき、システムはデータ保全性を保護しません。システムは、ユーザーが DISP=SHR が指定する場合であっても、シスプレックス内の 1 つのプログラムのみが OUTPUT オプションを使用して PDS をオープンできることを保証します。2 番目のプログラムが OUTPUT オプションを使用して OPEN を発行する場合、DISP=SHR を指定した PDS では、 DCB がまだOUTPUT オプションを使用してオープンしていても、2 番目のプログラムが 213-30

ABEND を受け取ります。これは、DISP=OLD または MOD を持つ 1 つのアドレス・スペース内の 2 つのプログラムには適用されません。これにより、オーバーレイされたデータが生じることがあります。この 213-30 強制メカニズムは、UPDAT

オプションを使用して OPEN を発行するときには、適用されません。したがって、UPDAT および DISP=SHR を使用して OPEN を発行するプログラムは、 PDS ディレクトリーを壊すことがあります。出力用の PDS の処理中にアベンドが発生するか、ディレクトリーが更新用にオープンしているときにディレクトリーを壊す可

© Copyright IBM Corp. 1987, 2008 435

Page 460: DFSMS データ・セットの使用法

能性を防ぐためには、DISP=OLD を使用してください。 DISP=NEW、DISP=OLD、または DISP=MOD 指定でディレクトリーが保護されている時にプログラムが PDS

に書き込む場合、GRS 複合システム外から読み取りを行うプログラムでは、予測不能な結果が生じる可能性があります。例えば、一時的に欠落するかオーバーレイされるメンバーが生じることがあります。

DCBE は、オープンしている複数の DCB によって共用してはなりません。DCB が正常にクローズされた後であれば、同じ DCBE をポイントする異なる DCB をオープンすることができます。

オペレーティング・システムは、データ・セットを処理するタスク間で共用したいデータ・セットの保全性を保証するのに役立つジョブ制御言語 (JCL) ステートメントおよびマクロを提供します。図 65 および 438ページの図 66 は、タスクが使用しているアクセス方式およびアクセスのモード (入力、出力、または更新) に応じて、どの JCL およびマクロを使用する必要があるかを示しています。図 65 では、共用されるデータ・セットに複数の DCB がオープンされている場合に使用する必要がある処理プロシージャーを説明します。DCB は、同じまたは異なるジョブ・ステップにあるタスクによって使用できます。

DD ステートメントにあるスペース・キーワードの RLSE 値の目的は、データ・セットがクローズされるときに CLOSE が未使用スペースを解放するようにすることです。DD が DISP=SHR を持つか、データ・セットに複数の DCB がオープンしている場合、システムはこの機能を実行しません。

DISP=SHR。 既存のデータ・セットを共用する各ジョブ・ステップでは、共用されたデータ・セットがステップを並行して実行できるようにするため、DD ステートメントの DISP パラメーターのサブパラメーターとして SHR をコーディングする必要があります。データ・セット保全性の保証方法について詳しくは、「z/OS MVS

JCL ユーザーズ・ガイド」を参照してください。

図 65. 複数の DCB を使用してデータ・セットを共用するために必要な JCL、マクロ、およびプロシージャー

非 VSAM データ・セットの共用

436 z/OS V1R10 DFSMS データ・セットの使用法

Page 461: DFSMS データ・セットの使用法

関連資料: PDSE の共用の詳細については、 551ページの『PDSE の共用』を参照してください。タスクが同じジョブ・ステップにある場合は、DISP=SHR は必要ありません。順次データ・セットを使用した場合の共用違反の検出の詳細については、439ページの『共用順次データ・セット向け拡張データ保全機能』を参照してください。

ファシリティーなし。 オペレーティング・システムには、これらの条件のもとでデータ・セットを共用するためのファシリティーはありません。

データ・セットでの ENQ。 共用するデータ・セットの DD ステートメントでDISP=SHR をコーディングするほかに、各タスクは、データ・セットまたはブロックを排他制御が必要なリソースとして指定する ENQ および DEQ マクロを発行する必要があります。ENQ は GET (READ) の前に発行する必要があります。 DEQ

マクロは、操作を終了する PUTX または CHECK マクロの後に発行する必要があります。

関連資料: ENQ および DEQ マクロの使用法の詳細については、「z/OS MVS プログラミング: アセンブラー・サービス 解説書 ABE-HSP」を参照してください。

非関連ブロックの保証。 レコードのブロック化および非ブロック化を提供するアクセス方式 (QSAM) を使用している場合、データ・セットを更新する各タスクが、他のタスクにより更新中のレコードを含むブロックを更新していないことを保証する必要があります。オペレーティング・システムには、非関連ブロックが異なるタスクによって処理されていることを保証するためのファシリティーはありません。

ブロックでの ENQ。 BSAM または BPAM を使用して共用データ・セット (DD

ステートメントで DISP=SHR をコーディングすることによって指定します) を更新している場合、ユーザーのタスクおよび他のすべてのタスクは、READ マクロの前に ENQ マクロを、レコードを更新するために発行した WRITE マクロに後続するCHECK マクロの後に DEQ マクロを発行することによってレコードの各ブロックの処理をシリアライズする必要があります。BDAM を使用している場合、DCB でMACRF=X を、READ および WRITE マクロで X をコーディングすることによって要求された READ 排他オプションを使用してブロックをエンキューすることができます。BDAM マクロの使用例については、 676ページの『更新についての排他制御』を参照してください。

438ページの図 66 は、単一の DCB がジョブ・ステップ内のいくつかのタスクによって共用されているときに、共用データ・セットの処理をシリアライズするのに使用することができるマクロについて説明しています。

非 VSAM データ・セットの共用

第 23 章 非 VSAM データ・セットの共用 437

Page 462: DFSMS データ・セットの使用法

ENQ。 データ・セットが同じジョブ・ステップ (同じ DCB を使用するすべてのもの) 内の複数のタスクによって共用されているとき、データ・セットを処理する各タスクは、入出力操作を開始するマクロを発行する前に定義済みリソース名の上でENQ マクロを発行する必要があります。また、各タスクは、入出力操作に後続する次の順次命令で DEQ マクロを発行することによって排他制御も解放する必要があります。また、2 つのタスクが PDS の異なるメンバーを書き込んでいる場合は、各タスクは、FIND マクロの前に ENQ マクロを発行し、メンバーの処理を完了する STOW マクロの後に DEQ マクロを発行する必要もあることに注意してください。 ENQ および DEQ についての詳細は、「z/OS MVS プログラミング: アセンブラー・サービス 解説書 ABE-HSP」を参照してください。

アクションは必要ありません。 680ページの『DCB の共用』を参照してください。

ブロックでの ENQ。 共用直接データ・セットを更新しているときは、各タスクは、DCB マクロで MACRF=X を、READ および WRITE マクロのタイプ・オペランドで X をコーディングすることによって要求される BDAM 排他制御オプションを使用する必要があります。BDAM マクロの使用例については、 676ページの『更新についての排他制御』を参照してください。データ・セットを共用するすべてのタスクは、サブプール 0 を共用する必要があることに注意してください。「z/OS

MVS プログラミング: アセンブラー・サービス 解説書 ABE-HSP」にあるATTACH マクロの説明を参照してください。

キー順。 DD ステートメントでの DISP=SHR の指定は必要ありません。

また、データ・セットは、同時に両方の方法で共用することもできます。共用データ・セットでは、複数の DCB をオープンすることができ、しかも DCB の 1 つを複数のタスクが共用することができます。この条件のもとで、直接データ・セットについて 436 ページの図 65 で指定された逐次化技法は、要件を満たします。順次および PDS の場合は、図 65 および図 66 で指定された技法を使用する必要があります。

図 66. 単一の DCB を使用してデータ・セットを共用するために必要な JCL、マクロ、およびプロシージャー

非 VSAM データ・セットの共用

438 z/OS V1R10 DFSMS データ・セットの使用法

Page 463: DFSMS データ・セットの使用法

複数のタスクによって共用されたデータ・セットのオープンおよびクローズ。 複数のタスクがデータ・セットを共用しているときは、次の制約事項を認識する必要があります。これらの制約事項に従わないと、共用データ・セットの保全性が危険にさらされます。

v DCB を共用するすべてのタスクは、DCB をオープンしたジョブ・ステップにある必要があります。 435ページの『第 23 章 非 VSAM データ・セットの共用』を参照してください。

v DCB を共用し、その DCB を使用して入力または出力操作を開始したタスクは、タスクを終了する前に、それらすべての操作が完了していることを確認する必要があります。 DCB に対して発行された CLOSE マクロは、すべての入力および出力操作を終了します。

v DCB は、それをオープンしたタスクによってのみクローズすることができます。

共用直接アクセス記憶装置。 一部のご使用のシステムでは、直接アクセス記憶装置(DASD) は複数の独立コンピューター・システムによって共用されます。これらのシステムで実行されるタスクでは、装置に保管されたデータ・セットを共用することができます。共用 DASD 上の共用データ・セットまたは同じストレージ域が複数の独立システムによってアクセスされる場合は、注意深い計画が必要です。適切なシステム間連絡がないと、データ保全性が危険にさらされることがあります。

共用 DASD 環境でデータ保全性を保証するには、システムは、グローバル・リソースの逐次化 (GRS) がアクティブにされているか、機能的に同等のグローバル逐次化メソッドを持つ必要があります。

関連資料: 共用 DASD のデータ保全性については、「z/OS MVS Programming:

Authorized Assembler Services Guide」を参照してください。GRS の詳細については、「z/OS MVS 計画: グローバル・リソース逐次化」を参照してください。

共用順次データ・セット向け拡張データ保全機能出力処理または更新処理では、共用順次データ・セットに並行してアクセスすることができます。場合によりますが、共用順次データ・セットの更新時にデータが失われたり、壊されたりすることがあります。これは、あるユーザーが更新と同時に他のユーザーの更新データに上書きすることがあるためです。

拡張データ保全機能 は、この種のデータ損失を防止する機能です。このデータ保全機能は、書き込みのためにオープンされている順次データ・セットをオープンしたプログラムを終了させるか、そのデータ・セットがオープンできるようにしたまま警告メッセージだけを書き出します。拡張データ保全機能が使用できるのは順次データ・セットの場合に限ります。

関連資料: 拡張データ保全機能の概要については、「z/OS DFSMS 新機能の使用」を参照してください。

拡張データ保全機能のセットアップ始める前に: z/OS DFSMS V1R5 は拡張データ保全機能と一緒に提供されますが、この機能はアクティブになっていません。 通常は、システム・プログラマーがこのデータ保全機能をセットアップすることになります。拡張データ保全機能をアクテ

非 VSAM データ・セットの共用

第 23 章 非 VSAM データ・セットの共用 439

Page 464: DFSMS データ・セットの使用法

ィブにする時点では、複数のユーザーによる並行出力または DASD 上の順次データ・セットに対する更新アクセスは行われていません。

ご使用のシステムに拡張データ保全機能が必要であるかどうか決めてください。アプリケーションでは、出力または更新のために順次データ・セットに並行アクセスを行うことができますか、データ保全はそのまま維持しますか。

ご使用のシステム向けにデータ保全処理をセットアップするには、以下の手順に従ってください。

1. 新しい SYS1.PARMLIB メンバーである IFGPSEDI を作成する。このIFGPSEDI メンバーには、MODE 変数およびデータ保全処理から除外されるデータ・セット名のオプショナル・リストが含まれています。 IFGPSEDI は、SYS1.PARMLIB 連結内の任意のデータ・セットに入れることができます。

_______________________________________________________________

2. IFGPSEDI を以下の MODE 値のうちの 1 つに設定する。MODE は最初のレコードの 1 桁目で開始する必要があります。

MODE(WARN)すでにオープンされている共用データ・セットを出力のためにアプリケーションでオープンしようとしたときには、プログラムが警告メッセージを出します。しかしアプリケーションでは現行のオープンを続行することができます。このような状態がデータ保全違反と呼ばれます。

MODE(ENFORCE)データ保全違反が起った時点でプログラムは異常終了となります。

MODE(DISABLE)データ保全処理は使用不可になります。

_______________________________________________________________

3. DSN(data_set_name) を使用して、IFGPSEDI メンバーの中の除外リストに含めるデータ・セットがあれば、これを指定する。

データ・セット名は部分修飾名または完全修飾名とすることができます。データ・セット名には、アスタリスクまたは % 記号を含めることもできます。

MODE(WARN) または MODE(ENFORCE) を指定すると、データ保全処理ではIFGPSEDI の中の除外リストにあるデータ・セットが無視されます。除外リストでは、システム内の同じ名前の全データ・セットが除外されます。 (データ・セットがシステム管理のものでない場合は、同じ名前の複数のデータ・セットがいろいろなボリューム上に存在していることがあり、これらのデータ・セットが除外されることになります。)

_______________________________________________________________

4. IFGPSEDI メンバーを作成した後で、システムの IPL を行うか IFGEDI タスクを開始して、データ保全処理を活動化する。この IFGEDI タスクは、IFGPSEDI

の中のデータからデータ保全テーブルを作成します。

_______________________________________________________________

非 VSAM データ・セットの共用

440 z/OS V1R10 DFSMS データ・セットの使用法

Page 465: DFSMS データ・セットの使用法

結果: データ保全処理を活動化させた後では、メッセージ IEC983I が表示されます。システムは、IPL 時または IFGEDI タスクが開始された後にこのメッセージを出します。このメッセージには、データ保全処理が活動状態になっているかどうかが示されるとともにモード (WARN、ENFORCE、または DISABLE) も示されます。

SYS1.PARMLIB メンバーである IFGPSEDI が存在していないか、メッセージにMODE(DISABLE) が示されている場合は、データ保全処理は活動状態にはなく、共用順次データ・セットに対するこれまでの処理が続行します。

推奨事項: データ保全処理を必要とするアプリケーションを確認する最良の方法は、警告モードでこの処理を活動化させることです。こうしてから、警告メッセージに示されたデータ・セットの名前を調べます。 IFGPSEDI メンバーの中の、保護されるデータ・セットを含む除外リストを更新した後では、強制モードによるデータ保全処理の活動化について検討してください。

関連資料: IFGPSEDI の設定の詳細については、「z/OS MVS 初期設定およびチューニング 解説書」を参照してください。

複数のシステムにおける拡張データ保全機能の同期化シスプレックス内の全部のシステムで拡張データ保全機能が活動状態になっており、全システムに同じ IFGPSEDI メンバー・データがある場合は、このデータ保全機能により、そのシスプレックス内で共用されるデータ・セットが保護されます。シスプレックス内のそれぞれのシステムは独自のデータ保全テーブルをもっています。

複数のシステム上でデータ保全処理のセットアップを行うには、以下の手順に従ってください。

1. IFGPSEDI メンバーの中のデータ・セット名がシスプレックス内のそれぞれのシステムで同じものとなっていることまたは SYS1.PARMLIB がそのシスプレックス内の全システムで共用されることを確認する。

_______________________________________________________________

2. それぞれのシステムで S IFGEDI コマンドを出すか、それぞれのシステムの IPL

をし直して各システムのデータ保全テーブルの作成をし直す。

シスプレックス内の全システムで各システムのデータ保全テーブルが再作成されるまで、データ保全処理は同期化されないことがあります。例えば、あるシステムの IFGPSEDI からデータ・セット名が削除され、そのシステムのデータ保全テーブルがそのシステム上で再作成されるものとします。この場合、他のシステムではそれぞれのデータ保全テーブルが再作成されるまで、削除されたデータ・セットにアクセスすることができます。

_______________________________________________________________

結果: メッセージ IEC983I が各システム上で表示された時点で、複数のシステム上でデータ保全処理のセットアップが行われたことを確認することができます。

非 VSAM データ・セットの共用

第 23 章 非 VSAM データ・セットの共用 441

Page 466: DFSMS データ・セットの使用法

拡張データ保全機能は、複数のシスプレックスにまたがり共用されるデータ・セットには無効です。

START IFGEDI コマンドの使用システム・オペレーターは、START IFGEDI コマンドを使用して、IFGPSEDI

PARMLIB メンバーを更新することなくデータ保全性のモードを変更することができます。例えば、強制モードの間にデータ保全機能が問題を起こしている場合、オペレーターは一時的にモードを警告または使用不可にして、アプリケーションが実行を継続できるようにすることができます。

v 警告モードに変更するには、S IFGEDI,,,WARN を実行します。

v データ保全機能を使用不可にするには、S IFGEDI,,,DISABLE を実行します。

アプリケーションに即した拡張データ保全機能の迂回始める前に: 一部のシステム・アプリケーションでは独自のデータ保全が維持できるため、拡張データ保全機能を使用する必要はありません。データ保全処理を迂回させて、このようなアプリケーションが正しく実行できるようにするためには、以下のいずれかの処置を講じてください。

v 複数のユーザーが順次データ・セットを同時にオープンまたは更新することができないようにアプリケーションを修正する。

v データ保全処理から除外する順次データ・セットのリストを IFGPSEDI メンバーの中に指定する。

重要: データ保全処理からデータ・セットを除外する場合には、すべてのアプリケーションでデータ保全処理を迂回させ、出力のために複数のアプリケーションでデータ・セットがオープンされるようなときに偶発的なデータの破壊が起こらないようにする必要があります。データ保全上の問題が発生した場合は、SMF 14 および 15 レコードを調べて、データ保全処理が迂回されたデータ・セットを確認してください。

v DCBE マクロの中に DCBEEXPS フラグを設定して、同時ユーザーが出力または更新の処理のためにデータ・セットをオープンすることができるようにする。DCBE マクロの中の命令 OI DCBEFLG2,DCBEEXPS を使用してビット 7 のDCBEFLG2 を X’01’ に設定してください。

DCBEEXPS フラグを設定してこのフラグを有効なものとするには、アプリケーション・プログラムが以下のいずれかの基準を満たしていなくてはなりません。

– アプリケーションが許可プログラム機能 (APF) によって許可されている。

– アプリケーションが PSW 監視プログラム状態で実行されている。

– アプリケーションはデータ・セットをオープンする時点ではシステム・キー(0-7) で実行している。

以上のどれにもあてはまらない場合、DCBEEXPS フラグは無視されます。

v アプリケーションが許可されている場合は、プログラム・プロパティー・テーブル (PPT) の中に NODSI フラグを指定する。この NODSI フラグによりデータ保全処理が迂回されます。

非 VSAM データ・セットの共用

442 z/OS V1R10 DFSMS データ・セットの使用法

Page 467: DFSMS データ・セットの使用法

v アプリケーションが許可されている場合は、データ・セットの動的割り振りを行う。この場合、データ保全処理を迂回させる無データ保全 (NODSI) を指定する。 DYNALLOC マクロの中に NODSI を指定して S99NORES フラグを設定してください。

推奨事項: IFGPSEDI に対する変更が有効となるのは、IFGEDI タスクを再始動した時点です。除外リスト中のデータ・セットのどれかが IFGEDI の始動時にオープンされた場合、この変更は、データ・セットがクローズされてから再オープンされた後で有効となります。

関連資料: 動的割り振りの使用法の詳細については、「z/OS MVS Programming:

Authorized Assembler Services Guide」を参照してください。

データ保全の警告と違反の診断IFGPSEDI の中に MODE(WARN) を指定した場合は、IEC984I と IEC985I が表示されます。 IEC984I と IEC985I のメッセージをモニターして、起こりうる障害について確認してください。メッセージに示されたデータ・セットのデータ保全処理を全般的に迂回させるように決めた場合は、データ・セット名を IFGPSEDI

SYS1.PARMLIB メンバーの中に含めてください。データ・セットが出力時の並行オープンをサポートするアプリケーションにより処理されている場合は、データ保全処理を迂回させるために、そのアプリケーションの変更について検討してください。アプリケーションで並行オープンがサポートされていない場合は、出力時の並行オープンの防止について検討してください。

除外リストが空 (データ・セット名が指定されていない) で、IFGPSEDI にMODE(WARN) または MODE(ENFORCE) が指定されている場合は、すべての順次データ・セットに対してデータ保全処理が行われます。

オープンされているデータ・セットのデータ保全処理を迂回させるために、以下の方法でアプリケーションを設定することができます。

v DCBE マクロの中に DCBEEXPS 除外フラグを指定する。

v ステップ制御ブロックの中に SCTNDSI 除外フラグを指定する。

v S99NORES が指定されているデータ・セットの動的割り振りを行う。この処理により、DSABNODI 除外フラグがデータ・セットに設定されます。

v アプリケーション・プログラムのプログラム・プロパティー・テーブルの中のNODSI フラグを要求する。

関連資料: データ保全処理の警告メッセージと異常終了および SMF レコード・タイプ 14 と 15 のフラグの詳細については、「 z/OS DFSMSdfp Diagnosis」および「 z/OS MVS システム管理機能 (SMF)」を参照してください。

データ保全メッセージ拡張データ保全機能は複数のアプリケーションによる同じ順次データ・セットの並行したオープンまたは更新を防止するように設計されていますが、データ保全処理では、警告モード時あるいはデータ・セットが保護の対象から除外されている場合には、時たまの違反が見逃されることがあります。例えば、2 つのアプリケーションで警告モードの時に入力または出力のために同じデータ・セットのオープンとクローズが繰り返されるものとします。この場合、データ保全処理ではオープンとク

非 VSAM データ・セットの共用

第 23 章 非 VSAM データ・セットの共用 443

Page 468: DFSMS データ・セットの使用法

ローズの順序にもよりますが、違反が見逃されることもあります。アプリケーションが ENFORCE モードで実行しているときには、このような状態が問題となることはありません。

表 35 には、データ保全機能が使用不可になるときのいろいろな条件およびデータ保全の警告を招くさまざまな条件が示されています。

表 35. データ保全処理のメッセージ

モード 条件 メッセージ SMF レコード 結果

MODE(DISABLE) 拡張データ保全機能がアクティブでない (データ・セット名が拡張データ保全テーブルの中にない場合でも起こる)。

順次データ・セットは出力時に並行してオープンすることができる。

IFGPSEDI がSYS1.PARMLIB の中にない

拡張データ保全機能がアクティブでない。

順次データ・セットは出力時に並行してオープンすることができる。

MODE(WARN) データ・セットが既に出力用にオープンしているときに、そのデータ・セットが入力用にオープンされ、データ・セット名が拡張データ保全テーブルに含まれておらず、アプリケーションで拡張データ保全が迂回されていない場合。

IEC984I SMF タイプ 14

SMF14INO フラグ

データ・セットはオープンされる。

MODE(WARN) データ・セットが既に出力用にオープンしているときに、そのデータ・セットが出力用にオープンされ、データ・セット名が拡張データ保全テーブルに含まれておらず、アプリケーションで拡張データ保全が迂回されていない場合。

IEC984I SMF タイプ 15

SMF14OPO フラグ

データ・セットはオープンされる。

MODE(WARN) データ・セットが出力のためにすでにオープンしているときに、これが入力のためにオープンされた場合、およびデータ・セット名が拡張データ保全テーブルの中にあるか、あるいはアプリケーションで拡張データ保全が迂回されている場合。

IEC985I SMF タイプ 14

SMF14EXT フラグ(EDI テーブルの中にある場合) またはSMF14EPS フラグ(迂回が要求されている場合)

データ・セットはオープンされる。

非 VSAM データ・セットの共用

444 z/OS V1R10 DFSMS データ・セットの使用法

Page 469: DFSMS データ・セットの使用法

表 35. データ保全処理のメッセージ (続き)

モード 条件 メッセージ SMF レコード 結果

MODE(WARN) データ・セットが出力のためにすでにオープンしているときに、これが出力のためにオープンされた場合、およびデータ・セット名が拡張データ保全テーブルの中にあるか、あるいはアプリケーションで拡張データ保全が迂回されている場合。

IEC985I SMF タイプ 15

SMF14EXT フラグ(EDI テーブルの中にある場合) またはSMF14EPS フラグ(迂回が要求されている場合)

データ・セットはオープンされる。

データ保全違反表 36 には、データ保全違反を招くさまざまな条件が示されています。

注: データ・セットが何らかの理由で拡張データ保全処理から除外されている場合、SMF14 および SMF15 レコードでは、最初のデータ・セットのオープンであってもこの事実が反映されます。また、ENFORCE モードでは、SMF14OPO フラグとSFM14INO フラグは、並行オープンに不整合がある (最初のオープンではデータ・セットが除外されておらず、その後のオープンでは除外された) 場合にのみ設定されます。

表 36. データ保全違反を招くさまざまな条件

モード 条件 メッセージまたはSMF レコード

結果

MODE(ENFORCE) データ・セットが出力のためにすでにオープンしているときに、これが出力のためにオープンされた場合、およびデータ・セット名が拡張データ保全テーブルになく、アプリケーションで拡張データ保全が迂回されていない 場合。

ABEND 213-FD 出力時のデータ・セットの 2 回目のオープンが失敗する。

MODE(ENFORCE) データ・セットが出力のためにすでにオープンしているときに、これが入力のためにオープンされた場合、およびデータ・セット名が拡張データ保全テーブルになく、アプリケーションで拡張データ保全が迂回されていない 場合。

SMF タイプ 14

SMF14INO フラグ

入力時のデータ・セットの 2 回目のオープンは可能である。

MODE(ENFORCE) データ・セットが出力のためにすでにオープンしているときに、これが入力のためにオープンされた場合、およびデータ・セット名が拡張データ保全テーブルの中にあるか、あるいはアプリケーションで拡張データ保全が迂回されている場合。

SMF タイプ 14

SMF14EXT フラグ(EDI テーブルの中にある場合)、SMF14EPS フラグ(迂回が要求されている場合)、SMF14INO フラグ

入力時のデータ・セットの 2 回目のオープンは可能である。

非 VSAM データ・セットの共用

第 23 章 非 VSAM データ・セットの共用 445

Page 470: DFSMS データ・セットの使用法

表 36. データ保全違反を招くさまざまな条件 (続き)

モード 条件 メッセージまたはSMF レコード

結果

MODE(ENFORCE) データ・セットが既に出力用にオープンしているときに、そのデータ・セットが出力用にオープンされ、データ・セット名が拡張データ保全テーブルの中にあるか、アプリケーションで拡張データ保全が迂回される場合。

SMF タイプ 15

SMF14EXT

(EDI テーブルの中にある場合)、SMF14EPS フラグ(迂回が要求されている場合)、SMF14OPO フラグ

出力時のデータ・セットの 2 回目のオープンは可能である。

PDSEPDSE の共用方法については、 551ページの『PDSE の共用』を参照してください。

直接データ・セット (BDAM)BDAM を使用して直接データ・セットを共用することについて詳しくは、 680ページの『DCB の共用』を参照してください。

非 VSAM データ・セットの共用

446 z/OS V1R10 DFSMS データ・セットの使用法

Page 471: DFSMS データ・セットの使用法

データ・セットをオープンおよびクローズするときに考慮する事項データ・セットをオープンおよびクローズするときは次の事項を考慮してください。

v 複数の DCB を使用すると、同一 PDSE に対して並行して出力用のオープンを行うことが可能です。

以下の場合を除き、複数の DCB は、同じデータ・セットへの出力用に並行してオープンしていてはなりません。

– PDSE を使用する場合。

– 順次データ・セットを用いて特別に書かれた BSAM、BDAM、または EXCP

プログラムを使用する場合。

v PDSE を除くすべてのデータ・セットについて、並行して、1 つの DCB が入力または更新用にオープンし、1 つが直接アクセス記憶装置上の同じデータ・セットへの出力用にオープンしている場合、入力または更新 DCB は、出力 DCB がデータ・セットを拡張した場合に出力 DCB が書き込んだものを読み取ることができないことがあります。PDSE の場合は、データ・セットが拡張されたことをシステムが動的に判別します。

v 拡張フォーマット・データ・セットが読み取り用にオープンされているとき、OPEN は、書き込みに対する前回の CLOSE の時点でのデータ・セット内のブロック数を判別します。 DCB の読み取りのために PASTEOD=YES を指定したDCBE を提供していない限り、読み取りのためのオープンの後に追加されたデータは検索されません。これは、読み取りの前に設定する必要があります。 QSAM

では、DCB OPEN 出口ルーチンの完了の前に PASTEOD=YES と設定し、システムがそれを認識するようにする必要があります。

v 複数の DCB に同じ DD ステートメントを使用したい場合、最初の DCB 内のフィールドに対してパラメーターを指定して、同じ DD ステートメントを使用する他の DCB 内の同じフィールドに対してデフォルトのパラメーターを入手することはできません。これは、入力と出力の両方について真であり、複数のアクセス方式を使用しているときは特に重要です。JFCB を変更する 1 つの DCB でのアクションは、他の DCB に影響を及ぼし、予測不能な結果を発生させることがあります。したがって、1 つの DD ステートメントを使用するすべての DCB のパラメーターが同じでない限り、個別の DD ステートメントを使用する必要があります。

v IBM 3525 カード・パンチ用の関連付けられたデータ・セットは、任意の順序でオープンすることができますが、処理が開始される前にすべてのデータ・セットをオープンする必要があります。 関連付けられたデータ・セットは任意の順序でクローズすることができますが、データ・セットがクローズされた後は、関連付けられたどのデータ・セットでも入出力操作を実行することができません。

v OPEN マクロは、OPEN マクロが発行された記憶保護キーでユーザー制御ブロックおよびユーザー・ストレージを入手します。したがって、DCB を処理するタスク (Open、Close、または EOV) は、同じ記憶保護キーにある必要があります。

非 VSAM データ・セットの共用

第 23 章 非 VSAM データ・セットの共用 447

Page 472: DFSMS データ・セットの使用法

共用 DASD ボリュームでのチェックポイント・データ・セットの制御チェックポイント・データ・セットは、順次データ・セット、PDS、または VSAM

拡張フォーマット・データ・セットにすることができますが、順次拡張フォーマット・データ・セット、PDSE、または UNIX ファイルにすることはできません。

アプリケーション・プログラムにチェックポイントがある場合、システムは、チェックポイント・データ・セットにあるプログラムの状況に関する情報を記録します。チェックポイント・データ・セットには、システム・データが含まれています。このデータの保全性を保証するために、チェックポイント・データ・セットは、デフォルトでは、非共用 DASD およびテープ・ボリュームでのみ許可されます。ユーザーがチェックポイント・データ・セット (ユーザーが所有するものであっても) を読み取ることができたとすると、ユーザーは、ユーザーが読み取ることが許可されていない情報を見ることができることになります。ユーザーがチェックポイント・データ・セット (ユーザーが所有するものを含む) を変更することができるとしたら、ユーザーはそれを使用して、システム内のすべてのセキュリティーおよび保全性チェックを迂回することができることになります。

複数のシステムにわたってデータ・セット保全性を保証するシステムでは、RACF

ファシリティー・クラス「IHJ.CHKPT.volser」を通して共用 DASD にチェックポイントを作成することが許可されています。ここで、「volser」は、チェックポイント・データ・セットを入れるボリュームのボリューム通し番号です。 複数のシステムにわたるデータ・セット保全性は、多重システムのグローバル・リソースの逐次化 (GRS) または同等の機能を使用して、大分類名「SYSDSN」、小分類名「データ・セット名」におけるエンキューがグローバル・リソース (複合システム内のすべてのシステムにわたって伝達されます) として取り扱われるときに提供されます。

チェックポイント・データ・セットが共用 DASD の上にある場合、DFSMS は、チェックポイント中に IHJ.CHKPT.volser のファシリティー・クラス・プロファイルに対する許可を要求する SAF RACROUTE マクロを発行します (「volser」は、チェックポイント・データ・セットがあるボリューム通し番号です)。

システム・プログラマーが、共用 DASD ボリューム上のデータ・セット保全性を保証することができない場合、システム・プログラマーはそれ以上のアクションを取る必要はありません (たとえば、IHJ.CHKPT.volser を扱う RACF にはプロファイルを定義しないでください)。 共用 DASD ボリューム上にはチェックポイントを指定することができません。

データ・セット保全性がすべての共用 DASD ボリューム上で保証され、システム・プログラマーがこれらのボリュームのどれかの上にチェックポイントを指定させたい場合、READ の UACC を指定して IHJ.CHKPT.* の名前を持つファシリティー・クラス総称プロファイルをビルドします。

一部のボリュームでデータ・セット保全性が保証されない場合は、これらのボリュームのそれぞれについて NONE の UACC を持つ IHJ.CHKPT.volser のプロファイル名が付いた離散的プロファイルをビルドします。これらの「ボリューム固有の」プロファイルは、共用 DASD ボリュームでのチェックポイントを許可するために上記の総称プロファイルに追加されるものです。総称プロファイルではデータ・セット保全性が保証されています。

非 VSAM データ・セットの共用

448 z/OS V1R10 DFSMS データ・セットの使用法

Page 473: DFSMS データ・セットの使用法

システム・プログラマーが、一部 (全部ではありません) のユーザーに、ボリューム上にチェックポイントを作成させたい場合は、NONE の UACC を指定して総称プロファイルをビルドし、それらの特定のユーザーまたはユーザーのグループにのみREAD アクセスを許可します。

チェックポイント・データ・セットにある情報には、アプリケーションが各オープン・データ・セットを現在読み取っているか、書き込んでいるディスクまたはテープのロケーションが含まれます。チェックポイントの時点でオープンしているデータ・セットが再始動する前に別のロケーションに移動される場合、チェックポイント/再始動によって記録されたロケーション依存情報はもはや有効ではないので、アプリケーションをチェックポイントから再始動することはできません。

所有者が特に要求しなくてもデータ・セットを自動的に移動することができるいくつかのシステム機能 (たとえば、DFSMShsm または DFSMSdss) があります。 すべてのチェックポイント・データ・セットが再始動に使用可能なままでいるようにするため、チェックポイント機能は、チェックポイント中にオープンしている各 SMS

管理順次データ・セットに移動不能属性を設定します。例外は、移動不能属性を要求しない、実際の記録されたチェックポイント情報を含むデータ・セット (チェックポイント・データ・セット) です。

再始動を実行するためにチェックポイントを指定されたデータ・セットがもはや必要でないときは、それらを移動することができます。DFSMShsm および DFSMSdss

FORCECP(days) によって、最後のアクセス以降の日数に基づいて SMS 管理順次データ・セットを移動するためのマイグレーション、コピー、またはデフラグなどの操作を使用することができます。 DFSMShsm 再呼び出し、および DFSMSdss 復元とコピーは、ターゲット・データ・セットについての移動不能属性をオフにする操作です。

RACF コマンドについては、「z/OS Security Server RACF コマンド言語 解説書」を、RACF オプションの使用および計画については、「z/OS Security Server RACF

セキュリティー管理者のガイド」を参照してください。

RACF または同等の製品がない場合、システム・プログラマーは、SAF によって呼び出され、上記の機能を実行するために使用できる MVS ルーター出口を書くことができます。 この出口の作成方法については、「z/OS MVS Programming:

Authorized Assembler Services Guide」を参照してください。

入力操作用の検索ダイレクトのシステム使用DASD 上のデータ・セットに必要とされる入力操作を早めるために、オペレーティング・システムは、そのチャネル・プログラムで検索ダイレクトと呼ばれる技法を使用します。検索ダイレクトは、要求されたレコードおよび次のレコードのカウント・フィールドを読み取ります。これによって、操作は次のレコードを、それに後続するレコードのカウント・フィールドとともに入手することができます。検索ダイレクト (OPTCD=Z) は、廃止された DCB マクロおよび DD ステートメント・オプションです。現在、システムは一般にこの技法を順次読み取りに使用しています。

データ・セットを共用しているときは、検索ダイレクトの制約事項を考慮する必要があります。複数の DCB がオープンしており、データ・セットが共用されてお

非 VSAM データ・セットの共用

第 23 章 非 VSAM データ・セットの共用 449

Page 474: DFSMS データ・セットの使用法

り、アプリケーションの 1 つがレコードを追加しているときは、検索ダイレクトは、予測不能な結果を生じさせることがあります。間違ったレコードを入手する可能性があります。また、ご使用のアプリケーションが検索ダイレクトの使用と矛盾する依存性を持つ場合は、予測不能な結果を受け取ることがあります。

非 VSAM データ・セットの共用

450 z/OS V1R10 DFSMS データ・セットの使用法

Page 475: DFSMS データ・セットの使用法

第 24 章 データ・セットのスプーリングおよびスケジューリング

この章では以下のトピックを扱います。

トピック 該当ページ

ジョブ入力サブシステム 451

SYSIN データ・セット 452

SYSOUT データ・セット 453

スプーリングには、次の 2 つの基本機能が含まれます。

v 入力ストリームは、入力装置から読み取られ、後でシステムおよびユーザーのプログラムが処理するのに都合がよいフォーマットで中間記憶装置に保管されます。

v 出力ストリームは、印刷、パンチ、TSO/E ユーザーによる処理、またはネットワークを通じての別のシステムへの送信まで、同様に中間装置に保管されます。

スプーリングでは、十分なバッファーが使用可能な場合は、ユニット・レコード装置はフルスピードで使用されます。これらは、データの読み取り、印刷、またはパンチに必要な時間の間のみに使用されます。スプーリングを使用しないと、装置はジョブが処理するのにかかる全時間の間占有されます。また、データは直接伝送されるのではなく、保管されるので、出力は任意の順序でキューに入れられ、クラス別、および各クラス内の優先順位に応じてスケジュールされます。

スケジューリングは、競合のオブジェクトであるシステム・リソースを整然と使用することによって最高度のシステム可用性を提供します。

ジョブ入力サブシステムジョブ入力サブシステム (JES) は、入力および出力データ・ストリームをスプールおよびスケジュールします。これは、システム操作を最良に利用するためにデータのブロック化およびブロック化解除を制御します。BSAM NCP 値は、アクセス方式に影響を及ぼしますが、 1 より大きな値は、パフォーマンスを改善しません。NCP

は、他のデータ・セットとの互換性のためにサポートされます。プログラムで指定されるブロック・サイズ (BLKSIZE) およびバッファー数 (BUFNO) は、ジョブ入力サブシステムによって実際に使用されるものと関係がありません。したがって、システムのスプーリング効率に影響を与えない、ご使用のアプリケーション・プログラムに最もよく合ったブロック化因数を選択することができます。QSAM アプリケーションでは、移動モードは位置指定モードと同様に効率的です。

SYSIN および SYSOUT データ・セットは、システム管理できません。SYSIN および SYSOUT は、 BSAM または QSAM データ・セットでなければならず、それらはユニット・レコード装置で処理される他のデータ・セットと同じ方法でオープンおよびクローズできます。SYSIN および SYSOUT データ・セットは中間装置にスプールされるので、これらのデータ・セットを処理する際には、装置依存のマクロ(FEOV、CNTRL、PRTOV、または BSP など) を使用するのは避ける必要がありま

© Copyright IBM Corp. 1987, 2008 451

Page 476: DFSMS データ・セットの使用法

す。 469ページの『装置独立性の実現』を参照してください。PRTOV を使用できますが、それは効果を持ちません。SYSIN および SYSOUT パラメーターについて詳しくは、「z/OS MVS JCL ユーザーズ・ガイド」および「z/OS MVS JCL 解説書」を参照してください。中間記憶装置への、または中間記憶装置からのデータ伝送中にエラーが発生すると、SYNAD ルーチンに入ります。もう一度繰り返しますが、特定の装置は中間にあるため、SYNAD ルーチン・コードは、装置から独立している必要があります。出口リストで DCB オープン出口ルーチンを指定する場合は、通常の方法でそのルーチンに入ります。DCB 出口リストのフォーマットについては631ページの『DCB 出口リスト』を、 DCB オープン出口ルーチンについては640ページの『DCB OPEN 出口』を参照してください。

SYSIN データ・セットデータをシステム入力ストリームに入れるには、その前に DD * または DD DATA

JCL ステートメントを置きます。これは SYSIN データ・セットと呼ばれます。DD

名は必ずしも SYSIN ではありません。

SYSIN データ・セットは、同時に複数の DCB によってオープンすることはできません。そのような場合は S013 ABEND が出されることになります。

SYSIN データ・セットに対してレコード・フォーマットが指定されていない場合、固定のレコード・フォーマットが提供されます。スパン・レコード (RECFM=VS または VBS) は、SYSIN には指定できません。

SYSIN の最小レコード長は 80 バイトです。不定形式レコードの場合、 80 バイトのイメージ全体がレコードとして扱われます。したがって、80 バイトより少ない読み取りでは、80 バイトのイメージ全体が READ マクロに指定されるレコードに転写されることになります。固定長および可変長レコードでは、LRECL が 80 バイトより短い場合は、 ABEND が出されます。

SYSIN の論理レコード長値 (JFCB 内の JFCLRECL フィールド) は、入力データ・セットの論理レコード長値とともに入力されます。レコード・フォーマットが可変である場合 (RECFM=V または VB)、論理レコード長値は、4 だけ大きくされます。

SYSIN 入力ストリームが内部読み取りプログラムによって提供される場合、論理レコード長は、入力装置のサイズ以外のサイズにすることができます。JFCB のJFCLRECL フィールドがゼロであることが検出される場合は、JES がそのフィールドの値を提供します。

ブロック・サイズ値 (JFCB にある JFCBLKSI フィールド) には、入力データ・セットのブロック・サイズ値が入力されます。レコード・フォーマットが可変である場合 (RECFM=V または VB)、このブロック・サイズ値は、4 だけ大きくされます。 JFCB の JFCBLKSI フィールドがゼロであることが検出される場合は、JES

がそのフィールドの値を提供します。

データ・セットのスプーリングおよびスケジューリング

452 z/OS V1R10 DFSMS データ・セットの使用法

Page 477: DFSMS データ・セットの使用法

SYSOUT データ・セット出力データは、SYSOUT データ・セットと呼ばれる出力ストリームから印刷またはパンチすることができます。DD ステートメントで SYSOUT パラメーターをコーディングするか、適切な出力クラスを指定します。たとえば、SYSOUT=A は出力クラス A を要求します。ご使用のシステムは、クラスと装置の関係を確立します。各出力クラスに割り当てられる装置のリストによって、適切なものを選択することができます。

JES は、同じ SYSOUT データ・セットへの複数のオープンを許可し、レコードは散在させられます。ただし、アプリケーションがデータ・セットをシリアライズするか確認する必要があります。逐次化について詳しくは、 435ページの『第 23 章非 VSAM データ・セットの共用』を参照してください。

特定のデータ制御ブロック・オープンからクローズまで、制御文字の存在またはタイプの DCB 標識を変更してはなりません。ディスクまたはテープに送信されたとき、すべての DCB は、特定のデータ・セットについて制御文字と同じタイプを持つ必要があります。SYSOUT データ・セットでは、DCB は制御文字のタイプを持つか何も持たないことができます。結果は、データ・セットの最終宛先によって異なります。ローカル・プリンターまたはパンチでは、各レコードはその制御文字に従って処理されます。

固定長ブロック・レコードを持つ QSAM または BSAM を使用する場合、SYSOUT

DD ステートメントでブロック・サイズが指定されない場合、 DCB ブロック・サイズ・パラメーターは論理レコード長 (LRECL) の倍数である必要はありません。これらの条件のもとで、ブロック・サイズが LRECL より大きいが、その倍数ではない場合、データ・セットがオープンされるときに、ブロック・サイズは、LRECL

の倍数のうち最も近い低い方の倍数に切り下げられます。

LRECL がシステムにとって実行までは不明である場合であっても、SYSOUT データ・セットのブロック化を指定することができます。したがって、コンパイル・ロード・実行プロシージャーの実行ステップの SYSOUT DD ステートメントは、ブロック・サイズが LRECL の倍数でない場合でもブロック・サイズを指定することができます。

DCB マクロで DEVD パラメーターを省略する必要があるか、DEVD=DA をコーディングする必要があります。

SETPRT マクロを使用して、SYSOUT データ・セットの属性およびスケジューリングに影響を及ぼすことができます。

プログラムは、印刷書式、ページ付け、ヘッダー制御機構、およびスタッカー選別を担当します。SYSOUT データ・セットの制御文字は、通常の方法で ANSI またはDCB でのマシン文字を指定することによって提供することができます。標準の制御は、それらが明示的に指定されていない場合は、デフォルトによって提供されます。出力レコードの長さは、最終的な装置について許容最大長を超えてはなりません。カードは EBCDIC モードでのみパンチされます。

SYSOUT データ・セット用のテーブル参照文字 (TRC) は、DCB で OPTCD=J と指定することにより提供することができます。データ・セットが印刷されるとき、プリンターが TRC をサポートしていない場合は、システムがそれらを破棄します。

データ・セットのスプーリングおよびスケジューリング

第 24 章 データ・セットのスプーリングおよびスケジューリング 453

Page 478: DFSMS データ・セットの使用法

382ページの『処理方法のコーディング』のもとで『SYSIN、SYSOUT、およびシステム・データ・セット』を参照してください。

データ・セットのスプーリングおよびスケジューリング

454 z/OS V1R10 DFSMS データ・セットの使用法

Page 479: DFSMS データ・セットの使用法

第 25 章 順次データ・セットの処理

この章では以下のトピックを扱います。

トピック 該当ページ

順次データ・セットの作成 455

順次データ・セットの検索 457

データ・セットの順次連結 458

順次データ・セットの変更 467

装置独立性の実現 469

順次データ・セットのパフォーマンスの改善 471

BSAM、BPAM、または BDAM での読み取り時のブロックの長さの決定 475

BSAM または BPAM での短いフォーマット FB ブロックの書き込み 477

拡張フォーマット順次データ・セットの処理 478

ラージ・フォーマット・データ・セットの処理 484

すべての磁気テープ・デバイス、パンチ・カード、および印刷出力には、順次データ・セットを使用する必要があります。DASD にあるデータ・セットは、編成とは無関係に、順次に処理することができます。

順次データ・セットの作成QSAM または BSAM を使用して、順次データ・セットのレコードを保管および検索します。磁気テープまたは DASD で順次データ・セットを作成するには、以下の処置を講じてください。

1. DCB マクロに DSORG=PS または PSU をコーディングします。

2. 次のいずれかを行います。

v データ・セットを記述するために DD ステートメントをコーディングします。「z/OS MVS JCL 解説書」を参照してください。ご使用のシステムにSMS がインプリメントされている場合、DD ステートメントでデータ・クラスを指定するか、ACS ルーチンにデータ・クラスを割り当てさせることができます。

v TSO またはアクセス方式サービス・プログラム ALLOCATE コマンドを使用して、データ・セットを作成します。z/OS DFSMS Access Method Services for

Catalogsを参照してください。ご使用のシステムに SMS がインプリメントされている場合、 DATACLAS パラメーターを指定するか、ACS ルーチンにデータ・クラスを割り当てさせることができます。

v プログラムから動的割り振り (SVC 99) を呼び出します。「z/OS MVS

Programming: Authorized Assembler Services Guide」を参照してください。ご使用のシステムに SMS がインプリメントされている場合、データ・クラス・テキスト・ユニットを指定するか、ACS ルーチンにデータ・クラスを割り当てさせることができます。

© Copyright IBM Corp. 1987, 2008 455

Page 480: DFSMS データ・セットの使用法

3. 必要に応じて、データ・クラスを使用して、データ属性の単純化および標準化を行います。システム管理されているデータ・セットまたはシステム管理されていないデータ・セットについてデータ・クラスを利用することができます。

4. OPEN マクロ (データ・セットは OUTPUT、OUTIN、OUTINX、またはEXTEND に対してオープンされています)、一連の PUT または WRITE およびCHECK マクロ、および CLOSE マクロを使用してデータ・セットを処理します。

図 67 にある例は、GET-移動および PUT-移動がデータ・レコードの 2 つの移動を必要としていることを示しています。

レコード長 (LRECL) が処理中に変化しないが、1 つの移動のみが必要な場合、入力バッファー・セグメントにあるレコードを処理することができます。GET-位置指定は、現行のセグメントに対するポインターを提供します。

関連資料: 詳しくは、 414ページの『アプリケーションでの QSAM』を参照してください。

DASD 順次データ・セットのタイプDASD には、3 つのタイプの順次データ・セットがあります。DD ステートメントまたは同等の動的割り振りで DSNTYPE をコーディングする、DSNTYPE を持っているデータ・クラスを使用する、または LIKE パラメーターを使用することでタイプを選択することができます。 これらのデータ・セットのタイプは、PDS メンバー、PDSE メンバー、および UNIX ファイルとは別のものです。表 37 に、順次データ・セットのタイプと、その特性や利点が要約されています。

表 37. DASD 上の順次データ・セットのタイプ - 特性と利点

基本フォーマットラージ・フォーマット 拡張フォーマット

DSNTYPE BASIC LARGE EXTREQ (必須) または EXTPREF (推奨)

OPEN (INDATA,,OUTDATA,(OUTPUT))NEXTREC GET INDATA,WORKAREA Move mode

AP NUMBER,=P’1’UNPK COUNT,NUMBER Record count adds 6OI COUNT+5,X’F0’ Set zone bitsPUT OUTDATA,COUNT bytes to each recordB NEXTREC

ENDJOB CLOSE (INDATA,,OUTDATA)...

COUNT DS CL6WORKAREA DS CL50NUMBER DC PL4’0’SAVE14 DS FINDATA DCB DDNAME=INPUTDD,DSORG=PS,MACRF=(GM),EODAD=ENDJOB, X

LRECL=50,RECFM=FBOUTDATA DCB DDNAME=OUTPUTDD,DSORG=PS,MACRF=(PM), X

LRECL=56,RECFM=FB...

図 67. 順次データ・セットの作成 ― 移動モード、単純バッファー方式

順次データ・セットの処理

456 z/OS V1R10 DFSMS データ・セットの使用法

Page 481: DFSMS データ・セットの使用法

表 37. DASD 上の順次データ・セットのタイプ - 特性と利点 (続き)

基本フォーマットラージ・フォーマット 拡張フォーマット

ボリューム上の最大トラック数

65 535 最大 DASD ボリューム上でできるだけ多く

最大 DASD ボリューム上でできるだけ多く

ボリューム上の最大エクステント数

16 16 123

利点 最大の互換性。EXCP、 BDAM、SMS、および非 SMS

が可能。

基本フォーマットよりもずっと大きい。EXCP、 SMS、および非 SMS が可能。

基本フォーマットよりもずっと大きい。ストライピングされたフォーマット、圧縮フォーマットが可能。またはどのような組み合わせも可能。

順次データ・セットの検索磁気テープ、DASD、または他のタイプの装置からの順次データ・セットを検索するには、以下の処置を講じてください。

1. DCB マクロに DSORG=PS または PSU をコーディングします。

2. システムにデータ・セットがどこに位置しているかを (DD ステートメントをコーディングすることによって、または動的割り振りを呼び出すことによって(TSO ALLOCATE コマンドまたは SVC 99)) 知らせます。

3. OPEN マクロ (データ・セットは入力、INOUT、RDBACK、または UPDAT 用にオープンされています)、一連の GET または READ マクロ、および CLOSE

マクロを使用してデータ・セットを処理します。

458ページの図 68 にある例は、 456ページの図 67 にあるものに類似しています。ただし、レコード長には変更がないので、レコードは入力バッファー内で処理することができます。各データ・レコードの 1 つの移動のみが必要です。

関連資料: 詳しくは、 414ページの『アプリケーションでの QSAM』を参照してください。

順次データ・セットの処理

第 25 章 順次データ・セットの処理 457

|

Page 482: DFSMS データ・セットの使用法

データ・セットの順次連結複数のデータ・セットを、システムによって検索し、単一の順次データ・セットとして連続して処理することができます。これは、順次連結 と呼ばれます。順次連結を使用して連結できるデータ・セットの数は可変です。これは、TIOT オプションの最大サイズによって決まります。システム・プログラマーは、 SYS1.PARMLIB のオプション ALLOCxx メンバーを使用して TIOT サイズを制御します。最小 TIOT

値は、819 の単一ユニット DD ステートメントまたは最大ユニット数をもつ 64 のDD ステートメントを許可します。 z/OS MVS 初期設定およびチューニング 解説書を参照してください。データ・セットが順次連結される場合、ご使用のプログラムは一度にデータ・セットのうち 1 つにのみオープンしています。連結データ・セットは、逆方向に読み取ることはできません。

順次連結には、順次データ・セット、PDS メンバー、PDSE メンバー、およびUNIX ファイルを組み込むことができます。 順次連結では、システムは PDS、PDSE、または UNIX のメンバーをそれが順次データ・セットであるかのように扱います。 システムは、ストライピング拡張フォーマット・データ・セットをそれが単一ボリュームのデータ・セットであるかのように扱います。

注: VSAM データ・セットを連結することはできません。

データ・セットの終わり (EODAD) 処理。 1 つのデータ・セットから別のものへの変更が加えられたとき、必要に応じてラベル出口が取られます。自動ボリューム切り替えは、マルチボリューム・データ・セットについても実行されます。プログラムがデータ・セットの終わりを過ぎて読み取られるとき、制御がデータ・セットの終わり (EODAD) ルーチンに渡されるのは、連結内の最後のデータ・セットが処理された場合のみです。

テープ・ボリュームでの連続データ・セット。 単一のテープ・ボリューム上で 2

つの連続する順次データ・セットを処理するときに時間を節約するには、他の方法では DISP=(OLD,KEEP) をコーディングするような場合であっても、 OPEN マクロで LEAVE と指定するか、DD ステートメントで DISP=(OLD,PASS) と指定します。

....OPEN (INDATA,,OUTDATA,(OUTPUT),ERRORDCB,(OUTPUT))

NEXTREC GET INDATA Locate modeLR 2,1 Save pointerAP NUMBER,=P’1’UNPK 0(6,2),NUMBER Process in input areaPUT OUTDATA Locate modeMVC 0(50,1),0(2) Move record to output bufferB NEXTREC

ENDJOB CLOSE (INDATA,,OUTDATA,,ERRORDCB)...

NUMBER DC PL4’0’INDATA DCB DDNAME=INPUTDD,DSORG=PS,MACRF=(GL),EODAD=ENDJOBOUTDATA DCB DDNAME=OUTPUTDD,DSORG=PS,MACRF=(PL)ERRORDCB DCB DDNAME=SYSOUTDD,DSORG=PS,MACRF=(PM),RECFM=V, C

BLKSIZE=128,LRECL=124SAVE2 DS F

...

図 68. 順次データ・セットの検索 ― 位置指定モード、単純バッファー方式

順次データ・セットの処理

458 z/OS V1R10 DFSMS データ・セットの使用法

Page 483: DFSMS データ・セットの使用法

ディレクトリーの読み取り。 BSAM を使用して PDS および PDSE ディレクトリーを読み取ることができます。BPAM を使用して UNIX ディレクトリーとファイルを読み取ることができます。詳しくは、 567ページの『第 28 章 z/OS UNIX ファイルの処理』を参照してください。

制約事項: BSAM または QSAM を使用して UNIX ディレクトリーを読み取ることはできません。

類似データ・セットの連結連結は、一連の類似 または非類似 データ・セットの処理とみなすことができます。システムは、連続データ・セット間の各遷移を類似 または非類似 であるとみなします。このシーケンス内の類似遷移は、プログラムがデータ・セットを非類似とみなすためにシステムに通知せずに正しく処理することができる遷移です。たとえば、異なるレコード・フォーマットを持つデータ・セットは、データが異なるレコード・フォーマットの要件を満たしていない限り、非類似 として連結する必要があります。たとえば、すべてのフォーマット V レコードが同じ長さである場合、読み取るときにフォーマット F を指定することができます。フォーマット U を指定すると、どのフォーマットも読み取ることができます。

遷移の中のどちらかのデータ・セットがシステム管理されている場合は、その遷移を類似 とみなすことができます。ただし、両方のデータ・セットがすべての類似連結規則を満たしていることを確認する必要があります。そうでないと、予測不能な結果が生じることがあります (たとえば、OPEN ABEND)。

プログラムは、ビット DCBOFPPC を設定することにより、システムがデータ・セットを類似 または非類似 のどちらとして扱うのかを示します。DCB マクロはこのビットを 0 としてアセンブルします。これは、類似 データ・セットを示しています。 464ページの『非類似データ・セットの連結』を参照してください。

順次類似データ・セットの規則類似 データ・セットであるためには、順次データ・セットは、次の条件をすべて満たしている必要があります。

v 連結にあるすべてのデータ・セットは、互換性があるレコード・フォーマットを持つ必要があります。それらはすべて、連結にある最初のデータ・セットのレコード・フォーマットを使用して処理されます ( 461ページの『DCB および DCBE

フィールドの永続性』を参照してください)。たとえば、非ブロック・レコードを持つデータ・セットは、短ブロック・レコードをもつものとして処理できます。固定ブロック標準レコード (フォーマット FBS) を持つデータ・セットは、単に固定ブロック・レコード (フォーマット FB) をもつものとして処理することができますが、その逆はうまくいきません。

互換性のあるレコード・フォーマットは、類似 処理が成功することを保証しているわけではありません。たとえば、連結にある最初のデータ・セットのレコード・フォーマットが固定 (フォーマット F) であり、連結データ・セットが固定ブロック・レコード (フォーマット FB) を持つ場合は、入出力エラーまたはオープン ABEND などの予測不能な結果が発生することがありますが、その逆はうまくいくはずです。

順次データ・セットの処理

第 25 章 順次データ・セットの処理 459

Page 484: DFSMS データ・セットの使用法

異なる特性のデータ・セットを連結した結果は、実際のデータ・レコード・サイズおよびデータ・セットがシステム管理されているかどうかにも依存しています。たとえば、最初のデータ・セットが BLKSIZE および LRECL が 80 のフォーマット F であり、 2 番目のデータ・セットが BLKSIZE が 800 で LRECL

が 80 のフォーマット FB であり、 2 番目のデータ・セットがシステム管理されておらず、2 番目のデータ・セット内のすべてのブロックの実際のデータ・サイズが 80 バイトである場合、2 つの連結データ・セットをうまく処理することができます。ただし、ブロックの実際のデータ・サイズが 80 バイトより大きい場合、システムが 2 番目のデータ・セットからそのレコードを読み取るときに入出力エラーが発生します。あるいは、SMS が 2 番目のデータ・セットを管理する場合、システムは最初のデータ・セットからのデータを処理します。ただし、すべてのレコードの実際のデータ・サイズが互換性がある場合であっても、EOV

が連結データ・セットに切り替えるときに、オープン障害 (ABEND 013-60) が発生します。

連結で非互換レコード・フォーマットが検出され、BSAM が使用されている場合、システムは警告メッセージを出します。 462ページの『類似連結を持つBSAM ブロック・サイズ』を参照してください。

v LRECL が、先行するデータ・セットの LRECL と同じです。フォーマット V または VB レコードでは、新規データ・セットは、DCB より小さな LRECL を持つことができます。

v すべてのデータ・セット・ブロック・サイズは、互換性がなければなりません。フォーマット F または FB レコードでは、各ブロック・サイズは、同じ LRECL

値の整数倍でなければなりません。

v DCB または DCBE マクロで、または最初の DD ステートメントで BLKSIZE

パラメーターをコーディングする場合、各データ・セットのブロック・サイズは、そのブロック・サイズより小か等しくなければなりません。

注: 最初のデータ・セットの後にデータ・セットを割り振っているときに、BLKSIZE、LRECL、または BUFNO などの DCB パラメーターを指定する場合、 462ページの『類似連結を持つ BSAM ブロック・サイズ』に説明されている場合を除き、プログラムが類似 連結を使用しているときは、それらは効果を持ちません。

最初のデータ・セットには大きな BLKSIZE を指定して、あとでそのサイズのブロックを持つデータ・セットを収容することができます。

v QSAM または BSAM によってアクセスされる DASD データ・セットは、任意の順序のブロック・サイズで連結することができます。QSAM を使用している場合は、データ・セットにシステム生成バッファーを使用する必要があります。各システム作成バッファーのサイズは、 8 の倍数に切り上げたブロック・サイズに等しくなります。QSAM では、次のデータ・セットの BLKSIZE がバッファーより大きくない限り、連結にあるすべてのデータ・セットを処理するのに、システム生成バッファーが使用されます。その場合、バッファーはボリュームの終わり処理によって解放され、新規システム生成バッファーが入手されます。これは、GET によって戻されるバッファー・アドレスは、次の GET または FEOV が発行されるまでしか有効であることが保証されないことも意味します。バッファー・プールが解放されていることがあり、ボリュームの終わり連結処理中に新規システム生成バッファー・プールが入手されることがあるからです。システム管

順次データ・セットの処理

460 z/OS V1R10 DFSMS データ・セットの使用法

Page 485: DFSMS データ・セットの使用法

理データ・セット処理については、 462ページの『類似連結を持つ SMS 管理データ・セット』を参照してください。BSAM 処理については、 462ページの『類似連結を持つ BSAM ブロック・サイズ』を参照してください。

v QSAM では、最初のデータ・セットの後のデータ・セットが磁気テープ上にあり、前のすべての指定より大きいブロック・サイズを持つ場合、ボリュームにIBM または ISO/ANSI 標準テープ・ラベルが付いている必要があるか、BLKSIZE が DD ステートメントで指定されている必要があります。

v BSAM では、最初のデータ・セットの後のデータ・セットが磁気テープ上にあり、前のすべての指定より大きいブロック・サイズを持つ場合、BLKSIZE が DD

ステートメントで指定されている必要があります。

v 装置は、先行するデータ・セットの装置と同様に、DASD、テープ、またはSYSIN 装置です。たとえば、テープ・データ・セットを DASD データ・セットに、あるいは DASD データ・セットをテープ・データ・セットに連結することができます。ただし、テープ・データ・セットをカード読取装置に連結することはできません。

補足事項: 拡張フォーマット順次データ・セットは、順次データ・セットと同じ特性を持つものとみなしてください。

v テープと DASD が混在している場合は、POINT または CNTRL マクロは使用されません。

関連資料: 詳しくは、 589ページの『UNIX ファイルおよびディレクトリーの連結』 および 482ページの『拡張フォーマット・データ・セットと他のデータ・セットとの連結』 を参照してください。

OPEN/EOV 終了処理プログラムが DCB OPEN 出口を持つ場合、これは最初のデータ・セットの先頭でしか呼び出されません。

類似 連結では、プログラムがボリュームの終わり出口を持つ場合、最初のデータ・セットの最初のボリュームを除き、各データ・セットの各ボリュームの先頭でそれが呼び出されます。データ・セットのタイプがボリュームを持たない場合、システムはそれを 1 つのボリュームを持っているものとして扱います。

DCB および DCBE フィールドの永続性OPEN の完了と類似 連結を持つ CLOSE の完了の間で、システムは、データ属性を表す特定の DCB または DCBE フィールドを変更することができます。プログラムおよびシステムは、次の属性フィールドを変更しません。v RECFM

v BSAM でのフォーマット F および QSAM XLRI での LRECL

v BSAM での BLKSIZE (プログラムはこれを変更できます)

v KEYLEN

v NCP または BUFNO

類似 連結では、別のデータ・セットに切り替えるときに、システムは次のものを変更することができます。v QSAM での BLKSIZE および BUFL

v DCB でのフィールド DCBDEVT (装置タイプ)

順次データ・セットの処理

第 25 章 順次データ・セットの処理 461

Page 486: DFSMS データ・セットの使用法

v TRTCH (テープ記録技法)

v DEN (テープ密度)

XLRI を指定する場合を除き、フォーマット V、フォーマット D、またはフォーマット U レコードを読み取っているときに、連結がある場合もない場合も、システムは、各 QSAM GET マクロごとに DCB で LRECL を設定します。GET は、OPEN

の完了時の LRECL より長いレコードを検出すると、ABEND を出します。

プログラムが類似 連結を示し (DCBOFPPC について特別なアクションを取らずに)、類似 連結規則の 1 つが破られる場合、結果は予測不能です。典型的な結果は、入出力エラーであり、ABEND が出されたり、または SYNAD ルーチンに入ります。プログラムは、正しく実行されるように見えることもあります。

類似連結を持つ SMS 管理データ・セットSMS 管理データ・セットが連結されている場合、システムはデータ・セット間の遷移のために追加の処理を行います。これには、データ・セット属性の追加の検査が含まれます。この結果、ユーザー・プログラムが発行した OPEN の正常終了の後にOPEN が ABEND を出すことがあります。類似 連結要件の違反は、次の連結データ・セットのオープン中に ABEND を発生させることがあります。

QSAM でのオープン・ルーチンが自動的にバッファー・プールを入手する場合、データ・セット遷移プロセスがバッファー・プールを解放し、次の連結データ・セット用の新規バッファー・プールを入手することがあります。GET が戻すバッファー・アドレスは、次の GET または FEOV マクロが実行されるまでしか有効でありません。遷移プロセスは、バッファー・プールを解放し、ボリュームの終わり連結処理中に新規のシステム生成バッファー・プールを入手します。RMODE31=BUFF

をコーディングしなかった限り、プロシージャーは最後の連結データ・セットについてバッファー・プールを解放しません。RMODE31=BUFF をコーディングした場合を除き、DCB を再オープン使用とする前に、システム生成バッファー・プールも解放する必要があります。

類似連結を持つ BSAM ブロック・サイズBSAM OPEN が、データ・セット特性をラベルから JFCB および DCB またはDCBE にマージした後で、それが DCB OPEN 出口ルーチンを呼び出す前に、OPEN は、後続の DD ステートメントを検索して、BSAM がより大きな最大ブロック・サイズを使用する必要があるか調べようとします。OPEN は、より大きなブロック・サイズが使用可能にされたかどうか検索します。次の 3 つの条件すべてが使用可能にされている場合は、より大きなブロック・サイズが使用可能にされます。

v BLKSIZE は、OPEN の前または最初の JFCB では、DCB または DCBE にコーディングされません。各データ・セットは、JFCB によって表されます。

v DCB での RECFM (レコード・フォーマット) は、フォーマット U またはブロック・レコードを指定します。どのデータ・セットも、固定標準ブロック・データ・セットとすることができます。

v DCBOFPPC では設定しませんでした (DCBOFLGS では X'08'。これは DCB では +48)。これは、非類似 属性ビットです。

より大きなブロック・サイズを使用可能にした場合、OPEN は後続の連結データ・セットを検索して、最大受け入れ可能ブロック・サイズを見つけ、それを DCB ま

順次データ・セットの処理

462 z/OS V1R10 DFSMS データ・セットの使用法

Page 487: DFSMS データ・セットの使用法

たは DCBE に保管します。ブロック・サイズが受け入れ可能なのは、それが、すでに DCB にある RECFM または LRECL と一致しない RECFM または LRECL を持たないソースからきた場合です。

互換性のある特性: フォーマット F レコードでは、データ・セットが DCB にある値と異なる LRECL 値を持つ場合、OPEN 中はそのデータ・セットのブロック・サイズは考慮されません。

フォーマット V レコードでは、データ・セットが DCB にある値より大きなLRECL 値を持つ場合、OPEN 中はそのデータ・セットのブロック・サイズは考慮されません。

DCB での U の RECFM 値は、他の RECFM 値と整合しています。

BSAM は、最初のデータ・セットについて指定されたレコード・フォーマットと互換性のある次の RECFM 値を考慮します。

v F または FB ― 互換性のあるレコード・フォーマットは F、FB、FS、およびFBS です。

v V または VB ― 互換性のあるレコード・フォーマットは V および VB です。

v U ― 他のすべてのレコード・フォーマットが互換です。

OPEN が矛盾する RECFM を検出すると、警告メッセージを出します。OPEN は、整合性をテストするときに DSORG を検査しません。そのデータ・セットまで読み取ることがないか、後で DCB 非類似 属性ビットをオンにすることがあるため、それは ABEND を発行しません。

連結データ・セットの RECFM は、BSAM によって互換性があると見なされることがあり (予期された警告メッセージを受け取らない) 場合であっても、それはそれらが正常に処理されたことを保証しません。それらを非類似 として扱う必要がある場合もあります。

最初のデータ・セットの前の BSAM OPEN 処理: OPEN は、最初のデータ・セットがオープンされた後、各データ・セットごとに JFCB をテストします。 JFCB には、データ・セットが割り振られたときにコーディングされた情報、およびそれが動的に再連結された前に OPEN がそこに保管したことのある情報が入っています。

前述した上記の処理がすべて、BSAM に受け入れ可能なデータ・セットに対して発生します。発行された OPEN は、最初のデータ・セットの後のデータ・セットについてテープ・ラベルを読み取りません。したがって、最初のものの後に、前のすべての指定より大きなブロック・サイズを持つテープ・データ・セットがある場合は、 DD ステートメントで BLKSIZE 値を指定する必要があります。システムは後でそれらのテープ・ラベルを読み取りますが、その時点ではシステムがより大きなブロック・サイズを発見するには遅すぎます。

JFCB に 0 のブロック・サイズが含まれ、DASD 上に永続的に常駐している各データ・セットごとに OPEN は、データ・セット・ラベル (DSCB) からデータ・セット特性を入手します。それらが受け入れ可能であり、ブロック・サイズがより大きい場合、OPEN はブロック・サイズを DCB または DCBE にコピーします。

順次データ・セットの処理

第 25 章 順次データ・セットの処理 463

Page 488: DFSMS データ・セットの使用法

OPEN のこの機能が検査する各 JFCB または DSCB ごとに、ブロック・サイズがDCB または DCBE ブロック・サイズと異なり、DCB が固定標準を持つ場合は、OPEN は DCB の標準ビットをオフにします。

DCB マクロまたは最初の DD ステートメントからの DCBBUFL がゼロでない場合は、その値が、別のデータ・セットからの BLKSIZE の上限になります。それがDCBBUFL 値より大きい場合、後の DD ステートメントまたは DSCB からのブロック・サイズが OPEN 中に使用されます。OPEN は、ユーザーが後で非類似 属性ビットをオンにしないか、そのデータ・セットまで読み取らないか、またはデータ・セットが実際にはそのように大きなブロックを持たないという前提に基づいて、より大きなブロック・サイズを無視します。

OPEN が矛盾するレコード・フォーマットを検出すると、次のメッセージを出します。

IEC034I INCONSISTENT RECORD FORMATS rrr AND iii,ddname+cccc,dsname

メッセージでは、変数は次の値を表します。

rrr OPEN で設定されたレコード・フォーマットを指定します。

iii 不整合であることが検出されたレコード・フォーマットを指定します。これは、非ゼロの BLKSIZE を持つ JFCB または DSCB にあります。

cccc 最初の DD ステートメントの後の DD ステートメントの数を指定します。ここで、+1 は、連結内の 2 番目のデータ・セットであることを意味します。

BSAM 類似連結の例: 図 69 は、BSAM を使用して読み取られる類似 連結についての JCL の例を示しています。アプリケーションは、BSAM の代わりに QSAM

を使用することもできます。3590 にあるこのテープ・データ・セットには、テープ・ラベルがないので、QSAM では BLKSIZE がコーディングされる必要はありません。

この例では、BLKSIZE 値は非常に大きいので、大規模ブロック・インターフェースを使用するためのアプリケーションが必要です。

OPEN は、2 番目の DD でのブロック・サイズ値が最初の DD (通常は 80) より大きいことを検出します。2 番目の DD がディスク・データ・セット用である場合は、その最大ブロック・サイズは 32 760 です。最初の DD に対する BSAM

OPEN は、3 番目の DD からの BLKSIZE が最も大きいのでそれを使用します。

非類似データ・セットの連結非類似 順次データ・セットを連結するには、現行のデータ・セットの終わりに到達する前に DCB の DCBOFLGS フィールドを変更する必要があります。これは、ユーザーが非類似 データ・セットを連結していることをシステムに知らせます。

//INPUT DD *... (instream data set)

// DD DSN=D42.MAIN.DATA,DISP=SHR// DD DSN=D42.SUPPL.DATA,UNIT=(3590,2),DISP=OLD,BLKSIZE=150000

図 69. BSAMを通じて読み取られる類似連結

順次データ・セットの処理

464 z/OS V1R10 DFSMS データ・セットの使用法

Page 489: DFSMS データ・セットの使用法

DCBOFPPC は、DCBOFLGS フィールドのビット 4 です。命令 OI

DCBOFLGS,X'08' を使用することによって、ビット 4、DCBOFPPC を 1 に設定します。DCBOFPPC が 1 である場合、各データ・セットごとのボリュームの終わり処理は、読み取ったばかりのデータ・セットのクローズ、および次の連結データ・セット用のオープンを発行します。このクローズおよびオープンのプロシージャーは、DCB にあるフィールドを更新し、CLOSE および OPEN の他の機能を実行します。バッファー・プールがオープン・ルーチンによって自動的に入手された場合、プロシージャーは、バッファー・プールも解放し、次の連結データ・セット用の新規バッファー・プールを入手します。プログラムが DCBE にRMODE31=BUFF を提供しなかった場合は、プロシージャーは最後の連結データ・セットについてバッファー・プールを解放しません。

データ・セットがオープンされる前に、次のデータ・セットの特性を判別するための何らかの方法を持たない限り、処理中に類似 属性を示すために DCBOFLGS フィールドをリセットしてはなりません。データ・セットを非類似 属性と連結する (つまり、DCBOFLGS フィールドの DCBOFPPC ビットをオンにする) 場合、任意のデータ・セットの最初のボリュームに EOV 出口が取られます。プログラムが DCB

OPEN 出口を持つ場合、これは連結内の各データ・セットの先頭で呼び出されます。

プログラムが OPEN を発行する前に DCBOFPPC をオンにする場合、システムがDCB OPEN 出口ルーチンまたは JFCBE 出口を呼び出すたびに、DCBE にあるDCBESLBI がオンであるのは、開始されている現行のデータ・セットが大規模ブロック・インターフェース (LBI) をサポートする場合のみです。すべてのデータ・セットが LBI をサポートしているか前もって知りたい場合は、プログラムは次のアクションのいずれかを取ることができます。

v OPEN の後まで、DCBOFPPC をオフのままにしておきます。プログラムがレコードを読み取ろうとするまでは、それをオンにする必要はありません。

v INFO=AMCAP を指定して DEVTYPE マクロを発行します。「z/OS DFSMSdfp

Advanced Services」を参照してください。

新規データ・セットに到達し、DCBOFPPC がオンである場合、データ・セットの終わりを検出した GET または READ マクロを再発行する必要があります。これは、QSAM では、新規データ・セットはより長いレコード長を持つことができるか、BSAM では新規データ・セットがより大きいブロック・サイズを持つことができるからです。より大きなバッファーを割り振る必要な場合があります。 466ページの図 70 は、GET または READ をいつ再発行するかを判別するために考えられるルーチンを示しています。

順次データ・セットの処理

第 25 章 順次データ・セットの処理 465

Page 490: DFSMS データ・セットの使用法

プログラムが複数の READ を発行し、それらの READ に CHECK または WAIT

マクロを介在させない場合は、特別な注意を払う必要があります。データ終わりを検出した READ の後に発行された READ 要求に対しては WAIT または CHECK

マクロを発行しないでください。これらの制約事項は、データ・セットからデータ・セットへの類似 データ・セットの変換には適用されません。データ・セット間では、OPEN または CLOSE 操作は必要ないからです。

DD ステートメントで OPTCD=B をコーディングするか、動的割り振り用にそれをコーディングすることができます。DCB マクロでは OPTCD=B をコーディングできません。このパラメーターは、IBM、ISO、または ANSI 標準ラベル付きテープの読み取り中のみ、効果を持ちます。これらの場合では、システムは、各テープ・ボリュームにあるデータ・セットの部分を完全データ・セットとして扱います。

このようにして、トレーラー・ラベルがボリュームの終わりでなく、間違ってデータ終わりであるテープを読み取ることができます。

マルチボリューム・テープ・データ・セットで DD ステートメントに OPTCD=B

と指定する場合、システムは、各ボリューム通し番号ごとに個々の連結された DD

ステートメントに相当するものを生成し、各ボリュームごとにテープ・ドライブを割り振ります。

制約事項: 可変ブロック・スパン (VBS) データ・セットを持ち、データ・セットがボリュームをスパンし、1 つのセグメント (たとえば、最初のセグメント) が最初のボリュームの末尾にあり、次のセグメント (たとえば、中央のセグメント) が次のボリュームの先頭にあるというようになっており、これらのボリュームを個別のデータ・セットとして扱おうとする場合、データの保全性は保証されません。QSAM は異常終了します。QSAM のジョブは、すべてのセグメントを一緒に書き込めること

図 70. 非類似連結データ・セットについての READ または GET の再発行

順次データ・セットの処理

466 z/OS V1R10 DFSMS データ・セットの使用法

Page 491: DFSMS データ・セットの使用法

を保証することです。この制約事項は、データ、およびセグメントがボリューム間で分割されるかどうかにも基づいています。

順次データ・セットの変更順次データ・セットは、次の 3 つの方法で変更することができます。

v 既存のレコードでデータを変更することによって (同所更新)。

v データ・セットの終わりに新規レコードを追加することによって (データ・セットを拡張します)。

v または、DISP=MOD を指定せずに OUTPUT または OUTIN をオープンすることによって (データ・セットの内容を置き換えます)。効果は、データ・セットを作成するときと同じです。

関連資料: 455ページの『順次データ・セットの作成』を参照してください。

同所更新データ・セットを同じ場所で更新するときは、トラックにある残りのレコードを壊すことなく、レコードを読み取り、処理し、元の位置に書き戻します。次の規則が適用されます。

v データ・セットを更新するには、OPEN マクロで UPDAT オプションを指定する必要があります。更新を行うには、READ、WRITE、CHECK、NOTE、およびPOINT マクロのみを使用できるか、 GET および PUTX マクロのみ使用できます。PUTX を使用するには、DCB マクロで MACRF=(GL,PL) をコーディングします。

v レコードを削除したり、その長さを変更することはできません。

v 新規レコードを追加することはできません。

v データ・セットは、DASD 上になければなりません。

v ブロックは、それらを読み取ったのと同じ順序で再書き込みすることはできません。

レコードは READ または GET マクロによって検索しないと、WRITE またはPUTX マクロによって更新できるようになりません。WRITE または PUTX マクロは、各 READ または GET マクロの後に発行する必要はありません。

READ および WRITE マクロは、同じデータ・イベント制御ブロック (DECB) に適用される実行形式である必要があります。DECB は、READ または WRITE マクロのリスト形式により提供される必要があります。

制約事項: 圧縮フォーマット・データ・セットをオープンするのに UPDAT オプションは使用できませんので、そのデータ・セットについて同所更新はできません。

関連資料: READ および WRITE マクロの実行形式およびリスト形式については、「z/OS DFSMS Macro Instructions for Data Sets」を参照してください。

オーバーラップ操作の使用入出力およびプロセッサー・アクティビティーをオーバーラップするには、最初の操作が完了しているか検査する前に、いくつかの BSAM 読み取りまたは書き込み

順次データ・セットの処理

第 25 章 順次データ・セットの処理 467

Page 492: DFSMS データ・セットの使用法

操作を開始することができます。ただし、他のタイプの操作を開始または再開する前に 1 つのタイプの操作が完了しているか検査する必要があるので、読み取りを書き込み操作とオーバーラップすることはできません。各保留読み取りまたは書き込み操作は、個別の DECB を必要とすることに注意してください。連続する読み取り操作に単一の DECB が使用されたとすると、最後のレコード読み取りしか更新できないことになります。

関連資料: 各レコードが処理されている間に読み取りまたは書き込み要求を未解決にさせることによって達成されるオーバーラップの例については、 512ページの図85 を参照してください。

データ・セットの拡張データ・セットの終わりにレコードを追加したい場合、DD ステートメントでDISP=MOD を指定して出力用のデータ・セットをオープンするか、OPEN マクロのEXTEND または OUTINX オプションを指定する必要があります。それから、データ・セットに PUT または WRITE マクロを発行することができます。

マルチボリューム DASD データ・セット次の条件にすべて該当する場合は、CLOSE は、最後のユーザー・データ・ブロックを含むボリュームについてデータ・セット・ラベルに最終ボリューム標識を設定します。

v DCB が OUTPUT、EXTEND、OUTIN、OUTINX、または INOUT に対してオープンされている

v 最新の操作が PUT、WRITE での CHECK、または (OPEN INOUT の場合を除き) OPEN でした。

v DCB が正常にクローズされる

システムは、先行するボリュームにあるデータ・セット・ラベルで最終ボリューム標識がオンになっていないことを確認します。最終ボリューム・ビットがオンであるボリュームは、必ずしもデータ・セット用のスペースを含んでいるか、カタログに示されている最終ボリュームであるとは限りません。それ以降のボリュームも最終ボリューム・ビットがオンである場合があります。

後で、DISP=MOD、あるいは EXTEND または OUTINX を指定した OPEN を使用してデータ・セットを拡張する場合、OPEN は、最後のユーザー・データが入っているボリュームを判別する必要があります。

システム管理データ・セットでは、OPEN は、最後に使用されたボリュームを検索するまで、各ボリュームを最初から最後までテストします。

非システム管理データ・セットでは、システムは別のプロシージャーに従います。最初の OPEN は、JFCB または JFCB 拡張で示される最後のボリューム上のデータ・セット・ラベルをテストします。最終ボリューム標識がオンになっている場合、OPEN はそれを最終使用ボリュームと想定します。標識がオンになっていない場合、OPEN はボリュームを最初から 2 番目を経て最後まで検索します。最終ボリューム標識がオンになっているデータ・セット・ラベルを検索すると、停止します。このアルゴリズムは、マウント可能な DASD ボリュームをサポートしていた旧式の MVS レベルとの互換性を得るためのものです。 このアルゴリズムが受諾不能

順次データ・セットの処理

468 z/OS V1R10 DFSMS データ・セットの使用法

Page 493: DFSMS データ・セットの使用法

である場合は、データ・セットをすべてのボリュームから削除するか、最終ボリューム標識がオンになっているボリュームからデータ・セットを削除します。

拡張フォーマット順次データ・セット拡張フォーマット順次データ・セットの拡張については、 482ページの『ストライピング順次データ・セットの拡張』を参照してください。

装置独立性の実現装置独立性は、どのタイプの装置 (たとえば、DASD またはテープ) でも働くプログラムの特性です。装置独立性を実現することは、おそらく順次データ・セットの場合のみ有効です。入力または出力は、DASD、磁気テープ・ドライブ、カード読取装置またはカード・パンチ、プリンター、スプール・データ・セット、TSO/E 端末、またはダミー・データ・セットについて行うことができるからです。他のデータ・セット編成 (区分、直接、および VSAM) は、DASD の使用が必須のため、装置に依存します。

ダミー・データ・セットは、最初のパラメーターが DUMMY である DD ステートメントであるか、 DDNAME= パラメーターをコーディングしたが、その名前のDD ステートメントがありません。ダミー・データ・セットを持つ BSAM またはQSAM を使用できます。WRITE または PUT マクロは効果を持ちません。最初のREAD マクロ用の GET マクロまたは CHECK マクロによって、 EODAD ルーチンが呼び出されることになります。

装置独立性は、次のタスクに有用なことがあります。

v ディスク・ボリューム、磁気テープ、またはユニット・レコード装置などの、いくつかの記録装置からのデータの受け入れ。この状況は、いくつかのタイプのデータ獲得装置がご使用の中央システムにデータを供給しているときに発生することがあります。

v 入出力装置が使用できないことによって生じる制約事項の迂回 (たとえば、順序にある装置が取り付けられていない場合)。

v 1 つのシステムまたは装置タイプでのアセンブル、テスト、およびデバッグ、および別のシステムまたは装置タイプでの処理。たとえば、IBM 3380 直接アクセス記憶装置ドライブは、磁気テープ装置の代わりに使用することができます。

v TSO/E バックグラウンドでの REXX™ exec などの TSO コマンドのテスト。

プログラムを装置独立にするには、次のアクションを取ります。

v プログラムからすべての装置依存のマクロおよびパラメーターを省略します。最高の効率を得るには、BSAM、BPAM、または QSAM DCB で BLKSIZE パラメーターを省略するのが最良です。 386 ページの『システム決定ブロック・サイズ』を参照してください。

v パラメーターは、データ定義 (DD) ステートメント、データ・クラスで、またはOPEN 出口ルーチン中に提供します。つまり、プログラムが実行される準備ができるまで、必須の装置依存のパラメーターは指定しないでください。プログラムは、DEVTYPE マクロを発行することによって、装置特性の多くを学習することができます。

順次データ・セットの処理

第 25 章 順次データ・セットの処理 469

Page 494: DFSMS データ・セットの使用法

装置依存のマクロ以下は、装置依存のマクロおよびマクロ・パラメーターのリストです。使用される装置のタイプには関係なく、データ・レコードの論理レイアウトのみを考慮してください。データが直接アクセス・ボリュームにある場合であっても、それが磁気テープであるかのように扱います。たとえば、更新しているとき、既存のデータ・セットを更新しようとするのではなく、新規データ・セットを作成します。

OPEN ― INPUT、OUTPUT、INOUT、OUTIN、OUTINX、または EXTEND を指定します。パラメーター RDBACK および UPDAT は、装置依存であり、間違った装置タイプまたは DASD 上の圧縮フォーマット・データ・セットに送信された場合は異常終了を生じさせることがあります。

READ ― 順方向読み取り (SF) のみを指定します。

WRITE ― 順方向書き込み (SF) のみを指定します。新規レコードを作成するか、既存のレコードを変更する場合のみ使用します。

NOTE/POINT ― これらのマクロは、磁気テープと直接アクセス・ボリュームの両方に有効です。装置タイプとデータ・セットのタイプ (順次、拡張フォーマット、PDSE など) の独立性を保持するためには、NOTE によって戻されたワードをテストまたは変更したり、POINT に渡すワードを計算したりしないでください。

BSP ― このマクロは、磁気テープまたは直接アクセス・ボリュームに有効です。ただし、それを使用することは装置依存のアクションを試行することになります。

SETPRT ― 直接に割り振られたプリンターおよび SYSOUT データ・セットにのみ有効です。

CNTRL/PRTOV ― これらは装置依存のマクロです。

CLOSE - CLOSE は装置独立のマクロですが、システムは、装置タイプ相互間で異なるタスク終了時に処理を行います。テープ上の出力 QSAM データ・セットについて限定システム ABEND のためにタスクが異常終了する場合、通常なら処理バッファーを終了するであろうクローズ・ルーチンが迂回されます。未解決の入出力要求がパージされます。したがって、テープ上の QSAM 出力データ・セットの場合に最終データ・レコードが失われる可能性があります。

ただし、データ・セットが DASD 上にある場合は、クローズ・ルーチンがバッファー・フラッシュを行います。このバッファー・フラッシュは、最終レコードをデータ・セットに書き込みます。このタスクを取り消すと、バッファーは失われます。

DCB および DCBE サブパラメーターDCB マクロで MODE、CODE、TRTCH、KEYLEN、または PRTSP をコーディングすると、プログラムが装置依存になります。ただし、それらは DD ステートメントで指定することができます。

DEVD ― DASD が使用される可能性がある場合は、DA を指定します。磁気テープおよびユニット・レコード装置 DCB は、アセンブリー中に提供される区域に収まります。ユニット・レコード装置を指定するのは、テープまたは DASD を変更する予定がまったくない場合のみにしてください。

順次データ・セットの処理

470 z/OS V1R10 DFSMS データ・セットの使用法

Page 495: DFSMS データ・セットの使用法

KEYLEN ― 必要に応じて、DD ステートメントまたはデータ・クラスで指定できます。

RECFM、LRECL、BLKSIZE ― これらのパラメーターは、 DD ステートメント、データ・クラス、またはデータ・セット・ラベルで指定できます。ただし、特定の装置について最大レコード・サイズを考慮する必要があります。また、 XLRI

レコードを処理したいかどうかも考慮する必要があります。

DSORG ― 完全な DCB 拡張を入手するには、順次編成 (PS または PSU) を指定します。

OPTCD ― このパラメーターは、装置依存です。これを DD ステートメントで指定します。

SYNAD ― 装置依存のエラー検査は自動的です。装置依存の情報が必要ないように、ルーチンを一般化します。

順次データ・セットのパフォーマンスの改善データ・セットに必要な入出力操作を速くするために、オペレーティング・システムはチェーン・スケジューリング と呼ばれる技法を提供します。チェーン・スケジューリングは DASD オプションではありません。これは、DASD 用のアクセス方式に組み込まれています。チェーン・スケジューリングが使用されるとき、システムはいくつかの入出力操作を動的に一緒にチェーニングします。チェーン・スケジューリングを使用して機能する、一連の別個の読み取りまたは書き込み操作が、コンピューター・システムに対して 1 つの連続する操作として発行されます。

入出力パフォーマンスは、データを仮想記憶域へと、または仮想記憶域から転送するために必要なプロセッサー時間とチャネル始動/停止時間の両方を削減することによって改善されます。パフォーマンスに影響を及ぼすいくつかの要因を以下に示します。

v アドレス・スペース・タイプ (実または仮想)

v ブロック・サイズ。ブロックが大規模になるほど、効率的になります。LBI、大規模ブロック・インターフェースを使用することによって大幅なパフォーマンス改善を得ることができます。これは、32 760 バイトより長いテープ・ブロックを許可します。

v QSAM での BUFNO

v BSAM でのオーバーラップ要求の数 (NCP=チャネル・プログラムの数) およびDCB が MULTACC をコーディングされた DCBE をポイントしているかどうか

v プロセッサーおよびチャネルでの他のアクティビティー

v 装置クラス (たとえば、DASD、テープ) およびタイプ (たとえば、IBM 3390、3490)

v データ・セット・タイプ (たとえば、PDSE、UNIX、拡張フォーマット)

v ストライプの数 (拡張フォーマットの場合)

拡張フォーマット順次データ・セットは、59 のストライプを持つことができます。ただし、 4 または 5 より多いストライプを割り振ると、通常、パフォーマンスは向上しません。IBM では、バッファーと同じ数のストライプを設定するこ

順次データ・セットの処理

第 25 章 順次データ・セットの処理 471

Page 496: DFSMS データ・セットの使用法

とをお勧めします。 データ・セットのストライプの数が多すぎると、仮想記憶域と実記憶域が浪費されることになります。

システムは、非 DASD (プリンターおよびフォーマット U レコードを除く) の場合、および DASD が許可されない場合は、デフォルトとしてチェーン・スケジューリングを使用します。

チェーン・スケジューリングは、広範囲の入出力操作を必要とするプログラムには最も貴重です。チェーン・スケジューリングを使用するデータ・セットは、V=R 領域にあるチャネルで使用できる時間を独占するので、複数のデータ・セットが処理されるときは、可能であれば、別個のチャネルを割り当てる必要があります。

非 DASD データ・セットでのチェーン・スケジューリングの使用に関する制限事項

以下は、チェーン・スケジューリングの使用に関する制限事項です。

v チェーン・スケジューリングが使用される各データ・セットには、QSAM では少なくとも 2 つ (できればそれ以上) のバッファーが、BSAM での NCP パラメーターには少なくとも 2 つ (できればそれ以上) が割り当てられる必要があります。

v 交換バッファー方式に対する要求は履行されず、デフォルトでは移動モードになるので、チェーン・スケジューリングに対する要求またはチェーン・スケジューリングへのデフォルトには影響を及ぼしません。交換バッファー方式は、廃止された DCB オプションです。

v データ・セットがオープンされるときに次の条件のいずれかが満たされる場合、チェーン・スケジューリングの要求は無視され、通常のスケジューリングが使用されます。

– CNTRL マクロを使用します。

– テープ上の組み込み VSE チェックポイント・レコードが迂回されます(OPTCD=H)。

– データ・セットが、磁気テープまたはユニット・レコードにありません。

– BSAM での NCP=1 または QSAM での BUFNO=1。

– これは印刷データ・セット、または 3525 カード・パンチ用の関連付けられたデータ・セットです。

v システムが一緒にチェーニングできるチャネル・プログラム・セグメントの数は、 BSAM DCB の NCP パラメーターに指定された値、または QSAM DCB

の BUFNO パラメーターで指定された値に限定されます。

v データ・セットがプリンターであるときは、チャネル 9 またはチャネル 12 が紙送り制御テープ または FCB にある場合は、チェーン・スケジューリングは無視されます。

v チェーン・スケジューリングが使用されるとき、プリンター用の PRTOV マクロの自動スキップ・フィーチャーは機能しません。フォーマット制御は、ANSI またはマシン制御文字によって達成する必要があります。

v チェーン・スケジューリングのもとで QSAM を使用して、可変長ブロック化ASCII テープ・レコード (フォーマット DB) を読み取っているときは、そのデータ・セットについて DCB で BUFOFF=L をコーディングする必要があります。

順次データ・セットの処理

472 z/OS V1R10 DFSMS データ・セットの使用法

Page 497: DFSMS データ・セットの使用法

v チェーン・スケジューリング・オプションで BSAM を使用して、フォーマットDB レコードを読み取っており、BUFOFF パラメーターに BUFOFF=L 以外の値をコーディングした場合、入力バッファーは、通常どおり、バージョン 3 ではASCII から EBCDIC に (あるいは、バージョン 4 では指定された文字セット(CCSID) に) 変換されますが、DCBLRECL フィールドに戻されたレコード長は、読み取られたブロックの実際の長さではなく、データ・セットの最大ブロック・サイズに戻されます。各レコード記述子ワード (RDW) (ある場合) は、ASCII からバイナリーに変換されません。

関連資料: 制御文字についての詳細は、 363ページの『オプショナル制御文字の使用』および「z/OS DFSMS Macro Instructions for Data Sets」を参照してください。

DASD およびテープに関するパフォーマンスDASD の場合、DCB OPTCD=C オプションは効力をもちません。DASD はチェーン・スケジューリングを要求しますが、アクセス方式は自動的に同等の技法を使用します。

QSAM では、BUFNO の値は、入出力が開始される前に、いくつのバッファーが一緒にチェーニングされるかを決定します。BUFNO のデフォルト値は、 411ページの『バッファー・プールの自動的な組み立て』に説明されています。先読みまたは書き戻しのために十分な数のバッファーが使用できる場合は、QSAM はそれらのバッファーをディスクの引き続く回転で読み取るか、書き込もうとします。

QSAM はまた DCBE マクロで MULTSDN 値を使用して、以下についてより良いBUFNO 値を計算します。

v テープ・データ・セット

v DASD データ・セット

– 基本フォーマット

– ラージ・フォーマット

– 拡張フォーマット (非圧縮)

– PDS

以下の条件のときに MULTSDN 値をコーディングすると、システムはより効率的な BUFNO 値を計算します。

v MULTSDN に非ゼロ値がある。

v DCB OPEN 出口ルーチン完了後の DCBBUFNO がゼロである。

v データ・セットのブロック・サイズが有効である。

以下の状態で MULTSDN 値をコーディングすると、システムは最初に適切な初期BUFNO 値を計算します。

v 拡張フォーマット・データ・セットではない DASD データ・セット

これらのデータ・セットの場合、初期 BUFNO 値は、トラックに収まるBLKSIZE 長のブロックの数です。

v 拡張フォーマット・データ・セット (圧縮フォーマットではない)

順次データ・セットの処理

第 25 章 順次データ・セットの処理 473

Page 498: DFSMS データ・セットの使用法

これらのデータ・セットの場合、初期 BUFNO 値は、ストライプの数に、トラックに収まる BLKSIZE 長のブロックの数 (接尾部を含む) を掛けたものです。

v ブロック・サイズが 32 KB より小さいテープ・データ・セット

これらのデータ・セットの場合、初期 BUFNO 値は、64 KB 以内に収まるBLKSIZE 長のブロックの数です。

v ブロック・サイズが 32 KB 以上のテープ・データ・セット

これらのデータ・セットの場合、初期 BUFNO 値は 2 です。

その後システムは BUFNO 値に MULTSDN で指定された数を掛け、その BUFNO

値を DCBBUFNO に保管します。

BSAM および BPAM では、システムが DCBE マクロでユーザーの MULTACC 指定を有効としない限り、最初の READ または WRITE 命令が入出力を開始します。システムはそれ以降の入出力要求を (関連付けられた CHECK または WAIT

命令を使用せずに) キューに入れます。最初の入出力要求が正常に完了すると、システムは、キューに保留中の入出力要求がないか検査し、これらの要求のうちできるだけ多くのものについてチャネル・プログラムをビルドします。システムが一緒にチェーニングできる入出力要求の数は、システムが 1 つの入出力イベントで処理できる要求の最大数です。この限度は、NCP 値より小か等しくなります。

BSAM では、DCBE オプション FIXED = USER を利用して、呼び出し元がすべてのデータ域のページ固定を処理するよう暗黙指定することができます。 以下のいずれかの場合に、FIXED = USER オプションを使用してください。

v BSAM 呼び出し元に APF 権限がある。

v BSAM 呼び出し元がシステム・キーにある。

v BSAM 呼び出し元が監視プログラム状態にある。

FIXED = USER オプションについて詳しくは、「z/OS DFSMS Macro Instructions

for Data Sets」を参照してください。

BSAM および BPAM でのパフォーマンスを改善するために、 422ページの『BSAM でのオーバーラップ入出力の使用』および 509ページの図 84 で説明される技法を使用してください。

推奨: BSAM、BPAM および QSAM を使用して最大のパフォーマンスを得るには、DCBE マクロで MULTACC および MULTSDN パラメーターを使用してください。

順次データ・セットおよび PDS の場合、DCBE マクロでゼロ以外の MULTACC

値を指定すると、チャネル・プログラムをより効率的にすることができます。ゼロ以外のMULTSDN 値をコーディングすることもできます。MULTSDN が非ゼロで、DCBNCP がゼロの場合、OPEN は NCP の値を判別し、その値を DCBNCP に保管した上で、DCB オープン出口に制御権を与えます。MULTACC が非ゼロであり、プログラムが DECB で WAIT または EVENTS マクロを使用するか、DECB でのPOST 出口に依存する場合、そのマクロ、あるいは CHECK または TRUNC マクロによる依存性に先行させる必要があります。

注:

順次データ・セットの処理

474 z/OS V1R10 DFSMS データ・セットの使用法

Page 499: DFSMS データ・セットの使用法

1. 圧縮フォーマット・データ・セットでは、すべてのバッファリングはシステムによって内部的に処理されるので、MULTACC は無視されます。

2. ブロック・サイズが 32 768 より大きい大規模ブロック・インターフェース(LBI) を使用するテープ・データ・セットの場合、システム決定 NCP 値は、2

から 16 の値です。計算値が <2 である場合は、これは 2 に設定され、>16 である場合は、 16 に設定されます。

BSAM、BPAM、または BDAM での読み取り時のブロックの長さの決定順次データ・セットを読み取るとき、ブロックの長さは、アクセス方法およびデータ・セットのレコード・フォーマットに応じて、次の方法のいずれかにより決定することができます。

非ブロック化および不定レコード・フォーマットでは、各ブロックには、1 つの論理レコードが含まれます。

1. 固定長、非ブロック・レコード: すべてのレコードの長さは、 LBI を持たないDCB の DCBBLKSI フィールドまたは LBI を持つ DCBEBLKSI フィールドにある値です。この方法は、BSAM または BPAM で使用することができます。

2. 可変長レコードおよび BUFOFF=L を持つフォーマット D レコード: ブロック内のブロック記述子ワードには、ブロックの長さが含まれます。この方法は、BSAM または BPAM で使用できます。 345ページの『ブロック記述子ワード(BDW)』 では、BDW フォーマットについて説明しています。

3. BUFOFF=L を持たないフォーマット D: ブロック長は、CHECK マクロが発行された後の DCBLRECL にあります。これは、ふたたび CHECK マクロを発行するまで有効なままになります。

4. LBI を使用しているときの不定長レコード、または固定長ブロック・レコード場合 : 次の段落で説明されている方法は、ブロック長を計算するために使用することができます。この方法は、BSAM、BPAM、または BDAM で使用することができます。フォーマット U レコードでチェーン・スケジューリングを使用しているときは、これを使用してはなりません。その場合、レコードの長さは決定できません。

a. READ 要求について DECB で CHECK マクロを発行した後で、ただしREAD 要求について DCB を指定する後続のデータ管理マクロを発行する前に、DECB の開始から 16 バイトであるワードで状況域アドレスを入手します。

b. LBI を使用していない場合は、次のステップを取ってください。

1) 状況域に保管されている残余カウントを入手します。残余カウントは、ハーフワードで、状況域の開始からの 14 バイトです。

2) この残余カウントを、READ マクロによって読み取られるよう要求されるデータ・バイトから減算します。'S' は、READ マクロの長さパラメーターとしてコーディングされた場合、要求されるバイト数は、READ が発行された時点での DCBBLKSI の値です。READ マクロで長さがコーディングされた場合、この値は、データ・バイトの数であり、DECB の先頭からのハーフワード 6 バイトに含まれています。減算の結果は、ブロック読み取りの長さです。

順次データ・セットの処理

第 25 章 順次データ・セットの処理 475

Page 500: DFSMS データ・セットの使用法

BSAM または BPAM について LBI を使用している場合は、状況域のアドレスから 12 を減算します。これで、ブロック読み取りの長さを含む 4 バイトのアドレスが得られます。

5. LBI を使用していないときの不定長レコード: 読み取られたレコードの実際の長さは、DCB の DCBLRECL フィールドに入れて戻されます。このようにDCBLRECL を使用するので、LRECL を省略する必要があります。この方法は、 BSAM、または BPAM で、あるいは QSAM GET マクロを発行した後でのみ使用します。

図 71 は、不定長レコードを読み取るために BSAM を使用するときにレコードの長さを決定する例を示しています。

拡張フォーマット・データ・セットに短ブロックを書き込む場合、システムは全長までそれを埋め込み、プログラムが長さだと表現したものの値を保持します。そのようなブロックを読み取るときは、ブロックが持つことができるだけの数のバイトをシステムが読み取り、書き込みについて指定された長さに限定されることがないことを承知しておいてください。特定のブロックが短く、それを短いデータ域に読み取ることを計画している場合は、 READ の前に、DCBBLKSI または LBI を持つDCBEBLKSI を短い区域の長さまで減少させる必要があります。

...OPEN (DCB,(INPUT))LA DCBR,DCBUSING IHADCB,DCBR...READ DECB1,SF,DCB,AREA1,’S’READ DECB2,SF,DCB,AREA2,50...CHECK DECB1LH WORK1,DCBBLKSI Block size at time of READL WORK2,DECB1+16 Status area addressSH WORK1,14(WORK2) WORK1 has block length...CHECK DECB2LH WORK1,DECB2+6 Length requestedL WORK2,DECB2+16 Status area addressSH WORK1,14(WORK2) WORK1 has block length...MVC DCBBLKSI,LENGTH3 Length to be readREAD DECB3,SF,DCB,AREA3...CHECK DECB3LH WORK1,LENGTH3 Block size at time of READL WORK2,DECB+16 Status area addressSH WORK1,14(WORK2) WORK1 has block length...

DCB DCB ...RECFM=U,NCP=2,...DCBD...

図 71. BSAM を使用して不定長またはブロック・レコードを読み取るときのレコードの長さを決定する方法

順次データ・セットの処理

476 z/OS V1R10 DFSMS データ・セットの使用法

Page 501: DFSMS データ・セットの使用法

BSAM または BPAM での短いフォーマット FB ブロックの書き込み固定長ブロック・レコード・フォーマットがある場合、順次データ・セット用のブロックを書き込んでいるときにブロック長を変更することができます。DCB ブロック・サイズ・フィールド (DCBBLKSI、LBI なし) または DCBE ブロック・サイズ・フィールド (DCBEBLKSI、LBI あり) を変更して、データ・セットについて最初に指定されていたものより短いブロック・サイズを指定することができます。ただし、最初に指定されていたよりも大きいブロック・サイズを指定するためにそのフィールドを変更してはなりません。

DCB または DCBE にあるブロック・サイズは、WRITE マクロを発行する前に変更します。これは、DCB にある LRECL パラメーターの倍数でなければなりません。これが行われた後、ブロック・サイズを再度変更するまで、発行された後続のWRITE マクロは、レコードを新規ブロック長で書き込みます。

この技法は、BSAM または BPAM によってサポートされているすべてのデータ・セットで働きます。拡張フォーマット順次データ・セットでは、システムは実際にデータ・セット内のすべてのブロックを同じサイズで書き込みますが、READ の上ではそのブロックについて WRITE の上で指定された長さを戻します。

推奨: PDSE では短ブロックを作成することができますが、それらのブロック境界は、データ・セットが DASD に書き込まれるときに保管されません。したがって、プログラムが短ブロックに依存している場合は、PDSE を使用しないでください。

関連資料: PDSE での短ブロックの使用については、 521ページの『PDSE レコードの処理』を参照してください。

Hiperbatch の使用Hiperbatch は、特定の状態でパフォーマンスを改善するよう設計された QSAM の拡張です。 Hiperbatch は、データ・ルックアサイド機能を使用して、多くのバッチ・ジョブにデータを使用可能にさせる代替ファースト・パスを提供します。Hiperbatch を通じて、アプリケーションは、既存のアプリケーション・プログラムおよびそれらを実行するために使用される JCL を変更することなく、オペレーティング・システムのパフォーマンスの利益を利用することができます。

Hiperbatch または拡張フォーマット・データ・セットのどちらも、パフォーマンスを改善できますが、それらを同じデータ・セットには使用できません。

関連資料: Hiperbatch の使用法については、「MVS Hiperbatch Guide」を参照してください。 DLF コマンドについては、「z/OS MVS システム・コマンド」を参照してください。

Hiperbatch ストライピング

Hiperspace を使用します 特定のハードウェアを必要とします

改善されたパフォーマンスは、一度に複数に読み取りプログラムを必要とします

パフォーマンスは一度に 1 つのプログラムでのみ最良になります

システム内の比較的少ないデータ・セットが一度にそれを使用できます

それより多い数のデータ・セットが一度にそれを使用できます

QSAM のみ QSAM および BSAM

順次データ・セットの処理

第 25 章 順次データ・セットの処理 477

Page 502: DFSMS データ・セットの使用法

拡張フォーマット順次データ・セットの処理拡張フォーマット順次データ・セットは、ほとんどの用途で、順次データ・セットと同じ特性を持ちます。ただし、レコードは、必ずしもそれらが現れるのと同じフォーマットまたは順序で保管されるとは限りません。拡張フォーマット・データ・セットのデータが複数のボリュームにわたってインターリーブされる場合は、その拡張フォーマット・データ・セットをストライピング・データ・セットと呼ぶことができます。これは、順次データ・ストライプと呼ばれます。

入出力アクティビティーが大きい大規模データ・セットは、ストライピング・データ・セットになるのに最も適しています。拡張フォーマット順次として定義されたデータ・セットは、 EXCP または BDAM ではなく BSAM または QSAM を使用してアクセスする必要があります。

拡張フォーマット・データ・セットの特性以下は、拡張フォーマット順次データ・セットの特性です。

v 拡張フォーマット順次データ・セットは、各ボリュームに最大 123 のエクステントを持ちます。 (順次データ・セットは、各ボリュームに最大 16 のエクステントを持ちます。)

v 各拡張フォーマット順次データ・セットは、最大 59 のボリュームを持つことができます。したがって、拡張フォーマット順次データ・セットは、最大 7257 のエクステント (123 x 59) を持つことができます。

v 拡張フォーマット・データ・セットは、任意の数のトラックを占有できます。65,535 より多くのトラックを持つボリュームでは、順次データ・セットは、65,535 トラックを超えるトラックを占有できません。

v 拡張フォーマット・ストライピング順次データ・セットは、最大 4 GB のブロックを含むことができます。各ブロックの最大サイズは 32 760 バイトです。

v 拡張フォーマット順次データ・セットでは、コントロール・ユニットの埋め込みを検出することができます。入力時に、システムは、コントロール・ユニットの埋め込みによるエラーを検出したときに、間違ったデータを戻す代わりに、入出力エラーにします。このタイプのデータ埋め込みは、以下の場合に生じる可能性があります。

– プロセッサーがブロックの書き込み中に電源を失った場合。

– オペレーターが CANCEL コマンドを発行した場合。

– タイムアウト中。

– PURGE=QUIESCE がアクティブ ESTAE マクロで指定されていない場合のABEND (異常終了) 時。

v システムは、空の拡張フォーマット順次データ・セットを検出することができます。拡張フォーマット順次データ・セットが入力用にオープンされ、そのデータ・セットに書き込みが行われたことがない場合は、最初の読み取りでデータ終了を検出し、EODAD ルーチンに入ります。これは、 DCBE マクロにあるPASTEOD パラメーターを使用して指定変更できます。

順次データ・セットの処理

478 z/OS V1R10 DFSMS データ・セットの使用法

Page 503: DFSMS データ・セットの使用法

v 拡張フォーマット・データ・セットの場合は、ユーザー・ラベル用のスペースは割り振られません。拡張フォーマット順次データ・セットの作成時に LABEL 値の中に SUL を指定すると、システムはそのデータ・セットを標準ラベル (SL)

として扱います。

v 拡張フォーマット順次データ・セットにあるすべての物理ブロックは同じサイズですが、プログラムがブロックを読み取るときに、アクセス方式は、書き込みプログラムによって書き込まれた長さを戻します。データ・セットの最大ブロック・サイズは、LBI を使用しているかどうかに応じて、DCB または DCBE のBLKSIZE フィールド内にあります。システムは、データ・セットのブロック・サイズを、QSAM の OPEN 時に DCB または DCBE の BLKSIZE、または OPEN

時の BLKSIZE の最大値および BSAM での最初の WRITE 時の BLKSIZE であると判断します。 RECFM=U の場合、システムは、最初の WRITE 時に DCB

または DCBE ではなく DECB からこの長さを取ることができます。システムは、ユーザーが渡す短ブロックを埋め込みます。続いて、システムは全ブロックを書き込みます。ただし、データ・セットの最大値より大きな値を使用してブロックを書き込もうとすると、失敗して ABEND 002-68 が出されます。

v 拡張フォーマット・データ・セットの各ブロックは、32 バイトの接尾部を持ちます。この接尾部は、システムによって追加されます。ご使用のプログラムはこの接尾部を認識しませんが、ディスク・スペース所要量の計算時にはこの接尾部について検討する必要が生じる場合があります。

拡張フォーマット・データ・セットの割り振り拡張フォーマット・データ・セットの割り振りに関する指針:

v 通常は、順次データ・ストライプは既存の JCL への変更を必要としません。拡張フォーマット順次データ・セットを割り振るには、データ・クラスの中のDSNTYPE 値に EXTENDED を指定します。

v 通常は、拡張フォーマット順次データ・セットにアクセスするのにアプリケーションに対する変更は必要ありません。

v 特定の装置およびシステム管理ボリューム上でのみ拡張フォーマット順次データ・セットを割り振ることができます。

制約事項: 次のタイプのデータ・セットは、拡張フォーマット順次データ・セットとして割り振ることはできません。v PDS、PDSE、および直接データ・セット (VSAM を除く)

v 非システム管理データ・セットv VIO データ・セット

次のタイプのデータ・セットは、拡張フォーマット順次データ・セットとして割り振ってはなりません。v システム・データ・セットv GTF トレースv データ機能分類プログラム (DFSORT™) 作業データ・セットv Hiperbatch と一緒に使用されるデータ・セットv EXCP を使用してアクセスされるデータ・セットv チェックポイント/リスタートと一緒に使用されるデータ・セット

順次データ・セットの処理

第 25 章 順次データ・セットの処理 479

Page 504: DFSMS データ・セットの使用法

関連資料: 詳しくは、 475ページの『BSAM、BPAM、または BDAM での読み取り時のブロックの長さの決定』を参照してください。

圧縮フォーマット・データ・セットの割り振りデータ・クラスで COMPACTION = YES と指定することにより、拡張フォーマット・データ・セットを圧縮フォーマットで割り振ることができます。これらのデータ・セットは圧縮フォーマット・データ・セット と呼ばれます。圧縮フォーマット・データ・セットは、ブロック・レベル圧縮を許可します。

圧縮のタイプ圧縮フォーマット・データ・セットの場合、次の 2 つの圧縮技法が使用可能です。DBB ベースト圧縮と調整圧縮です。これらの技法は、データ・セット用の圧縮ディクショナリーを取り出すために使用される方法を決めます。

v DBB ベースト圧縮 (GENERIC とも呼ばれます)。 DBB ベースト圧縮 (順次とVSAM KSDS 圧縮フォーマット・データ・セットの両方に使用される元のフォーマットの圧縮) では、システムは、データ・セットに書き込まれた初期データを最もよく反映する SYS1.DBBLIB で見つかったディクショナリー・ビルド・ブロック (DBB) のセットを選択します。システムは、カタログに保管されたディクショナリー・トークンにある情報を使用して、後でディクショナリーを再構成することができます。

v 調整圧縮。 調整圧縮で、システムは、データ・セットに書き込まれた初期データに合わせて特に調整された圧縮ディクショナリーを取り出そうとします。いったん取り出されると、圧縮ディクショナリーは、データ・セット自体に組み込まれたシステム・ブロックに保管されます。入力用の OPEN は、ディクショナリーを含むシステム・ブロック内での読み取りによってディクショナリーを再構成します。

この形式の圧縮は、VSAM KSDS 用にサポートされません。

新規に作成された圧縮フォーマット・データ・セット用にシステムが使用する圧縮フォーマットは、データ・セット・レベルとご使用のシステム・レベルの一方または両方で指定することができます。データ・セット・レベルでは、ストレージ管理者は、データ・クラスにある COMPACTION オプションで TAILORED またはGENERIC を指定することができます。データ・クラスがデータ・セット・レベルで指定しない場合、それは、SYS1.PARMLIB の IGDSMSxx メンバーにあるCOMPRESS(TAILORED|GENERIC) パラメーターに基づいています。データ・クラスが圧縮形式を指定する場合、これは SYS1.PARMLIB で指定されているものに優先されます。COMPRESS(GENERIC) は、汎用 DBB ベースト圧縮を示しています。これはデフォルトです。COMPRESS(TAILORED) は、調整圧縮を示しています。このメンバーが SET SMS=xx または IPL を使用して活動化される場合、新規圧縮フォーマット・データ・セットは指定されたフォーマットで作成されます。PARMLIB

にある COMPRESS パラメーターは、VSAM KSDS では無視されます。このパラメーターの詳細については、「z/OS DFSMS Storage Administration Reference」を参照してください。

順次データ・セットの処理

480 z/OS V1R10 DFSMS データ・セットの使用法

Page 505: DFSMS データ・セットの使用法

圧縮フォーマット・データ・セットの特性拡張フォーマット・データ・セットに適用されるほとんどの特性は、圧縮フォーマット・データ・セットに引き続き適用されます。ただし、データ・フォーマットに違いがあるため、圧縮フォーマット・データ・セットには以下の特性があります。

v 圧縮フォーマット・データ・セットは、圧縮レコードを含む場合も含まない場合もあります。

v 圧縮フォーマット・データ・セット用のデータ・フォーマットは、長さがDCB、DCBE、およびデータ・セット・ラベルにあるデータ・セットの論理ブロック・サイズと相関していない物理ブロックから構成されます。実際の物理ブロック・サイズは、システムによって計算され、ユーザーに戻されることはありません。ただし、データ・セットが作成されるとき、システムはユーザーのブロック境界を保持するので、データ・セットが読み取られるときに、システムは元のユーザー・ブロックをユーザーに戻すことができます。

v 圧縮フォーマット・データ・セットは、更新用にオープンすることはできません。

v 圧縮フォーマット・データ・セットに対して発行されるとき、BSAM CHECK マクロは、データが DASD に書き込まれていることを保証しません。ただし、バッファー内のデータが内部システム・バッファーに移動され、ユーザー・バッファーが再使用のために使用可能になっていることは保証します。

v NOTE によって戻され、POINT への入力として使用されるブロック・ロケーター・トークンは、引き続きデータ・セットの各論理ブロック内で相対ブロック番号 (RBN) になっています。マルチストライプ付きデータは、ユーザーには単一の論理ボリュームのように見えます。したがって、マルチストライプ付きデータ・セットでは、 RBN はデータ・セットの始めに相対しており、すべてのストライプを取り込みます。互換性を提供するため、この RBN は、データ・セットの物理ブロックに対立するものとしての、データ・セット内の論理ユーザー・ブロックを参照します。

v ただし、3 バイト・トークンの NOTE/POINT 制限のため、RBN 値が 3 バイトを超える論理ブロックに対して READ または WRITE マクロを発行すると、DCB が NOTE/POINT (MACRF=P) を指定する場合は ABEND が発生します。

v データ・セットが作成されるとき、データ・セットに十分なデータが書き込まれる (DBB 圧縮では 8K から 64K、調整圧縮ではそれ以上) 場合、システムは圧縮トークンを取り出そうとします。システムが圧縮トークンの取り出しに成功した場合、アクセス方式は、データ・セットに書き込まれた追加のレコードを圧縮しようとします。ただし、効率的な圧縮トークンを取り出すことができないような場合は、データ・セットは圧縮不能としてマークを付けられ、データ・セットに書き込まれるレコードを圧縮しようとする試みはありません。ただし、調整圧縮を使用して作成された場合には、調整ディクショナリーを取り出すことができなくても、システム・ブロックをデータ・セット内に組み込ませることが可能です。

システムが圧縮トークンを取り出すことができるようになる前に圧縮フォーマット・データ・セットがクローズされる場合、そのデータ・セットは圧縮不能としてマークされます。データ・セットがいったん圧縮不能としてマークされると、出力用の追加の OPEN は圧縮トークンを生成しようとしません。

順次データ・セットの処理

第 25 章 順次データ・セットの処理 481

Page 506: DFSMS データ・セットの使用法

v 圧縮フォーマット・データ・セットは、DATACLAS を通じてだけでなく、LIKE

キーワードを使用して作成することができます。

制約事項: 次のタイプのデータ・セットは、圧縮フォーマットとして割り振ることはできません。

v 非拡張フォーマット・データ・セット

v キー順でない VSAM 拡張フォーマット・データ・セット

v AIX データ・セット

v 一時データ・セット

v 非カタログ化データ・セット

拡張フォーマット・データ・セットのオープンおよびクローズDCBE が存在しており、データ・セットが拡張フォーマット順次データ・セットである場合、 OPEN 出口が呼び出される前に、OPEN は DCBE 内のデータ・セットのストライプ数 (DCBENSTR) を保管します。DCBE が存在し、データ・セットが拡張フォーマット・データ・セットでない場合、OPEN は DCBENSTR に 0 を保管します。

拡張フォーマット順次データ・セットでの部分解放要求では、CLOSE は各ストライプで部分解放を行います。このデータ・セットが 1 つだけのストライプを保有する場合、そのスペースは現行ボリューム上でのみ解放されます。部分解放の後、一部のストライプのサイズは、他のものと少し異なることがあります。この違いは、多くとも、1 つのトラックまたはシリンダーにすぎません。

BSAM および QSAM を使用した拡張フォーマット・データ・セットの読み取り、書き込み、および更新

拡張フォーマット・データ・セットは、他の順次データ・セットと同様に処理されますが、データ・クラスおよびストレージ・クラスが順次データ・ストライプを示す必要がある点だけが異なります。

拡張フォーマット・データ・セットと他のデータ・セットとの連結拡張フォーマット・データ・セットは、非拡張フォーマット・データ・セットと連結することができます。拡張データ・セット・データ・セットを非拡張フォーマット・データ・セットと連結することに関連する矛盾または追加の制約事項はありません。拡張フォーマット順次データ・セットを含む QSAM 連結では、データ・セット間で切り替えるときに、システムはデフォルトで BUFNO を取ります。

ストライピング順次データ・セットの拡張単一ストライプを用いて割り振られる拡張フォーマット順次データ・セットを、追加のボリュームに拡張することができます。このデータ・セットはマルチボリューム・データ・セットとすることができます。

複数のストライプを用いて割り振られる拡張フォーマット順次データ・セットは、追加のボリュームに拡張することはできません。複数のストライプを用いた拡張フォーマット順次データ・セットは、ボリューム当り 1 つのストライプを持ちます。ストライプは別のボリュームに拡張することはできません。現行のストライプ・セ

順次データ・セットの処理

482 z/OS V1R10 DFSMS データ・セットの使用法

Page 507: DFSMS データ・セットの使用法

ットのためのいずれかのボリューム上のスペースが埋まった時点で、システムはそれ以上データ・セットを拡張することはできません。

拡張フォーマット順次データ・セットは、最大 59 のストライプを持つことができるので、最大サイズを 59 ボリュームとすることができます。使用可能なボリュームの数は、データ・セットのストライプの数を制限します。ストライピング拡張フォーマット順次データ・セットを新規ボリュームに拡張することはできませんが、オリジナル・ボリューム上でデータ・セットを拡張することができます。この機能により、より大きな拡張フォーマット順次データ・セットを保持することができます。システムは、データ・セットの拡張時にデータ・セット用のすべてのボリューム上でスペースを取得します。システムは、各ストライプ間で 1 次および 2 次割り振り量を広げます。

関連資料: ストレージ・クラスの連続データ速度 (これにより拡張フォーマット順次データ・セットのストライプの数を決定します) の指定については、「z/OS DFSMS

Storage Administration Reference」を参照してください。SPACE パラメーターの詳細については、「z/OS MVS JCL 解説書」を参照してください。

拡張フォーマット・データ・セットへのマイグレーション次のセクションでは、順次データ・ストライプを利用するために必要なことがある変更について説明します。v 既存の BSAM および QSAM アプリケーションの変更v 使用済みの DASD スペースの計算v 64K より大きいトラックを持つ装置での拡張フォーマット・データ・セットの変更

既存の BSAM および QSAM アプリケーションの変更既存の BSAM、および QSAM アプリケーションでは、ほとんどの場合、順次データ・セット・ストライプを利用するためにプログラムを変更または再コンパイルする必要はありません。ただし、新機能をさらに完全に利用するためには、プログラムを更新することを選択できます。パフォーマンスを改善するために、さらに多くのバッファーを持つことができます。16MB 境界より上にあるバッファーを持つこともできます。

BSAM を使用する場合、より大きな NCP 値を設定するか、システムに DCBE マクロ MULTSDN パラメーターによって NCP 値を計算させることができます。DCBE マクロ MULTACC パラメーターによって集計を要求することもできます。DCBE マクロの DCBENSTR は、現行のデータ・セット用のストライプの数を知らせます。

QSAM を使用する場合、BUFNO パラメーターを使用してより多くのバッファーを要求することができます。プログラムは、ストライプの数に従って BUFNO を計算することができます。プログラムは、 DCB オープン出口ルーチン中に DCBE でDCBENSTR をテストできます。

次のどれかを行いたい場合は、既存のプログラムを変更および再アセンブルすることができます。

v 24 ビット・アドレッシング・モードから 31 ビット・モード SAM に切り替える。

順次データ・セットの処理

第 25 章 順次データ・セットの処理 483

Page 508: DFSMS データ・セットの使用法

v システムに、適切な NCP 値を決定するよう依頼する。DCBE マクロのMULTSDN パラメーターを使用します。

v BSAM パフォーマンス・チェーニングから最大の利益を得る。DCB マクロにDCBE パラメーターを追加するか、MULTACC パラメーターを指定して DCBE

マクロを組み込むことによって、プログラムを変更する必要があります。プログラムが WAIT または EVENTS あるいは POST 出口 (CHECK マクロの代わりに、またはそれに加えて) を使用する場合、 WAIT または EVENTS マクロが発行されようとしているか、POST 出口に依存して制御を得る場合はいつでも、プログラムが TRUNC マクロを発行する必要があります。

関連資料: 詳細については、 473ページの『DASD およびテープに関するパフォーマンス』ならびに「z/OS DFSMS Macro Instructions for Data Sets」の中の DCBE

および IHADCBE マクロの説明を参照してください。

使用済みの DASD スペースの計算このセクションでは、新規および既存の拡張フォーマット・データ・セットに関してシステムが DASD スペースを計算する方法について説明します。

新規データ・セット用のスペース: 新規拡張フォーマット・データ・セット用のスペースの割り振り時に BLKSIZE パラメーターまたは平均ブロック・サイズを指定する場合は、システムが各ブロックに追加する 32 バイトの接尾部について検討してください。プログラムはこの接尾部を認識しません。接尾部の長さは、DCB、DCBE、JFCB、または DSCB の BLKSIZE 値には組み込まれません。

既存のデータ・セット用のスペース: 一部のプログラムは、データ・セット制御ブロック (DSCB) を読み取って、使用済みのトラックの数または未使用スペースの量を計算します。拡張フォーマット・データ・セットの場合、フィールド DS1LSTAR

および DS1TRBAL は、順次データ・セットの場合とは異なる意味を持ちます。DS1STRIP をテストするために、あるいは DCBE で DCBESIZE をテストするためにプログラムを変更することができます。DSCB フィールドについては、「z/OS

DFSMSdfp Advanced Services」の中に説明があります。DCBE フィールドについては、「z/OS DFSMS Macro Instructions for Data Sets」を参照してください。

拡張フォーマット・データ・セットは、各ボリューム上で 65 535 トラックを超えるトラック数を使用可能です。拡張フォーマット・データ・セットは、DS1TRBAL とDS1LSTAR を併用し、データを含むトラックの数より 1 つ少ない数を表します。したがって、拡張フォーマット・データ・セットの場合、 DS1TRBAL は、書き込まれた最後のトラックに残っているスペース量を反映していません。 DS1TRBAL

に依存してフリー・スペースの量を決定するプログラムは、データ・セットが拡張フォーマット・データ・セットであるかどうかを最初に検査する必要があります。

ラージ・フォーマット・データ・セットの処理ラージ・フォーマット・データ・セットは物理的な順次データ・セットであり、一般的には、他の非拡張フォーマットの順次データ・セットと同じ特性を持っていますが、基本フォーマットのサイズ制限である、各ボリューム上での 65 535 トラックを超えて拡張可能です。(これは、ブロック・サイズによって異なりますが、約3 500 000 000 バイトです。) ラージ・フォーマット・データ・セットを使用すると、単一データ・セットに対してマルチボリューム使用の必要性を減少させます。

順次データ・セットの処理

484 z/OS V1R10 DFSMS データ・セットの使用法

Page 509: DFSMS データ・セットの使用法

特に、スプール・データ・セット、ダンプ、ログ、およびトレースのような非常に大規模なデータ・セットがそれに該当します。拡張フォーマット・データ・セット(ボリューム当たり 65 535 トラックよりも多くのトラック数もサポート) と異なり、ラージ・フォーマット・データ・セットは EXCP と矛盾なく機能し、SMS 管理対象にする必要がありません。

ラージ・フォーマットとして定義されたデータ・セットは、QSAM、BSAM、またはEXCP を使用してアクセスする必要があります。

ラージ・フォーマット・データ・セットの特性ラージ・フォーマット・データ・セットの特性を以下に記述します。

v (ラージ・フォーマット・データ・セットは、各ボリューム上に最大 16 のエクステントを保有します。)

v 各ラージ・フォーマット・データ・セットは、最大 59 ボリュームを保有できます。したがって、ラージ・フォーマット・データ・セットは、最大 944 エクステント (16 x 59) を保有できます。

v ラージ・フォーマット・データ・セットは、ボリューム当たり 65 535 トラックの制約を受けずに、任意のトラック数を占有可能です。

v ラージ・フォーマット・データ・セットに対する最小サイズ制限は、データが入った他の順次データ・セットの制限と同じです。すなわち、1 トラックで、約56 000 バイトです。

v 1 次または 2 次スペースは両方共に、ボリューム当たり 65 535 トラックを超えることができます。

v ラージ・フォーマット・データ・セットは、SMS 管理対象 DASD または非SMS 管理対象 DASD 上のいずれにあっても構いません。

v ラージ・フォーマット・データ・セットは、カタログまたは非 カタログのいずれでも構いません。

v NOTE または POINT マクロを指定した BSAM を使用するプログラムでは、ラージ・フォーマット・データ・セットを使用するのに修正が必要となる可能性があります。すなわち、このプログラムでは、DCBE マクロ上のBLOCKTOKENSIZE=LARGE パラメーターを指定する必要があります。ただし、そのデータ・セットが現行ボリューム上で 65 536 トラックよりも少ないトラック数を含む場合、およびそのデータ・セットが INPUT または UPDAT オプション指定でオープンされている場合を除きます。

v EXCP マクロを使用するプログラムでは、ラージ・フォーマット・データ・セットを使用するのに変更が必要となる可能性があります。すなわち、このプログラムでは、DCBE マクロ上の BLOCKTOKENSIZE=LARGE パラメーターを指定する必要があります。ただし、そのデータ・セットが現行ボリューム上で 65 536

トラックよりも少ないトラック数を含む場合、およびそのデータ・セットがINPUT オプション指定でオープンされている場合を除きます。

v ラージ・フォーマット・データ・セットをオープンする場合の他の考慮事項は、486ページの『ラージ・フォーマット・データ・セットのオープンおよびクローズ』を参照してください。

順次データ・セットの処理

第 25 章 順次データ・セットの処理 485

Page 510: DFSMS データ・セットの使用法

ラージ・フォーマット・データ・セットの割り振りラージ・フォーマット・データ・セットの割り振りに関する指針:

v ラージ・フォーマット・データ・セットを割り振るには、JCL DD ステートメント、アクセス方式サービス・プログラム ALLOCATE コマンド、TSO/E

ALLOCATE コマンド、または SVC 99 (動的割り振り) 上で、DSNTYPE 値として LARGE を指定します。

v DD ステートメント、ALLOCATE コマンド、または動的割り振りで、DSNTYPE

が無指定で、かつ、DSORG が PS または PSU 以外のどのような値にも設定されていない場合、データ・クラスでは、デフォルトとして LARGE の値を指定可能です。

v DSORG では DSORG=PS または DSORG=PSU を設定するか、または省略する必要があります。

制約事項: 次のタイプのデータ・セットは、ラージ・フォーマット・データ・セットとして割り振ることはできません。v PDS、PDSE、および直接データ・セットv 仮想入出力データ・セット、パスワード・データ・セット、およびシステム・ダンプ・データ・セット

以下の場合、ラージ・フォーマット・データ・セットをサポートしません。v BDAM アクセス方式、および TSO/E LISTDSI、EXECIO、COPY、XMIT、

RECEIVE コマンド。v SYS1.PARMLIB の IGDSMSxx メンバーで BLOCKTOKENSIZE(REQUIRE) オプションが有効になっていると、高水準言語ではラージ・フォーマット・データ・セットをサポートしません。

関連資料: 詳しくは、 36ページの『システム管理データ・セットの割り振り』を参照してください。

ラージ・フォーマット・データ・セットのオープンおよびクローズラージ・フォーマット・データ・セットに対して OPEN マクロを呼び出す場合、多くのケースで DCBE マクロの BLOCKTOKENSIZE=LARGE オプションが必要となります。この指定が必要かどうかは、SYS1.PARMLIB メンバーの IGDSMSxx のBLOCKTOKENSIZE キーワード値により異なります。指定可能な値とその影響は以下のとおりです。

SYS1.PARMLIB の IGDSMSxx の BLOCKTOKENSIZE(REQUIRE)ラージ・フォーマット・データ・セットに対するすべての OPEN は、DCBE マクロ上で BLOCKTOKENSIZE=LARGE パラメーターが必要です。ただし、そのデータ・セットがボリューム当たり 65 535 トラックよりも少ないトラック数を含む場合で、かつ、その OPEN が EXCP、BSAM、または QSAM を使用する入力用か、BSAM または QSAM を使用する更新用の場合は除外します。

SYS1.PARMLIB の IGDSMSxx の BLOCKTOKENSIZE(NOREQUIRE)アプリケーションは、DCBE マクロの BLOCKTOKENSIZE=LARGE を指定する必要なしに、もっと多くの条件下でラージ・フォーマット・データ・セットをアクセス可能です。このアプリケーションとデータ・セットは以下の条件のすべてを満足する必要があります。

順次データ・セットの処理

486 z/OS V1R10 DFSMS データ・セットの使用法

Page 511: DFSMS データ・セットの使用法

v アクセス方式は QSAM であるか、または NOTE または POINT マクロを使用しない BSAM である。

v アクセス方式は、NOTE または POINT マクロ (MACRF=xP をコーディング) を使用する BSAM であり、そのデータ・セットはボリューム上に65535 トラック以下のトラック数を保有し、その OPEN オプションがINPUT またはUPDAT である。

v アクセス方式が EXCP (MACRF=E をコーディング) であり、そのデータ・セットはボリューム上に 65535 トラック以下のトラック数を保有し、その OPEN オプションが INPUT である。

そのシステム・オプションが無指定の場合、 BLOCKTOKENSIZE

(NOREQUIRE) がデフォルトです。

アクセス方式が QSAM、BSAM、または EXCP でない場合、OPEN は ABEND

213-10 をラージ・フォーマットの順次データ・セットに対して発行することになります。アプリケーション・プログラムがボリューム (1 次、2 次、または後続のボリューム) 上のデータ・セット全体をアクセスできない場合、OPEN では ABEND

213-14、213-15、213-16、または 213-17 を発行し、EOV では ABEND 737-44 または 737-45 を発行することになります。

ラージ・フォーマット・データ・セットへのマイグレーション通常は、お客様はプログラムに対してほとんど、または全く変更を行う必要はありません。それによって、そのプログラムは 3 つのフォーマットの順次データ・セット (基本、ラージ、および拡張フォーマット) すべての読み取りと書き込みが可能です。以下のセクションでは、お客様のプログラムをもっと汎用化するための考慮事項を記載してあります。

既存の BSAM、QSAM、および EXCP アプリケーションの変更ラージ・フォーマット・データ・セットに対応する目的で、以下のインターフェースを使用するアプリケーションをチェックする必要があり、変更する必要が生じる可能性があります。また、このアプリケーションでは、DCBE マクロのBLOCKTOKENSIZE=LARGE を指定して、以下のインターフェースに準拠することを示す必要があります。

v BSAM NOTE および POINT マクロ: これらは一般に相対トラック番号として 4

バイト値 (TTR0) を使用します。ラージ・フォーマット・データ・セットの場合、これらのマクロは TTR0 の代わりにレジスターの中で TTTR 値を使用する必要があり、BLOCKTOKENSIZE=LARGE パラメーターを DCBE マクロ上に設定時に全データ・セットに対してそのようにすることになります。また、BPAM

NOTE と POINT マクロと一緒に BLOCKTOKENSIZE=LARGE を使用可能ですが、BLDL と STOW マクロは BLOCKTOKENSIZE には影響されません。

v データ・エクステント・ブロック (DEB) 内のトラック数フィールド(DEBNMTRK): ラージ・フォーマット・データ・セットの場合、このDEBNMTRK フィールドにはトラック数の下位 2 バイトが含まれ、DEBNmTrkHi

には高位バイトが含まれます。

v フォーマット 1 DSCB 内の DS1LSTAR フィールド: このフィールドには、最終使用トラックのトラック番号が入ります。ラージ・フォーマット・データ・セットの場合、トラック番号の追加高位バイトが、オフセット X’68’ のフィールドDS1TTTHI の中に含まれます。

順次データ・セットの処理

第 25 章 順次データ・セットの処理 487

Page 512: DFSMS データ・セットの使用法

v トラック・アドレス変換ルーチン (相対 (TTR) と絶対 (MBBCCHHR) トラック・アドレス間の変換を行う): これらのルーチンは 3 バイトの TTR 値を使用します。ラージ・フォーマット・データ・セットの場合、アプリケーションはこれらのルーチン (CVTPRLTV と CVTPCNVT によりポイントされる) を、オフセット +12 の新しいエントリー・ポイント指定で使用する必要があります。この場合に、これらのルーチンはレジスター 0 内で TTTR アドレス値を使用します。これらの変換ルーチンの詳細は「 z/OS DFSMSdfp Advanced Services」を参照してください。

使用済みの DASD スペースの計算ラージ・フォーマット・データ・セットが割り振られると、DS1Large ビット(X’08’) が DSCB の DSFLAG1 フィールドに設定されます。DASD スペース使用状況を計算するプログラムは、このフラグ・ビットをチェック可能であり、どのエクステント (ユーザー・ラベル・エクステント以外) も 65 535 トラックを超えているかどうかの可能性を考慮します。

順次データ・セットの処理

488 z/OS V1R10 DFSMS データ・セットの使用法

Page 513: DFSMS データ・セットの使用法

第 26 章 区分データ・セット (PDS) の処理

この章では以下のトピックを扱います。

トピック 該当ページ

PDS の構造 489

PDS ディレクトリー 490

PDS 用のスペースの割り振り 493

PDS の作成 495

PDS のメンバーの処理 500

PDS のメンバーの検索 506

PDS の変更 510

PDS の連結 513

PDS ディレクトリーを順次に読み取る 514

PDSE の処理については 515ページの『第 27 章 拡張区分データ・セット (PDSE)の処理』に説明があります。

PDS の構造PDS は、直接アクセス記憶装置にだけ保管されます。これは、順次に編成されたメンバーに分割されており、それぞれは 1 つ以上のディレクトリー項目によって記述されます。

各メンバーには 1 から 8 文字の長さの固有な名前があり、データ・セットの一部であるディレクトリーに保管されています。所定のメンバーのレコードは、順次に書き込まれるか、検索されます。

PDS を使用する主な利点は、データ・セットがオープンした後に、データ・セット全体を検索しなくとも、個々のメンバーを検索できることです。たとえば、常にPDS であるプログラム・ライブラリーで、各メンバーは個別のプログラムまたはサブルーチンです。個々のメンバーは、必要に応じて追加または削除できます。メンバーが削除されると、メンバー名がディレクトリーから除去されますが、メンバーによって使用されたスペースは、データ・セットが再編成されるまで、つまりIEBCOPY ユーティリティーを使用して圧縮されるまで、再使用することはできません。

ディレクトリー、すなわちデータ・セットの先頭にある一連の 256 バイトのレコードには、各メンバーの項目が含まれています。各ディレクトリー項目には、メンバー名およびデータ・セット内でのメンバーのロケーションが入っています ( 490ページの図 72 を参照してください)。また、項目には、62 バイトもの情報も指定できます。ディレクトリー項目は、英数字照合シーケンスで名前別に配置されています。

© Copyright IBM Corp. 1987, 2008 489

Page 514: DFSMS データ・セットの使用法

関連資料: PDS と一緒に使用するマクロについては、「z/OS DFSMS Macro

Instructions for Data Sets」を参照してください。

各メンバーの開始ロケーションは、絶対トラック・アドレスとしてではなく、相対トラック・アドレス (データ・セットの開始からの) としてシステムによって記録されます。したがって、ディレクトリー内の相対トラック・アドレスを変更することなく、圧縮されたデータ・セット全体を移動することができます。データ・セットは、スペースが実際にどこに割り振られたかにかかわらず、1 つの連続したトラックのセットと見なすことができます。

ディレクトリー内に追加の項目用の十分なスペースがないか、データ・セット内に追加のメンバー用の十分なスペースがないか、またはボリューム上に追加のエクステント用の余地がない場合、新規メンバーを保管することはできません。ディレクトリーは拡張できず、PDS はボリューム境界を超えることはできません。

PDS ディレクトリーPDS のディレクトリーは、直接アクセス・ボリューム上でデータ・セットに割り振られた区域の先頭を占めます。これは、BLDL、FIND、および STOW マクロによって検索および保持されます。ディレクトリーは、メンバー名または別名の 2 進値に従って昇順に配置されるメンバー項目から成ります。

PDS メンバー項目は、長さが変化し、256 バイトのブロックにブロック化されます。各ブロックには、最大 254 バイトに収まるだけの数の完全な項目が入ります。残りのバイトは未使用で残され、無視されます。各ディレクトリー・ブロックには、ブロック内のアクティブなバイトの数 (カウント・フィールドを含む) を指定する 2 バイトのカウント・フィールドが入っています。 491ページの図 73 では、各ブロックの前に、ブロック内の最後のメンバー項目の名前、つまり最高の 2 進値を持つメンバー名を含むハードウェア定義キー・フィールドが先行します。 491ページの図 73 は、BSAM を使用してディレクトリーを読み取るときに戻されるブロックのフォーマットを示しています。

図 72. 区分データ・セット (PDS)

区分データ・セット (PDS) の処理

490 z/OS V1R10 DFSMS データ・セットの使用法

Page 515: DFSMS データ・セットの使用法

各メンバー項目には、メンバー名または別名が含まれます。図 74 に示すように、各項目には、メンバーの相対トラック・アドレスおよびカウント・フィールドも含まれます。これには、ユーザー・データ・フィールドも含めることができます。最後に使用されたディレクトリー・ブロックにある最後の項目は、最大の 2 進値の名前フィールド (すべて 1、ゼロからなる TTR フィールド、およびゼロ長のユーザー・データ・フィールド) を持ちます。

図 74 は、次のフィールドを示しています。

メンバー名 ― メンバー名または別名を指定します。これには、左寄せされ、必要な場合はブランクが埋め込まれた 8 つの英数字が含まれます。

TTR ― メンバーの最初のブロックへのポインターです。 TT はデータ・セットの先頭について 0 から開始するトラックの番号であり、 R はそのトラックの先頭について 1 から開始するブロックの番号です。

C ― ユーザー・データ・フィールドに含まれるハーフワードの数を指定します。これには、下に示すように、ユーザー・データ・フィールドについての追加の情報も

図 73. PDS ディレクトリー・ブロック

図 74. PDS ディレクトリー項目

区分データ・セット (PDS) の処理

第 26 章 区分データ・セット (PDS) の処理 491

Page 516: DFSMS データ・セットの使用法

含まれます。

0 ― 1 に設定されるときは、NAME フィールドに別名が含まれることを示します。

1 から 2 ― メンバー内のロケーションへのポインターの数を指定します。

オペレーティング・システムは、ユーザー・データ・フィールドで最大 3 つのポインターをサポートしています。次の注で説明される注釈リストと呼ばれるレコードに追加のポインターを含めることができます。データ・セットが IEHMOVE などのユーティリティー・プログラムによって移動あるいはコピーされるとき、ポインターを自動的に更新することができます。データ・セットは、次の条件のどれかにより、移動不能だとマークされる必要があります。

v ユーザー・データ・フィールドで 4 つ以上のポインターが使用される。

v ユーザー・データ・フィールドまたは注釈リストにあるポインターが標準フォーマットに準拠しない。

可変長レコードに含まれる PDS についての注釈リストが標準フォーマットに準拠しません。可変長レコードには、IEHMOVE によって TTRX として扱われるBDW および RDW が含まれます。

v ポインターがユーザー・データ・フィールドで最初に置かれない。

v 直接アクセス・アドレス (絶対または相対) が、データ・ブロックまたは処理中のデータ・セットを参照する別のデータ・セットに組み込まれている。

3 から 7 ― ユーザー・データのハーフワードの数を示す 2 進値を含みます。この数には、ユーザー・データ・フィールドでポインターによって使用されるスペースが含まれる必要があります。

ユーザー・データ・フィールドを使用して、STOW マクロへの入力としての変数データを提供することができます。メンバー内のロケーションへのポインターが提供される場合、それらは 4 バイトの長さで、ユーザー・データ・フィールドで最初に置かれる必要があります。ユーザー・データ・フィールド・フォーマットは、次のとおりです。

TT ― 注釈リストまたはポイントしている区域の相対トラック・アドレスです。

R ― そのトラック上の相対ブロック番号です。

N ― TTR によってポイントされた注釈リストに含まれる追加のポインターの数を示す 2 進値です。ポインターが注釈リストでない場合は、N=0。

区分データ・セット (PDS) の処理

492 z/OS V1R10 DFSMS データ・セットの使用法

Page 517: DFSMS データ・セットの使用法

注釈リストは、PDS の同じメンバー内のブロックへの追加のポインターから構成されます。メンバーをサブグループに分割し、注釈リストの各サブグループの先頭にポインターを保管します。メンバーは、多くの制御セクション (CSECT) を含むロード・モジュールにすることができ、各 CSECT は注釈リスト内の項目によってポイントされるサブグループです。サブグループの最初のレコードを書き込んだ後、NOTE マクロを使用して、サブグループの先頭をポイントします。メンバーの最初のレコードへのポインターは、システムによってディレクトリー項目に保管されることを忘れないでください。

注釈リストが存在する場合、上に示すように、IEHMOVE などのユーティリティー・プログラムによってデータ・セットが移動またはコピーされるときに、リストを自動的に更新することができます。注釈リストにあるそれぞれ 4 バイトの項目は、次のフォーマットを持ちます。

TT ― ポイントしている区域の相対トラック・アドレスです。

R ― そのトラック上の相対ブロック番号です。

X ― 任意の用途に使用できます。

PDS 内に注釈リストを置くには、WRITE マクロを使用する必要があります。書き込み操作を検査した後、NOTE マクロを使用して、リストのアドレスを判別し、そのアドレスをディレクトリー項目のユーザー・データ・フィールドに置きます。

リンケージ・エディターは、オーバーレイ・フォーマットでロード・モジュール用の注釈をビルドします。注釈リスト内のアドレスは、システム内に個別に読み取られるオーバーレイ・セグメントをポイントします。

制約事項: 注釈リストは PDSE 用にはサポートされていません。 PDS が PDSE に変換される場合、PDS は注釈リストを使用してはなりません。

PDS 用のスペースの割り振りPDS を割り振るには、JCL またはデータ・クラスで、DSNTYPE パラメーター内のPDS および SPACE パラメーター内のディレクトリー・ブロックの数を指定します。ディレクトリー・ブロックの数を指定しないと、割り振りが失敗します。

ブロック・サイズを指定せず、レコード・フォーマットが固定または可変である場合、 OPEN がユーザーに代わって最適ブロック・サイズを決定します。したがって、トラック長に基づいて計算を行う必要はありません。データ・セット用のスペースを割り振るとき、 SPACE および AVGREC パラメーターを使用して平均レコード長をキロバイトまたはメガバイト単位で指定し、システムにそれがデータ・セット用に計算したブロック・サイズを使用させます。

データ・セットが大きい場合、またはそれを広範囲に更新することが予期される場合は、大きなデータ・セットを割り振るのが最良です。PDS は、65 535 トラックを超えて占有することはできず、1 つのボリュームを超えて拡張することはできま

区分データ・セット (PDS) の処理

第 26 章 区分データ・セット (PDS) の処理 493

Page 518: DFSMS データ・セットの使用法

せん。データ・セットが小さいか、ほとんど変更されない場合、システムにスペース所要量を計算させ、スペースの浪費またはデータ・セットを再作成するための時間の浪費を回避します。

VSAM、拡張フォーマット、HFS、および PDSE データ・セットは、65 535 を超えるトラックを占めることができます。

スペースの計算スペース所要量をご自身で見積もりたい場合、スペース所要量を正確に見積もり、スペースを効率的に使用するために、次の質問に答える必要があります。

v 直接アクセス・ボリュームに保管するメンバーの平均サイズはどのくらいですか?

v ボリュームに幾つのメンバーが収まりますか?

v メンバー名についてだけディレクトリー項目が必要ですか、あるいは別名が使用されますか? その場合、幾つになりますか?

v メンバーは頻繁に追加または置き換えられますか?

ブロック・サイズをご自身で計算し、それを DCB または DCBE の BLKSIZE パラメーターで指定することができます。たとえば、平均レコード長がトラック長に近いか、それより短い場合、またはトラック長が 32 760 バイトを超える場合、直接アクセス記憶装置の最も効率的な使用は、ブロック・サイズがトラック長の 1/3 または 1/2 のときに行うことができます。

3380 DASD の場合は、75 トラック、または 5 シリンダーを要求することによって3 480 ,000 バイトのデータが可能になります。 3 480 000 バイトの割り振りサイズと各メンバーごとに 70 000 バイトの平均長さを想定することにより、少なくとも 50

ディレクトリー項目のスペースを必要とします。また、各メンバーが平均 3 つの別名を持つ場合は、150 ディレクトリー項目用のスペースが必要とされます。

データ・セット内の各メンバーおよび各別名は、それぞれ 1 つのディレクトリー項目を必要とします。 10 のメンバー (10 のディレクトリー項目) および各メンバーごとに平均して 3 つの別名 (30 のディレクトリー項目) を持つことが予期される場合、少なくとも 40 のディレクトリー項目用のスペースを割り振ります。

ディレクトリー用のスペースは 256 バイトのブロックで表されます。各ブロックには、ユーザー・データ・フィールドの長さに応じて、3 から 21 の項目が含まれます。200 のディレクトリー項目を予期する場合は、少なくとも 10 のブロックを要求します。ディレクトリーの最後のトラックの未使用スペースは、最初のメンバーのブロックを入れるのに十分なスペースが残されていない限り、無駄になります。

次のスペース指定のどれも、3380 DASD に対してほぼ同じ量のスペースが割り振ることになります。ディレクトリーごとに 10 のブロックが割り振られました。最初の 2 つの例は、ディレクトリー用に個別のトラックを割り振りません。 3 番目の例は、データ用に 75 トラック、さらにディレクトリー・スペース用に 1 トラックを割り振ることになります。

SPACE=(CYL,(5,,10))

SPACE=(TRK,(75,,10))

SPACE=(23200,(150,,10))

区分データ・セット (PDS) の処理

494 z/OS V1R10 DFSMS データ・セットの使用法

Page 519: DFSMS データ・セットの使用法

SPACE および AVGREC を使用したスペースの割り振りSPACE と AVGREC JCL キーワードの両方を一緒に使用することによってスペースを割り振ることもできます。次の例では、平均長さはメンバーごとに 70 000 バイト、メンバー内の各レコードが 80 バイトの長さで、ブロック・サイズが 23 200 です。 AVGREC キーワードを使用すると、SPACE で指定された最初の値は、平均ブロック長から平均レコード長に変化します。これらの例は、装置独立です。それらはスペースをトラックまたはシリンダーではなく、バイトで要求するからです。それらは、前の例とほぼ同じ量のスペースを割り振ることになります (装置が 3380

ディスクである場合は約 75 トラック)。

SPACE=(80,(44,,10)),AVGREC=K

SPACE=(80,(43500,,10)),AVGREC=U

これらの例では 2 次割り振り増分が省略されているにもかかわらず、メンバー・区域の拡張を提供するためにそれが提供されることがあります。ただし、ディレクトリー・サイズは拡張できません。ディレクトリーは最初のエクステントになければなりません。

推奨: SPACE パラメーターは、データ・クラス、 LIKE キーワード、または DD

ステートメントから派生させることができます。データ・クラスで定義されているスペース割り振り量を使用したくない場合は、DD ステートメントの SPACE パラメーターを指定します。

関連資料: SPACE および AVGREC パラメーターの使用の詳細については、このマニュアル内の 41ページの『第 3 章 直接アクセス・ボリュームでのスペースの割り振り』を参照してください。また、「z/OS MVS JCL 解説書」および「z/OS MVS

JCL ユーザーズ・ガイド」も参照してください。

PDS の作成BSAM、QSAM、または BPAM を使用して PDS または PDS のメンバーを作成することができます。

BSAM または QSAM を使用した PDS メンバーの作成プログラムがディレクトリーに項目を追加することを必要としない (STOW マクロが使用されない) 場合、 496ページの図 75 にあるような、PDS のメンバーを書き込むことができます。

以下のステップは、データ・セットをとそのディレクトリーを作成し、メンバーのレコードを書き込み、ディレクトリーに 12 バイトの項目をメークします。

1. DCB マクロに DSORG=PS または DSORG=PSU をコーディングします。

2. DD ステートメントで、データを新規 PDS のメンバーとして保管します。つまり DSNAME=name(membername) および DISP=NEW。

3. オプションにより、DD ステートメントでデータ・クラスを指定するか、ACS

ルーチンにデータ・クラスを割り当てさせます。

4. SPACE パラメーターを使用して、DD ステートメントでメンバーおよびディレクトリー用のスペースを要求するか、またはデータ・クラスからスペースを取得します。

区分データ・セット (PDS) の処理

第 26 章 区分データ・セット (PDS) の処理 495

Page 520: DFSMS データ・セットの使用法

5. OPEN マクロ、一連の PUT または WRITE マクロ、および CLOSE マクロを使用してメンバーを処理します。データ・セットがクローズされると STOW マクロが自動的に発行されます。

上記の条件に該当するが、DSORG=PO (BPAM を使用するため) をコーディングし、CLOSE の前の DCB での最後の操作が STOW マクロである場合、CLOSE はSTOW マクロを発行しません。

標準外 PDS メンバー名の作成前項では、メンバー名が JCL の DD ステートメントにて指定されている場合の、PDS におけるメンバーの作成方法が記述されています。特定の文字セットの文字で構成されているメンバー名のみを、JCL で指定することができます。サポート対象の文字セットに関する詳細は、「z/OS MVS JCL 解説書」の『文字セット』のセクションを参照してください。JCL がサポートしていない文字セットのメンバー名を作成する必要がある場合は、 BPAM を用いて独自の STOW マクロを発行するか、あるいは次の手順に従い BSAM または QSAM を使う必要があります。 (例: 497

ページの図 76 を参照してください。)

1. DCB マクロに DSORG=PS または DSORG=PSU をコーディングします。

2. DD ステートメントに、メンバーを作成する PDS の名前 (つまりDSNAME=dsname) を指定します。必要に応じて他のパラメーターをコーディングします。

3. JFCB 制御ブロックのコピーを得るためにプログラムが RDJFCB マクロを発行した場合、これが JCL DD ステートメントを意味します。RDJFCB マクロについては、「z/OS DFSMSdfp Advanced Services」に記載されています。

4. JFCBELNM を更新する場合のメンバー名については、JCL にて指定されている文字に限定されることはありません。すべてが X’FF’ のバイトでメンバー名を構成することはできません。

5. OPEN TYPE=J マクロ、一連の PUT または WRITE マクロ、および CLOSE

マクロを使用してメンバーを処理します。データ・セットがクローズされるとシステムが STOW マクロを発行します。

注: JFCBELNM で指定されたメンバー名が ’+’ (X’4E’)、’-’ (X’60’)、またはX’Fx’で始まる場合は、システムは STOW マクロを発行しません。CLOSE

は、JFCBELNM の ’+’ (X’4E’)、’-’ (X’60’)、または X’Fx’ が「そのデータ・セットは世代別データ・グループ (GDG) の世代別データ・セット(GDS)である」ということを示している、と解釈します。

//PDSDD DD ---,DSNAME=MASTFILE(MEMBERK),SPACE=(TRK,(100,5,7)),// DISP=(NEW,CATLG),DCB=(RECFM=FB,LRECL=80,BLKSIZE=80)---

...OPEN (OUTDCB,(OUTPUT))...PUT OUTDCB,OUTAREA Write record to member...CLOSE (OUTDCB) Automatic STOW...

OUTAREA DS CL80 Area to write fromOUTDCB DCB ---,DSORG=PS,DDNAME=PDSDD,MACRF=PM

図 75. PDS の 1 つのメンバーの作成

区分データ・セット (PDS) の処理

496 z/OS V1R10 DFSMS データ・セットの使用法

Page 521: DFSMS データ・セットの使用法

上記の条件に該当するが、DSORG=PO (BPAM を使用するため) をコーディングし、CLOSE の前の DCB での最後の操作が STOW マクロである場合、CLOSE はSTOW マクロを発行しません。

PDS の変換IEBCOPY または DFSMSdss COPY を使用して、以下のようにデータ・セットを変換することができます。

v PDS から PDSE へ

v PDSE から PDS へ

関連資料: IEBCOPY および DFSMSdss を使用して PDS を PDSE に変換する方法の例については、 561ページの『PDS を PDSE に変換、および元に戻す』を参照してください。

PDS またはメンバーの別のデータ・セットへのコピーTSO/E セッションでは、OCOPY コマンドを使用して、以下のいずれかのデータ・セットをコピーすることができます。

v PDS または PDSE メンバーを UNIX ファイルに

v UNIX ファイルを PDS または PDSE メンバーに

v PDS または PDSE メンバーを別のメンバーに

v PDS または PDSE メンバーを順次データ・セットに

v 順次データ・セットを PDS または PDSE メンバーに

関連資料: 詳しくは、「z/OS UNIX System Services コマンド解説書」を参照してください。

メンバーの追加PDS に追加のメンバーを追加するには、 496ページの図 75 に説明されているプロシージャーに従います。ただし、各メンバーに個別の DD ステートメント (スペース要求は省略) が必要です。後処理は、変更として指定する必要があります(DISP=MOD)。 DD ステートメントで新規メンバーが指定されるたびにデータ・セットをクローズして、再オープンする必要があります。

//PDSDD DD ---,DSNAME=MASTFILE,SPACE=(TRK,(100,5,7)),// DISP=(NEW,CATLG),DCB=(RECFM=FB,LRECL=80)---

...RDJFCB (OUTDCB)...MVC JFCBELNM,NAME...OPEN (OUTDCB,(OUTPUT)),TYPE=J...PUT OUTDCB,OUTAREA Write record to member...CLOSE (OUTDCB) Automatic STOW...

OUTAREA DS CL80 Area to write fromOUTDCB DCB ---,DSORG=PS,DDNAME=PDSDD,MACRF=PMNAME DC XL8’0123456789ABCDEF’

図 76. PDS での標準外メンバー名の作成

区分データ・セット (PDS) の処理

第 26 章 区分データ・セット (PDS) の処理 497

Page 522: DFSMS データ・セットの使用法

基本区分アクセス方式 (BPAM) を使用して、データ・セットをクローズおよび再オープンせずに、複数のメンバーを処理することができます。STOW、BLDL、およびFIND マクロを使用して、次のように各ディレクトリー項目でさらに情報を提供します。

v DD ステートメントで、全体のデータ・セットおよびディレクトリー用のスペースを要求します。

v DCB マクロで DSORG=PO または DSORG=POU と定義します。

v WRITE および CHECK を使用して、メンバー・レコードを書き込んで、検査します。

v NOTE を使用して、注釈リストがある場合は、メンバー内に書き込まれた注釈リストのロケーションを注釈するか、サブグループのロケーションを注釈します。注釈リストは、メンバー内の各サブグループの先頭にポイントするために使用されます。

v すべてのメンバー・レコードが書き込まれたら、STOW マクロを発行してメンバー名、そのロケーション・ポインター、およびディレクトリー内の追加データを入力します。 STOW マクロは、メンバーの後でファイル・マークを書き込みます。

v データ・セットのメンバーおよびディレクトリー項目がすべて書き込まれるまで、 WRITE、CHECK、NOTE、および STOW マクロを引き続き使用します。

区分データ・セット (PDS) の処理

498 z/OS V1R10 DFSMS データ・セットの使用法

Page 523: DFSMS データ・セットの使用法

図 77 は、STOW を使用して PDS のメンバーを作成する例です。

推奨: PDSE の場合では、図 77 の例を使用しないでください。ご使用のシステムがPDS を PDSE に変換することを計画している場合は、 533ページの図 93 に説明されているプロシージャーに従ってください。

//PDSDD DD ---,DSN=MASTFILE,DISP=MOD,SPACE=(TRK,(100,5,7))...OPEN (OUTDCB,(OUTPUT))LA STOWREG,STOWLIST Load address of STOW list...

** WRITE MEMBER RECORDS AND NOTE LIST

MEMBER WRITE DECBX,SF,OUTDCB,OUTAREA WRITE first record of memberCHECK DECBXLA NOTEREG,NOTELIST Load address of NOTE list

*WRITE DECBY,SF,OUTDCB,OUTAREA WRITE and CHECK next recordCHECK DECBY

*NOTE OUTDCB To divide the member into subgroups,ST R1,0(NOTEREG) NOTE the TTRN of the first record in

* the subgroup, storing it in the NOTE list.LA NOTEREG,4(NOTEREG) Increment to next NOTE list entry...WRITE DECBZ,SF,OUTDCB,NOTELIST WRITE NOTE list record at the

* end of the memberCHECK DECBZNOTE OUTDCB NOTE TTRN of NOTE list recordST R1,12(STOWREG) Store TTRN in STOW listSTOW OUTDCB,(STOWREG),A Enter the information in directory

* for this member after all records* and NOTE lists are written.

LA STOWREG,16(STOWREG) Increment to the next STOW list entry...

各追加メンバーごとにラベル 『MEMBER』 から繰り返し、各メンバーの『STOWLIST』 にあるメンバー名を変更します

...CLOSE (OUTDCB) (NO automatic STOW)...

OUTAREA DS CL80 Area to write fromOUTDCB DCB ---,DSORG=PO,DDNAME=PDSDD,MACRF=WR1 EQU 1 Register one, return register from NOTENOTEREG EQU 4 Register to address NOTE listNOTELIST DS 0F NOTE list

DS F NOTE list entry (4 byte TTRN)DS 19F one entry per subgroup

STOWREG EQU 5 Register to address STOW listSTOWLIST DS 0F List of member names for STOW

DC CL8’MEMBERA’ Name of memberDS CL3 TTR of first record (created by STOW)DC X’23’ C byte, 1 user TTRN, 4 bytes of user dataDS CL4 TTRN of NOTE list... one list entry per member (16 bytes each)

図 77. STOW を使用しての PDS のメンバーの作成

区分データ・セット (PDS) の処理

第 26 章 区分データ・セット (PDS) の処理 499

Page 524: DFSMS データ・セットの使用法

PDS のメンバーの処理PDS のメンバーは、順次に編成されるので、順次データ・セットと同じ方法で処理されます。メンバーを位置指定するか、ディレクトリーを処理するために、オペレーティング・システムによっていくつかのマクロが提供されています。BLDL マクロを使用して、1 つ以上のディレクトリー項目を仮想記憶域に読み取ることができます。 FIND マクロは、データ・セットのメンバーを位置指定し、DCB をそれ以降の処理用に位置決めします。STOW マクロは、ディレクトリー内のメンバー名を追加、削除、置換、または変更します。これらのマクロを使用するには、DCB マクロで DSORG=PO または POU と指定する必要があります。FIND、BLDL、またはSTOW マクロを発行する前に、先行するすべての入出力操作が完了しているかどうか検査する必要があります。

BLDL - ディレクトリー項目リストの構成BLDL マクロは、1 つ以上のディレクトリー項目を仮想記憶域に読み取ります。BLDL マクロを発行する前に、BLDL リストにメンバー名を置きます。リスト内の各メンバーについて、システムは相対トラック・アドレス (TTR) およびディレクトリー項目に含まれている追加の情報を提供します。リスト内に複数のメンバー名がある場合、メンバーが連結内の同じまたは異なる PDS または PDSE からのものであるかどうかとは無関係に、メンバー名は照合シーケンスになければなりません。

また、BLDL が連結された一連のディレクトリーを検索するのは、(1) 連結されたPDS 用にオープンされている DCB が提供されているとき、または (2) DCB が提供されていないときです。後者の場合、検索順序は、TASKLIB で開始され、次にJOBLIB または STEPLIB (それら自体はおそらく連結されています) に進み、さらに LINKLIB が続きます。

DCB を指定して START= または STOP= パラメーターを指定した場合に検索されるディレクトリーの順序を変更できます。これらのパラメーターを使用すると、検索対象データ・セットの先頭と最後の連結番号を指定可能となります。

処理されるメンバーの位置を見付けるために、後続の FIND マクロをディレクトリーではなく、BLDL リストに誘導することによって検索時間を短縮することができます。

BYPASSLLA オプションを指定することにより、BLDL を DASD でのみ PDS および PDSE ディレクトリーを検索するよう誘導できます。BYPASSLLA がコーディングされる場合、 BLDL コードが LLA を呼び出して、メンバー名を検索することはありません。

BLDL リストは、4 バイトのリスト記述子で開始する必要があります。これは、リスト内の項目の数および各項目の長さ (12 から 76 バイト) を指定します。 ( 501

ページの図 78 を参照してください。) BYPASSLLA オプションを指定する場合、8 バイトの BLDL 接頭部の前に、4 バイトのリスト記述子がある必要があります。

区分データ・セット (PDS) の処理

500 z/OS V1R10 DFSMS データ・セットの使用法

Page 525: DFSMS データ・セットの使用法

各項目の最初の 8 バイトには、メンバー名または別名が含まれています。次の 6

バイトには、TTR、K、Z、および C フィールドが含まれます。 ユーザー・データ項目がない場合は、TTR および C フィールドのみが必要です。ディレクトリーから追加情報が提供される場合は、62 バイトものバイトを予約できます。

DESERVDESERV マクロは、オープンされた PDS または PDSE の特定のメンバーまたはすべてのメンバーについてシステム管理ディレクトリー項目 (SMDE) を戻します。DESERV GET または DESERV GET_ALL を指定することができます。

FUNC=GETDESERV GET は、オープンされた PDS または PDSE の特定のメンバー、またはPDS および PDSE の連結に SMDE を戻します。データ・セットは、入力、出力、または更新用にオープンすることができます。SMDE には、PDS または PDSE ディレクトリーが含まれます。SMDE はマクロ IGWSMDE によってマップされ、IHAPDS によってマップされた情報のスーパーセットが含まれます。戻されたSMDE は、名前によって、または BLDL ディレクトリー項目によって選択することができます。

名前リストによる入力: SMDE を名前によって選択したい場合は、重複することなく、昇順でソートする必要がある名前のリストを提供します。各名前は、2 バイトの長さフィールドに続いて名前の文字が付いたものから構成されます。8 文字未満の文字が付いた名前を検索するときは、名前の右にブランクが埋め込まれ、8 文字を構成します。 8 文字より大きい名前は、検索の前に末尾ブランクおよびヌルがストリップされます (最小 8 の長さまで)。

図 78. BLDL リスト・フォーマット

区分データ・セット (PDS) の処理

第 26 章 区分データ・セット (PDS) の処理 501

Page 526: DFSMS データ・セットの使用法

SMDE を検索することに加えて、検索された各メンバー名ごとにメンバー・レベル接続を確立することができます。メンバーは、HOLD タイプの接続と接続されます。 HOLD の接続タイプは、接続が解放されるまでメンバーをシステムから除去することができないことを保証します。この接続を指定するには、CONN_INTENT=HOLD パラメーターを使用してください。

GET への単一の呼び出しを通じて行われた接続はすべて、単一の固有接続 ID と関連付けられます。RELEASE 接続の単一の起動でのすべての接続を解放するために、接続 ID を使用することもできます。図 79 は、DESERV GET の例を示しています。

BLDL ディレクトリー項目による入力 (PDSDE): 指定されている検索引数がPDSDE である場合、GET 機能は大幅に制限されます。 PDSDE (IHAPDS マクロによりマップされます) は、検索される 1 つの名前しか識別しません。PDSDE は、このメンバーが常駐するライブラリーの連結番号 (PDS2CNCT) のみを識別するので、そのライブラリーだけを検索できます。 PDSDE は、メンバー名の特定のバージョンを識別するので (この識別は MLT (PDS2TTRP) を通じて行われます)、そのターゲット・ライブラリーで同じバージョンを検索できる場合のみ、検索されたと見なすことができます。ただし、ライブラリー検索は、ターゲット・ライブラリーが PDSE の場合のみ行うことができます。ターゲット・ライブラリーが PDS である場合、入力 PDSDE は、単に SMDE フォーマットの同等のディレクトリー項目

図 79. NAME_LIST 制御ブロック構造による DESERV GET

区分データ・セット (PDS) の処理

502 z/OS V1R10 DFSMS データ・セットの使用法

Page 527: DFSMS データ・セットの使用法

に変換され、戻されます。ディレクトリー検索は行うことができません。呼び出し元が BYPASS_LLA=NO と指定した場合、ライブラリー検索は LLA を検索してLLA 管理ライブラリーがないか調べます。呼び出し元が BYPASS_LLA=YES を指定した場合、ライブラリーの DASD ディレクトリーのみが検索されます。図 80

は、PDSDE 制御ブロックによる DESERV GET の例を示しています。

FUNC=GET_ALLGET_ALL 機能は、PDS、PDSE、または PDS および PDSE の連結内のすべてのメンバー名に対して SMDE を戻します。PDSE で検索された各メンバーごとにメンバー・レベルの接続を確立することができます。呼び出し元は CONCAT パラメーターを使用して、連結内のどのデータ・セットを処理するのか、および連結内のすべてのデータ・セットが処理されるのかどうかを示します。

DESERV GET_ALL が連結全体に対してすべての SMDE ディレクトリー項目を戻すことを呼び出し元が要求する場合、SMDE は、重複する名前を戻すことなく、SMDE_NAME フィールドによってソートされているようにシーケンスで戻されます。GET 機能と同様に、すべての接続は、呼び出しの時点で確立された単一の接続ID と関連付けることができます。この接続 ID は、RELEASE 機能の単一の起動で

図 80. PDSDE 制御ブロック構造による DESERV GET

区分データ・セット (PDS) の処理

第 26 章 区分データ・セット (PDS) の処理 503

Page 528: DFSMS データ・セットの使用法

のすべての接続を解放するために使用することができます。図 81 は、GET_ALL 機能に関連する制御ブロックの概要を示しています。

FIND - メンバーの開始アドレスへの位置決め特定のメンバーの先頭に位置決めするには、FIND マクロを発行する必要があります。次の入力または出力操作は、FIND によって設定されたポイントで処理を開始します。 FIND マクロにより、連結されたデータ・セット用にオープンされたDCB を提供するとき、連結された PDSE および PDS の一連のディレクトリーを検索することができます。

FIND マクロを使用するときにシステムを正しいメンバーに誘導する方法は 2 つあります。メンバーの名前を含む領域のアドレスを指定するか、BLDL マクロを使用することにより作成しておいた BLDL リストにある項目の TTR フィールドのアドレスを指定します。最初の事例では、システムは相対トラック・アドレスでデータ・セットのディレクトリーを検索します。2 番目の事例では、相対トラック・アドレスは BLDL リスト項目にあるので、検索は必要ありません。

連結された PDS について オープンされている DCB が提供されるとき、システムは連結された一連のディレクトリーを検索します。

メンバーを 1 つだけ処理したい場合は、BSAM または QSAM を使用して順次データ・セット (DSORG=PS) として処理することができます。DD ステートメントのDSNAME パラメーターで、処理したいメンバーの名前および PDS の名前を指定します。データ・セットをオープンするとき、システムは DCB の中に開始アドレスを入れ、後続の GET または READ マクロがそのポイントで処理を開始するように

図 81. DESERV GET_ALL 制御ブロック構造

区分データ・セット (PDS) の処理

504 z/OS V1R10 DFSMS データ・セットの使用法

Page 529: DFSMS データ・セットの使用法

します。順次データ・セットで 1 つのメンバーを処理しているとき、FIND、BLDL、または STOW マクロは使用することができません。

DCB にある DCBRELAD アドレスは、FIND マクロが使用されるときに更新されるので、 INPUT 処理のために最初にデータ・セットをクローズし、それを再オープンせずに、 WRITE および STOW 処理の後で FIND マクロを発行してはなりません。

STOW - ディレクトリーの更新PDS に複数のメンバーを追加するとき、各メンバーを書き込んだ後に STOW マクロを発行して、各メンバーの項目がディレクトリーに追加されるようにする必要があります。 STOW マクロを使用するには、DSORG=PO または POU は、DCB マクロで指定する必要があります。

また、STOW マクロを使用して、ディレクトリーでメンバー名を削除、置換、または変更し、ディレクトリー項目で追加情報を保管することもできます。別名も同じようにディレクトリーに保管できるので、所定のメンバーに関連付けられるすべての名前の変更には一貫性を持たせる必要があります。たとえば、メンバーを置換する場合、関連する別名項目を削除または変更して、それらが新規メンバーをポイントするようにする必要があります。メンバーが存在しない限り、別名をディレクトリーに保管することはできません。

STOW ではどのタイプの DCB も使用できるとはいえ、それは BPAM DCB で使用するためのものです。BPAM DCB を使用する場合、いくつかの書き込みを発行して、STOW が後続するメンバーを作成し、メンバー用のファイル・マークおよびディレクトリー項目を書き込みます。 この STOW に続いて、アプリケーションは別のメンバーを書き込み、収容 (stow) することができます。

PDS に 1 つのメンバーのみを追加し、DD ステートメントの DSNAME パラメーターにメンバー名を指定する場合、プログラムで BPAM および STOW マクロを使用する必要はありません。そうしたい場合は、BPAM および STOW、あるいはBSAM または QSAM を使用することができます。順次アクセス方式を使用する場合、または BPAM を使用して、STOW マクロを発行せずに、CLOSE マクロを発行する場合、システムは DD ステートメントで指定されたメンバー名を使用してSTOW マクロを発行します。

STOW では BSAM または QSAM DCB を用いた収容が CLOSE からきたことを確認する検査が行われないことに注意してください。システムが STOW を発行するとき、追加されるディレクトリー項目は最小の長さ (12 バイト) です。CLOSE マクロが TYPE=T であるか、 DCB がクローズされるときにタスクが異常終了していることを TCB が示している場合、この自動 STOW マクロは発行されません。DD

ステートメントにある DISP パラメーターは、 STOW マクロのためにどのディレクトリー・アクション・パラメーターがシステムによって選択されるかを決定します。

DISP=NEW または MOD が指定された場合、追加オプションを指定した STOW マクロが発行されます。DD ステートメント上のメンバー名がデータ・セット・ディレクトリーにない場合は、それが追加されます。メンバー名がディレクトリーにすでに存在する場合、タスクは異常終了します。

区分データ・セット (PDS) の処理

第 26 章 区分データ・セット (PDS) の処理 505

Page 530: DFSMS データ・セットの使用法

DISP=OLD が指定された場合、置換オプションを指定した STOW マクロが発行されます。 メンバー名は、その名前がまだ存在しない場合は、追加として、名前が存在する場合は、置換として、ディレクトリーに挿入されます。

したがって、既存のデータ・セットでは、メンバーをデータ・セットに強制的に入れるには DISP=OLD を、既存のメンバーが偶発的に消滅しないように保護するにはDISP=MOD を使用する必要があります。

PDS のメンバーの検索PDS の特定のメンバーを検索するには、次のように BSAM または QSAM を使用することができます (図 82 を参照してください)。

1. DCB マクロに DSORG=PS または DSORG=PSU をコーディングします。

2. DD ステートメントに、DSNAME=name(membername) およびDISP=OLD、DISP=SHR または DISP=MOD をコーディングすることにより、データが既存の PDS のメンバーであることを指定します。

3. OPEN マクロ、一連の GET または READ マクロ、および CLOSE マクロを使用してメンバーを処理します。

プログラムの実行時に、OPEN はディレクトリーを自動的に検索し、 DCB をメンバーに位置決めします。

クローズおよび再オープンせずにいくつかのメンバーを処理するか、ディレクトリー内の追加データを利用するには、 508ページの図 83 または 509ページの図 84

で説明されるプロシージャーを使用します。

OPEN 中、システムは NCP に値を提供します。パフォーマンス上の理由から、 図84 で示される例は、OPEN で計算されるか、ユーザーによって DD ステートメントで設定される NCP 値を自動的に利用します。 FIND マクロが省略され、DCB

にある DSORG が PS に変更される場合、 図 84 で示される例は、BSAM で順次データ・セットを読み取るために働きます。それを行うロジックは、 422ページの『BSAM でのオーバーラップ入出力の使用』に要約されています。

NOTE および POINT マクロを使用して PDS のメンバーを検索するには、以下の処置を講じてください。 508ページの図 83 は、 PDSE では使用してはならない注釈リストを使用する例です。

1. DCB マクロに DSORG=PO または POU をコーディングします。

//PDSDD DD ---,DSN=MASTFILE(MEMBERK),DISP=SHR...OPEN (INDCB) Open for input, automatic FIND...GET INDCB,INAREA Read member record...CLOSE (INDCB)...

INAREA DS CL80 Area to read intoINDCB DCB ---,DSORG=PS,DDNAME=PDSDD,MACRF=GM

図 82. PDS の 1 つのメンバーの検索

区分データ・セット (PDS) の処理

506 z/OS V1R10 DFSMS データ・セットの使用法

Page 531: DFSMS データ・セットの使用法

2. DD ステートメントに、DSNAME=名前 をコーディングすることによって PDS

のデータ・セット名を指定します。

3. BLDL マクロを発行して、ディレクトリーから必要なメンバー項目のリストを入手します。

4. 検索される各メンバーごとに次のステップを繰り返します。

a. FIND マクロを使用して、メンバー・レコードの読み取りの準備をします。POINT マクロを使用する場合、これは区分連結では機能しません。

b. レコードはメンバーの先頭から読み取ることができます。あるいは、メンバー内のサブカテゴリーをポイントする追加のロケーションを入手するために、注釈リストを最初に読み取ることができます。順次以外の順序で読み取りたい場合は、POINT マクロを使用して、メンバー内のブロックをポイントします。

c. 必要なものがすべて処理されるまで、レコードを読み取り (そして検査し) ます。

d. データ・セットの終わり (EODAD) ルーチンは、各メンバーの末尾で制御権を受け取ります。その時点で、次のメンバーを処理するか、データ・セットをクローズします。

508ページの図 83 は、クローズまたは再オープンせずにいくつかのメンバーを処理する技法を示しています。これは同期読み取りを示しています。

区分データ・セット (PDS) の処理

第 26 章 区分データ・セット (PDS) の処理 507

Page 532: DFSMS データ・セットの使用法

509ページの図 84 にある例は、大規模ブロック・インターフェース (LBI) を使用しません。BPAM では、ブロック・サイズは 32 760 バイトを超えることがないので、現行のリリースで LBI を使用する利点はありません。FIND マクロを省略し、

//PDSDD DD ---,DSN=D42.MASTFILE,DISP=SHR

...OPEN (INDCB) Open for input, no automatic FIND...BLDL INDCB,BLDLLIST Retrieve the relative disk locations

* of several names in virtual storageLA BLDLREG,BLDLLIST+4 Point to the first entry

ことによると別の連結データ・セットにあるメンバーを開始しますMEMBER FIND INDCB,8(,BLDLREG),C Position to member

...

NOTE リストを読み取ります

LA NOTEREG,NOTELIST Load address of NOTE listMVC TTRN(4),14(BLDLREG) Move NOTE list TTRN

* to fullword boundaryPOINT INDCB,TTRN Point to the NOTE list recordREAD DECBX,SF,INDCB,(NOTEREG) Read the NOTE listCHECK DECBX...

サブグループからデータを読み取ります

SUBGROUP POINT INDCB,(NOTEREG) Point to subgroupREAD DECBY,SF,INDCB,INAREA Read record in subgroupCHECK DECBYLA NOTEREG,4(NOTEREG) Increment to next subgroup TTRN...

各追加サブグループごとにラベル「SUBGROUP」から繰り返しますAH BLDLREG,BLDLLIST+2

各追加メンバーごとにラベル「MEMBER」から繰り返します...CLOSE (INDCB)...

INAREA DS CL80INDCB DCB ---,DSORG=PO,DDNAME=PDSDD,MACRF=RTTRN DS F TTRN of the NOTE list to point atNOTEREG EQU 4 Register to address NOTE list entriesNOTELIST DS 0F NOTE list

DS F NOTE list entry (4 byte TTRN)DS 19F one entry per subgroup

BLDLREG EQU 5 Register to address BLDL list entriesBLDLLIST DS 0F List of member names for BLDL

DC H’10’ Number of entries (10 for example)DC H’18’ Number of bytes per entryDC CL8’MEMBERA’ Name of memberDS CL3 TTR of first record (created by BLDL)DS X K byte, concatenation numberDS X Z byte, location codeDS X C byte, flag and user data lengthDS CL4 TTRN of NOTE list... one list entry per member (18 bytes each)

図 83. 入出力時間および CPU 時間の重複なしに PDS のいくつかのメンバーおよびサブグループを検索する

区分データ・セット (PDS) の処理

508 z/OS V1R10 DFSMS データ・セットの使用法

Page 533: DFSMS データ・セットの使用法

DCB にある DSORG を PS に変更することにより、この例を BSAM に変換することができます。BSAM LBI を使用して、32 760 バイトより長いテープ・ブロックを読み取ることができます。

図 84 で示されている技法は、 508ページの図 83 で示されている技法より効率的です。このアクセス方式では、前に読み取ったデータをプログラムが処理している間にデータを転送しているからです。

OPEN LIBDCB Open DCB, setting RECFM, LRECL, BLKSIZEUSING IHADCB,LIBDCBUSING DCBE,MYDCBE DCB addressability (needs HLASM)TM DCBOFLGS,DCBOFPPC Branch if openBZ --- failedFIND LIBDCB,MEMNAME,D Position to member to readSR R3,R3 GET NCP calculated by OPEN orIC R3,DCBNCP coded on DD statement

(1) LH R1,DCBBLKSI Get maximum size of a blockROUND LA R1,DATAOFF+7(,R1) Add length of DECB (READ MF=L) and pointer

SRL R1,3 and round up to aSLL R1,3 doubleword lengthLR R4,R1 Save length of DECB + pointer + block sizeMR R0,R3 Calculate length of area to get

* Get area for DECB’s, a pointer to the next DECB for each DECB and a data area* for each DECB. Each DECB is followed by a pointer to the next one and the* associated data area. The DECB’s are chained in a circle. DECB’s must be* below line; data areas can be above line if running in 31-bit mode, however,* they will be retrieved below the line in this example.

ST R1,AREALEN Save length of areaGETMAIN R,LV=(R1),LOC=(BELOW,64)

* DECB virtual addr below the line, but real aboveST R1,AREAADLR R5,R1

* Loop to build DECB’s and issue first READ’s.BLDLOOP MVC 0(NEXTDECBOFF,R5),MODELDECB Create basic DECB

LA R1,0(R4,R5) Point to next DECBST R1,NEXTDECBOFF(,R5) Set chain pointer to next DECBREAD (R5),SF,,DATAOFF(R5) Store data address in DECB, issue READAR R5,R4 Point to next DECBBCT R3,BLDLOOP Branch if another READ to issueSR R5,R4 Point back to last DECBL R1,AREAAD Point to first DECBST R1,NEXTDECBOFF(,R5) Point last DECB to first DECBLR R5,R1 Point to first (oldest) DECB

* Loop to read until end-of-file is reached.MAINLOOP CHECK (R5) Wait for READ, branch to EODATA if done

L R1,16(,R5) Point to status areaLH R0,DCBBLKSI Get length of read attempted

(2) SH R0,14(,R1) Subtract residual count to read lengthRECORD1 LA R1,DATAOFF(,R5) Point to first record in block

.

. (Process records in block)

.READ (R5),SF,MF=E Issue new readL R5,NEXTDECBOFF(,R5) Point to next DECBB MAINLOOP Branch to next block

* End-of-data.* CHECK branched here because DECB was for a READ after the last block.

図 84. 非同期 BPAM を使用しての PDS または PDSE のメンバーの読み取り (1/2)

区分データ・セット (PDS) の処理

第 26 章 区分データ・セット (PDS) の処理 509

Page 534: DFSMS データ・セットの使用法

補足事項: 次の変更を加えることによって LBI を使用するように 509ページの図84 を変換することができます。

v DCBE マクロで BLKSIZE=0 を追加します。非ゼロ値のコーディングは、LBI も要求しますが、ブロック・サイズを指定変更します。

v 行 (1) の後で、アクセス方式が LBI をサポートしているかどうかテストします。これは、データ・セットのタイプまたはオペレーティング・システムのレベルが LBI をサポートしていない場合です。最大ブロック・サイズを入手するには、以下の行を挿入してください。

TM DCBEFLG1,DCBESLBI Branch if access method doesBZ ROUND not support LBIL R1,DCBEBLKSI Get maximum size of a block

v 行 (2) の後で、ブロックのサイズを入手します。

TM DCBEFLG1,DCBESLBI Branch ifBZ RECORD1 not using LBISH R1,=X'12' Point to sizeL R0,0(,R1) Get size of block

PDS の変更PDS のメンバーは、同じ場所で更新できるか、または削除および新規メンバーとして再書き込みできます。

同所更新PDS のメンバーは、同じ場所で更新できます。一度に 1 人のユーザーのみが更新できます。このシステムは、この規則を強制しません。この規則に違反すると、メンバーまたはディレクトリーが破損します。異なるアドレス・スペースにある 2 つのプログラムの場合、DISP=SHR を使用するとこの規則に違反する可能性があります。1 つのアドレス・スペースにある 2 つのプログラムの場合、DISP にどのような値を使用してもこの規則に違反する可能性があります。同じ場所で更新するときは、残りのレコードを壊すことなく、レコードを読み取り、処理し、元の位置に書き込みます。次の規則が適用されます。

v データ・セットを更新するには、OPEN マクロで UPDAT オプションを指定する必要があります。更新を行うには、READ、WRITE、GET、PUTX、CHECK、NOTE、POINT、FIND、BLDL、および STOW マクロのみを使用できます。

EODATA CLOSE LIBDCBL R0,AREALENL R1,AREAADFREEMAIN R,LV=(0),A=(1)...

AREAAD DC A(0) Address of gotten storageAREALEN DC F’0’ Length of gotten storageLIBDCB DCB DSORG=PO,DCBE=MYDCBE,MACRF=R,DDNAME=DATAMYDCBE DCBE MULTSDN=2,EODAD=EODATA,MULTACC=1 Request OPEN to supply NCP

READ MODELDECB,SF,LIBDCB,MF=LNEXTDECBOFF EQU *-MODELDECB Offset to addr of next DECBDATAOFF EQU NEXTDECBOFF+4 Offset to dataMEMNAME DC CL8’MASTER’ Name of member to read

DCBD DSORG=PS,DEVD=DAIHADCBE ,

図 84. 非同期 BPAM を使用しての PDS または PDSE のメンバーの読み取り (2/2)

区分データ・セット (PDS) の処理

510 z/OS V1R10 DFSMS データ・セットの使用法

Page 535: DFSMS データ・セットの使用法

v 連結データ・セットは更新できません。

v レコードを削除したり、その長さを変更することはできません。新規レコードは追加できません。

v ユーザー・データをディレクトリー項目で変更したいのでない限り、 STOW マクロを発行する必要はありません。

v LBI は使用できません。

注:

BSAM および BPAM を使用する場合レコードは READ マクロによって検索しないと、WRITE マクロによって更新できるようになりません。 両方のマクロは同じ DECB に適用される実行形式でなければなりません。DECB は、リスト形式で提供される必要があります。(READ およびWRITE マクロの実行形式およびリスト形式は、「z/OS DFSMS Macro Instructions

for Data Sets」に説明されています。)

オーバーラップ操作を使用する場合入出力およびプロセッサー・アクティビティーをオーバーラップするには、最初の操作が完了しているか検査する前に、いくつかの読み取りまたは書き込み操作を開始することができます。 読み取り操作と書き込み操作はオーバーラップできません。ただし、他のタイプの操作を開始または再開する前に 1 つのタイプの操作が完了しているか検査する必要があります。各未解決の読み取りまたは書き込み操作は、個別の DECB を必要とすることに注意してください。 連続する読み取り操作に単一の DECB が使用されたとすると、最後のレコード読み取りしか更新できないことになります。

区分データ・セット (PDS) の処理

第 26 章 区分データ・セット (PDS) の処理 511

Page 536: DFSMS データ・セットの使用法

図 85 では、オーバーラップは、各レコードが処理されている間に読み取りまたは書き込み要求を未処理にしておくことによって達成されます。

パラメーター MF=E および MF=L によって識別される、READ および WRITE マクロの実行形式およびリスト形式の使用に注意してください。

QSAM を使用する場合QSAM の位置指定モード (DCB は MACRF=(GL,PL) を指定します) を使用し、GET および PUTX マクロを使用して、PDS のメンバーを更新します。DD ステー

//PDSDD DD DSNAME=MASTFILE(MEMBERK),DISP=OLD,---...

UPDATDCB DCB DSORG=PS,DDNAME=PDSDD,MACRF=(R,W),NCP=2,EODAD=FINISHREAD DECBA,SF,UPDATDCB,AREAA,MF=L Define DECBAREAD DECBB,SF,UPDATDCB,AREAB,MF=L Define DECBB

AREAA DS --- Define buffersAREAB DS ---

...OPEN (UPDATDCB,UPDAT) Open for updateLA 2,DECBA Load DECB addressesLA 3,DECBB

READRECD READ (2),SF,MF=E Read a recordNEXTRECD READ (3),SF,MF=E Read the next record

CHECK (2) Check previous read operation

(更新が必要とされる場合は、R2UPDATE にブランチします)

LR 4,3 If no update is required,LR 3,2 switch DECB addresses inLR 2,4 registers 2 and 3B NEXTRECD and loop

次のステートメントで、'R2' および 'R3' は、アドレスがそれぞれレジスター 2 および 3 にある DECB を使用して読み取られたレコードを指しています。どちらかのレジスターは、DECBA または DECBB をポイントすることができます。

R2UPDATE CALL UPDATE,((2)) Call routine to update R2

* Must issue CHECK for the other outstanding READ before switching to WRITE.* Unfortunately this CHECK can send us to EODAD.

CHECK (3) Check read for next recordWRITE (2),SF,MF=E (R3) Write updated R2

(R3 が更新を必要とする場合は、R3UPDATE にブランチします)

CHECK (2) If R3 requires no update,B READRECD check write for R2 and loop

R3UPDATE CALL UPDATE,((3)) Call routine to update R3WRITE (3),SF,MF=E Write updated R3CHECK (2) Check write for R2CHECK (3) Check write for R3B READRECD Loop

FINISH EQU * End-of-Data exit routine

(R2 が更新されなかった場合は、CLOSEIT にブランチします)

WRITE (2),SF,MF=E Write last record readCHECK (2)

CLOSEIT CLOSE (UPDATDCB)

図 85. PDS のメンバーの更新

区分データ・セット (PDS) の処理

512 z/OS V1R10 DFSMS データ・セットの使用法

Page 537: DFSMS データ・セットの使用法

トメントは、DSNAME パラメーターでデータ・セットおよびメンバー名を指定する必要があります。この方法は、 DD ステートメントで指定されたメンバーの更新のみを許可します。

メンバーの再書き込みPDS でレコードを追加または拡張するために使用できる実際の更新オプションはありません。メンバー内でのレコードを拡張または追加したい場合は、データ・セットの別の区域に完全なメンバーを再書き込みする必要があります。データ・セットが作成されるときにスペースが割り振られるので、追加のスペースを要求する必要はありません。ただし、PDS が 1 つのボリュームに含まれなければならないことに注意してください。十分なスペースが割り振られない場合は、データ・セットがIEBCOPY ユーティリティー・プログラムまたは ISPF によって再編成される必要があります。

メンバーを再書き込みするときは、2 つの DCB を、入力用に 1 つと出力用に 1

つを提供する必要があります。両方の DCB マクロが、同じデータ・セットを指すことがあります。つまり、1 つの DD ステートメントが必要です。

PDS の連結複数の PDS を、システムによって自動的に検索し、単一のデータ・セットとして連続して処理することができます。 この技法は、連結と呼ばれます。 2 つのタイプの連結は、順次と区分です。

順次連結順次連結データ・セットを処理するには、DSORG=PS をもつ DCB を使用してください。各 DD ステートメントには、以下のタイプのデータ・セットを組み込むことができます。

v 順次データ・セット。これはディスク、テープ、インストリーム (SYSIN)、TSO

端末、カード読取装置、およびサブシステムに入れておくことができます。

v UNIX ファイル

v PDS メンバー

v PDSE メンバー

順次連結 (DCB での DSORG=PS) を使用して PDS および PDSE のディレクトリーを順次読み取ることができます。 514ページの『PDS ディレクトリーを順次に読み取る』を参照してください。

制約事項: この技法を使用して z/OS UNIX ディレクトリーを読み取ることはできません。

区分連結連結された PDS は、DCB で DSORG=PO を使用して処理されます。PDS が連結されるとき、システムはグループを単一データ・セットとして扱います。区分連結には、PDS、PDSE、および UNIX ディレクトリーの混合したものを含めることができます。区分連結は、DCB が入力処理のためにオープンしている場合のみサポートされます。

区分データ・セット (PDS) の処理

第 26 章 区分データ・セット (PDS) の処理 513

Page 538: DFSMS データ・セットの使用法

区分連結で許される DD ステートメントの数には制限があります。連結される PDS

エクステントの数、PDSE の数、および UNIX ディレクトリーの数を加算してください。 この和が 255 を超えることはできません。例えば、16 エクステントのそれぞれの 15 PDS に 8 PDSE と 7 UNIX ディレクトリー ((15 x 16) + 8 + 7 = 255

エクステント) を連結することができます。

連結された PDS は、ブロック・サイズを除き、常に類似属性を持つものとして扱われます。それらは、ブロック・サイズを除き、最初のデータ・セットのみの属性を使用します。BPAM OPEN は、連結されたデータ・セット間で最大のブロック・サイズを使用します。指定されたブロック・サイズ・パラメーターと競合しても、最初のデータ・セットのすべての属性が使用されます。連結されたフォーマット F

データ・セット (ブロックまたは非ブロック) では、各データ・セットの LRECL

は等しくなければなりません。

PDS の連結は、単一の PDS を処理するのと同じ方法で処理します。ただし、1 つの例外があり、メンバーの処理を開始するのに FIND マクロを使用する必要があります。適切なメンバーに対して FIND マクロを発行した後でないと、POINT (または NOTE) マクロを使用することはできません。連結内の異なるデータ・セットの2 つのメンバーが同じ名前を持つ場合、FIND マクロは、連結内の最初のもののアドレスを判別します。連結内の 2 番目のものを処理することはできません。 BLDL

マクロは、メンバーが BLDL リストの K フィールドに属するデータ・セットの連結番号を提供します。( 500ページの『BLDL - ディレクトリー項目リストの構成』を参照してください。)

PDS ディレクトリーを順次に読み取るPDS ディレクトリーは、データ・セットをその先頭にオープンして (位置決めマクロを使用せずに)、それを読み取ることによって順次に読み取ることができます。

v DD ステートメントは、メンバー名を使わずに DSNAME を識別する必要があります。

v BSAM あるいは MACRF=R または G を指定した QSAM。

v BLKSIZE=256 および RECFM=F または RECFM=U を指定する必要があります。

v QSAM は常に LRECL=256 を必要とします

v 最後のディレクトリー項目 (8 バイトの X'FF') があるかテストする必要があります。そのポイントの後のレコードおよびブロックは、予測不能です。最後に割り振られたディレクトリー・ブロックを読み取った後、制御権が EODAD ルーチンに渡されるか、連結データ・セットでの読み取りが継続します。FEOV マクロを発行して現行データ・セットの読み取りを停止するか、次のデータ・セットに進みます。最後または唯一のデータ・セットを読み取っている間に FEOV を発行する場合、制御権は EODAD ルーチンに渡されます。

v キー (そのブロックの最後のメンバーの名前) も読み取りたい場合は、 BSAM を使用し、KEYLEN=8 を指定します。

この技法は、PDS および PDSE が連結されている場合に働きます。ただし、この技法を使用して UNIX ディレクトリーを順次に読み取ることはできません。 システムは、これが類似 順次連結であると見なします。 559ページの『PDSE ディレクトリーの読み取り』を参照してください。

区分データ・セット (PDS) の処理

514 z/OS V1R10 DFSMS データ・セットの使用法

Page 539: DFSMS データ・セットの使用法

第 27 章 拡張区分データ・セット (PDSE) の処理

この章では以下のトピックを扱います。

トピック 該当ページ

PDSE の利点 515

PDSE の構造 518

PDSE レコードの処理 521

PDSE 用のスペースの割り振り 525

PDSE の定義 529

PDSE メンバーの作成 530

PDSE のメンバーの処理 534

PDSE のメンバーの検索 549

PDSE の共用 551

PDSE のメンバーの変更 557

PDSE ディレクトリーの読み取り 559

PDSE の連結 560

PDS を PDSE に変換、および元に戻す 561

PDSE アドレス・スペース 563

PDSE の利点このセクションでは、PDSE と PDS を比較します。

PDSE は、順次に編成されたメンバーに分割されており、それぞれは 1 つ以上のディレクトリー項目によって記述されます。 PDSE は、直接アクセス記憶装置にのみ保管されます。外観上、PDSE は PDS に類似しています。PDS ディレクトリー またはメンバーへのアクセスについては、ほとんどの PDSE インターフェースは PDS

インターフェースから識別不能です。ただし、PDSE は異なる内部フォーマットを持ち、それにより使用可能度が増します。各メンバー名は、8 バイトの長さにすることができます。プログラム・オブジェクトの基本名は、8 バイトの長さにできます。プログラム・オブジェクトの別名は、最高 1024 バイトの長さにすることができます。PDSE の所定のメンバーのレコードは、順次に書き込まれるか、検索されます。

PDSE は、PDS の代わりに使用して、データを保管するか、プログラム・オブジェクトの形式でプログラムを保管することができます。プログラム・オブジェクトは、PDS でのロード・モジュールと類似しています。ロード・モジュールは、PDSE

には常駐できず、ロード・モジュールとしては使用されません。 1 つの PDSE

は、プログラム・オブジェクトとデータ・メンバーの混合を含むことはできません。

© Copyright IBM Corp. 1987, 2008 515

Page 540: DFSMS データ・セットの使用法

PDSE および PDS は、同じアクセス方式 (BSAM、QSAM、BPAM) およびマクロを使用して処理されますが、データ・セットの内部構造が異なるため EXCP は使用できません。

PDSE には、ユーザーの生産性とシステム・パフォーマンスの両方を改善するいくつかのフィーチャーがあります。PDS と比べて PDSE を使用することの主な利点は、PDSE がデータ・セット内のスペースを自動的に再使用できることで、だれかが定期的にユーティリティーを実行して、それを再編成する必要がないことです。513ページの『メンバーの再書き込み』を参照してください。 PDS ディレクトリーのサイズは、その中のメンバーの数にかかわらず固定されているのに対し、PDSE

ディレクトリーのサイズは柔軟であり、その中に保管されるメンバーに合わせて拡張できます。同様に、メンバーが削除または置換されるたびに、スペースを自動的にレクラメーション処理し、同じ PDSE の他のメンバーに割り振るために使用可能なスペースのプールを戻します。スペースは、IEBCOPY 圧縮を行う必要なしに、再使用することができます。 図 86 は、これらの利点を示しています。

関連資料: PDSE と一緒に使用するマクロについては、 534ページの『PDSE のメンバーの処理』および「z/OS DFSMS Macro Instructions for Data Sets」を参照してください。 PDSE を保護するための RACF の使用については、 67ページの『第 5

章 データ・セットの保護』を参照してください。 ロード・モジュールおよびプログラム・オブジェクトについては、「z/OS MVS プログラム管理: ユーザーズ・ガイドおよび解説書」を参照してください。

図 86 では、メンバー B が削除されると、それが占めていたスペースは、新規のメンバー D および E によって再使用できるようになります。

PDSE の他の利点は、次のとおりです。

v PDSE メンバーを共用できます。PDSE の個別のメンバーを同時に変更するときに、これにより、PDSE の保全性を保持するのが容易になります。

図 86. 拡張区分データ・セット (PDSE)

拡張区分データ・セット (PDSE) の処理

516 z/OS V1R10 DFSMS データ・セットの使用法

Page 541: DFSMS データ・セットの使用法

v 短縮されたディレクトリー検索時間。PDSE ディレクトリーは、索引付きであり、その索引を使用して検索されます。PDS ディレクトリーは、アルファベット順に編成されており、順次に検索されます。システムは、頻繁に使用されるPDSE のストレージ・ディレクトリーのキャッシュに入れることがあります。

v 複数のメンバーを同時に作成。たとえば、同じ PDSE に 2 つの DCB をオープンし、同時に 2 つのメンバーを書き込むことができます。

v PDSE は、最大 123 のエクステントを保持することができます。エクステントは、 DASD ストレージ・ボリューム上の連続したスペース域であり、特定のデータ・セットによって占有されるか、それ用に予約済みです。

v DASD に書き込まれるとき、論理レコードがユーザーのブロックから抽出され、ブロック化し直されます。読み取られるとき、PDSE 内のレコードは、DCB で指定されたブロック・サイズにブロック化し直されます。ブロック化し直しに使用されるブロック・サイズは、元のブロック・サイズと異なることがあります。

PDSE と PDS の類似点PDSE と PDS の間の重要な類似点は、次のとおりです。

v 同じアクセス方式とマクロが使用されますが、場合によってはあまり重要でない非互換性があります。

v レコードはメンバーに保管され、メンバーはディレクトリーに記述されます。

PDSE と PDS の相違点表 38 は、PDSE と PDS の間の重要な相違点を示しています。

表 38. PDSE と PDS の相違点

PDSE の特性 PDS の特性

データ・セットには 123 エクステントの限度があります。

データ・セットには 16 エクステントの限度があります。

ディレクトリーは、拡張可能であり、メンバー名によって索引が付けられているので、ディレクトリーをより速く検索できます。

固定サイズのディレクトリーは、順次に検索されます。

PDSE は装置独立です。レコードはブロック化し直し可能であり、TTR はシステム・キーとしてシミュレートされます。

PDS では、TTR アドレッシングとブロック・サイズは装置依存です。

動的スペース割り振りを使用し、スペースを自動的にレクラメーション処理します。

PDSE のすべてのメンバーをコピーするためにIEBCOPY または DFSMSdss COPY を使用して、メンバーを一度にコピーするより大きな索引を作成します。

推奨: 2 次スペースを使用して PDSE を割り振り、PDSE 索引のサイズを動的に変化できるようにしてください。

IEBCOPY 圧縮を使用して、スペースをレクラメーション処理します。

同時に複数のメンバーを作成することができます。

一度に 1 つのメンバーを作成することができます。

拡張区分データ・セット (PDSE) の処理

第 27 章 拡張区分データ・セット (PDSE) の処理 517

Page 542: DFSMS データ・セットの使用法

表 38. PDSE と PDS の相違点 (続き)

PDSE の特性 PDS の特性

PDSE は、データ・メンバーまたはデータ・メンバーのどちらかを含みますが、両方は含みません。「z/OS MVS プログラム管理: ユーザーズ・ガイドおよび解説書」では、ロード・モジュールと比較したプログラム・オブジェクトの利点について説明しています。

PDS は、データ・メンバーまたはロード・モジュールを含むが、データ・メンバーおよびロード・モジュールを同じPDS に作成できないようにはしません。

メンバーの別名をすべて置換せずにメンバーを置換すると、別名項目が削除されることになります。

メンバーの別名をすべて置換せずにメンバーを置換すると、別名項目が中止されることになります。 それらは「オーファン」であり、結局は間違ったメンバーをポイントすることになります。

プログラム・オブジェクトの別名は、PDSE では、最大 1024 バイトの長さにすることができます。これらの名前にアクセスするには、DESERV

インターフェースを使用する必要があります。プログラム・オブジェクトの基本名は、8 バイトに制限されます。

PDS メンバーのすべての名前は、 8 バイトの長さでなければなりません。

PDSE の構造BSAM または QSAM を通じて順次にアクセスしている場合は、PDSE ディレクトリーは、順次に配列された項目を含む 256 バイトのブロックで構成されているように見えます。 PDSE ディレクトリーは、PDS ディレクトリーと似ていますが、その内部構造およびブロック・サイズは異なっています。PDSE ディレクトリー項目は、長さが変化します。各ディレクトリー項目には、メンバー名または別名、データ・セット内でのメンバーの開始ロケーションおよびオプションでユーザー・データが入っています。ディレクトリー項目は、英数字照合シーケンスで名前別に配置されています。

BSAM または QSAM を使用して、ディレクトリーを順次に読み取ることができます。ディレクトリーは、 BLDL、DESERV、FIND、および STOW マクロによって検索および保持されます。BSAM または QSAM を使用して、名前が 8 バイト以上のプログラム・オブジェクトを含む PDSE のディレクトリーを読み取る場合、これらの名前に対するディレクトリー項目は戻されません。これらの名前を表示できる必要がある場合は、BSAM または QSAM の代わりに、 DESERV FUNC=GET_ALL

インターフェースを使用する必要があります。同様に、 BLDL、FIND、およびSTOW マクロ・インターフェースでは、8 バイトのみのメンバー名を指定することができます。これらは、類似の DESERV 機能であり、これらのインターフェースのそれぞれは、8 バイトより大きな名前を処理することができます。PDSE ディレクトリー項目にあるフィールドの記述については、 490ページの『PDS ディレクトリー』を参照してください。

PDSE ディレクトリーは索引付きであり、メンバーをさらに直接に検索することができます。ハードウェア定義キーは、メンバーの検索には使用されません。メンバーを検索するには、その代わりにメンバーの名前と相対トラック・アドレスが使用されます。 PDSE メンバーにとって TTR は相対トラックやレコード番号ではな

拡張区分データ・セット (PDSE) の処理

518 z/OS V1R10 DFSMS データ・セットの使用法

Page 543: DFSMS データ・セットの使用法

く、PDSE メンバーについて疑似ランダムに生成された別名であるため、PDSE を移動すると、ディレクトリー内で TTR が変化することがあります。これらの TTR

は、メンバー・ロケーター・トークン (MLT) と呼ばれる場合があります。

PDSE ディレクトリーにあるメンバーの数の限度は、522,236 です。PDSE ディレクトリーは、拡張可能です。ディレクトリーのサイズ限度まで、またはデータ・セット用のスペースがなくなるまで、項目を追加し続けることができます。システムは、データ・セットに使用できるストレージからディレクトリー項目用に必要なスペースを使用します。

PDS では、ディレクトリーのサイズは、データ・セットが初期に割り振られるときに決定されます。データ・セット内にはディレクトリーが含むことができるより少ないメンバーがあることがありますが、事前割り振りされたディレクトリー・スペースがいっぱいである場合は、新しいメンバーを追加できる前に、PDS を新規データ・セットにコピーする必要があります。

PDSE 論理ブロック・サイズブロック・サイズ・キーワード (BLKSIZE) の重要度は、PDS とは少し異なっています。すべての PDSE は、固定 4 KB ブロックとして DASD 上の保管されています。これらの 4 KB の物理ブロックは、ページとも呼ばれます。PDSE は、データ・セットをオープンするときに指定するブロック・サイズに論理的にブロック化し直されます。ブロック・サイズは、PDSE がどのように効率的に DASD に保管されるかには影響を与えませんが、システムがそれから読み取り、それに書き込む効率には影響を及ぼすことができます。ブロック・サイズは、PDSE 用に割り振られたストレージ・バッファーのサイズにも影響を及ぼします。システム決定ブロック・サイズ機能に、データ・セット用の最良のブロック・サイズを計算させる必要があります。

スペースの再使用PDSE メンバーが更新または置換されるとき、最初に使用可能なスペースに書き込まれます。これはデータ・セットの末尾か、再使用用にマークされたデータ・セットの中間のスペースのいずれかです。このスペースは隣接している必要はありません。スペース再使用アルゴリズムの目的は、データ・セットを不必要に拡張しないことです。

UPDATE を除き、メンバーはただちにその元のスペースに書き込まれることはありません。このスペースにある古いデータは、それが最書き込みされる前にメンバーへの接続を持っていたプログラムには使用可能です。スペースは、古いデータへのすべての接続がドロップされるときにのみ再使用のためにマークされます。ただし、それらがいったんドロップされるとき、古いデータへのポインターはないので、プログラムはそれにアクセスできません。接続は、PDSE がオープンされるとき、または BLDL、FIND、POINT、または DESERV によって確立することができます。これらの接続は、プログラムが PDSE をクローズするか、DESERV

FUNC=RELEASE、STOW 切断、または (特定の場合に) 別の POINT または FIND

を発行することによって接続が明示的に解放されるまで有効なままになります。ディレクトリーをポイントしても、接続を解放できます。接続は、データ・セットがクローズされるときにドロップされます。

拡張区分データ・セット (PDSE) の処理

第 27 章 拡張区分データ・セット (PDSE) の処理 519

Page 544: DFSMS データ・セットの使用法

関連資料: 接続の詳細については、「z/OS DFSMS Macro Instructions for Data

Sets」を参照してください。

ディレクトリー構造論理的に、PDSE ディレクトリーは、PDS ディレクトリーと同じように見えます。これは、ブロック内にある一連のディレクトリー・レコードから構成されます。物理的に、これはデータ・セットの前にあるページのセットに、メンバー・ページでインターリーブされた追加のページを加えたものです。初期には、5 つのディレクトリー・ページがデータ・セットとして同時に作成されます。新規ディレクトリー項目が必要とされる都度、メンバー・ページがインターリーブされた新規ディレクトリー・ページが追加されます。PDSE は、常に少なくとも 5 ページのストレージを占有します。

相対トラック・アドレス (TTR)各メンバーの開始ロケーションは、システムによって相対トラック・アドレス(TTR) として記録されます。TTR は、実際のトラックまたはレコードのロケーションを表していません。そうではなく、TTR は、メンバー・ロケーター・トークン(MLT) およびレコード・ロケーター・トークン (RLT) とも呼ばれるトラックおよびレコード・ロケーションをシミュレートするトークンです。

PDSE で使用される TTR は、次のフォーマットを持っています。

v TTR は、ブロックまたはスパン・レコード・セグメントではなく、個々の論理レコードを表しています。

v PDSE 用の TTR は、X'000001' です。

v PDSE メンバー用の TTR は、ランダムに生成され、PDSE 内で固有になります。削除されたメンバー用の TTR は、新規に作成されたメンバーのためにシステムによって再使用することができます。

v PDSE メンバー用の TTR は、X'000002' から X'07FFFF' の範囲にあります。

v ブロックの TTR は、そのブロックの最初の論理レコード用のレコード番号です。ブロック用の TTR は、メンバー内で固有ですが、PDSE 内では固有ではありません。

v レコード番号は、PDSE メンバー内の X'100001' で開始します。

v レコード番号は、X'100001' から X'FFFFFF' の範囲をとります。

v レコード番号は、PDSE メンバー内で連続しています。

上記の記載は、PDSE TTR を計算するためのアルゴリズムを定義するために使用できるとしても、このアルゴリズムは、新しいリリースのシステムで変更されることがあるので、TTR 計算は使用しないことをお勧めします。

521ページの図 87 は、非ブロック・レコード用の TTR の例を示しています。

拡張区分データ・セット (PDSE) の処理

520 z/OS V1R10 DFSMS データ・セットの使用法

Page 545: DFSMS データ・セットの使用法

図 88 は、ブロック・レコード用の TTR の例を示しています。

両方の例で、PDSE メンバー A は、X'000002' の TTR を持ちます。 図 87 では、レコードは非ブロック化されており、論理レコード 1 のレコード番号1 はX'100001' であり、論理レコード 2 は X'100002' です。

図 88 では、レコードは固定長で、LRECL=80 および BLKSIZE=800 でブロック化されています。最初のブロックはメンバー TTR によって、 2 番目のブロックはX'10000B' の TTR によって、3 番目のブロックは X'100015' の TTR によって識別されます。ブロックの TTR は、ブロック化因数である、10 の量だけ異なることに注意してください。

メンバーを位置決めするには、 BLDL または NOTE マクロから得られた TTR、あるいはディレクトリーの BSAM 読み取り、あるいは DESERV FUNC=GET またはFUNC=GET_ALL を使用します。メンバー内のレコードの TTR を位置指定するには、NOTE マクロを使用します ( 546ページの『NOTE マクロを使用して相対位置を提供する』を参照してください)。

PDSE レコードの処理PDSE メンバーは、PDS メンバーとして順次アクセスされます。各メンバーは、最大数 15 728 639 の論理レコードを含むことができます。論理ファイル・マークは、各 PDSE メンバーの末尾にあります。

PDSE の処理についてのいくつかの制約事項を下記に挙げます。

1.メンバー内の最初のレコードは、そのメンバー用の TTR (上の例では、X'000002') を使用してポイントすることができます。

図 87. PDSE メンバー用の TTR (非ブロック・レコード)

図 88. 2 つの PDSE メンバー用の TTR (LRECL=80、BLKSIZE=800)

拡張区分データ・セット (PDSE) の処理

第 27 章 拡張区分データ・セット (PDSE) の処理 521

Page 546: DFSMS データ・セットの使用法

v JCL キーワード DSNTYPE は、JCL キーワード RECORG を使用して指定できません。

v アプリケーションが、処理のメンバー内の最後のものを除く短ブロックまたはSAM レコード・ヌル・セグメントの処理に依存している場合は、PDSE を使用してはなりません。詳しくは、 524ページの『短ブロックの処理』および 524ページの『SAM ヌル・セグメントの処理』を参照してください。

v BSP を可変長スパン・レコードまたは可変長ブロック・スパン・レコードと一緒に使用する上での制約事項については、 536ページの『BSP マクロを使用して物理レコードをバックスペースする』を参照してください。

v WRITE または PUT マクロを使用して、PDSE ディレクトリーを書き込むか更新することはできません。ディレクトリーを書き込むか更新するには、STOW または DESERV FUNC=UPDATE マクロを使用する必要があります。

v STOW マクロを使用して、PDSE プログラム・ライブラリーのメンバーを追加または置換することはできません。

v メンバーの別名は、メンバーの先頭をポイントする必要があります。

v 基本メンバー名を削除すると、すべての別名が削除されることになります。

v EXCP、EXCPVR、および XDAP は、PDSE 用にサポートされているマクロではありません。

v PDSE を割り振る場合、PDSE をサポートしていない、以前のバージョンまたはリリースの DFSMSdfp ではそれを読み取ることができません。

v 注釈リストは、PDSE 用にはサポートされていません。STOW を PDSE と一緒に使用している場合は、ディレクトリーのユーザー・データ・フィールドに TTR

のリストを提供しないでください。

v CHECK、STOW、および CLOSE マクロは、データが DASD に同期されたことを保証しません。更新に対してオープンしているときにデータの同期化を保証するには、SYNCDEV マクロまたはストレージ・クラス・パラメーターSYNCDEV=YES を使用します。同期の定義については、 611ページの『SYNCDEV マクロを使用してデータを同期する』を参照してください。

v フォーマット 1 DSCB の DS1LSTAR フィールドは、PDSE では予測不能です。

v OPTCD=W DCB パラメーター (書き込みチェック) は、PDSE では無視されます。

v チェックポイント・データ・セットは PDSE にすることはできません。チェックポイント・データ・セットが PDSE である場合は、チェックポイントは障害を起こします。また、障害は、DCB が PDSE にオープンされるとき、または PDS

がチェックポイント時にオープンされていたが、再始動時に変更された場合にも、発生します。

v TRKCALC マクロは、結果が不正確になりうるので、使用しないでください。(ただし、エラー通知は戻されません。)

v カタログ式プロシージャーを含むライブラリーは、PDS または PDSE でなければなりません。システム・プロシージャー・ライブラリー SYS1.PROCLIB は、PDS でなければなりません。ご使用のシステムは、他のプロシージャー・ライブラリーを持つことができ、それを PDSE にすることができます。

v カタログ式プロシージャーを使用するとき、ライブラリーは入力用にオープンされ、長い間オープンしたままになります。別のユーザーまたはシステムが、非XCF (シスプレックス) 環境で出力用にプロシージャー・ライブラリーをオープン

拡張区分データ・セット (PDSE) の処理

522 z/OS V1R10 DFSMS データ・セットの使用法

Page 547: DFSMS データ・セットの使用法

しようとした場合、2 番目のユーザーが ABEND を受け取ります。これにより、プロシージャー・ライブラリーの更新が長い間できなくなる場合があります。

PDSE での BLKSIZE の使用固定長ブロック・レコードを使用する PDSE ディレクトリーを読み取るときは、256 以上の BLKSIZE 値を指定することができます (システムは LRECL 値を無視します)。ブロック・サイズを計算し、それを DCB の BLKSIZE パラメーターで指定することができます。あるいは、ユーザーに代わってシステムにブロック・サイズを決定させることもできます。ブロック・サイズは、PDSE 用のスペース使用量には影響を与えませんが、ブロック・サイズは PDSE を使用するジョブのバッファー・サイズには影響を及ぼします。

関連資料: BLKSIZE の使用法については、 384ページの『ブロック・サイズ(BLKSIZE)』を参照してください。また、 559ページの『PDSE ディレクトリーの読み取り』も参照してください。

PDSE での KEYLEN の使用PDSE ディレクトリーを読み取る場合、キー長 0 または 8 だけが許可されている値です。 PDSE メンバーを読み取るにはこれらのキーを使用できますが、PDSE メンバーを書き込むのに使用することはできません。KEYLEN パラメーターの使用についての情報は、 391ページの『キー長 (KEYLEN)』を参照してください。

PDSE レコードのブロック化し直しPDSE メンバーはブロック化し直し可能です。PDSE メンバーを読み取るときは、DCB で指定されたブロック・サイズをシステムが構成します。DCB でブロック・サイズが指定されていない場合は、デフォルトのブロック・サイズが使用されます。システムは、指定されたブロック・サイズに収まるだけ多くのレコードをパックします。論理レコードは、DASD にブロック単位で書き込まれ (ユーザーはブロック長を決定できません)、複数の物理レコードをスパンできます。レコードが書き込まれるとき、ユーザー定義またはシステム定義のブロック・サイズがデータ・セット・ラベルに保管され、入力用のデフォルトのブロック・サイズになります。これらの構成されたブロックは、シミュレート・ブロックと呼ばれます。

図 89 は、PDSE メンバーが読み取られるときに、レコードがどのようにブロック化し直されるかを示しています。

ブロック・サイズが 160 (ブロック化因数 2) の 5 つのブロックおよびブロック・サイズが 80 の 5 つの短ブロックを書き込んで、論理レコード長が 80 バイトの

図 89. PDSE レコードがどのようにブロック化し直されるかの例

拡張区分データ・セット (PDSE) の処理

第 27 章 拡張区分データ・セット (PDSE) の処理 523

Page 548: DFSMS データ・セットの使用法

PDSE メンバーを作成すると想定します。この PDSE メンバーを読み取ると、論理レコードは 7 つの 160 バイトのシミュレート・ブロックおよび 1 つの短ブロックにブロック化し直されます。短ブロックの境界は出力時に保管されないことに注意してください。

データ・セットを読み取るときに、レコードのブロック・サイズも変更できます。図 90 は、読み取るときにレコードがどのようにブロック化し直されるかを示しています。

ブロック・サイズが 320 の 3 つのブロックを書き込み、論理レコード長が 80 バイトだと想定します。このメンバーをブロック・サイズ 400 (ブロック化因数 5) で読み取る場合、論理レコードは 2 つの 400 バイトのシミュレート・ブロックおよび 1 つの 160 バイトのシミュレート・ブロックにブロック化し直されます。

データ・セットが PDS であった場合には、レコードを読み取るときにブロック・サイズを変更することはできません。

短ブロックの処理アプリケーションでメンバーの末尾の前に短ブロックがあると予期される場合は、PDSE を使用してはなりません。PDSE メンバー用に短ブロックを作成することができますが、データ・セットが書き込まれるときに、それらのブロック境界は保管されません。たとえば、 TRUNC マクロを QSAM と一緒に使用して短ブロックを作成する場合、データ・セットが読み取られるときにそれらの短ブロックは表示されません。QSAM TRUNC マクロが使用される場合、メッセージがジョブ・ログに書き込まれ、標識が SMF レコード・タイプ 15 に設定されます。BSAM またはBPAM TRUNC マクロにはこの効果がありません。

SAM ヌル・セグメントの処理アプリケーションが SAM ヌル・レコード・セグメントを処理する場合は、PDSE

を使用してはなりません。可変ブロック・スパン (VBS) レコードのみを使用して作成される、ヌル・レコード・セグメントは、データ・セットが書き込まれるときに保管されません。たとえば、データ・セットを書き込んでいるときにヌル・レコード・セグメントを作成する場合、データ・セットが読み取られるときに、それが戻されません。ヌル・レコード・セグメントが最初に書き込まれるときに、メッセージがジョブ・ログに書き込まれ、標識が SMF レコード・タイプ 15 に設定されます。

関連資料: SMF の詳細については、「z/OS MVS システム管理機能 (SMF)」を参照してください。

図 90. ブロック・サイズが変更された場合のブロック化し直しの例

拡張区分データ・セット (PDSE) の処理

524 z/OS V1R10 DFSMS データ・セットの使用法

Page 549: DFSMS データ・セットの使用法

PDSE 用のスペースの割り振りPDSE 用のスペース割り振りは、PDS と異なっています。 PDSE を割り振るには、DSNTYPE パラメーターの中に LIBRARY を指定してください。

このセクションでは、SPACE JCL キーワードを使用して、PDSE 用の 1 次および2 次ストレージ・スペース量を割り振る方法を示します。 PDSE ディレクトリーは、2 次スペースに拡張することができます。PDSE は、最大 123 エクステントを持つことができます。PDSE は、 1 ボリュームを超えて拡張することはできません。フラグメント化されたボリュームは、各エクステントで使用できるスペースが減るので、エクステントがよりすぐに使い尽くされることになります。SPACE=(CYL,(1,1,1)) と指定すると、データ・セットは 123 シリンダーまで拡張することができます (スペースが使用可能な場合)。

PDSE ディレクトリー・スペースは動的に割り振られるので、作成される PDSE メンバーの数を見積もる必要はありません。したがって、SPACE キーワードで指定するディレクトリー・ブロック数量は、PDSE では使用されませんが、保管され、変換ユーティリティー用に使用できます。あるいは、データ・セットを割り振るときに JCL DD ステートメントで DSORG=PO と指定するか、データ・クラスを指定することにより、ディレクトリー数量を省略することができます。

指針: JCL を使用して PDSE を割り振る場合は、SPACE パラメーターにディレクトリー・ブロックの数を指定しないと、割り振りが失敗します。ただし、データ・クラスを使用して PDSE を割り振る場合は、SPACE パラメーターの中のディレクトリー・ブロックの数を省略することができます。PDSE の場合は、ディレクトリー・ブロックの数の制限はありません。

関連資料:

v SPACE キーワードの例については、 493ページの『PDS 用のスペースの割り振り』を参照してください。

v スペースの割り振りについては、 41ページの『第 3 章 直接アクセス・ボリュームでのスペースの割り振り』、「z/OS MVS JCL ユーザーズ・ガイド」、および「z/OS MVS JCL 解説書」を参照してください。

PDSE スペースの考慮事項いくつかの要因が、PDSE 内のスペース使用効率に影響を与えます。PDS と比較して、 PDSE がスペースをどのように使用するかについては利点と欠点の両方があります。ただし、スペースの相違を考慮するときは、PDSE に次の機能上の利点があることを忘れないでください。PDSE は圧縮される必要がなく、拡張可能なディレクトリーを持っているのでスペースの計画があまり重大ではなく、より効率的に共用することができます。

以下は、PDSE 用のスペース所要量を決定するときに考慮するいくつかの項目です。

不連続スペースの使用メンバーが作成されるとき、最初の使用可能なスペースが割り振られます。ただし、連続スペースが使用できない場合は、不連続スペースを使用することができます。これは、削除されたメンバーからレクラメーション処理されたスペースであっ

拡張区分データ・セット (PDSE) の処理

第 27 章 拡張区分データ・セット (PDSE) の処理 525

Page 550: DFSMS データ・セットの使用法

てもかまいません。これは、すべてのメンバー・スペースを連続にしなければならず、削除されたメンバーのスペースを自動的にはレクラメーション処理をしないPDS に対しての明白な利点です。

組み込まれたディレクトリーすべての PDSE スペースは、ディレクトリーまたはメンバーが使用できます。データ・セット内では、ディレクトリーに使用されるページとメンバーに使用されるページの間に違いはありません。データ・セットが大きくなるにつれて、メンバーとディレクトリーは同じスペースを使用できるようになります。ディレクトリー、またはその部分は、 2 次エクステントに入れることができます。

ディレクトリー・ページは、もはやスペース所要量を決定するための係数ではありません。 PDSE は、事前に割り振られた、未使用のディレクトリー・ページを持ちません。ディレクトリー・スペースは、必要なものとして自動的に拡張されます。

PDSE のフォーマットは、ディレクトリーがさらに情報を含むことができるようになっています。この情報は、PDS ディレクトリー・ブロックより多くのスペースをとることができます。

PDSE ディレクトリーには、キー (メンバー名) を圧縮フォーマットで含みます。新規のキー挿入または削除すると、他のディレクトリー・キーの圧縮が変更される場合があります。したがって、ディレクトリー・サイズの変更は、挿入または削除済みレコードのサイズと異なることがあります。

フル・ブロック割り振りPDSE メンバーは、フル・ページ増分で割り振られます。メンバーは、フル・ページ境界上に保持され、ページの残りのスペースは未使用です。この未使用スペースは、他のメンバー・スペースまたはディレクトリー・ストレージとして使用するにはアクセス不能です。

PDSE の未使用スペースPDS ガスは、メンバーが削除または再書き込みされたときに空にされた、PDS 内のレクラメーション処理されないスペースです。ユーザーはしばしばその PDS を過剰に割り振り、時間がたつにつれて生じる不可避的な量の PDS ガスの余裕を見込んでおきます。PDSE では、ガスによって生じるデータ・セットの増加を見込んで割り振りにさらにスペースを追加する必要はありません。

調査から、典型的なご使用のシステムは、その PDS スペースの 18% から 30% がガスの形をとることが分かっています。このスペースは、データ・セットには、それが圧縮されるまで使用不能です。PDSE は、先にフィットするアルゴリズムに従って、すべての割り振りスペースを動的に再使用します。PDSE ではスペースを割り振るときに、ガスを見込んでおく必要はありません。

スペースが出力用の OPEN に対してレクラメーション処理されるのは、それがそのシステムでの出力用の唯一のオープンである場合に限られます。PDSE スペースは、メンバーが削除または更新された直後にレクラメーション処理されることはできません。削除または更新されたメンバーがまだ別のタスクからの既存の接続 (または ISPF 編集セッションからの入力 DCB) を持つ場合、接続が解放され、デー

拡張区分データ・セット (PDSE) の処理

526 z/OS V1R10 DFSMS データ・セットの使用法

Page 551: DFSMS データ・セットの使用法

タ・セットが出力用にオープンされ、その出力用のオープンがそのシステム上の唯一のものになるまで、メンバー・スペースはレクラメーション処理されません。

ABEND D37 が PDSE 上で発生するとき、それがいっぱいであるが、データ・セット内の別のメンバーがまだ保管できることを示します。ISPF での ABEND D37 からのリカバリー処理がクローズし、データ・セットを再オープンします。データ・セットのこの新規オープンによって、 PDSE コードはスペースをレクラメーション処理することができるので、これでメンバーを保管できるようになります。

データ・セット圧縮の頻度データ・セット圧縮とは、未使用のスペースが PDS から除去されるプロセスです。

PDSE ではデータ・セット圧縮は必要ありません。PDSE ではガスが累積することがないので、圧縮の必要はありません。

エクステントの増加PDSE は、最大 123 のエクステントを持つことができます。PDSE はさらに 2 次エクステントを持つことができるので、小さい方の 2 次割り振りと同じ合計スペース割り振りを得ることができます。PDS は、同じ最大割り振りを持つためには、PDSE の 8 倍の 2 次エクステントを必要とします。逆に言えば、所定の 2 次エクステント値について、 PDSE は、圧縮されるのが必要になる前に、約 8 倍増加することができます。フラグメント化は、複数の小さなエクステントがより少数の大きなエクステントに統合されるプロセスです。この操作は、対話式記憶管理機能(ISMF) データ・セット・リストから直接実行することができます。

より小さなエクステントの使用は、スペース管理の観点からはより効果的ですが、最良のパフォーマンスを得るには、データ・セットをフラグメント化するのはできる限り避ける必要があります。

論理ブロック・サイズ論理ブロック・サイズは、PDSE のパフォーマンスに影響を及ぼすことがあります。一般に、大きなブロック・サイズはパフォーマンスを改善します。データ・セットの割り振りには、システム決定ブロック・サイズ機能を使用することを IBM

はお勧めします。 これは、データ・セット用の最適なブロック・サイズを選択します。 PDSE は、可変レコードに最大 32 760 バイトのブロック・サイズを与えます。固定長レコードでは、ブロック・サイズは、32 760 以下である、レコード・サイズの最大倍数です。

アプリケーションは、同じ PDSE にアクセスするのに異なる論理ブロック・サイズを使用することができます。 DCB 内のブロック・サイズは論理的であり、使用されている物理ブロック (ページ) サイズには影響を及ぼしません。

物理ブロック・サイズ (ページ・サイズ)PDSE は、これは MVS ページと同じサイズである、4 KB の物理ブロック・サイズを使用します。これらの 4 KB 物理ブロックは、しばしばページとも呼ばれます。

拡張区分データ・セット (PDSE) の処理

第 27 章 拡張区分データ・セット (PDSE) の処理 527

Page 552: DFSMS データ・セットの使用法

DCB ブロック・サイズは物理ブロック・サイズに影響を与えず、PDSE のすべてのメンバーはブロック化し直し可能と想定されています。BLKSIZE=6160 を指定してDCB をコーディングする場合、データ・セットは 4 KB のページに物理的にブロック化し直されますが、プログラムはまだ 6160 バイトの論理ブロックを持っています。

フリー・スペースライブラリー用のスペースは過剰に割り振られることがあります。この過剰スペースは、 ISPF で FREE コマンドを使用して手動で解放できます。あるいは、JCL で解放 (RLSE) パラメーターをコーディングするか、解放オプションの部分を含む管理クラスを選択することもできます。

RLSE は、管理クラスの部分解放パラメーターで補足されます。これにより、DFSMShsm が日次スペース管理サイクル中にフリー・スペースを解放し、管理クラスのそれに匹敵するものに依存できるようになります。 この機能は、PDSE についても、それが PDS や順次データ・セットで働くのと同様に働きます。部分解放パラメーターは、未使用スペースを解放しますが、エクステントを統合することはしません。

フラグメントほとんどの割り振り単位は、ほぼ同じサイズです。これは、メンバーが複数のページのグループでバッファーに入れられ、書き込まれる方法のためです。PDSE では、フラグメントは、あるにしても非常に少数です。

フラグメントがある場合は、IEBCOPY または DFSMSdss を使用してデータ・セットをコピーします。フラグメント化されたメンバーは、新規のコピーの中で再び結合されます。

PDSE ストレージ要件の要約PDSE 処理について計画しているときは、次のストレージ要件を考慮してください。

v ディレクトリー情報に必要なストレージは、データ・セットに一般的に使用可能なストレージから入手されます。ディレクトリーは動的に拡張するので、ディレクトリー用のストレージは、必要なときにいつでも入手できます。ディレクトリー・ストレージは、 1 次エクステントに限られる必要はなく、任意の使用可能なストレージから入手することができます。

v 各 PDSE メンバーごとに、さまざまな情報がディレクトリーに保存されます (属性、統計、および状況など)。単一のメンバーをサポートするために必要なディレクトリー・ストレージは、別名をサポートするために必要なストレージと同様、可変です。約 150 のメンバーを含む中規模の PDSE の場合、約 12 ページ (ページごとに 4096 バイト) のディレクトリー・ストレージが必要です。

v PDSE メンバーを削除すると、一部のまれな場合に、残りのメンバーによって使用されるディレクトリー・スペースの量が実際に増加します。これによって、ディレクトリー・スペースの合計量が削除の後に大きくなる必要があることがあります。

この問題が発生しうる唯一の場合は、PDSE に割り振られたストレージがほぼすべて使用されるときです。メンバーの STOW 削除または名前変更が、PDSE が

拡張区分データ・セット (PDSE) の処理

528 z/OS V1R10 DFSMS データ・セットの使用法

Page 553: DFSMS データ・セットの使用法

拡張されることを必要としているが、拡張が失敗する場合、STOW はエラーの戻りコードを戻します。この戻りコードは、追加の DASD ストレージを割り振ることができない理由を示します。

PDSE の定義このセクションでは、PDSE の定義方法を示します。 DSNTYPE キーワードは、PDSE または PDS を定義します。DSNTYPE 値には、次のものがあります。v LIBRARY (PDSE を定義します)

v PDS (区分データ・セットを定義します)

PDSE データ・セット・タイプを定義するには、データ・クラス定義、 JCL DD ステートメント、LIKE キーワード、TSO ALLOCATE コマンド、またはDYNALLOC マクロで DSNTYPE=LIBRARY と指定します。

ストレージ管理者は、ご使用のシステムのデフォルト値として SYS1.PARMLIB メンバー IGDSMSxx で DSNTYPE=LIBRARY を割り振ることができます。ご使用のシステムのデフォルト値が DSNTYPE=LIBRARY である場合は、JCL またはデータ・クラス定義で DSORG=PO または DIR スペース と指定して、データ・セットを PDSE として割り振ります (この場合は、DSNTYPE を指定する必要はありません)。

PDSE を割り振るには、次のパラメーターが両方とも必要です。

v JCL、DYNALLOC マクロ、データ・クラス、または TSO ALLOCATE コマンドで DIR スペース (ゼロより大) または DSORG=PO (区分編成) を指定します。

v JCL、データ・クラス、TSO ALLOCATE コマンドで、LIKE キーワードを使用して、または SYS1.PARMLIB で指定されたご使用のシステムのデフォルト値として、 DSNTYPE=LIBRARY を指定します。

拡張区分データ・セット (PDSE) の処理

第 27 章 拡張区分データ・セット (PDSE) の処理 529

Page 554: DFSMS データ・セットの使用法

推奨: データ・セットを PDSE として割り振りたくないが、 ACS ルーチンでセットアップされたデータ・クラス定義が DSNTYPE を指定している場合は、次の 2

つの方法のいずれかでそれを指定変更します。

v DSNTYPE キーワード (JCL DD ステートメントまたは ISMF パネルで) を使用せずにデータ・クラスを指定することによって。

v JCL DD ステートメント、データ・クラス、LIKE キーワード、またはALLOCATE コマンドで DSNTYPE=PDS を指定することによって。

データ・セットを作成して、ディレクトリー項目の数または DSORG=PO を指定するか、またはデータ・クラスが指定変更されることなく DSORG=PO を持つ場合、SMS は、それが PDS または PDSE のどちらであるかを選択します。 SMS は、次のリストにある最初のソースの情報を使用します。v JCL で DSNTYPE=PDS または DSNTYPE=LIBRARY (PDSE 用) あるいは動的割り振り。

v PDS の DSNTYPE またはデータ・クラスでの LIBRARY。v ご使用のシステムのデフォルト (SYS1.PARMLIB の場合は IGDSMSxx メンバー)。

v PDS。

JCL で DSNTYPE キーワードが指定された場合、エラー条件が存在し、ジョブは適切なメッセージで終了されますが、ジョブは、JCL キーワード DSNTYPE をサポートしない MVS のリリースを使用してプロセッサー上で実行されます。 メッセージIEF630I が出されます。

PDSE メンバーの作成BSAM、QSAM、または BPAM を使用して、PDSE メンバーを作成できます。

BSAM または QSAM を使用しての PDSE メンバーの作成ディレクトリーにユーザー・データ項目を追加するためにプログラムが必要でない場合、 図 91 に示すように、STOW マクロを使用せずにメンバーを書き込むことができます。

//PDSEDD DD DSNAME=MASTFILE(MEMBERK),SPACE=(TRK,(100,5,7)),// DISP=(NEW,CATLG),DCB=(RECFM=FB,LRECL=80,BLKSIZE=80),// DSNTYPE=LIBRARY,STORCLAS=S1P01S01,---

...OPEN (OUTDCB,(OUTPUT))...PUT OUTDCB,OUTAREA Write record to member...CLOSE (OUTDCB) Automatic STOW...

OUTAREA DS CL80 Area to write fromOUTDCB DCB ---,DSORG=PS,DDNAME=PDSEDD,MACRF=PM

図 91. PDSE の 1 つのメンバーの作成

拡張区分データ・セット (PDSE) の処理

530 z/OS V1R10 DFSMS データ・セットの使用法

Page 555: DFSMS データ・セットの使用法

同じプログラムを使用して、次のように JCL に変更を加えるだけで、順次データ・セットあるいは PDS または PDSE のメンバーを割り振ることができます。

1. PDSE は、システム管理される場合もあります。PDSE 用の DD ステートメントで STORCLAS を指定するか、ACS ルーチンがデータ・セットをシステム管理ストレージに送信できるようにします。

2. DCB マクロを DSORG=PS でコーディングします。

3. DD ステートメントで、システムがデータを PDSE のメンバーとして保管するよう指定します。つまり DSNAME=name(membername)。

4. DD ステートメントでデータ・クラスを指定するか、ACS ルーチンがデータ・クラスを割り当てるようにします。

5. メンバーを処理するには、OPEN マクロ、一連の PUT または WRITE マクロ、および CLOSE マクロを使用します。データ・セットがクローズされている場合、システムは STOW マクロを使用します。

これらのステップの結果、データ・セットおよびそのディレクトリーが作成され、メンバーのレコードが書き込まれ、ユーザー・データなしにディレクトリーに項目が自動的にメークされます。

バインダーが PDSE の最初のメンバーを保管すると、PDSE が PDSE プログラム・ライブラリーになります。

標準外 PDSE メンバー名の作成前項では、メンバー名が JCL の DD ステートメントにて指定されている場合の、PDSE におけるメンバーの作成方法が記述されています。特定の文字セットの文字で構成されているメンバー名のみを、JCL で指定することができます。サポート対象の文字セットに関する詳細は、「z/OS MVS JCL 解説書」の『文字セット』のセクションを参照してください。JCL がサポートしていない文字セットのメンバー名を作成する必要がある場合は、 BPAM を用いて独自の STOW マクロを発行するか、あるいは次の手順に従い BSAM または QSAM を使う必要があります。 (例:

532ページの図 92 を参照してください。)

1. DCB マクロに DSORG=PS または DSORG=PSU をコーディングします。

2. DD ステートメントに、メンバーを作成する PDSE の名前 (つまりDSNAME=dsname) を指定します。必要に応じて他のパラメーターをコーディングします。

3. JFCB 制御ブロックのコピーを得るためにプログラムが RDJFCB マクロを発行した場合、これが JCL DD ステートメントを意味します。RDJFCB マクロについては、「z/OS DFSMSdfp Advanced Services」に記載されています。

4. JFCBELNM を更新する場合のメンバー名については、JCL にて指定されている文字に限定されることはありません。すべてが X’FF’ のバイトでメンバー名を構成することはできません。

5. OPEN TYPE=J マクロ、一連の PUT または WRITE マクロ、および CLOSE

マクロを使用してメンバーを処理します。データ・セットがクローズされるとシステムが STOW マクロを発行します。

注: JFCBELNM で指定されたメンバー名が ’+’ (X’4E’)、’-’ (X’60’)、またはX’Fx’で始まる場合は、システムは STOW マクロを発行しません。CLOSE

は、JFCBELNM の ’+’ (X’4E’)、’-’ (X’60’)、または X’Fx’ が「そのデー

拡張区分データ・セット (PDSE) の処理

第 27 章 拡張区分データ・セット (PDSE) の処理 531

Page 556: DFSMS データ・セットの使用法

タ・セットは世代別データ・グループ (GDG) の世代別データ・セット(GDS)である」ということを示している、と解釈します。

上記の条件に該当するが、DSORG=PO (BPAM を使用するため) をコーディングし、CLOSE の前の DCB での最後の操作が STOW マクロである場合、CLOSE はSTOW マクロを発行しません。

PDSE メンバーを連続して追加または置換するデータ・セットにさらにメンバーを追加するか、メンバーを置換するには、 530ページの図 91 に説明される手順に従います。ただし、各メンバーごとに、スペース要求を省略する個別の DD ステートメントが必要です。後処理をオールドまたは共用として指定します (DISP=OLD または SHR)。データ・セットをクローズおよび再オープンせずに、複数のメンバーを次のように処理することができます。

1. DCB マクロで DSORG=PO をコーディングします。

2. WRITE および CHECK を使用して、メンバー・レコードを書き込んで、検査します。

3. すべてのメンバー・レコードが書き込まれたら、STOW マクロを発行してメンバー名、そのロケーション・ポインター、およびディレクトリー内の追加データを入力します。

4. データ・セットのメンバーおよびディレクトリー項目がすべて書き込まれるまで、 WRITE、CHECK、および STOW を引き続き使用します。

533ページの図 93 にある例は、データ・セットをクローズおよび再オープンせずに、複数の PDSE または PDS メンバーを処理する方法を示しています。

//PDSDD DD ---,DSNAME=MASTFILE,SPACE=(TRK,(100,5,7)),// DISP=(NEW,CATLG),DCB=(RECFM=FB,LRECL=80)---

...RDJFCB (OUTDCB)...MVC JFCBELNM,NAME...OPEN (OUTDCB,(OUTPUT)),TYPE=J...PUT OUTDCB,OUTAREA Write record to member...CLOSE (OUTDCB) Automatic STOW...

OUTAREA DS CL80 Area to write fromOUTDCB DCB ---,DSORG=PS,DDNAME=PDSDD,MACRF=PMNAME DC XL8’0123456789ABCDEF’

図 92. PDSE での標準外メンバー名の作成

拡張区分データ・セット (PDSE) の処理

532 z/OS V1R10 DFSMS データ・セットの使用法

Page 557: DFSMS データ・セットの使用法

図 93 にある STOW 上の A オプションは、メンバーが前に存在していなかったことを意味します。すべてのメンバーを置換するには、R をコーディングすることができます。

複数の PDSE メンバーを並行して追加または置換する次のようにして、複数の DCB またはジョブから同時に PDSE メンバーを作成できます。v 同じジョブ・ステップでの複数の DCB (出力用にオープン)

v 同じ中央演算処理複合システム上の複数のジョブv 「1」および「2」の組み合わせ。

図 94 は、BPAM を使用して複数の PDSE メンバーを同時に作成することができます。

//PDSEDD DD ---,DSN=MASTFILE,DISP=MOD,SPACE=(TRK,(100,5,7))...OPEN (OUTDCB,(OUTPUT))...

** WRITE MEMBER RECORDS

MEMBER WRITE DECBX,SF,OUTDCB,OUTAREA WRITE first record of memberCHECK DECBX

*WRITE DECBY,SF,OUTDCB,OUTAREA WRITE and CHECK next recordCHECK DECBY... WRITE/CHECK remaining records of member

*STOW OUTDCB,STOWLIST,A Enter the information in directory

* ... for this member after writing all records各追加メンバーごとにラベル『MEMBER』から繰り返し、各メンバーの 『STOWLIST』 にあるメンバー名を変更します。

...CLOSE (OUTDCB) (NO automatic STOW)...

OUTAREA DS CL80 Area to write fromOUTDCB DCB ---,DSORG=PO,DDNAME=PDSEDD,MACRF=WSTOWLIST DS 0F List of member names for STOW

DC CL8’MEMBERA’ Name of memberDS CL3 TTR of first record (created by STOW)DC X’00’ C byte, no user TTRNs, no user data

図 93. PDSE メンバーを連続して追加する

...OPEN (DCB1,(OUTPUT),DCB2,(OUTPUT))WRITE DECB1,SF,DCB1,BUFFER Write record to 1st memberCHECK DECB1...WRITE DECB2,SF,DCB2,BUFFER Write record to 2nd memberCHECK DECB2...STOW DECB1,PARML1,R Enter 1st member in the directorySTOW DECB2,PARML2,R Enter 2nd member in the directory...

DCB1 DCB DSORG=PO,DDNAME=X, ... Both DCBs open to theDCB2 DCB DSORG=PO,DDNAME=X, ... same PDSE

図 94. 複数の PDSE メンバーを並行して置換する

拡張区分データ・セット (PDSE) の処理

第 27 章 拡張区分データ・セット (PDSE) の処理 533

Page 558: DFSMS データ・セットの使用法

533ページの図 94 にある STOW の R オプションは、新規メンバーを追加しているか、メンバーを置換していることを意味します。新規メンバーを追加しているだけであることを意味するには、A をコーディングすることもできます。

同じ PDSE に 2 つの DCB をオープンし、メンバー・レコードを書き込み、それらに対し STOW を発行します。PDSE ディレクトリーに書き込まれる各メンバーごとに STOW マクロのパラメーター・リストに異なる名前をコーディングします。

PDSE またはメンバーの別のデータ・セットへのコピーTSO/E セッションでは、OCOPY コマンドを使用して、以下のようにコピーすることができます。

v PDSE または PDS メンバーを UNIX ファイルに

v UNIX ファイルを PDSE または PDS メンバーに

v PDSE または PDS メンバーを別のメンバーに

v PDSE または PDS メンバーを順次データ・セットに

v 順次データ・セットを PDSE または PDS メンバーに

関連資料: 詳しくは、「z/OS UNIX System Services コマンド解説書」を参照してください。

IEBCOPY を使って PDSE と PDS データ・セット間のコピーを行うことができます。 IEBCOPY を使って PDSE と PDS データ・セット間のデータ・メンバーをコピーする場合、最も効率よくコピーする方法 (変換が必要な場合にコピーする) は、以下の 2 ステップ処理を使用することです。

1. IEBCOPY UNLOAD を使用して、選択したメンバーあるいは PDS または PDSE

全体を順次ファイルにコピーします。

2. IEBCOPY LOAD を使用して、上記で選択したメンバーまたは順次ファイルのデータ・セットを PDSE または PDS にコピーします。

異なるデータ・セット・フォーマット間で 1 ステップのコピー操作を行うよりも、この 2 ステップ方式の方が著しく優れたパフォーマンスを達成できます。ご注意いただきたいことは、この推奨内容はプログラム・オブジェクトが入った PDSE ライブラリーではなく、データ・メンバーを持った PDSE に対して適用されるということです。プログラム・オブジェクトが入った PDSE ライブラリーの場合はIEBCOPY ロード処理では変換不能です。

PDSE のメンバーの処理プログラムは、PDSE を PDS と同じ方法で処理します。メンバーを位置指定するか、ディレクトリーを処理するために、オペレーティング・システムによっていくつかのマクロが提供されています。これらについてこのセクションで説明します。

PDSE は、メンバーが置換されるときに、データ・セット・ストレージを自動的に再使用するよう設計されています。PDS はスペースを自動的に再使用しません。メンバーが削除または置換される場合、PDS または PDSE メンバーの古いコピーは、それが削除または置換される前にそのメンバーのデータにアクセス中であったアプリケーションには使用できる状態になっています。

拡張区分データ・セット (PDSE) の処理

534 z/OS V1R10 DFSMS データ・セットの使用法

Page 559: DFSMS データ・セットの使用法

メンバーへの接続の確立PDSE メンバーへの接続は、そのメンバーの一時的バージョンを提供します。接続は、メンバーが削除または置換される前にそのメンバーのデータにアクセスしていたアプリケーションが引き続き使用できるようにします。PDSE メンバーへの接続は、次のものによって確立されます。v DSNAME=libname(memname) を使用する JCL。この接続は OPEN 時に発生します。

v BLDL

v DESERV FUNC=GET

v DESERV FUNC=GET_ALL

v 名前による FIND

v TTR による FIND

v POINT

データ・セットがオープンされていた間に確立されていたすべての接続は、データ・セットがクローズされるときに解放されます。接続が名前による FIND により確立された場合、別のメンバーが FIND または POINT を通じて接続されるときに、接続は解放されます。特定のメンバーへのすべての接続が解放されたら、システムはスペースをレクラメーション処理します。

メンバーを削除または置換している場合、メンバーの古いバージョンは、それに接続されたアプリケーションによってまだアクセス可能です。置換操作に続いて、名前によるメンバーに接続する (BLDL、FIND、または OPEN を通じて) アプリケーションは、新しいバージョンにアクセスします。(置換バージョンは、それへの接続がすでに存在していない限り、 TTR による FIND または POINT を使用してアクセスすることはできません。)

OPEN、BLDL、FIND、および POINT によって確立された接続は、メンバー・データを読み取りまたは書き込むために BSAM、QSAM、および BPAM によって使用されます。 DESERV によって確立された接続は、主にプログラム管理によって使用されます。プログラムまたはシステムが DCB をクローズするとき、システムはDCB とデータ・セット間のすべての接続をドロップします。BLDL、TTR によるFIND、または POINT を使用してメンバーを接続する場合、STOW DISC を発行して、DCB をクローズする前にこれらのメンバーを切断することができます。DESERV を使用してメンバーに接続する場合、DESERV FUNC=RELEASE を発行して DCB をクローズする前にそれらのメンバーを切断できます。

BLDL マクロを使用してのディレクトリー項目リストの構成BLDL マクロは、1 つ以上のディレクトリー項目を仮想記憶域に読み取ります。BLDL マクロを発行する前に、BLDL リストにメンバー名を置きます。リスト内の各メンバーについて、システムは相対トラック・アドレス (TTR) およびディレクトリー項目に含まれている追加の情報を提供します。リスト内に複数のメンバー名がある場合、メンバーが連結内の同じまたは異なる PDS または PDSE からのものであるかどうかとは無関係に、メンバー名は照合シーケンスになければならないことに注意してください。

また、BLDL が連結された一連のディレクトリーを検索するのは、(1) 連結されたPDS 用にオープンされている DCB が提供されているとき、または (2) DCB が提

拡張区分データ・セット (PDSE) の処理

第 27 章 拡張区分データ・セット (PDSE) の処理 535

Page 560: DFSMS データ・セットの使用法

供されていないときです。後者の場合、検索順序は、TASKLIB で開始され、次にJOBLIB または STEPLIB (それら自体はおそらく連結されています) に進み、さらに LINKLIB が続きます。

DCB を指定して START= または STOP= パラメーターを指定した場合に検索されるディレクトリーの順序を変更できます。これらのパラメーターを使用すると、検索対象データ・セットの先頭と最後の連結番号を指定可能となります。

処理されるメンバーの位置を見付けるために、後続の FIND マクロをディレクトリーではなく、BLDL リストに誘導することによって検索時間を短縮することができます。

501ページの図 78 は、BLDL リストを示しています。これは、リスト内の項目の数を指定する 4 バイトのリスト記述および各項目の長さ (12 から 76 バイト) で始まる必要があります。NOCONNECT、BYPASSLLA、START=、または STOP= などのオプションを指定する場合、8 バイトの BLDL 接頭部の前に、4 バイトのリスト記述子がある必要があります。各項目の最初の 8 バイトには、メンバー名または別名が含まれています。次の 6 バイトには、TTR、K、Z、および C フィールドが含まれます。 最小ディレクトリー長は 12 バイトです。

BLDL マクロは、NOCONNECT オプションが指定されない限り、そのメンバーがPDSE で検出されるときに、PDSE の各メンバーへの接続を確立します。

ディレクトリーの BSAM または QSAM 読み取りと同様に、BLDL NOCONNECT

オプションは PDSE メンバーを接続しません。BLDL NOCONNECT オプションでは、システムがより少ない仮想記憶域を使用することになります。NOCONNECT オプションは、処理されない場合もある多くのメンバーに対して BLDL が発行されるときに適切です。

2 つのアプリケーションが同じメンバーを処理する場合は、NOCONNECT オプションを使用しないでください。たとえば、アプリケーションがメンバーのバージョンを削除するか置換し、 NOCONNECT が指定された場合、そのバージョンは、接続されているアプリケーションにとってアクセス不能です。

PDSE プログラム・ライブラリーでは、BLDL に LINKLST、JOBLIB、およびSTEPLIB を検索するよう指図することができます。リンク・パック域 (LPA) にあるロード・モジュール用のディレクトリー項目は、BLDL マクロによってアクセスできません。

BSP マクロを使用して物理レコードをバックスペースするBSP マクロを使用して、現行のメンバーを 1 シミュレート・ブロックだけバックスペースすることができます。次に、シミュレート・ブロックを再読み取りまたは再書き込みすることができます。ただし、PDSE メンバーの先頭を超えてバックスペースしたり、 PDSE ディレクトリー内でバックスペースすることはできません。

可変長スパン・レコード (RECFM=VS) では、レコードの先頭に位置決めされる場合、 BSP マクロは、直前のレコードの先頭にバックスペースします。レコード内に位置決めされている場合、BSP マクロはレコードの先頭にバックスペースします。

拡張区分データ・セット (PDSE) の処理

536 z/OS V1R10 DFSMS データ・セットの使用法

Page 561: DFSMS データ・セットの使用法

可変長ブロック・スパン (RECFM=VBS) レコードでは、BSP マクロは、直前に読み取られたバッファーの最初のレコードの先頭にバックスペースします。システムは、レコード・セグメント内ではバックスペースしません。BSP マクロを発行して、次に読み取りが続くと、常にブロックは最初のレコード・セグメントまたは完全セグメントで開始されます。 (ブロックは、複数のレコード・セグメントを含むことができます。)

PDSE メンバーに書き込んでから、BSP マクロに続いて WRITE マクロを発行する場合、書き込まれたばかりのレコードの後のメンバーのデータはすべて破棄されます。

ディレクトリー項目サービスの使用DESERV は、PDS および PDSE データ・セットのディレクトリーにアクセスするためのインターフェースを提供します。DESERV では、それぞれ GET_ALL およびGET 機能を使用して、 PDSE 用のすべてのディレクトリー項目を入手するか、PDS

または PDSE 用の選択されたディレクトリー項目を選択することができます。DELETE または RENAME 機能を使用して、PDSE 内のメンバーのリストを削除または名前変更できます。UPDATE 機能を使用してプログラム・オブジェクト (PDSE

の中で) の属性を変更できます。

すべての機能は、呼び出し元への結果を、呼び出し側によって提供された区域または DE サービスによって戻された区域に戻します。すべての機能は、状況情報を戻りコードおよび理由コードの形で提供します。IGWDES マクロは、すべてのパラメーター域をマップします。

また、DE サービスは、IGWSMDE マクロによってマップされた、システム管理ディレクトリー項目 (SMDE) と呼ばれる新規フォーマット・ディレクトリー項目も導入します。SMDE は、BLDL によって生成されたディレクトリー項目の拡張された、拡張可能なバージョンです。その主な機能は、ユーザーにロング・ネームのサポート、より長いアプリケーション (ユーザー) データ、ロード・モジュール指示、およびバージョン管理を提供することです。表 39 では、 DESERV によって提供されるすべての機能を説明しています。このセクションでは、GET、GET_ALL、RELEASE、GET_NAMES、および UPDATE 機能について説明します。 DELETE および RENAME 機能については後ほど説明します。

表 39. DE サービス機能の要約

機能 説明

GET 名前のリストに基づくディレクトリー項目、またはこれらのメンバーへの接続を確立するための BLDL ディレクトリー項目を入手します。

GET_ALL 各メンバー名ごとにすべてのディレクトリー項目を入手します。オプションで、ライブラリー内のすべての名前への接続を確立します。

GET_NAMES PDSE の指定されたプログラム・オブジェクト・メンバーに定義された各メンバー名 (基本名および別名) の名前とディレクトリー項目で埋められたバッファーを入手します。

DELETE 1 つ以上の PDSE メンバー名を削除します。詳しくは、 558ページの『PDSE メンバーの削除』を参照してください。

拡張区分データ・セット (PDSE) の処理

第 27 章 拡張区分データ・セット (PDSE) の処理 537

Page 562: DFSMS データ・セットの使用法

表 39. DE サービス機能の要約 (続き)

機能 説明

RELEASE GET または GET_ALL 機能に対する 1 つ以上の直前の呼び出しによって確立された、選択された接続を除去します。あるいは、GET または GET_ALL

機能に対する直前の呼び出しによって確立されたすべての接続を除去します。

RENAME 1 つ以上の PDSE メンバーを名前変更します。詳しくは、 559ページの『PDSE メンバーの名前変更』を参照してください。

UPDATE 呼び出し元がPDSE プログラム・オブジェクトのディレクトリー項目の選択されたフィールドを更新できるようにします。

FUNC=GETDESERV GET は、オープンされた PDS またはPDSE のメンバーまたは PDS または PDSE の連結に SMDE を戻します。データ・セットは、入力、出力、または更新用にオープンすることができます。 SMDE には、PDS または PDSE ディレクトリーが含まれます。SMDE は、 IGWSMDE マクロによってマップされ、IHAPDS

によってマップされる情報のスーパーセットを含みます。戻された SMDE は、名前によって、または BLDL ディレクトリー項目によって選択することができます。

名前リストによる入力: SMDE を名前によって選択したい場合は、重複することなく、昇順でソートする必要がある名前のリストを提供します。 各名前は、2 バイトの長さフィールドに続いて名前の文字が付いたものから構成されます。 8 文字未満の文字が付いた名前を検索するときは、名前の右にブランクが埋め込まれ、8 文字を構成します。 8 より大きい値を含む各長さフィールドごとに、DE サービスは、検索を行うときに末尾ブランクを無視し、8 バイトを超えるとヌルにします。

SMDE を検索することに加えて、検索された各メンバー名ごとにメンバー・レベル接続を確立することができます。メンバーは、HOLD タイプの接続と接続されます。 HOLD の接続タイプは、接続が解放されるまでメンバーをシステムから除去することができないことを保証します。 接続のインテントは、CONN_INTENT パラメーターによって指定されます。CONN_INTENT=HOLD が指定される必要があります。

GET への単一の呼び出しを通じて行われた接続はすべて、単一の固有接続 ID と関連付けられます。RELEASE 接続の単一の起動でのすべての接続を解放するために、接続 ID を使用することもできます。DESERV GET の例は、図 95 に示されています。

拡張区分データ・セット (PDSE) の処理

538 z/OS V1R10 DFSMS データ・セットの使用法

Page 563: DFSMS データ・セットの使用法

BLDL ディレクトリー項目による入力 (PDSDE): 指定されている検索引数がPDSDE である場合、GET 機能は大幅に制限されます。 PDSDE (IHAPDS マクロによりマップされます) は、検索される 1 つの名前しか識別しません。PDSDE は、このメンバーが常駐するライブラリーの連結番号 (PDS2CNCT) のみを識別するので、そのライブラリーだけを検索できます。 PDSDE は、メンバー名の特定のバージョンを識別するので (この識別は MLT (PDS2TTRP) を通じて行われます)、そのターゲット・ライブラリーで同じバージョンを検索できる場合のみ、検索されたと見なすことができます。ただし、ライブラリー検索は、ターゲット・ライブラリーが PDSE の場合のみ行うことができます。 ターゲット・ライブラリーが PDS である場合、入力 PDSDE は、単に SMDE フォーマットの同等のディレクトリー項目に変換され、戻されます。 ディレクトリー検索は行うことができません。呼び出し元が BYPASS_LLA=NO と指定した場合、ライブラリー検索は LLA を検索してLLA 管理ライブラリーがないか調べます。呼び出し元が BYPASS_LLA=YES を指定した場合、ライブラリーの DASD ディレクトリーのみが検索されます。 PDSDE

制御ブロックによる DESERV GET の例は、図 96 に示されています。

図 95. NAME_LIST 制御ブロック構造による DESERV GET

拡張区分データ・セット (PDSE) の処理

第 27 章 拡張区分データ・セット (PDSE) の処理 539

Page 564: DFSMS データ・セットの使用法

FUNC=GET_ALLGET_ALL 機能は、PDS、PDSE、または PDS および PDSE の連結内のすべてのメンバー名に対して SMDE を戻します。PDSE で検索された各メンバーごとにメンバー・レベルの接続を確立することができます。 呼び出し元は CONCAT パラメーターを使用して、連結内のどのデータ・セットを処理するのか、および連結内のすべてのデータ・セットが処理されるのかどうかを示します。

DESERV GET_ALL が連結全体に対してすべての SMDE ディレクトリー項目を戻すことを呼び出し元が要求する場合、SMDE は、重複する名前を戻すことなく、SMDE_NAME フィールドによってソートされているようにシーケンスで戻されます。GET 機能と同様に、すべての接続は、呼び出しの時点で確立された単一の接続ID と関連付けることができます。この接続 ID は、RELEASE 機能の単一の起動でのすべての接続を解放するために使用することができます。 GET_ALL 機能に関連する制御ブロックの概要については、 541ページの図 97 を参照してください。

図 96. PDSDE 制御ブロック構造による DESERV GET

拡張区分データ・セット (PDSE) の処理

540 z/OS V1R10 DFSMS データ・セットの使用法

Page 565: DFSMS データ・セットの使用法

FUNC=GET_NAMESGET_NAMES 機能は、新規 PDSE のメンバーについてすべての名前および関連したアプリケーション・データのリストを入手します。この機能は PDS をサポートしていません。

呼び出し元は、機能への入力としてメンバーに対して名前またはその別名を提供します。バッファーは DESB 構造によってマップされ、GET_NAMES によってフォーマット設定されます。この機能は、GET_NAMES によって入手されたバッファーにデータを戻します。 DESB で戻されたデータ構造は、メンバー記述子構造(DESD) です。 DESD_NAME_PTR フィールドは、メンバーまたは別名をポイントします。DESD_DATA_PTR は、アプリケーション・データをポイントします。データ・メンバーの場合、アプリケーション・データは、ディレクトリー項目からのユーザー・データです。プログラム・オブジェクトの基本メンバー名の場合、アプリケーション・データは、IGWPMAR マクロの PMAR および PMARL 構造によってマップされます。プログラム・オブジェクトの別名の場合、アプリケーション・データは、IGWPMAR マクロの PMARA 構造によってマップされます。DESB_COUNT フィールドは、DESB_DATA フィールドにある DESD の項目の数を示します。バッファーは、呼び出し元によって指定されたサブプールで入手され、呼び出し元によって解放される必要があります。呼び出し元がキー 0 にあり、サブプール 0 が指定される場合、DESB はサブプール 250 で入手されます。

GET_NAMES 機能に関連する制御ブロックの概要については、 542ページの図 98

を参照してください。

図 97. DESERV GET_ALL 制御ブロック構造

拡張区分データ・セット (PDSE) の処理

第 27 章 拡張区分データ・セット (PDSE) の処理 541

Page 566: DFSMS データ・セットの使用法

FUNC=RELEASERELEASE 機能は、GET および GET_ALL 機能を通じて確立された接続を除去することができます。呼び出し元は、接続を確立するために DESERV に渡されたのと同じ DCB を指定する必要があります。BLDL、FIND、または POINT マクロによって確立された接続は、影響を受けません。

呼び出し元は、どの接続を除去するかを、2 つの方法のいずれか (接続 ID またはSMDE のリストのどちらかを指定することによって) で指定することができます。呼び出し元が接続 ID を渡す場合、機能は、GET または GETALL 機能の単一の要求からすべての接続を除去します。あるいは、SMDE のリストが提供されると、機能は、SMDE 内のメンバー名のバージョンに関連した接続を除去します。

推奨: GET および GETALL によって戻される SMDE には、接続を識別するのに使用される制御情報が含まれています。RELEASE 機能を発行する前にこの情報を変更しないでください。

接続 ID のすべての接続が SMDE に基づいて解放される場合、接続 ID は解放またはレクラメーション処理されません。接続 ID による解放だけでは、 DE サービスが将来の使用のために接続 ID をレクラメーション処理することになります。接続を確立できない場合であっても、PDS データ・セット用の SMDE を含めるのはエラーではありません。使用済みの接続 ID を解放するのはエラーです。接続がない PDSE SMDE を解放するのもエラーです。

明示的に解放されないすべての接続は、DCB をクローズすることにより解放できるので、 DE サービス・ユーザーは、接続を解放するために RELEASE 機能を発行する必要はありません。RELEASE 機能に関連する制御ブロックの概要については、

図 98. DESERV GET_NAMES 制御ブロック構造

拡張区分データ・セット (PDSE) の処理

542 z/OS V1R10 DFSMS データ・セットの使用法

Page 567: DFSMS データ・セットの使用法

図 99 を参照してください。

FUNC=UPDATEDESERV UPDATE 機能を使用して、PDSE プログラム・オブジェクト用のディレクトリー項目の選択されたフィールドを更新します。これによって、呼び出し元はPMAR の選択されたフィールドを更新することができます。呼び出し元は、出力または更新用にオープンしている DCB を提供する必要があります。呼び出し元は、更新される SMDE のリストをポイントする DESL も提供する必要があります。DESL は順次処理することができ、コードは更新が成功したか失敗したかを示すことができます。SMDE (GET 機能によって生成されます) には、 MLT およびメンバーの連結番号と項目番号が含まれます。これらのフィールドは、更新される正しいディレクトリー・レコードを検索するために使用されます。 DESL_NAME_PTR

は無視されます。呼び出し元は、DESERV GET 機能呼び出しを発行して、 SMDE

を入手し、必要に応じて SMDE を変更し、DESERV UPDATE 機能呼び出しを発行して更新済み DESL を渡す必要があります。

UPDATE 機能は、プログラム・オブジェクトに組み込まれたディレクトリー項目に影響を及ぼしません。これは、順次ファイルとして PDSE プログラム・オブジェクトをバインダーに含める場合に意味があります。バインダーは、ディレクトリーにあるディレクトリー項目ではなく、プログラム・オブジェクトにあるディレクトリー項目を使用することができます。

544ページの図 100 にあるフィールドを更新することができます。

図 99. DESERV RELEASE 入力制御ブロック構造

拡張区分データ・セット (PDSE) の処理

第 27 章 拡張区分データ・セット (PDSE) の処理 543

Page 568: DFSMS データ・セットの使用法

PMAR_EPA または PMAR_AAMD 以外のフィールドが更新される場合、この更新はすべてのエントリー・ポイントについて有効になります。PMAR_EPA またはPMAR_AAMD が更新される場合、これらの更新は入力 SMDE によって示されるエントリー・ポイントにのみ影響を及ぼします。

UPDATE 機能は、他の DE サービス起動によって確立される接続に影響を及ぼしません。

FIND マクロを使用してメンバーの先頭に位置決めする特定のメンバーの先頭に位置決めするには、FIND マクロを発行する必要があります。次の入力または出力操作は、FIND によって設定されたポイントで処理を開始します。 FIND マクロにより、連結されたデータ・セット用にオープンされたDCB を提供するとき、 PDSE および PDS ディレクトリーの連結されたシリーズを検索することができます。

FIND マクロを使用するときにシステムを正しいメンバーに誘導する方法は 2 つあります。メンバーの名前を含むアドレスを指定するか、BLDL マクロを使用することにより作成しておいた BLDL リストにある項目の TTRk フィールドのアドレスを指定します。 k は、メンバーを含むデータ・セットの連結番号です。最初の事例では、システムはメンバーに接続するデータ・セットのディレクトリーを検索します。2 番目の事例では、相対トラック・アドレスは BLDL リスト項目にあるので、検索は必要ありません。

NAME によるまたは TTR による FIND は、特定の PDSE メンバーへの接続を確立します。名前 によって接続は、別のメンバーへの位置決めが確立されるまで残ります。TTR によって確立された接続は、 CLOSE まで残ります。

データ・セットが出力用にオープンしている場合は、FIND マクロを発行する前にそれをクローズして、入力または更新処理用に再オープンします。

PMAR_RENT 1 BIT ReenterablePMAR_REUS 1 BIT ReusablePMAR_TEST 1 BIT Module to be tested - TSO TESTPMAR_LOAD 1 BIT Only loadablePMAR_EXEC 1 BIT ExecutablePMAR_PAGA 1 BIT Page alignment is requiredPMAR_XSSI 1 BIT SSI information presentPMAR_XAPF 1 BIT APF information presentPMAR_RMOD 1 BIT RMODE is ANY.PMAR_AAMD 2 BITS Alias entry point addressing mode. If B’00’,

AMODE is 24. If B’10’, AMODE is 31. If B’11’, AMODE is ANY.PMAR_MAMD 2 BITS Main entry point addressing mode. If B’00’, AMODE is 24.

If B’10’, AMODE is 31. If B’11’, AMODE is ANY.PMAR_AC BYTE APF authorization codePMAR_EPM WORD Main entry point offsetPMAR_EPA WORD This entry point offsetPMAR_SSI 32 BITS SSI informationPMARL_PRIM 1 BIT FETCHOPT PRIME optionPMARL_PACK 1 BIT FETCHOPT PACK option

図 100. DESERV UPDATE

拡張区分データ・セット (PDSE) の処理

544 z/OS V1R10 DFSMS データ・セットの使用法

Page 569: DFSMS データ・セットの使用法

不十分なアクセス権限 (RACF 実行権限) を持つ場合、または共用オプションに違反する場合、FIND マクロは失敗します。

関連資料: PDSE に許可される共用オプションの説明については、 551ページの『PDSE の共用』を参照してください。

ISITMGD を使用してデータ・セットがシステム管理されているかどうかを判別する

ISITMGD マクロを使用して、オープンしているデータ・セットがシステム管理されているかどうか、およびそれが PDSE であるかどうか判別することができます。ISITMGD マクロは、どのタイプのデータ・セットが処理されているかどうかを調べるためにテストする必要がある、 ISITMGD パラメーター・リストに一部のビットを設定します。 IGWCISM マクロは、ISITMGD パラメーター・リストをマップします。図 101 にあるアセンブラーの例では、ISITMGD は、連結 (CONCAT=1) 内の2 番目のデータ・セットに対して発行されました。

単一のデータ・セットをテストしている場合は、CONCAT のデフォルト (0 です)

を使用します。 CONCAT パラメーターは、順次連結ではなく、区分連結のみに使

OPEN (PDSEDCB,(INPUT)) OPEN PDSE...

************************************************************** ISSUE ISITMGD FOR SECOND DATA SET IN THE CONCATENATION*************************************************************

ISITMGD DCB=PDSEDCB,MF=(E,ISITPARM),CONCAT=1USING ISM,1LTR 15,15 Did it complete successfullyBNZ ISITERR No, branch to error routineTM ISMOFLG1,ISMMGD Is data set system-managed?BZ NOTMGD No, branch to non-SMS routineTM ISMOFLG2,ISMPDSE Is data set a PDSEBO ANPDSE Yes, branch to PDSE routine

OTHER WTO ’PDS: system-managed data set’B EXIT

************************************************************** PROCESS A NON-SMS MANAGED PDS*************************************************************NOTMGD EQU *

TM ISMOFLG2,ISMPDSE Is data set a PDSEBO ANUMPDSE Yes, branch to PDSE routineWTO ’PDS: non-system-managed data set’B EXIT

************************************************************** PROCESS AN UNMANAGED MANAGED PDSE*************************************************************ANUMPDSE EQU *

WTO ’PDSE: unmanaged data set’B EXIT

************************************************************** PROCESS A MANAGED PDSE*************************************************************ANPDSE EQU *

WTO ’PDSE: system-managed data set’...

PDSEDCB DCB DSORG=PO,DDNAME=PDSEDDN,MACRF=(R)ISITPARM ISITMGD MF=L Defines space for parameter list

IGWCISM Maps parameter list...

図 101. ISITMGD の例

拡張区分データ・セット (PDSE) の処理

第 27 章 拡張区分データ・セット (PDSE) の処理 545

Page 570: DFSMS データ・セットの使用法

用されます。順次連結の場合、現行のデータ・セットがテストされます。レジスター 15 にある戻りコードは、機能が失敗したか、システムでサポートされていないことを示します。

ISITMGD は、ライブラリー、データ、またはプログラムのタイプを判別するために使用されます。 ISITMGD マクロ上で DATATYPE オプションを指定すると、パラメーター・リストパラメーター・リストでライブラリー・タイプが設定されます。取りうるデータ・タイプ設定値については、マクロ IGWCISM で定数ISMDTREC、ISMDTPGM、および ISMDTUNK を参照してください。

NOTE マクロを使用して相対位置を提供するNOTE マクロを使用して、読み取られるか、書き込まれた最新のレコードの先頭アドレス (TTRz) を検索することができます。NOTE は、メンバー内のレコードの位置決めするために POINT によって使用されることができる TTRz を戻します。NOTE は、トラック・バランスまたはトラック容量について X'7FFF' の値を戻します。トラック容量またはバランスを計算する必要はありません。

PDSE ディレクトリー内をポイントしている間に NOTE マクロを発行する場合、最初のディレクトリー・レコードのロケーションを表す TTRz が戻されます。

最初のディレクトリー・レコードについて NOTE から戻された TTRz は、PDSE

ディレクトリー内で処理する間に POINT によって位置決めすることができる唯一の有効な TTRz です。

NOTE と PDSE を併用する場合の結果のいくつかの例を、以下に示します。NOTE

は、

v OPEN のすぐ後に使用すると、無効なアドレス (X'00000000') を戻します。また、メンバーが FIND マクロを使用して、または JCL 内のメンバー名によってポイントされるが、READ、WRITE、または POINT が発行されなかった場合、NOTE は無効なアドレス (X'00000000') を戻します。

v STOW ADD または STOW REPLACE のすぐ後に使用すると、収容されたメンバーの論理ファイル・マークの TTRz を戻します。メンバーが空である (書き込みが行われていない) 場合、戻される値は収容されたメンバーの TTRz です。

v OPEN の後の READ に続いて使用すると、JCL にメンバー名がない場合はPDSE ディレクトリーの先頭の TTRz を、または JCL にメンバー名がある場合はメンバーの TTRz を戻します。

v FIND または POINT (メンバーの最初のレコードに対して) の後の最初の READ

に続いて使用すると、メンバーの TTRz を戻します。

v メンバーの最初の WRITE に続いて使用すると、メンバーの TTRz を戻します。

v 後続の READ または WRITE に続いて使用すると、直前に読み取りまたは書き込みが行われたブロック内の最初の論理レコードの TTRz を戻します。

v スパン・レコードの中間に位置決めされているときに発行されると、そのレコードの先頭の TTRz を戻します。

v POINT 命令 (ここでは、POINT への入力は「TTR1」の形式で行われる) のすぐ後に発行されると、「TTR0」の注釈値を戻します。

v POINT 命令 (ここで、POINT への入力は「TTR0」の形式で行われる) のすぐ後に発行されると、無効な注釈値 X'00000000' を戻します。

拡張区分データ・セット (PDSE) の処理

546 z/OS V1R10 DFSMS データ・セットの使用法

Page 571: DFSMS データ・セットの使用法

関連資料: NOTE マクロについては、 608ページの『NOTE マクロを使用してブロックの相対アドレスを戻す』および「z/OS DFSMS Macro Instructions for Data

Sets」を参照してください。

POINT マクロを使用してブロックに位置決めするPOINT マクロは、次の READ または WRITE 操作で PDSE メンバーの先頭、または PDSE メンバー内の任意の箇所に位置決めさせます。POINT マクロはトラック・レコード・アドレス (TTRz) を使用します。これは、正しいロケーションに位置決めするためにディレクトリーの NOTE、BLDL、または BSAM 読み取りから入手することができます。メンバーの先頭に位置決めしている場合は、TTR 内の z

バイトはゼロでなければなりません。 POINT マクロは、PDSE メンバーへの接続を確立します (接続がすでに存在していない場合)。

NOTE が別のセグメントで行われた場合であっても、POINT マクロは、スパン・レコードの最初のセグメントに位置決めされます。現行レコードが複数のブロックにスパンする場合、 TTRz フィールドの z バイトを 0 に設定すると、次のレコード(次のセグメントではなく) にアクセスすることができます。

1 つの PDSE メンバーから別のメンバーの最初のブロックに位置決めすることができます。それから、そのメンバー内の任意のレコードに位置決めすることができます。1 つのメンバーから別のメンバーの中間に位置決めしようとすると、間違ったレコードがアクセスされることになります。最初のメンバーからのデータが読み取られるか、入出力エラーが発生します。 PDSE が出力用にオープンしている場合、POINT マクロを使用して、書き込まれているメンバー以外のメンバーに位置決めすると、システム ABEND が発生します。

アクセス権限が十分でない (RACF 実行権限しか持っていない) 場合、または共用オプションに違反すると、POINT マクロは入出力エラーで失敗します。 551ページの『PDSE の共用』を参照してください。

関連資料: POINT マクロの詳細については、「z/OS DFSMS Macro Instructions for

Data Sets」および 609ページの『POINT マクロを使用してブロックに位置決めする』を参照してください。

メンバー間の切り替えNOTE、FIND、および POINT マクロを使用して、PDSE メンバー間で切り替えることができます (メンバー 1 を処理してから、メンバー 2 を処理し、次にメンバー 1 の処理を継続します)。メンバー内で TTR を位置指定する方法についての情報は、 548ページの図 102 にも示されています。

拡張区分データ・セット (PDSE) の処理

第 27 章 拡張区分データ・セット (PDSE) の処理 547

Page 572: DFSMS データ・セットの使用法

この例は、FIND by TTR を使用しています。プログラムがメンバーの読み取りを再開するとき、そのメンバーは別のプログラムによって置き換えられている場合があります。 551ページの『PDSE の共用』を参照してください。

STOW マクロを使用してディレクトリーを更新するPDSE に複数のメンバーを追加するとき、各メンバーを書き込んだ後に STOW マクロを発行して、各メンバーの項目がディレクトリーに追加されるようにする必要があります。 STOW マクロを使用するには、DSORG=PO を DCB マクロで指定する必要があります。

STOW マクロを使用して、ディレクトリー内でメンバーを追加、削除、置換、または変更することができます。追加および置換オプションは、ディレクトリー項目に追加情報を保管することができます。STOW REPLACE を使用して、基本メンバー名を置換するとき、既存の別名が削除されます。STOW DELETE を使用して、基本

OPEN (PODCB,(INPUT)) Open the DSORG=PO DCB...BLDL PODCB,BLDLLIST Construct directory entry list...FIND PODCB,BLDLTTR1,C Position to the 1st member...READ DECB1,SF,PODCB,BUFFER1 Read records from 1st member...CHECK DECB1 Check the read...NOTE PODCB Note a position within the 1st memberST 1,INMEM1 Store the TTR for the position in member 1...FIND PODCB,BLDLTTR2,C Position to the 2nd member...READ DECBA,SF,PODCB,BUFFER1 Read records from 2nd member...CHECK DECBA Check the read...FIND PODCB,BLDLTTR1,C Position back to 1st member...POINT PODCB,INMEM1,TYPE=REL Position to within 1st member...READ DECB2,SF,PODCB,BUFFER1 Read records from 1st member...CHECK DECB2 Check the read...CLOSE PODCB Close the DCB...

PODCB DCB DSORG=PO,MACRF=(R),NCP=1,DDNAME=PDSEDD,---*INMEM1 DS F*BLDLLIST DS 0F BLDL parmlistBLDLFF DC H’2’ Number of entries in BLDL listBLDLLL DC H’12’ Length of storage for directory entryBLDLN1 DC CL8’MEMBER1’ Member nameBLDLTTR1 DS CL3 TTR of 1st memberBLDLK1 DS CL1 Concatenation # of 1st memberBLDLN2 DC CL8’MEMBER2’ Member nameBLDLTTR2 DS CL3 TTR of 2nd memberBLDLK2 DS CL1 Concatenation # of 2st member*BUFFER1 DS ...

図 102. NOTE および FIND を使用して連結 PDSE のメンバー間で切り替える

拡張区分データ・セット (PDSE) の処理

548 z/OS V1R10 DFSMS データ・セットの使用法

Page 573: DFSMS データ・セットの使用法

メンバー名を削除するとき、既存の別名が削除されます。 STOW ADD およびREPLACE は、PDSE プログラム・ライブラリーに対しては許可されません。

STOW INITIALIZE 機能では、図 103 に示されるように、PDSE ディレクトリーをクリアするか、空にリセットすることができます。

STOW マクロを発行すると、データは DASD に同期します。データを同期することについての詳細は、 611ページの『SYNCDEV マクロを使用してデータを同期する』を参照し、STOW マクロの使用についての詳細は、 505ページの『STOW -

ディレクトリーの更新』を参照してください。

PDSE のメンバーの検索PDSE から特定のメンバーを検索するには、次のように BSAM または QSAM を使用します。

1. DCB マクロを DSORG=PS でコーディングします。

2. DD ステートメントで、DSNAME=name(membername) および DISP=OLD をコーディングすることによって、データが既存の PDSE のメンバーであることを指定します。

3. OPEN マクロ、一連の GET または READ マクロ、および CLOSE マクロを使用してメンバーを処理します。

図 104 は、PDSE のメンバーを検索する例を示しています。

プログラムの実行時に、OPEN はディレクトリーを自動的に検索し、 DCB をメンバーに位置決めします。

データ・セットをクローズおよび再オープンせずに、いくつかの PDSE または PDS

メンバーを検索するには、この手順または 509ページの図 84 に示されている手順を使用してください。

1. DCB マクロで DSORG=PO をコーディングします。

2. DD ステートメントに PDSE の名前を DSNAME=name とコーディングすることによって指定します。

OPEN (PDSEDCB,(OUTPUT)) Open the PDSE...STOW PDSEDCB,,I Initialize (clear) the PDSE directory...

PDSEDCB DCB DSORG=PO,MACRF=(W), ... PDSE DCB

図 103. STOW INITIALIZE の例

//PDSEDD DD ---,DSN=MASTFILE(MEMBERK),DISP=OLD...OPEN (INDCB) Open for input, automatic FIND...GET INDCB,INAREA Read member record...CLOSE (INDCB)...

INAREA DS CL80 Area to read intoINDCB DCB ---,DSORG=PS,DDNAME=PDSEDD,MACRF=GM

図 104. PDSE の 1 つのメンバーの検索

拡張区分データ・セット (PDSE) の処理

第 27 章 拡張区分データ・セット (PDSE) の処理 549

Page 574: DFSMS データ・セットの使用法

3. BLDL マクロを発行して、ディレクトリーから必要なメンバー項目のリストを入手します。

4. 検索される各メンバーごとに次のステップを繰り返します。

a. FIND または POINT マクロを使用して、メンバー・レコードの読み取りの準備をします。 POINT マクロを使用する場合は、それは区分連結では機能しません。

b. レコードは、メンバーの先頭から読み取ることができます。順次以外の順序で読み取りたい場合は、 POINT マクロを使用して、メンバー内のレコードをポイントします。

c. 必要なものがすべて処理されるまで、レコードを読み取り、検査します。

d. データ・セットの終わり (EODAD) ルーチンは、各メンバーの末尾で制御権を受け取ります。その時点で、次のメンバーを処理するか、データ・セットをクローズします。

メンバー内でランダムに読み取るには、POINT マクロを使用してください。

551ページの図 105 は、クローズまたは再オープンせずにいくつかのメンバーを処理する技法を示しています。 509ページの図 84 は、メンバーの検索のバリエーションを示しています。これにより、PDS あるいは PDS および PDSE の連結でパフォーマンスが向上します。

拡張区分データ・セット (PDSE) の処理

550 z/OS V1R10 DFSMS データ・セットの使用法

Page 575: DFSMS データ・セットの使用法

PDSE の共用PDSE データ・セットおよびメンバーを共用できます。DISP=SHR を使用して割り振られる場合、 PDSE ディレクトリーは、複数の書き込みプロセスおよび読取装置によって共用でき、各 PDSE メンバーは、単数の書き込みプロセスまたは複数の読取装置によって共用することができます。任意の数のシステムが、入力用の同じPDSE オープンを持つことができます。 1 つのシステムが出力用の PDSE オープンを持つ場合 (メンバーを作成または置換するため)、その PDSE を他のシステムでオープンできるのは、システムが PDSE 拡張共用プロトコルを使用している場合に限られます。ストレージ管理者は、「z/OS DFSMS Storage Administration

Reference」の説明のように、SYS1.PARMLIB の IGDSMSxx メンバーの中のPDSESHARING キーワードを使用して PDSE 拡張共用プロトコルを設定することができます。

//PDSEDD DD ---,DSN=D42.MASTFILE,DISP=SHR...OPEN (INDCB) Open for input, no automatic FIND...BLDL INDCB,BLDLLIST Retrieve the relative disk locations

* of several user-supplied names in* virtual storage.

LA BLDLREG,BLDLLIST+4 Point to the first entry in the list...

多くの場合別の連結データ・セットにある『MEMBER』を開始しますMVC TTRN(4),8(BLDLREG) Get relative disk address of memberFIND INDCB,TTRN,C Point to the member...READ DECBX,SF,INDCB,INAREA Read a block of the memberCHECK DECBX Wait for completion of READ

... READ and CHECK additional blocksEODRTN EQU * EOD routine label

AH BLDLREG,BLDLLIST+2 Move to next member entry

各追加メンバーごとにラベル「MEMBER」から繰り返します

...CLOSE (INDCB)...

INAREA DS CL80INDCB DCB ---,DSORG=PO,DDNAME=PDSEDD,MACRF=R,EODAD=EODRTNTTRN DS F TTRN of the start of the memberBLDLREG EQU 5 Register to address BLDL list entriesBLDLLIST DS 0F List of member names for BLDL

DC H’10’ Number of entries (10 for example)DC H’14’ Number of bytes per entryDC CL8’MEMBERA’ Name of member, supplied by userDS CL3 TTR of first record (set by BLDL)

* The following 3 fields are set by BLDLDS X K byte, concatenation numberDS X Z byte, location codeDS X C byte, flag and user data length... one list entry per member (14 bytes each)

図 105. PDSE または PDS のいくつかのメンバーの検索

拡張区分データ・セット (PDSE) の処理

第 27 章 拡張区分データ・セット (PDSE) の処理 551

Page 576: DFSMS データ・セットの使用法

コンピューター・システム内での共用DISP=OLD、NEW、または MOD と指定すると、単一のジョブ、開始されたタスク、または TSO/E ユーザーによる PDSE へのアクセスが制限されます。DISP=SHR は、複数のジョブまたはユーザーが同時に PDSE にアクセスできるようにし、同じジョブ・ステップで、異なるジョブにおいて DCB 間での共用が可能になります。

メンバー・レベル共用。 PDS と同様、同じ名前を持つが、異なる TTR を持つメンバーの複数のコピー (バージョン) が、PDSE 内で同時に存在することができます。共用は、「バージョンごとの」レベルで行われます。共用規則は、 DCB が入力、更新、または出力のどれに対してオープンしているかによって異なります。

INPUT ― メンバーのバージョンは、入力用にオープンしている任意の数の DCB

によってアクセスできます。

UPDATE ― 別の DCB がメンバーの同じバージョンを更新している間に DCB に対してあるバージョンのメンバーを読み取らせることはできません。

OUTPUT ― 出力用にオープンしている任意の数の DCB が同時にメンバーを作成することができます。メンバーは、PDSE の個別の区域に作成することができます。作成されているメンバーが同じ名前 (データが書き込まれた後に行われたSTOW で指定されます) を持つ場合、詰め込まれた最後のバージョンが、ユーザーによって見られるバージョンであり、最初のバージョンによって占有されたストレージは、PDSE 用に使用可能なスペースに追加されます。次のものを持つことができます。

v 同時に同じメンバーの新規バージョンを読み取りおよび作成する複数の DCB。読取装置は、新規の BLDL または名前による FIND を行うまで「古い」バージョンを見続けます。

v 複数の DCB がメンバーの新規バージョンを作成している間に、あるバージョンのメンバーを更新している単一の DCB。データ・セットを更新しているユーザーは、アプリケーションが新規の BLDL または名前による FIND を行うまで「古い」バージョンにアクセスし続けます。

違反の共用あるコンピューター・システム内で、またはいくつかのコンピューター・システムにわたって共用規則に違反すると、OPEN が失敗して、システム ABEND が出ることになります。

いくつかの条件のもとでは、FIND または POINT マクロを使用する共用規則の違反となる場合があります。

v 共用オプションでは、一度に 1 人のユーザーのみが更新できます。PDSE を更新しており、 FIND または POINT マクロを使用して、特定のメンバーにアクセスしていると想定します。だれかほかの人が同時にそのメンバーを読み取っている場合、FIND または POINT の後に発行される最初の WRITE または PUTX が失敗します。更新用にオープンにすることもできるが、メンバーを読み取っているだけなので、失敗は、WRITE または PUTX までは発生しません。ただし、他の

拡張区分データ・セット (PDSE) の処理

552 z/OS V1R10 DFSMS データ・セットの使用法

Page 577: DFSMS データ・セットの使用法

ユーザーが同じ PDSE の異なるメンバーを同時に読み取っている場合は、FIND

または POINT は成功します。POINT エラーは、入出力エラーをシミュレートします。

v 呼び出し側プログラムが不十分な RACF アクセス権限を持つ場合は、FIND または POINT が失敗します。 たとえば、呼び出し側プログラムが入力用の PDSE

をオープンするが、RACF 実行権限しか持たない場合は、FIND は失敗します。

関連資料: 「z/OS Security Server RACF セキュリティー管理者のガイド」を参照してください。

PDSE を共用する複数システム拡張共用を実行しているシスプレックス内の複数のシステムは、入力および出力の場合は PDSE メンバーに並行してアクセスできますが、同所更新の場合はアクセスできません。

PDSE の共用アクセス・ユーザーは、既存のメンバーを読み取り、新規メンバーまたは既存のメンバーの新規コピーを、同じシステムや他のシステム上の他の共用アクセス・ユーザーと並行して作成することができます。メンバーの同所更新時のPDSE への共用アクセスは、単一のシステムに制限されています。他のシステム上のプログラムはデータ・セットをオープンできません。

図 106 は、UPDAT の OPEN の結果を示しています。

図 106. OPEN の成功/失敗

拡張区分データ・セット (PDSE) の処理

第 27 章 拡張区分データ・セット (PDSE) の処理 553

Page 578: DFSMS データ・セットの使用法

図 107 は、デシジョン・テーブルで位置決めした UPDAT の OPEN の結果を示しています。

バッファーに入れたデータの無効化 - VARY OFFLINEPDSE 共用プロトコルが使用中の場合、PDSE データはデータ・セットのクローズ後にバッファーに入れられます。VARY OFFLINE は、VARY が無効化されることになるシステムのシステム・バッファー内でクローズされた PDSE データを生じさせます。

VTOC およびボリューム上のデータ (たとえば、DFSMSdss 全ボリューム、およびトラック RESTORE) を変更するプログラム・パッケージを使用する前に、ボリュームを他のすべてのシステムに対して VARIED OFFLINE にすることをお勧めします。 PDSE API を使用せずにボリューム上に常駐するデータにこれらの変更を加えるアプリケーションは、変更されているボリュームが他のすべてのシステムに対して OFFLINE にしなければならないことを使用プロシージャーで指定する必要があります。これは、操作を行う間にボリュームに常駐する PDSE に対してアクティブな接続がないようにするためです。

DFP 共用属性の呼び出し可能サービス (IGWLSHR)IGWLSHR は、現在使用中の PDSE 共用プロトコルを判別するためにアプリケーションで使用することができます。PDSE 拡張共用プロトコルが使用中の場合は、OPEN マクロおよびアクセス方式を変更して、ご使用のプログラムのパフォーマンスを改善することができます。 PDSE を更新しない場合は、PDSE をオープンして、すべてのシステムからの読み取りおよび書き込みを行うことができます。通常のプロトコルを使用して PDSE を共用する場合は、1 つのシステム上にユーザーが一度に 1 人のみ存在するようにしてください。

IGWLSHR は、DFP 共用属性呼び出しサービス、引数のリスト、および結果を戻すストレージ域を識別するパラメーター (IGWLSHR) を伴うプログラム CALL を発行することによって起動されます。IGWLSHR によって入手した情報を使用して、PDSE アクセス・プロトコルを最適化することができます。複数の MVS システム間の出力用に PDSE を並行共用すると、PDSE の他の INPUT または OUTPUT 共

図 107. UPDAT の OPEN およびメンバー・デシジョン・テーブルへの位置決め

拡張区分データ・セット (PDSE) の処理

554 z/OS V1R10 DFSMS データ・セットの使用法

Page 579: DFSMS データ・セットの使用法

用者をロックアウトせずに、OUTPUT 用の PDSE を長期間オープンすることができます。 例外は同所更新のオープンです。この場合、1 つの MVS インスタンスについて PDSE の排他制御が生じます。

関連資料: DFP 共用属性呼び出し可能サービスについては、「z/OS DFSMSdfp

Advanced Services」を参照してください。

シスプレックス環境での PDSE 用ボリュームの選択PDSE はシスプレックス環境内で共用するように設計されています。シスプレックス環境内で PDSE 用ボリュームを選択時は、必ず、以下の規則に従ってください。

v PDSE が入るボリュームのボリューム通し番号は、1 つのシスプレックス環境内で固有である必要があります。

v PDSE が入っているボリュームは、一度に複数の GRS 複合システムからオープンしないでください。

v PDSE 拡張共用がアクティブの場合、PDSE が入っているボリュームは一度に複数のシスプレックス環境からアクセスできません。

この状況では、1 つのシスプレックス環境は、単一 XCF グループの中で接続可能なすべてのシステムであり、GRS 複合システムは、GRS 構成の中のすべてのシステムです。1 つのシスプレックス環境は複数の GRS 複合システムにまたがることはできません。注: 拡張共用の場合、1 つの PDSE を共用できるのは、1 つの GRS

複合システムのうちの各メンバーに限定され、そのメンバーは同一シスプレックス環境のメンバーである必要もあります。例えば、6 システムで構成される GRS 複合システムの中で、そのうちの 4 つがシスプレックス環境内のシステムで、2 つがそうでない場合、PDSE はこのシスプレックス環境の 4 メンバー間で拡張共用を行うことができますが、非シスプレックス環境のシステムである残りの 2 システムは拡張共用を行えません。GRS 複合システムを作成するための構成方法の詳細は、「z/OS MVS 計画: グローバル・リソース逐次化」を参照してください。

あるシスプレックス環境内の PDSE に対して上記のボリューム割り当て規則に従わない場合は、データ・セットのアクセス可能性と保全性に問題が生じる場合があります。

通常または拡張 PDSE 共用単一システム環境または複数システム環境では、PDSE データ・セットの通常共用または拡張共用が使用できます。 SYS1.PARMLIB の IGDSMSxx メンバーの中のPDSESHARING オプションがご使用のシステムに合うように正しく設定されていることを確認してください。

注: グローバル・リソースの逐次化 (GRS) またはご使用のシステムで実行する同等のプロダクトが用意されていることも必要です。

単一システム環境における PDSE の共用単一システム環境では、特別なセットアップは不要です。システムが PDSE データ・セットとメンバーを逐次化します。

拡張区分データ・セット (PDSE) の処理

第 27 章 拡張区分データ・セット (PDSE) の処理 555

Page 580: DFSMS データ・セットの使用法

複数システム環境における通常の PDSE 共用の指定複数システム環境では、PDSESHARING(NORMAL) を使用して、データ・セット・レベルで PDSE を共用するようにしてください。 SYS1.PARMLIB の IGDSMSxx

メンバーの中に PDSESHARING(NORMAL) を指定します。

PDSE 共用オプションを変更して通常に戻すためには、拡張共用を使用して実行しているご使用のシスプレックス内のそれぞれの z/OS システムごとに以下の手順を実行してください。

1. SYS1.PARMLIB の中の IGDSMSxx メンバーを変更して PDSESHARING

(NORMAL) を含めるか、PDSESHARING 項目を削除してシステムが通常共用にデフォルトを設定することができるようにする。

2. システムを再 IPL する。

注: シスプレックスが拡張共用を継続しないようにするために、システムの全部を同時にリセットする必要があります。

制約事項: PDSE を共用する全システムは、同じ共用モード (NORMAL またはEXTENDED のいずれか) で作動しなくてはなりません。共用されているPDSE を損なうことがないように、あるシステムがシスプレックスに加わるときには、オペレーティング・システムが共用規則を取り決めます。この加わるシステムが、PDSE 共用シスプレックス内にある他のシステムに加わることはできません。

関連資料: PDSESHARING キーワードの使用法の詳細については、「z/OS DFSMS

Storage Administration Reference」を参照してください。

複数システム環境における拡張 PDSE 共用の指定複数システム環境では、システム・プログラマーは PDSESHARING(EXTENDED)

を使用してメンバー・レベルで PDSE を共用します。システム・プログラマーは、シスプレックス内の各システム上で SYS1.PARMLIB の IGDSMSxx メンバーの中で PDSESHARING(EXTENDED) を指定してください。 PDSE を共用するシステムはどれもシスプレックスのメンバーでなくてはならず、どのシステムでもシスプレックス結合機能 (XCF) をアクティブにしておく必要があります。

PDSE 共用オプションを拡張共用に変更するには、システム・プログラマーは、拡張共用で実行しようとするシスプレックス環境内の各 z/OS システムごとに以下の手順を実行してください。

1. SYS1.PARMLIB のメンバー IGDSMSxx を変更して、各システム上でPDSESHARING(EXTENDED) を指定します。

2. SET SMS=xx コマンドを発行します。このコマンドでは、EXTENDED プロトコルへの移行を開始するための SYS1.PARMLIB メンバーを指定します。このシスプレックス環境内の全システム間で共用する共通の SMS メンバーが存在する場合、シスプレックス内のどのシステム上からでもシステム・コマンドの RO

*ALL,SET SMS=xx を発行して、そのシスプレックス環境内の他システムすべてにこの SET コマンドを送付します。

拡張区分データ・セット (PDSE) の処理

556 z/OS V1R10 DFSMS データ・セットの使用法

Page 581: DFSMS データ・セットの使用法

この SET SMS コマンドを使用すると、各システムのプリファレンスを設定して、シスプレックス・メンバー間のネゴシエーションを行います。すべてのメンバーが拡張共用に同意すると、このシスプレックス環境では拡張共用レベルの共用に切り替え可能となります。

注: すべてのシステムで SET SMS=xx コマンドを実行するまでは、どのシステムも拡張共用に変更されません。各システム上で以下のメッセージが表示される場合があります。

IGW303I NORMAL PDSE SHARING FORCED, INCOMPATIBLE PROTOCOL FOUND

この場合、NORMAL から EXTENDED 共用への切り替えを起動する二度目に、SET SMS=xx を発行する必要が生じる場合があります。全システムがEXTENDED 共用にマイグレーションすると、以下のメッセージ IGW306I が全システムで表示されます。

IGW306I MIGRATION TO EXTENDED PDSE SHARING COMPLETE

PDSE のメンバーの変更以下のセクションでは、PDSE のメンバーの更新、再書き込み、および削除について説明します。

PDSE プログラム・ライブラリーのメンバーは、同じ場所で再書き込み、拡張、または更新することはできません。PDSE プログラム・ライブラリー内のプログラム・オブジェクトを更新しているときは、AMASPZAP 保守援助プログラムがプログラム管理バインダーを起動します。これは、既存のバージョンを同じ場所で更新するのではなく、新しいバージョンのプログラムを作成します。

同所更新PDSE のメンバーは、同じ場所で更新できます。一度に 1 人のユーザーのみが更新できます。同じ場所で更新するときは、残りのレコードを壊すことなく、レコードを読み取り、処理し、元の位置に書き込みます。次の規則が適用されます。

v データ・セットを更新するには、OPEN マクロで UPDAT オプションを指定する必要があります。更新を行うには、READ、WRITE、GET、PUTX、CHECK、NOTE、POINT、FIND、BLDL、および STOW マクロのみを使用できます。

v 連結 PDSE は更新できません。

v レコードを削除したり、その長さを変更することはできません。新規レコードは追加できません。

v LBI、つまり大規模ブロック・インターフェースは使用できません。

BSAM および BPAM を使用する場合レコードは READ マクロによって検索しないと、WRITE マクロによって更新できるようになりません。 両方のマクロは同じ DECB に適用される実行形式でなければなりません。DECB は、リスト形式で提供される必要があります。(READ およびWRITE マクロの実行形式およびリスト形式は、「z/OS DFSMS Macro Instructions

for Data Sets」に説明されています。)

拡張区分データ・セット (PDSE) の処理

第 27 章 拡張区分データ・セット (PDSE) の処理 557

Page 582: DFSMS データ・セットの使用法

オーバーラップ操作を使用する場合各レコードが処理されている間に読み取りまたは書き込み要求を未処理にすることによって達成されるオーバーラップの例については、 512ページの図 85 を参照してください。

QSAM を使用する場合QSAM の位置指定モード(DCB は MACRF=(GL,PL) を指定します) を使用し、GET

および PUTX マクロを使用して、PDSE のメンバーを更新することができます。DD ステートメントは、DSNAME パラメーターでデータ・セットおよびメンバー名を指定する必要があります。 この方法を使用すると、 DD ステートメントで指定されたメンバーを更新することができます。

PDSE メンバーの拡張PDSE を出力用にオープンして、そのメンバーに位置決めすることにより、PDSE

メンバーを拡張することはできません。位置決め用に POINT を使用した場合、次の書き込みで入出力エラーが発生します。FIND を位置決め用に使用した場合、FIND は失敗し、エラーの戻りコードが出されます。メンバーを拡張するには、出力用にオープンしている間にそれを再書き込みし、 STOW REPLACE を発行します。

メンバーを再書き込みするときは、2 つの DCB を、入力用に 1 つと出力用に 1

つを提供する必要があります。両方の DCB マクロが、同じデータ・セットを指すことがあります。つまり、 1 つの DD ステートメントが必要です。

データ・セットが作成されるときにスペースが割り振られるので、追加のスペースを要求する必要はありません。メンバーが置換または削除されるときはいつでもシステムがメンバーのスペースを自動的に再使用するので、メンバーを再書き込みした後に PDSE を圧縮する必要はありません。

PDSE メンバーの削除このセクションでは、メンバーの削除に使用される 2 つのインターフェース、STOW および DESERV DELETE について説明します。 DESERV は PDSE のみをサポートしますが、8 バイトより長い名前の削除はサポートしません。

順方向名が削除されると、システムはすべての別名も削除します。別名が削除される場合、システムは別名およびそのディレクトリー項目のみを削除します。

PDSE メンバーは、使用中には実際には削除されません。削除が起きるときにメンバーに接続されているプログラムは、データ・セットがクローズされるまで、メンバーに引き続きアクセスすることができます。これは据え置き削除と呼ばれます。削除されるときにメンバーに接続されていないプログラムは、メンバーにアクセスすることはできません。メンバーが PDSE 内に存在していないかのように見えます。

PDS と違い、PDSE メンバーが削除された後は、それにアクセスすることはできません。(メンバーへのポインターは除去されるので、アプリケーションはもはやそれにアクセスできません。データは、後で別のメンバーの作成によって上書きすることができます。)

拡張区分データ・セット (PDSE) の処理

558 z/OS V1R10 DFSMS データ・セットの使用法

Page 583: DFSMS データ・セットの使用法

DESERV DELETE を使用すると、削除される PDSE メンバー名 (順方向名および別名) のリストを定義することができます。DESL 配列の DESL_NAME_PTR フィールドは、削除される名前をポイントするために使用されます。DELETE 機能は、呼び出し元が出力または更新用の DCB オープンを渡すことを必要とします。名前は、 DESL シーケンスで処理されます。PDSE メンバー削除と同様、順方向名が削除されると、関連付けられたすべての別名も削除されます。DESL 内のコードは、リスト内の名前のそれぞれについて DELETE が成功したかどうかを示します。DESL_SMDE_PTR は無視されます。DELETE 機能は、戻りコード値が RC_WARN

より大きくなるというエラーをそれが検出すると、リスト内の項目の処理を終了します。現在、処理が続行できる唯一のエラーは、名前が見付からない(DESRS_NOTFOUND) 場合です。

PDSE メンバーの名前変更このセクションでは、メンバーを名前変更する 2 とおりの方法、STOW およびDESERV RENAME について説明します。 DESERV RENAME は PDSE のみをサポートしますが、8 文字より長い名前をサポートします。

DESERV RENAME では、名前変更される PDSE メンバー名 (順方向名および別名)

のリストを定義することができます。名前変更される名前にポイントするには、DESL 配列の DESL_OLD_NAME_PTR フィールドが使用されます。新規の名前にポイントするには、関連付けられた DESL_NAME_PTR フィールドが使用されます。RENAME 機能は、呼び出し元が出力または更新用の DCB オープンを渡すことを必要とします。 名前変更は、 DESL シーケンスで処理されます。 DESL 内のコードは、リスト内の各項目ごとに名前変更が成功したかどうかを示します。

PDSE ディレクトリーの読み取りPDSE ディレクトリーは、データ・セットをオープンして (位置決めマクロを使用せずに)、それを読み取ることによって順次に読み取ることができます。 PDSE ディレクトリーは、更新することができません。 PDSE ディレクトリーの読み取りには、次の規則およびガイドラインが適用されます。

v DD ステートメントは、メンバー名を使わずに DSNAME を識別する必要があります。

v BSAM あるいは MACRF=R または G を指定した QSAM。

v BLKSIZE=256 および RECFM=F または RECFM=U を指定する必要があります。

v キー (そのブロックの最後のメンバーの名前) も読み取りたい場合は、 BSAM を使用し、KEYLEN=8 を指定します。

v 最後の PDSE ディレクトリー項目を読み取った後、次のディレクトリーを読み取ります。さもないと、制御は EODAD ルーチンに渡されます。最後のディレクトリー項目は、 X'FF' の 8 バイトのダミー名を使用して示されます。

v 8 バイトより長い名前を持つ別名項目は、省略されます。それらを読み取るには、DESERV を使用します。

上記の技法を使用して、PDS および PDSE の連結のディレクトリーを順次に読み取ることができます。ただし、 UNIX ディレクトリーを順次に読み取ることはできま

拡張区分データ・セット (PDSE) の処理

第 27 章 拡張区分データ・セット (PDSE) の処理 559

Page 584: DFSMS データ・セットの使用法

せん。 これは、類似 順次連結であると見なされます。連続する各データ・セットに進むには、システムの EOV 機能に依存するか、または FEOV マクロを発行することができます。

PDSE の連結複数の PDSE を、システムによって自動的に検索し、単一のデータ・セットとして連続して処理することができます。 この技法は、連結と呼ばれます。連結には、順次と区分の 2 つのタイプがあります。PDSE は、順次および PDS と連結することができます。

順次連結順次連結データ・セットを処理するには、DSORG=PS をもつ DCB を使用してください。各 DD ステートメントには、以下のタイプのデータ・セットを組み込むことができます。

v 順次データ・セット。これはディスク、テープ、インストリーム (SYSIN)、TSO

端末、カード読取装置、およびサブシステムに入れておくことができます。

v UNIX ファイル

v PDS メンバー

v PDSE メンバー

類似 データ・セットと非類似 データ・セットの連結の規則については、 458ページの『データ・セットの順次連結』を参照してください。

順次連結 (DCB での DSORG=PS) を使用して PDS および PDSE のディレクトリーを順次読み取ることができます。 514ページの『PDS ディレクトリーを順次に読み取る』および 559ページの『PDSE ディレクトリーの読み取り』を参照してください。

制約事項: この技法を使用して z/OS UNIX ディレクトリーを読み取ることはできません。

区分連結順次連結データ・セットを処理するには、DSORG=PO をもつ DCB を使用してください。 PDSE が連結されるとき、システムはグループを単一データ・セットとして扱います。区分連結には、PDS、PDSE、および UNIX ディレクトリーの混合したものを含めることができます。 各 PDSE は、それが複数のエクステントを持つかもしれない場合であっても、1 つのエクステントを持っているかのように扱われます。区分連結は、DCB が入力処理のためにオープンしている場合のみ使用できます。

区分連結で許される DD ステートメントの数には制限があります。 PDS エクステント、PDSE の数、および UNIX ディレクトリーを足し合わせた最大数が連結の制限値である 255 を超えてはなりません。 例えば、16 エクステントのそれぞれの15 PDS に 8 PDSE と 7 UNIX ディレクトリー ((15 x 16) + 8 + 7 = 255 エクステント) を連結することができます。

拡張区分データ・セット (PDSE) の処理

560 z/OS V1R10 DFSMS データ・セットの使用法

Page 585: DFSMS データ・セットの使用法

連結された PDSE は、ブロック・サイズを除き、常に、類似 属性をもつものとして扱われます。この連結では、ブロック・サイズを除き、最初のデータ・セットのみの属性が使用されます。 BPAM OPEN は、連結されたデータ・セット間で最大のブロック・サイズを使用します。連結された固定フォーマット・データ・セット(ブロックまたは非ブロック) では、各データ・セットの論理レコード長は等しくなければなりません。

PDSE の連結は、単一の PDSE を処理するのと同じ方法で処理します。ただし、1

つの例外があり、メンバーの処理を開始するのに FIND マクロを使用する必要があります。適切なメンバーに対して FIND マクロを発行した後でないと、POINT (または NOTE) マクロを使用することはできません。連結内の異なるデータ・セットの 2 つのメンバーが同じ名前を持つ場合、FIND マクロは、連結内の最初のもののアドレスを判別します。連結内の 2 番目のデータ・セットを処理することはできません。 BLDL マクロは、メンバーが BLDL リストの K フィールドに属するデータ・セットの連結番号を提供します。( 500ページの『BLDL - ディレクトリー項目リストの構成』を参照してください。)

PDS を PDSE に変換、および元に戻すPDS から PDSE に変換するには、IEBCOPY または DFSMSdss COPY を使用することができます。 データ・セット全体または個々のメンバーを変換したり、 PDSE

をバックアップおよび復元することもできます。 PDSE は変換して PDS に戻すことができます。メンバーを PDS ロード・モジュールから PDSE プログラム・ライブラリーにコピーするか、その逆を行う場合、システムはプログラム管理バインダーを起動することができます。

IEBCOPY を使用して、1 つ以上の特定のメンバーをコピーするには、SELECT 制御ステートメントを使用します。この例では、IEBCOPY はメンバー A、B、およびC を USER.PDS.LIBRARY から USER.PDSE.LIBRARY にコピーします。

//INPDS DD DSN=USER.PDS.LIBRARY,DISP=SHR//OUTPDSE DD DSN=USER.PDSE.LIBRARY,DISP=OLD//SYSIN DD DD *

COPY OUTDD=OUTPDSEINDD=INPDSSELECT MEMBER=(A,B,C)

この DFSMSdss COPY の例では、ボリューム SMS001 上で「MYTEST」の上位修飾子を持つすべての PDS をボリューム SMS002 上で「MYTEST2」の上位修飾子を持つ PDSE に変換します。 その場合、元の PDS は削除されます。動的割り振りを使用する場合、入力および出力ボリューム用に INDY および OUTDY を指定します。ただし、ボリューム用の DD 名を定義する場合は、INDD および OUTDD

パラメーターを使用します。

COPY DATASET(INCLUDE(MYTEST.**) -BY(DSORG = PDS)) -INDY(SMS001) -OUTDY(SMS002) -CONVERT(PDSE(**)) -RENAMEU(MYTEST2) -DELETE

拡張区分データ・セット (PDSE) の処理

第 27 章 拡張区分データ・セット (PDSE) の処理 561

Page 586: DFSMS データ・セットの使用法

PDSE に元の PDS 名を保存させたい場合は、TSO RENAME コマンドを使用して、各 PDSE を個別に名前変更します。(TSO RENAME では、アスタリスクのような、パターン・マッチング文字は使用できません。)

RENAME (old-data-set-name) (new-data-set-name)

すべての PDSE を一度に名前変更したい場合は、アクセス方式サービス・プログラム ALTER コマンドを使用し、ジョブを実行します。

ALTER MYTEST2.* NEWNAME(MYTEST.*)

関連資料: IEBCOPY を使用して PDS と PDSE 間でコピーする方法の詳細は、534ページの『PDSE またはメンバーの別のデータ・セットへのコピー』を参照してください。PDS から PDSE に変換する際の、DFSMSdss の使用について詳しくは「z/OS DFSMS Storage Administration Reference」を、IEBCOPY の使用について詳しくは、「z/OS DFSMSdfp Utilities」をそれぞれ参照してください。

PDSE から PDS への変換PDSE を PDS に変換したい状況は、次のとおりです。

v PDSE をサポートしていないシステムに PDSE を入れようとしている。

v アプリケーションが PDSE に対して実行されない。

v システムが、PDSE アクセスをサポートしないシステムと PDSE を共用している(共用 DASD を使用して)。

PDSE を PDS へ変換するには、JCL またはデータ・クラス定義で PDS のDSNTYPE を指定します。

PDSE の変換に関する変換ユーザー TTR または注釈リストを含む PDS のメンバーを PDSE にコピーしようとする場合、エラー・メッセージを受け取り、コピーは失敗します。

SYNCDEV マクロが、変換したいアプリケーションにコーディングされる場合、アプリケーションは PDS 用の戻りコードおよび理由コードを正しく取り扱うことができます。正しい戻りコードは 4 で、「SYNCDEV が PDS をサポートしていない」ことを意味します。

メンバーを PDSE プログラム・ライブラリーから PDS にコピーしている場合は、特定の制約事項を考慮する必要があります。合計モジュール・サイズまたは外部名の数など、ロード・モジュールの制限を超えるプログラム・オブジェクトは、ロード・モジュール・フォーマットに正しく変換することはできません。

パフォーマンスの改善多数の追加および削除の後、PDSE メンバーがフラグメント化されることがあります。これは、パフォーマンスに影響を及ぼすことがあります。PDSE を再編成するには、 IEBCOPY または DFSMSdss COPY を使用して、すべてのメンバーをバックアップします。 すべてのメンバーを削除してからそれらを復元するか、またはPDSE を削除して再割り振りすることができます。 PDSE を削除して再割り振りする方が好ましいのは、それが通常、各メンバーを削除する場合と比べて、使用するプロセッサー時間が短く、行う入出力も少ないからです。

拡張区分データ・セット (PDSE) の処理

562 z/OS V1R10 DFSMS データ・セットの使用法

Page 587: DFSMS データ・セットの使用法

フラグメント化された PDSE でのスペースのリカバリーPDSE は、アクセス・パターンに応じてフラグメント化されることがあります。これは、メンバーの追加と削除のバランスがとれている場合は、通常は発生しませんが、メンバーが削除されており、スペースをレクラメーション処理するために新規メンバーが追加されないときには発生することがあります。スペースをレクラメーション処理し、PDSE を再編成するには、IEBCOPY または DFSMSdss COPY を使用して、それを新規 PDSE にコピーします。

PDSE アドレス・スペースこのセクションは、システムの問題を診断するシステム・プログラマーやユーザーを対象としています。

z/OS V1R6 では、DFSMSdfp は、PDSE の処理に SMSPDSE と SMSPDSE1 の 2

つのアドレス・スペースを提供します。1 つの z/OS システムは、1 つのSMSPDSE アドレス・スペースだけを持つか、 SMSPDSE と SMSPDSE1 の両方のアドレス・スペースを持つことができます。ただし、PDSE メンバーの読み取り、書き込み、およびロードに関連する一部の制御ブロックは、拡張共通サービス域(ECSA) に置かれます。

SMSPDSE LNKLST 連結にある、PDSE データ・セットの再始動可能でないアドレス・スペース (リンク・リストなどのシステム機能はグローバル接続を使用)。グローバル接続は、アドレス・スペースの再始動操作の一部である割り込みと再接続を処理できないため、SMSPDSE

アドレス・スペースを再始動することはできません。次のいずれかの状態が存在する場合、z/OS システムでは SMSPDSE が唯一のPDSE アドレス・スペースになります。

v IGDSMSxx 初期設定パラメーターの PDSESHARING がNORMAL に設定されている。

v シスプレックス結合システム環境で IGDSMSxx 初期設定パラメーターが次のように設定されている。– PDSESHARING(EXTENDED)

– PDSE_RESTARTABLE_AS(NO)

SMSPDSE1 LNKLST 連結の一部でない PDSE に対して接続を提供し、要求を処理する再始動可能なアドレス・スペース。シスプレックス結合システム環境で IPL 時に SMSPDSE1 アドレス・スペースを作成するには、IGDSMSxx 初期設定パラメーターを次のように設定します。v PDSESHARING(EXTENDED)

v PDSE_RESTARTABLE_AS(YES)

関連資料:

v 再始動可能な SMSPDSE1 アドレス・スペースの構成については、「z/OS DFSMS

新機能の使用」の『再始動可能 PDSE アドレス・スペースの使用』を参照してください。

v PDSE の分析と修復、および SMSPDSE1 アドレス・スペースの再始動については、「z/OS DFSMSdfp Diagnosis」の『Diagnosing PDSE problems』を参照してください。

拡張区分データ・セット (PDSE) の処理

第 27 章 拡張区分データ・セット (PDSE) の処理 563

Page 588: DFSMS データ・セットの使用法

PDSE アドレス・スペースのチューニングSYS1.PARMLIB メンバー IGDSMSxx の初期化パラメーターのいくつかは、PDSE

処理のキャパシティーやパフォーマンスの調整に利用することができます。1 セットのパラメーターを利用して、PDSE データ・セットのクローズ後にメモリー・キャッシュ内にディレクトリーやメンバー・データを保存することができます。これらのパラメーターを指定することで、 PDSE の同じメンバーを繰り返してオープン、読み取り、クローズするプログラムのパフォーマンスを向上させることができます。また別のパラメーターのセットを利用して、 64 ビットの仮想記憶域の量を指定し、PDSE のディレクトリー・バッファーを PDSE アドレス・スペースのキャッシュに入れることができます。64 ビットの仮想記憶域を指定することで、同時にオープンする PDSE メンバーの数を増やすことができます。また、ディレクトリー・スペースの制約を起こさないようにすることができます。パラメーターは次のとおりです。

PDSE_BUFFER_BEYOND_CLOSESMSPDSE アドレス・スペースに対し、各 PDSE データ・セットの最後のクローズを超えたメモリー・キャッシュにディレクトリーおよびメンバー・データを保存することを指定します。

PDSE1_BUFFER_BEYOND_CLOSESMSPDSE1 アドレス・スペースに対し、各 PDSE データ・セットの最後のクローズを超えたメモリー・キャッシュにディレクトリーおよびメンバー・データを保存することを指定します。

PDSE_DIRECTORY_STORAGE(nnn|2G)64 ビットの仮想記憶域のメガバイト (nnnM) または ギガバイト (nnnG) の数を利用して、 PDSE ディレクトリー・バッファーを SMSPDSE アドレス・スペースのキャッシュに入れることを指定します。デフォルトで、64

ビットの仮想記憶域の 2 ギガバイトが使用されます。

PDSE1_DIRECTORY_STORAGE(nnn|2G)64 ビットの仮想記憶域のメガバイト (nnnM) または ギガバイト (nnnG) の数を利用して、 PDSE ディレクトリー・バッファーを SMSPDSE1 アドレス・スペースのキャッシュに入れることを指定します。デフォルトで、64

ビットの仮想記憶域の 2 ギガバイトが使用されます。

SYS1.PARMLIB メンバー IGDSMS xx の初期化パラメーターのいくつかを使って、PDSE メンバーを SMSPDSE1 および SMSPDSE にキャッシングするときに使われるハイパースペースのサイズを、メガバイトで指定することができます。

PDSE1_HSP_SIZESMSPDSE1 アドレス・スペースに対し、PDSE メンバーのキャッシングに使われるハイパースペースのサイズを、メガバイトで指定します。PDSE1_HSP_SIZE パラメーターを使って、 PDSE1 のハイパースペースに最高 2047 メガバイトまで要求することができます。または、PDSE1_HSP_SIZE を 0 に設定してハイパースペースが作成されないように指示することができます。ハイパースペースを作成しなかった場合は、システムは PDSE メンバーをキャッシュに入れません。

PDSE_HSP_SIZESMSPDSE アドレス・スペースに対し、PDSE メンバーのキャッシングに使われるハイパースペースのサイズを、メガバイトで指定します。

拡張区分データ・セット (PDSE) の処理

564 z/OS V1R10 DFSMS データ・セットの使用法

Page 589: DFSMS データ・セットの使用法

PDSE_HSP_SIZE パラメーターを使って、 PDSE1 のハイパースペースに最高 2047 メガバイトまで要求することができます。または、PDSE_HSP_SIZE を 0 に設定してハイパースペースが作成されないように指示することができます。ハイパースペースを作成しなかった場合は、システムは PDSE メンバーをキャッシュに入れません。

これらの初期化パラメーターについて詳しくは、「z/OS MVS 初期設定およびチューニング 解説書」を参照してください。

PDSE キャッシング統計を動的に表示するには、DISPLAY SMS,PDSE コマンドまたは DISPLAY SMS,PDSE1 コマンドで HSPSTATS パラメーターと VSTOR パラメーターを使用します。HSPSTATS パラメーターは、ハイパースペースでのメンバーのキャッシングの使用に関する情報を表示します。その情報には、ハイパースペースのサイズ、現在の LRUTIME 値、現在の LRUCYCLE 値、キャッシングに適格なデータ・セット、およびキャッシュにあるデータ・セットが含まれます。 VSTOR

は、現在の PDSE の、64 ビット・バッファーの仮想ストレージの使用状況を表示します。これらの DISPLAY コマンドは、現在のキャッシング統計を示した、スクロール可能なリストをオペレーターのコンソールに生成します。詳細については、「z/OS MVS システム・コマンド」を参照してください。

任意のキャッシング統計を表示する前に、PDSE メンバー・レベルのキャッシングをアクティブにしてください。PDSE メンバー・レベルのキャッシングをアクティブにするには、PDSE_HSP_SIZE パラメーターまたは PDSE1_HSP_SIZE パラメーターを SYS1.PARMLIB の IGDSMSxx メンバーで指定します。

拡張区分データ・セット (PDSE) の処理

第 27 章 拡張区分データ・セット (PDSE) の処理 565

|

|

|

|

|

|

|

|

|

|

|

|

|

|

Page 590: DFSMS データ・セットの使用法

566 z/OS V1R10 DFSMS データ・セットの使用法

Page 591: DFSMS データ・セットの使用法

第 28 章 z/OS UNIX ファイルの処理

この章では以下のトピックを扱います。

トピック 該当ページ

z/OS UNIX ファイル・システムへのアクセス 567

HFS データ・セットの使用 569

z/OS UNIX ファイルの作成 572

UNIX ファイルおよびディレクトリーの管理 579

BPAM を使用した UNIX ファイルの読み取り 585

UNIX ファイルおよびディレクトリーの連結 589

z/OS UNIX ファイル・システムへのアクセスz/OS UNIX ファイル・システムは UNIX ファイル・ツリーの 1 つのセクションであり、このセクションは物理的には 1 台の装置またはディスクの区画に入れられ、個別にマウント、取り外し、および管理ができるものです。 UNIX では、階層ファイル・システム (HFS)、ネットワーク・ファイル・システム (NFS)、zSeries ファイル・システム (zFS)、および一時ファイル・システム (TFS) を含めた各種ファイル・システムを使用することができます。 UNIX ファイルは、バイト指向ファイルです。 エンド・ユーザー向けのデータの表示は、IBM PC DOS に類似した階層ディレクトリー構造となります。 UNIX ファイルにアクセスするには、 568ページの図 108 に示されているように、ファイルに至るパスを指定します。

階層ファイル・システム階層ファイル・システム (HFS) は、アプリケーション・プログラミング・インターフェースを含むオペレーティング・システムの一部です。高水準言語で書かれているアプリケーションでは、HFS を使用してストレージ・デバイス上においてデータの作成、保管、検索、および操作を行うことができます。

ネットワーク・ファイル・システムネットワーク・ファイル・システム (NFS) は分散ファイル・システムであり、ユーザーはこれによりリモート・コンピューター上のもろもろのファイルおよびディレクトリーにアクセスして、これらのファイルおよびディレクトリーをローカルのものとみなして処理することができます。 NFS は、リモート・プロシージャー呼び出しの使用を介することによりマシン・タイプ、オペレーティング・システム、およびネットワーク・アーキテクチャーからは独立したものとなります。

z/OS UNIX では、NFS クライアントを使用して、ご使用のディレクトリー内の NFS サーバーのある、任意のシステムからのファイル・システム、ディレクトリー、またはファイルをマウントすることができます。

zSeries ファイル・システムzSeries ファイル・システム (zFS) には、VSAM 線形データ・セットの中の

© Copyright IBM Corp. 1987, 2008 567

Page 592: DFSMS データ・セットの使用法

1 つ以上のファイル・システムが含まれます。 zFS は、SMS 管理のシステムとすることができます。シスプレックス内の zFS ファイルは共用が可能です。

一時ファイル・システム一時ファイル・システム (TFS) はメモリー内に保管され、高速入出力を配達します。一時ファイルの保管のために TFS をマウントすることができます。

詳しくは、「z/OS UNIX System Services 計画」および「z/OS UNIX System Services

ユーザーズ・ガイド」を参照してください。

UNIX ディレクトリーおよびファイルの特性BPAM を使用して UNIX ディレクトリーにアクセスするときには、プログラムにとりこのディレクトリーは PDS ディレクトリーまたは PDSE ディレクトリーとして現れます。 UNIX ディレクトリーは順次編成ファイル (メンバー) に分割され、それぞれのファイルはディレクトリー項目により記述されます。 BLDL、FIND、および STOW マクロを使用して UNIX ディレクトリーを検索することができます。パス名のコーディングでは末尾にスラッシュを付けることができますが、これを省くこともできます。

UNIX ファイルには以下の特性があります。

v BPAM では UNIX ファイルをメンバーとして扱います。

v UNIX ファイルは、正規ファイル、特殊文字ファイル、ハードまたはソフト・リンク (シンボリック) ファイル、または名前付きパイプとすることができます。

v それぞれの UNIX ファイルには、1 から 8 文字の固有の名前があります。

v ファイル名には大文字と小文字の区別があります。

v BSAM または QSAM を使用して、ディレクトリー内の個々の UNIX ファイルを読み取ることができます。

v ディレクトリー内に UNIX メンバーを追加したり、その中の UNIX メンバーの名前変更または削除を行ったりすることができますが、BPAM を使用して以上のことを行うことはできません。

図 108. ファイル・システム内の UNIX ディレクトリーおよびファイル

z/OS UNIX ファイルの処理

568 z/OS V1R10 DFSMS データ・セットの使用法

Page 593: DFSMS データ・セットの使用法

使用されるアクセス方式表 40 は、 UNIX ファイル・システムが使用できるアクセス方式を示したものです。

表 40. UNIX ファイルが使用するアクセス方式

アクセス方式 説明 参照

BSAM、QSAM アプリケーション・プログラムは、UNIX ファイルを DASD に常駐する単一ボリュームの、順次データ・セットとみなします。

572ページの『BSAM または QSAM を使用した UNIX ファイルの作成』を参照してください。

VSAM UNIX ファイルが入力順データ・セット (ESDS)

であるとみなして、このファイルにアクセスします。 UNIX ファイルは、VSAM と非 VSAM インターフェースの両方を使用してアクセスできる唯一のタイプのデータ・セットです。

93ページの『UNIX ファイルへのシミュレートされた VSAM アクセス』を参照してください。

BPAM UNIX ファイルへの読み取り専用アクセスを行います。 BPAM は、 UNIX ディレクトリーを PDS

または PDSE ディレクトリーとして扱い、UNIX

ファイルを PDS または PDSE メンバーとして扱います。 BPAM では、指定したディレクトリー内のサブディレクトリーが無視されます。

制約事項: BPAM を使用して UNIX ファイルに書き込みを行うことはできません。

585ページの『BPAM を使用した UNIX

ファイルの読み取り』を参照してください。

追加情報については、 24ページの『アクセス方式を使用した UNIX ファイルの処理』を参照してください。

HFS データ・セットの使用HFS データ・セットは、VSAM または PDSE タイプではなく、HFS タイプのz/OS データ・セットです。 HFS データ・セットは、ローカル・ハード・ディスクの階層構造の中に編成されたファイルとディレクトリーの集まりです。それぞれの階層ファイル・システムは、ルート・ディレクトリーに基づく、さまざまなサブディレクトリーとファイルの付いたツリーのような構造となっています。 1 つのシスプレックス内では HFS データ・セットを共用することができます。

階層ファイル・システム内のファイルには、z/OS UNIX システム・サービスを使用してアクセスすることができます。 UNIX では、階層ファイル・システムにアクセスする手段を z/OS に、z/OS データ・セットにアクセスする手段を UNIX アプリケーションに提供しています。 階層ファイル・システム内のファイルにアクセスするために多数の標準 BSAM、QSAM、BPAM、および VSAM インターフェースを使用することができます。これらのアクセス方式を使用する大部分のアプリケーションでは、HFS データ・セットにアクセスすることができます。再アセンブリーまたは再コンパイルの必要はありません。

HFS データ・セットは、z/OS システムには PDSE に非常によく似て見えますが、内部構造はまったく異なっています。 HFS データ・セットは、SMS 管理または非

z/OS UNIX ファイルの処理

第 28 章 z/OS UNIX ファイルの処理 569

Page 594: DFSMS データ・セットの使用法

SMS 管理のデータ・セットとすることができます。 DFSMS はファイル内のデータにアクセスします。HFS データ・セットはバックアップ、リカバリー、マイグレーション、および再呼び出しができます。

HFS データ・セットには、以下の処理要件および制約条件があります。

v HFS データ・セットは DASD ボリューム上に常駐し、カタログ化されていなければなりません。

v UNIX システム・サービス呼び出しを使用して、あるいはアクセス方式を使用して HFS データ・セットを処理することはできません。 ファイル・システムは、 UNIX システム・サービス呼び出しを使用して、さらにアクセス方式を使用して処理することができます。

v 標準 DADSM ルーチンを使用して、HFS データ・セットの作成、名前変更、および消去を行うことができます。

v DFSMShsm を使用して HFS データ・セットのダンプ、復元、マイグレーション、再呼び出し、およびコピーができるのは、DFSMSdss がデータ移動プログラムとして使用される場合です。 DFSMShsm は、HFS データ・セット内の個々のファイルを処理しません。

v IEBCOPY ユーティリティーを使用して HFS データ・セットをコピーすることはできません。

HFS データ・セットの管理の詳細については、「z/OS DFSMSdfp Advanced

Services」および「z/OS UNIX System Services 計画」を参照してください。

HFS データ・セットの作成HFS データ・セットを作成する場合は、以下の手順に従ってください。

1. HFS データ・セットを割り振るには、JCL またはデータ・クラスで、DSNTYPE

パラメーター内の HFS および SPACE パラメーター内のディレクトリー・ブロックの数を指定する。ディレクトリー・ブロックの数を指定しないと、割り振りが失敗します。この数の値は無効となります。

_______________________________________________________________

2. HFS データ・セットのデータ・クラスを定義する。非カタログ化 HFS データ・セットを作成することはできますが、そのマウント時には、カタログ化が必要となります。これらのデータ・セットは、複数のボリューム (ボリューム当たり 123 エクステントで最大 59 ボリューム) 上で最大 255 DASD エクステントの DASD スペースに拡張することができます。

_______________________________________________________________

3. TSO/E ユーザーとしてログオンして、 571ページの『追加のディレクトリーの作成』に示されているように、追加のディレクトリーを定義する。

_______________________________________________________________

次の例では、SMS 管理 HFS データ・セットを作成します。

z/OS UNIX ファイルの処理

570 z/OS V1R10 DFSMS データ・セットの使用法

Page 595: DFSMS データ・セットの使用法

//FSJOB JOB//STEP1 EXEC PGM=IEFBR14//MKFS1 DD DSNAME=FILE.SYSTEM.FS0001,DISP=(NEW,KEEP),// DSNTYPE=HFS,SPACE=(CYL,(100,100,1)),DATACLAS=FILESYS,// MGMTCLAS=NEVER,STORCLAS=SECURE

次の例では、非 SMS 管理 HFS データ・セットを作成します。

//FSJOB JOB//STEP1 EXEC PGM=IEFBR14//MKFS1 DD DSNAME=FILE.SYSTEM.FS0001,DISP=(NEW,CATLG),// DSNTYPE=HFS,SPACE=(CYL,(100,100,1)),DATACLAS=FILESYS,// MGMTCLAS=NEVER,VOL=SER=XXXXXX,UNIT=SYSDA

階層ファイル・システムでは、先入れ先出し法 (FIFO) 特殊ファイルを使用することができます。 z/OS UNIX ファイル・システム内の FIFO 特殊ファイルを割り振るには、DSNTYPE パラメーターに PIPE を、PATH パラメーターにパス名を指定してください。

要件: z/OS UNIX データ・セットを使用するには、ご使用のシステムに RACF または同等のセキュリティー・プロダクトをインストールして、アクティブにすることが必要です。こうするための RACF 許可を得ている人が TSO MOUNT コマンドを使用して DASD スペースを割り振り、階層ファイル・システムを論理的にマウントするまでは、UNIX データ・セットを使用することはできません。

追加のディレクトリーの作成ルート・ファイル・システムの HFS データ・セットを割り振った後では、TSO/E

ユーザーとしてログオンして、MKDIR コマンドを使用してルート・ファイル・システム内にディレクトリーとサブディレクトリーを定義することができます。 JCL

を使用して、例えば、xpm17u01 ディレクトリーを作成するには、次のコマンドを入力してください。

MKDIR ’/sj/sjpl/xsam/xpm17u01’

以上のディレクトリーは、追加のマウント可能なファイル・システム用のマウント・ポイントとして使用することができます。ディレクトリーおよび装置ファイルの作成には IBM 提供のプログラムを使用することもできます。ユーザーは、もしくはアプリケーション・プログラムでは、ここでそのような追加ファイル・システムにファイルを追加することができます。

ディレクトリーへの書き込みアクセス権限を得ているユーザーは誰でも MKDIR コマンドを使用してディレクトリー内にサブディレクトリーを作成することができます。ルート・ディレクトリー内では、サブディレクトリーを作成できるのはスーパーユーザーのみです。許可ユーザーは MOUNT コマンドを使用してディレクトリー内にファイル・システムをマウントすることができます。

z/OS UNIX ファイルの処理

第 28 章 z/OS UNIX ファイルの処理 571

Page 596: DFSMS データ・セットの使用法

z/OS UNIX ファイルの作成BSAM または QSAM (DCB DSORG=PS)、BPAM (DCB DSORG=PO)、あるいはVSAM によるアクセスのために、以下に示すロケーションのどこかに UNIX ファイルを作成することができます。

v JCL DD ステートメント

v SVC 99 (動的割り振り)

v TSO/E ALLOCATE コマンド

v ISHELL、BPXCOPY、OPUT、OPUTX、OCOPY などの UNIX システム・サービス・コマンド

始める前に: JCL、TSO/E ALLOCATE、または SVC 99 を使用したデータ・セットの作成法について熟知していること、パラメーター FILEDATA と PATHMODE の指定法について了解していることが必要です。詳しくは、以下に示す節ならびに資料を参照してください。v 576ページの『UNIX ファイルに使用する JCL パラメーター』v z/OS MVS JCL 解説書v z/OS TSO/E コマンド解説書v z/OS MVS Programming: Authorized Assembler Services Guide

v z/OS UNIX System Services コマンド解説書

BSAM または QSAM を使用した UNIX ファイルの作成BSAM または QSAM を使用して UNIX ファイルを作成することができます。 アプリケーション・プログラムは、このファイルを DASD に常駐する単一ボリュームの、順次データ・セットとみなします。 UNIX ファイルは実際には順次データ・セットとして保管されないため、システムでは順次データ・セットの特性が必ずしも全部シミュレートできるわけではありません。 このような理由で、特定のマクロとサービスによる UNIX ファイルの管理時には、このマクロとサービスに互換性が保たれなくなったり、制約条件が設けられたりすることになります。

UNIX ファイルおよびそのディレクトリーを作成し、そのファイルにレコードを書き込み、そのディレクトリー内に項目を作成するには、以下の手順に従ってください。

1. DCB マクロに DSORG=PS または DSORG=PSU をコーディングします。

_______________________________________________________________

2. DD ステートメントには、新しい UNIX ディレクトリーのメンバーとしてデータが保管されることを指定する。

DD ステートメントには、PATH=pathname と PATHDISP=(KEEP,DELETE) を指定してください。 UNIX ファイルまたはディレクトリーの作成例については、『z/OS UNIX ファイルの作成』を参照してください。

_______________________________________________________________

3. OPEN マクロ、一連の PUT または WRITE マクロ、および CLOSE マクロを使用して UNIX ファイルを処理する。 データ・セットがクローズされるとSTOW マクロが自動的に発行されます。

z/OS UNIX ファイルの処理

572 z/OS V1R10 DFSMS データ・セットの使用法

Page 597: DFSMS データ・セットの使用法

_______________________________________________________________

図 109 は、QSAM を使用した UNIX ファイルの作成例を示したものです。この新しい UNIX ファイルを読み取るために BSAM、QSAM、BPAM、または UNIX システム・サービスを使用することができます。

レコード処理に関する考慮事項UNIX ファイルの中のレコードを処理するときには、以下の点を考慮してください。

v ブロック境界はファイル内で保持されません。ファイルの終わりでない位置に短ブロックを書き込む場合は、その点における後の読み取りにより全ブロックが戻されます (RECFM=VB の場合を除きます。この場合は常に 1 つのレコードが戻されます)。

v レコード境界は、固定長レコードの場合を除き、バイナリー・ファイル内では保持されません。

v テキスト・ファイルは、 EBCDIC であると想定されます。

v 位置変更機能 (POINT、BSP、CLOSE TYPE=T など) は、FIFO または文字特殊ファイルの場合は許可されません。

v デフォルトのレコード・フォーマット (DCBRECFM) は、入出力の場合は U です。

v 入力時のデフォルトのブロック・サイズ (DCBBLKSI) は 80 です。出力の場合はデフォルトはありません。

v 入力時のデフォルトの LRECL (DCBLRECL) は 80 です。出力の場合はデフォルトはありません。

v RECFM=F(B(S)) で、

– しかもファイルがバイナリー・ファイルとしてアクセスされるときは、ファイルの中の最後のレコードが LRECL バイトよりも小さいと、読み取り時にゼロが埋め込まれます。

– しかもファイルがテキスト・ファイルとしてアクセスされるときは、ファイルの中の LRECL バイトよりも小さいレコードには読み取り時にブランクが埋め込まれます。レコードが LRECL バイトよりも長い場合は、長さが正しくないため、読み取り時にこのレコードは入出力エラーとされます。

v RECFM=V(B) で、

//PDSDD DD PATH=’pathname’,PATHDISP=(KEEP,DELETE), ......OPEN (OUTDCB,(OUTPUT))...PUT OUTDCB,OUTAREA Write record to file...CLOSE (OUTDCB)...

OUTAREA DS CL80 Area to write fromOUTDCB DCB ---,DSORG=PS,DDNAME=PDSDD,MACRF=PM

図 109. QSAM を使用した UNIX ファイルの作成

z/OS UNIX ファイルの処理

第 28 章 z/OS UNIX ファイルの処理 573

Page 598: DFSMS データ・セットの使用法

– しかもファイルがバイナリー・ファイルとしてアクセスされるときは、各レコードは LRECL に指定した長さのレコードとして戻されますが、最後のレコードは例外となることがあります。

– しかもファイルがテキスト・ファイルとしてアクセスされるときには、ファイルの中のレコードがゼロ・バイトであれば (テキスト区切り文字の後にテキスト区切り文字が続く場合)、戻されるレコードは RDW で構成され、データ・バイトは含まれないことになります。レコードが LRECL バイトよりも長い場合は、長さが正しくないため、読み取り時にこのレコードは入出力エラーとされます。

v RECFM=U で、

– しかもファイルがバイナリー・ファイルとしてアクセスされるときには、長さがブロック・サイズに等しい、それぞれのレコードが戻されますが、最後のレコードは例外となることがあります。

– しかもファイルがテキスト・ファイルとしてアクセスされるときには、ファイルの中のレコードがゼロ・バイトであれば (テキスト区切り文字の後にテキスト区切り文字が続く場合)、戻されるレコードは 1 個のブランクとなります。レコードがブロック・サイズよりも長い場合は、長さが正しくないため、読み取り時にこのレコードは入出力エラーとされます。

処理上の制約以下に示す制約事項は、 UNIX ファイルと BSAM、BPAM、および QSAM の併用に関連するものです。

v UPDAT に OPEN を使用することはできません。

v EXCP を使用することはできません。

v DCB RECFM=V(B)S (スパン・レコード・フォーマット) を使用することはできません。

v 文字特殊ファイルの場合または PATHOPTS=OAPPEND が指定されている場合は、FIFO に DCB MACRF=P (NOTE/POINT) を使用することはできません。

v NOTE/POINT では、(16 メガレコード -2) 以上を含むファイルを使用することはできません。 16 メガレコード -2 (16 777 214) の後の NOTE では、有効でないX’FFFFFF’ の値が戻されます。有効でない値に対する POINT では、これに先行する POINT がなければ、入出力エラーとなり次の READ または WRITE が失敗となります。

v RECFM=V(B) または RECFM=U が指定されているバイナリー・ファイルでは、そのファイルの中の最初のブロックでないブロックに対する POINT は異常終了という結果になります。

v BSP は、成功した CHECK (READ または WRITE の場合)、NOTE、またはCLOSE TYPE=T LEAVE 要求の後でのみ発行できます。

JCL を使用した UNIX ファイルの作成JCL を使用して UNIX ファイルを作成するには、以下の手順に従ってください。

1. DD ステートメントに DSNAME キーワードを使用しないで PATH=pathname

パラメーターを指定する。コーディング例は次のとおりです。

//DD1 DD PATH=’/usr/applics/paytime’,PATHOPTS=ORDONLY

z/OS UNIX ファイルの処理

574 z/OS V1R10 DFSMS データ・セットの使用法

Page 599: DFSMS データ・セットの使用法

OPEN マクロでは、DSORG=PS と DSORG=PO が指定されている DCB のみと、ACB に PATH パラメーターを使用することができます。 PATH パラメーターと一緒に以下の DCB パラメーターを使用することができます。v BLKSIZE

v LRECL

v RECFM

v BUFNO

v NCP

指針: BLKSIZE、RECFM、および LRECL 値は、UNIX ファイルと一緒に保管されることはありません。 デフォルト値を望まない場合は、JCL の中の該当フィールドに、あるいは SVC 99 または TSO/E ALLOCATE に、あるいは DCB

の中に値を指定することが必要です。

_______________________________________________________________

2. FILEDATA パラメーターを指定して、UNIX ファイルを構成するものがテキスト・データであるか、バイナリー・データであるかを指示する。

_______________________________________________________________

3. PATHMODE パラメーターを指定して、ファイルまたはディレクトリーの読み取りまたは書き込みができるのが所有者か、グループか、その他かを指示する。

このパラメーターは、UNIX の中の chmod コマンドに似たものです。 ファイルに例えば PATHMODE=(SIRWXU,SIRGRP) を指定するものとします。この場合、所有者はファイルの読み取り、書き込み、および実行ができ、グループはファイルを読み取ることができます。詳しくは、 579ページの『UNIX ファイルとディレクトリーのためのセキュリティー設定値の指定』を参照してください。

_______________________________________________________________

4. PATHDISP パラメーターを使用して、ジョブの正常終了時または異常終了時のUNIX ファイルの後処理 (KEEP や DELETE など) を指定する。 (PATH パラメーターを含む DD ステートメントに DISP パラメーターを指定することはできません。)

_______________________________________________________________

5. PATHOPTS パラメーターを指定して、UNIX ファイルにファイル・アクセス・グループと状況を指定する。 例えば、PATHOPTS=(ORDONLY,OCREAT) のように指定すると、新しい読み取り専用データ・セットが作成されます。

_______________________________________________________________

6. ジョブをサブミットするか、SVC 99 または TSO ALLOCATE コマンドを出す。

_______________________________________________________________

7. TSO/E セッションにおいて ISHELL コマンドを出して、UNIX ファイルまたはディレクトリーを正しく作成したことを確認する。

_______________________________________________________________

z/OS UNIX ファイルの処理

第 28 章 z/OS UNIX ファイルの処理 575

Page 600: DFSMS データ・セットの使用法

8. ISPF Option 3.4 を使用して新しい UNIX ファイルをブラウズする。

_______________________________________________________________

結果: ISHELL コマンドは、UNIX ディレクトリー内のディレクトリーとファイルを全部、表示するためのコマンドです。 プログラムを実行して新しいファイルにデータを書き込むまで、このファイルは空になっています。

例: 以下の例は、JCL を使用した xpm17u01 ディレクトリー内の UNIX ファイルpaytime の作成方法を示したものです。 新しいディレクトリーとファイルは、UNIX ファイル・システムのどんなタイプ (HFS、NFS、zFS、TFS など) でも構いません。

//SYSUT2 DD PATH=’/sj/sjpl/xsam/xpm17u01/paytime’,// PATHDISP=(KEEP,DELETE), Disposition// PATHOPTS=(OCREAT,ORDWR),// PATHMODE=(SIRUSR,SIWUSR, Owner can read and write file// SIRGRP,SIROTH) Others can read the file// FILEDATA=TEXT Removes trailing blanks in the file

UNIX ファイルに使用する JCL パラメーターUNIX ファイルを処理するときには、以下の JCL パラメーターを使用することができます。

FILEDATA FILEDATA キーワードを使用して UNIX ファイルの編成を記述して、システムでそのファイルの処理法を決めることができるようにします。 アクセス方式では、UNIX ファイルに EBCDIC テキストとバイナリー・フォーマットの両方が使用されます。BPAM の場合は、ファイルは FILEDATA パラメーターの値とは異なる値をもつことがあります。それぞれの DD ステートメントには独自の FILEDATA

値が指定されることもあります。 DD ステートメントに FILEDATA キーワードのコーディングをしない場合は、それぞれのファイルに関連するFILEDATA 値が有効となります。

BINARY データがレコード区切り文字を含まないことを示します。各レコードは最大長です。バイナリーはデフォルト値です。行区切り文字のないレコードの場合は FILEDATA=BINARY のようにコーディングをします。

TEXT データが区切り文字である EBCDIC

改行文字 (X’15’) によって区切られたレコードで構成されることを示します。レコードがテキストであり、各レコードが行区切り文字で終わる場合は、FILEDATA=TEXT のようにコーディングをしてください。入力時に、アクセス方式はこの区切り文字

z/OS UNIX ファイルの処理

576 z/OS V1R10 DFSMS データ・セットの使用法

Page 601: DFSMS データ・セットの使用法

を使用して各レコードの終わりを確認して、レコード・フォーマット(RECFM) が固定で、LRECL 値よりも短い場合は末尾ブランクを追加します。

PATH UNIX ファイルの名前を指定します。

PATHOPTS PATHOPTS パラメーターを使用して、PATH パラメーターの中に名前が指定されている UNIX ファイルにファイル・アクセスと属性を指定します。新しい UNIX ファイルの割り振り時に、PATHOPTS パラメーターの中に OCREAT を単独で指定するか、OCREAT を OEXCL と一緒に指定すると、DFSMS が open( ) 機能を実行します。PATH パラメーターのパス名、PATHOPTS のオプション、および PATHMODE のオプションは、指定されている場合には、open( ) 機能に渡されます。

アプリケーション・プログラムで既存の UNIX ファイルに対して OPEN マクロを出したときには、この OPEN マクロにより、その既存ファイルへの接続が確立します。 PATH パラメーターに指定したパス名は、変更されることなく渡されます。UNIX ファイルはすでに存在しているはずですから、PATHMODE からのオプションは渡されません。

PATHDISP UNIX ファイルの後処理を指定します。 ジョブ・ステップの終了時のファイルの保持または削除の別を指定することができます。

PATHMODE PATH パラメーターに指定された UNIX ファイルをシステムが作成するときのファイル・アクセス属性を指定します。 このファイルを作成するには、PATHOPTS=OCREAT パラメーターを指定してください。

制約事項: PATH パラメーターを含む DD ステートメントには、オプションのDATACLAS、STORCLAS、および MGMTCLAS を指定することはできません。これは ACS ルーチンが呼び出されないからです。

関連資料: UNIX ファイルに使用する JCL パラメーターの詳細については、「z/OS

MVS JCL 解説書」を参照してください。 UNIX ファイルの使用の詳細については、「z/OS UNIX System Services ユーザーズ・ガイド」を参照してください。

UNIX ディレクトリー内のマクロ・ライブラリーの作成UNIX ディレクトリー内にマクロ・ライブラリーを作成して、UNIX システムからz/OS にコードをコピーするか、あるいは MVS データ・セットを UNIX ファイルにコピーすることがあります。

z/OS UNIX ファイルの処理

第 28 章 z/OS UNIX ファイルの処理 577

Page 602: DFSMS データ・セットの使用法

始める前に: ファイルのコピーに使用するユーティリティーの詳細は、「z/OS

DFSMSdfp Utilities」を参照してください。

UNIX ディレクトリー内にマクロ・ライブラリーを作成するには、以下の手順に従ってください。

1. IEBGENER を使用して、メンバー PDS または PDSE を UNIX ファイルにコピーする。 (TSO/E コマンドおよびその他の ICEGENER や BPXCOPY などのコピー用ユーティリティーを使用して、メンバー PDS または PDSE を UNIX

ファイルにコピーすることもできます。)

以下の例では、SYSUT1 の中のデータ・セットはメンバーの PDS または PDSE

であり、SYSUT2 の中のデータ・セットは UNIX ファイルです。 このジョブは、マクロ・ライブラリーを UNIX ディレクトリー内に作成します。

// EXEC PGM=IEBGENER//SYSPRINT DD SYSOUT=*//SYSUT1 DD DSN=PROJ.BIGPROG.MACLIB(MAC1),DISP=SHR//SYSUT2 DD PATH=’/u/BIGPROG/macros/special/MAC1’,PATHOPTS=OCREAT,// PATHDISP=(KEEP,DELETE), Normal and abnormal dispositions// PATHMODE=(SIRUSR,SIWUSR, Owner can read and write file// SIRGRP,SIROTH) Everyone else can read file// FILEDATA=TEXT Remove trailing blanks//SYSIN DD DUMMY

補足事項: アセンブラーでは、マクロ・ファイル名は全部が大文字であることが必要です。その他の、コンパイラーなどのプログラムでは、ファイル名の全部を大文字にする必要がないこともあります。

_______________________________________________________________

2. 追加メンバーの PDS または PDSE を UNIX ファイルにコピーするには、他のDD ステートメントをコーディングする。 PDS、PDSE、または UNIX の各ディレクトリーの全体を新しい UNIX ディレクトリーにコピーすることもできます。

_______________________________________________________________

3. マクロ・ライブラリーを使用して、追加ファイルをブラウズまたはコピーする。

以下の例では、システム・マクロ・ライブラリー SYS1.MACLIB が、他のどこかからコピーされたマクロを含む UNIX ディレクトリーと連結されます。

// EXEC PGM=ASMA90 High-level assembler//SYSPRINT DD SYSOUT=*//SYSLIB DD DSN=SYS1.MACLIB,DISP=SHR// DD PATH=’/u/BIGPROG/macros/special’,PATHOPTS=ORDONLY,// FILEDATA=TEXT Recognize line delimiters. . . (other DD statements)

_______________________________________________________________

z/OS UNIX ファイルの処理

578 z/OS V1R10 DFSMS データ・セットの使用法

Page 603: DFSMS データ・セットの使用法

UNIX ファイルおよびディレクトリーの管理以下のトピックの下で、UNIX ファイルの管理用のいくつかのプロシージャーとコマンドについて説明します。

v UNIX ファイルとディレクトリーのためのセキュリティー設定値の指定

v ISPF シェルを使用した UNIX ファイルとディレクトリーの管理

v UNIX ファイルの編集

v UNIX ディレクトリー内のマクロ・ライブラリーの作成

v PDS または PDSE の UNIX ディレクトリーへのコピー

v PDS または PDSE から UNIX ファイルへのメンバーのコピー

v 順次データ・セットの UNIX ファイルへのコピー

UNIX ファイルとディレクトリーのためのセキュリティー設定値の指定

アクセス方式では、UNIX ファイルに標準 UNIX セキュリティー設定値 (許可ということもある) が使用されます。 ファイル所有者であれば、それぞれの UNIX ディレクトリーとファイルに UNIX 許可を設定することができます。 ユーザーが正しいディレクトリーに対する検索権限と各ファイルに対する適切な権限を有していることを確認してください。

UNIX ファイルとディレクトリーの許可ファイルまたはディレクトリーの所有者は、所有者、グループ、およびその他 の 3

つのクラスにアクセス許可ビットを設定することができます。次のようにして、許可ビットを設定してください。

v JCL ステートメントに DD PATHMODE パラメーターを指定する

v chmod コマンド

v プログラムからの呼び出し

580ページの表 41 は、UNIX ファイルとディレクトリーの UNIX 許可クラスを示したものです。 UNIX ファイル許可の設定の詳細については、「z/OS UNIX System

Services 計画」を参照してください。

所有者クラスファイルの所有者または作成者のユーザー ID。

グループ・クラス情報技術部門などの特定の UNIX グループに属するユーザー ID。

その他のクラス所有者クラスまたはグループ・クラスに属していないユーザー ID。その他のクラスは通常は、最も限定度の高い許可となります。

z/OS UNIX ファイルの処理

第 28 章 z/OS UNIX ファイルの処理 579

Page 604: DFSMS データ・セットの使用法

表 41. UNIX ファイルとディレクトリーのアクセス許可

UNIX ファイル・タイプ

セキュリティー設定値

所有者 グループ その他

ディレクトリー 検索書き込み読み取りアクセス不可

検索書き込み読み取りアクセス不可

検索書き込み読み取りアクセス不可

ファイル (メンバー)

実行書き込み読み取りアクセス不可

実行書き込み読み取りアクセス不可

実行書き込み読み取りアクセス不可

BPAM OPEN では、それぞれの UNIX ディレクトリーに対する UNIX 検索権限を有しているかの検査が行われます。 FIND と BLDL のマクロでは、それぞれのUNIX ファイルに対する UNIX 読み取り権限を有しているかの検査が行われます。FIND と BLDL は UNIX OPEN を呼び出します。 UNIX ファイルに対する読み取り権限がないためにオープンが失敗した場合は、FIND が戻りコード 8 と理由コード 20 を戻します。 UNIX ディレクトリーには、読み取り権限のないファイルを含めることができます。 アプリケーション・プログラムでは、このような UNIX ファイルに対して BLDL と FIND を出さないようにしてください。

UNIX ファイルの RACF 許可DFSMS は z/OS UNIX に依存して、アクセスの対象となるファイルのセキュリティーを処理します。 UNIX ファイルの場合は、z/OS UNIX によって呼び出されるファイル・システムが RACF 許可検査を行います。

関連資料: RACF と UNIX ファイルの併用の詳細については、「z/OS UNIX System

Services 計画」を参照してください。

UNIX ファイルの編集UNIX ファイルの編集には OEDIT コマンドを使用してください。 図 110 は、UNIX ファイルを編集するための Edit-Entry (項目の編集) パネルを示したものです。

ISHELL を使用した UNIX ファイルとディレクトリーの管理ISPF シェル (ISHELL) を使用して、UNIX ファイルに関する以下の機能を実行してください。

------------------------- EDIT - ENTRY PANEL ----------------------------

Directory ===> /u/BIGPROG/

Filename ===> TESTMACProfile name ===>Initial macro ===>

図 110. 「項目の編集 (Edit-Entry)」パネル

z/OS UNIX ファイルの処理

580 z/OS V1R10 DFSMS データ・セットの使用法

Page 605: DFSMS データ・セットの使用法

v PDS または PDSE の UNIX ディレクトリーへのコピー。

v UNIX ディレクトリーの PDS または PDSE へのコピー。

v ディレクトリー内のファイルのリスト表示。

v ディレクトリー、ファイル、および特殊ファイルの作成、削除、または名前変更。

v ファイルのブラウズ、編集、およびコピー。

v ファイル属性の表示。

v ファイルのテキスト・ストリングの検索。

v ファイルまたはディレクトリーの相互の比較。

v 実行可能ファイルの実行。

v シンボリック・リンクに関する情報の表示。

v 階層ファイル・システムのマウントとアンマウント。

v HFS データ・セットまたはその他の UNIX ファイルの作成。

v 文字特殊ファイルのセットアップ。

v ルート・ファイル・システムのディレクトリーのセットアップ。

v z/OS UNIX アクセスのためのユーザーとグループのセットアップ。

ISHELL を使用して、例えば UNIX ディレクトリー内のディレクトリーとファイルの全部をリストすることができます。 各ファイルのフィールドを全部、表示するには、Options (オプション) メニューの選択項目を使用してください。 図 111 は、ISPF シェル・パネルを示したものです。

始める前に: UNIX ファイルを使用するためには、ご使用のユーザー ID に対応する、/u/joe のようなホーム・ディレクトリーと RACF 識別が必要です。 UNIX ディレクトリーとファイル名のすべてには、大文字と小文字の区別があります。

UNIX セッションは、TSO/E または ISPF のいずれかから開始することができます。 UNIX セッションに入った後では、UNIX と TSO/E または ISPF を相互に切り替えることができます。 UNIX セッションを確立して UNIX ファイルとディレクトリーを表示するためには、以下の手順を実行してください。

1. TSO/E セッションでは、OMVS コマンドを出して TSO セッション内の UNIX

セッションを確立する。

File Directory Special_file Tools File_system Options Setup Help------------------------------------------------------------------------UNIX System Services ISPF Shell

Enter a path name and do one of these:

- Press Enter.- Select an action bar choice.- Specify an action code or command on the command line.

Return to this panel to work with a different path name.More:

+/u/BIGPROG

図 111. ISPF シェル・パネル

z/OS UNIX ファイルの処理

第 28 章 z/OS UNIX ファイルの処理 581

Page 606: DFSMS データ・セットの使用法

a. OMVS の使用の詳細を知りたい場合は、PF1 を押してオンライン・ヘルプを表示してください。

b. OMVS を選択して UNIX セッションを開始してください。

_______________________________________________________________

2. ISHELL コマンドを出して ISPF シェルに入る。このシェルにより UNIX ディレクトリー、ファイル、FIFO 特殊ファイル、およびシンボリック・リンクを処理し、ファイル・システムのマウントまたはアンマウントを行うことができます。

a. File (ファイル) を選択して、UNIX ファイルを表示してください。

b. Directory (ディレクトリー) を選択して、UNIX ディレクトリーを表示してください。

_______________________________________________________________

3. PF3 を押して、ISPF シェルを終了し、OMVS 画面に戻る。

_______________________________________________________________

4. Exit コマンドを使用して、UNIX セッションを終了させて TSO 画面に戻る。

_______________________________________________________________

関連資料: 詳しくは、「z/OS UNIX System Services コマンド解説書」を参照してください。

UNIX ファイルまたはディレクトリーのコピーここでは、UNIX ファイルまたはディレクトリーを他のタイプのデータ・セットにコピーする、さまざまなコマンドについて検討します。

制約事項: IEBCOPY を使用して PDS または PDSE をコピーすることはできますが、IEBCOPY を使用して UNIX ファイルをコピーすることはできません。

PDS の UNIX ディレクトリーへのコピーまたは UNIX ディレクトリーの PDS へのコピーISPF シェルを使用して PDS を UNIX ディレクトリーに、あるいは UNIX ディレクトリーを PDS にコピーすることができます。 PDSE を UNIX ディレクトリーに、あるいは UNIX ディレクトリーを PDSE にコピーすることもできます。 詳しくは、 581ページの図 111 を参照してください。

OPUT コマンドを使用したメンバーの PDS または PDSE からUNIX ファイルへのコピーTSO/E セッションでは、OPUT コマンドを使用して、以下のデータ・セットをコピーすることができます。

v メンバーを PDS または PDSE から UNIX ファイルに

v 順次データ・セットを UNIX ファイルに

例: 583ページの図 112 の例は、OPUT を使用して、XMP17U36.PDSE01 の中のメンバー MEM1 を special ディレクトリー内の UNIX ファイル MEM2 にコピーす

z/OS UNIX ファイルの処理

582 z/OS V1R10 DFSMS データ・セットの使用法

Page 607: DFSMS データ・セットの使用法

るものです。

関連資料: OPUT 構文については、「z/OS UNIX System Services コマンド解説書」または TSO/E Help を参照してください。

OPUTX コマンドを使用したメンバーの PDS または PDSE からUNIX ディレクトリーまたはファイルへのコピーTSO/E セッションでは、OPUTX コマンドを使用して、以下のデータ・セットをコピーすることができます。

v メンバーを PDS または PDSE から UNIX ディレクトリーまたはファイルに

v 順次データ・セットあるいはメンバー PDS または PDSE を UNIX ファイルに

例えば、SYS1.MACLIB を UNIX ディレクトリーにコピーすることができます。

関連資料: OPUTX コマンドの詳細については、「z/OS UNIX System Services コマンド解説書」を参照してください。

OCOPY コマンドを使用した PDS、PDSE、または UNIX メンバーの他のメンバーへのコピーTSO/E セッションでは、OCOPY コマンドを使用して、以下のデータ・セットをコピーすることができます。

v PDS または PDSE メンバーを UNIX ファイルに

v 順次データ・セットを UNIX ファイルに

v UNIX ファイルを PDS または PDSE メンバーに

v UNIX ファイルを順次データ・セットに

v ある UNIX ファイルを他の UNIX ファイルに

関連資料: OCOPY コマンドの詳細については、「z/OS UNIX System Services コマンド解説書」を参照してください。

OGET コマンドを使用した UNIX ファイルの z/OS データ・セットへのコピーTSO/E セッションでは、OGET コマンドを使用して UNIX ファイルを次のものにコピーすることができます。

v PDS または PDSE メンバーに

v 順次データ・セットに

関連資料: OGET コマンドの詳細については、「z/OS UNIX System Services コマンド解説書」を参照してください。

OPUT ’XPM17U36.PDSE01(MEM1)’ ’/u/BIGPROG/macros/special/MEM2’

図 112. OPUT を使用した PDS または PDSE のメンバーの UNIX ファイルへのコピー

z/OS UNIX ファイルの処理

第 28 章 z/OS UNIX ファイルの処理 583

Page 608: DFSMS データ・セットの使用法

OGETX コマンドを使用した UNIX ディレクトリーの PDS またはPDSE へのコピーTSO/E セッションでは、OGETX コマンドを使用して UNIX ファイルをコピーすることができます。

v ファイルを UNIX ディレクトリーから PDS または PDSE のメンバーに

v 1 つの UNIX ファイルを順次データ・セットあるいは PDS または PDSE のメンバーに

関連資料: OGETX コマンドの詳細については、「z/OS UNIX System Services コマンド解説書」を参照してください。

UNIX ファイル用のサービスとユーティリティー以下のサービスとユーティリティーは、UNIX ファイルを処理するものです。

RDJFCB マクロ RDJFCB マクロをマッピング・マクロであるIHAARL および IHAARA と一緒に使用してパス名、オプション、あるいは UNIX ディレクトリーまたはファイルのモードを検索します。

データ・セットの名前の印刷または処理を行うプログラムは、UNIX ディレクトリーまたはファイル用のそれぞれの DD ステートメントごとに...PATH=.SPECIFIED... のダミー名を確認します。

RDJFCB マクロを出してディレクトリー・ファイル名を取得します。割り振り検索リスト (ARL) を渡した場合には、RDJFCB マクロが割り振り検索域(ARA) の中のファイル名を戻します。

DEVTYPE マクロ DD ステートメントに PATH を指定した場合は、DEVTYPE が戻りコードの 0、UCBTYP のシミュレート値である X’00000103’、および最大ブロック・サイズの 32 760 を戻します。 DFSMS/MVS™

1.3 以前では、BSAM と QSAM が UNIX ファイルをサポートすることはなく、DEVTYPE が UNIX

ファイルの戻りコード 8 を戻していました。

相対トラック・アドレス (TTR) 変換ルーチンUNIX ファイルの呼び出し時に、 TTR は、型変換を行うことなく、入力値を戻します。

関連資料: 上記のサービスとユーティリティーの詳細については、「z/OS DFSMSdfp

Advanced Services」を参照してください。

サービスとユーティリティーが UNIX ファイルと一緒に使用できないこと

以下のサービスとユーティリティーは、UNIX ファイルと一緒に使用することができません。 該当のサービスとユーティリティーは、特に表記されていない限り、UNIX ファイル向けに出されたときには、エラーまたは予測不能な値を戻します。

z/OS UNIX ファイルの処理

584 z/OS V1R10 DFSMS データ・セットの使用法

Page 609: DFSMS データ・セットの使用法

v OBTAIN

v SCRATCH

v RENAME

v TRKCALC

v セクター変換ルーチン

v PARTREL

v DSID による PURGE は無視されます。

v EXCP は許可されません。

上記のサービスおよびユーティリティーは、DSCB または UCB を必要とします。UNIX ファイルには DSCB または有効な UCB がありません。

ISPF Browse/Edit (ブラウズ/編集) を UNIX ファイルと一緒に使用することはできませんが、OBROWSE コマンドは使用することができます。

z/OS UNIX シグナルUNIX では、シグナル は 1 つのメカニズムであり、これによりプロセスはシステム内で発生したイベントの通知またはイベントによる影響を受けることになります。アクセス方式は、いかなるタイプのシグナル処理も実行しません。シグナルが予想される唯一の時点は、リーダーがファイルをクローズし、ライターがそのファイルに書き込みをしようとしたときのように、FIFO が中断したときです。これにより、シグナル (SIGPIPE) がライターに送信されます。このシグナルに対するデフォルトのアクションにより、ライターのタスクは異常終了 EC6-FF0D として打ち切られます。

z/OS UNIX fork サービスUNIX fork サービスは新しいプロセス (子プロセス) を作成する機能であり、この子プロセスは呼び出しプロセス (親プロセス) のほぼ完全なコピーです。 DCB またはACB が UNIX ファイルに対してオープンしている間は、z/OS UNIX fork サービスを使用しないでください。 この fork サービスは呼び出し (親) プロセスの複写である子プロセスを作成しますが、このサービスが各種の MVS 制御ブロックを複写することはありません。こうしたことを行うと、子プロセスには予想できない結果がもたらされます。

SMF レコードCLOSE では、UNIX ファイルの SMF タイプ 14、15、または 60-69 レコードを書き込みません。 DFSMS は UNIX システム・サービスに従って、要求された SMF

レコードを書き込みます。

BPAM を使用した UNIX ファイルの読み取りBPAM を使用して、UNIX ファイルとディレクトリーを読み取り、さらに UNIX

ファイルを DD ステートメントに含めることができます。 BPAM は、各ディレクトリーを PDS または PDSE ディレクトリーとして扱います。BPAM は、各ファイルをメンバーとして扱います。実行可能プログラムは、プログラム・オブジェクトとして UNIX ファイルの中に入れておくことができますが、BPAM を使用して実

z/OS UNIX ファイルの処理

第 28 章 z/OS UNIX ファイルの処理 585

Page 610: DFSMS データ・セットの使用法

行可能プログラムを実行することはできません。 BPAM では、UNIX ファイルのファイル保全ができます。このファイル保全は PDSE の保全と同様なものです。

制約事項:

v BPAM では UNIX ファイルへの書き込みができません。

v BSAM と QSAM は UNIX ディレクトリーを順次に読み取ることができません。

v BPAM では UNIX ディレクトリー項目の中にユーザー・データを保管することができません。

v BPAM は UNIX ファイルに DESERV マクロを使用することができません。

v BLDL マクロは、シミュレートされた複数の TTR を動的に作成します。ご使用のプログラムの他の実行段階でこれらの TTR を比較することはできません。

UNIX ファイルのためのマクロの使用同じタスクの下では、それぞれの UNIX ファイルに対して以下のマクロを出すようにしてください。

v BLDL

v CHECK

v FIND

v READ

v STOW

v TRUNC (互換性の場合のみに使用)

すべてのアクセス方式の場合と同じように、同じタスクの下で OPEN と CLOSE マクロを出すことができます。

関連資料: マクロの詳細については、「z/OS DFSMS Macro Instructions for Data

Sets」を参照してください。

BLDL によるディレクトリー項目リストの構成アプリケーション・プログラムが BLDL を出した時点で、BPAM は、指定されている UNIX ファイルをオープンして接続を確立します。 BPAM は、そのプログラムが STOW DISC または CLOSE を出すかタスクを終了させるまで、この論理接続を保持します。

BLDL マクロは、1 つ以上の UNIX ディレクトリー項目を読み取り、仮想記憶域に入れます。 BLDL マクロを出す前に、 UNIX ファイル名を BLDL リストの中に入れてください。 このリストの中のファイル名ごとに、BLDL は、3 バイトのシミュレートされた相対トラック・アドレス (TTR) を戻します。この TTR は、シミュレートされた PDS ディレクトリー項目のようなものです。それぞれのオープン DCB

には、UNIX ファイルのシミュレートされた TTR の独自のセットがあります。 この TTR は、ファイルがクローズされた後は有効ではありません。

DCB を指定して START= または STOP= パラメーターを指定した場合に検索されるディレクトリーの順序を変更できます。これらのパラメーターを使用すると、検索対象データ・セットの先頭と最後の連結番号を指定可能となります。

z/OS UNIX ファイルの処理

586 z/OS V1R10 DFSMS データ・セットの使用法

Page 611: DFSMS データ・セットの使用法

そのリストの中に複数のファイル名が存在する場合は、連結状態のメンバーが同じUNIX ディレクトリー、PDS、または PDSE からのものであるか、他のものからのものであるかとは無関係に、ファイル名が照合シーケンスになっていることが必要です。

後続の FIND マクロをディレクトリーではなく、BLDL リストに向けることにより、処理されるファイルの検索時間を短縮することができます。 FIND マクロは、シミュレートされた TTR を使用して UNIX ファイルを識別します。

BLDL リストは、4 バイトのリスト記述子で開始する必要があります。これは、リスト内の項目の数および各項目の長さ (12 から 76 バイト) を指定します。各項目の始めの 8 バイトには、ファイル名または別名が含まれています。次の 6 バイトには、TTR、K、Z、および C フィールドが含まれます。

制約事項: BLDL は、ユーザー・データ、またはシミュレートされた PDS ディレクトリー項目の中の NOTE リストを戻しません。

CHECK による入出力完了の検査CHECK マクロは、MVS データ・セットの場合と同じように UNIX ファイルを処理します。 CLOSE マクロを出す前には、READ マクロからの未了の全入出力を検査する CHECK マクロを出してください。 CHECK マクロは入出力の完了を保証するものです。詳しくは、 396ページの『CHECK マクロの発行』を参照してください。

CLOSE による DCB のクローズCLOSE マクロを使用して、UNIX ファイルおよび DCB をクローズすることができます。 詳しくは、 396ページの『CLOSE を使用したデータ・セットの処理の終了』を参照してください。

FIND によるファイルの開始アドレス位置の設定特定 UNIX ファイルの開始位置を設定するには、FIND マクロを出す必要があります。 この FIND マクロは、シミュレートされた相対トラック・アドレス (TTR) を使用して UNIX ファイルを識別します。 次の入力または出力操作は、FIND によって設定されたポイントで処理を開始します。 FIND マクロにより、連結されたデータ・セットを処理するためにオープンされた DCB を提供するとき、連結されたUNIX、PDSE、および PDS の一連のディレクトリーを検索することができます。

FIND マクロの使用時には、以下の 2 とおりの方法に従いシステムを正しいファイルに向けることができます。

v ファイルの名前を含む区域のアドレスを指定する。

v BLDL マクロを使用して作成した BLDL リストの中の項目の TTR フィールドのアドレスを指定する。

最初の事例では、システムは相対トラック・アドレスでデータ・セットのディレクトリーを検索します。第 2 の場合は、TTR が BLDL リスト項目の中にあるため検索は不要です。

z/OS UNIX ファイルの処理

第 28 章 z/OS UNIX ファイルの処理 587

Page 612: DFSMS データ・セットの使用法

アプリケーション・プログラムで FIND を出した時点で、BPAM により指定したファイルがオープンされ、接続が確立されます。 BPAM は、そのプログラムがSTOW DISC または CLOSE を出すかタスクを終了させるまで、この論理接続を保持します。

UNIX ファイルを 1 つだけ処理したい場合は、BSAM または QSAM のいずれかを使用して DSORG=PS を指定することができます。 DD ステートメントの PATH

パラメーターには、処理するファイルの名前と UNIX の名前を指定します。 データ・セットをオープンするとき、システムは DCB の中に開始アドレスを入れ、後続の GET または READ マクロがそのポイントで処理を開始するようにします。

制約事項: 1 つの UNIX ファイルを順次に処理するときには、FIND、BLDL、または STOW マクロを使用することができません。

READ による UNIX ファイルの読み取りBSAM と BPAM ではともに、READ マクロを使用して UNIX ファイルからシミュレートされたブロックの読み取りができるようにしています。 詳しくは、 421ページの『READ および WRITE を使用してのデータへのアクセス』を参照してください。

STOW DISC による UNIX ファイルのクローズBPAM は、読み取られたそれぞれの UNIX ファイルをオープンにしたまま保持します。 ストレージ使用を最適化するために、STOW DISC マクロを使用して UNIX

ファイルを切り離すことができます。 STOW マクロを使用するには、DCB マクロの中に DSORG=PO または POU を指定してください。タスクの終了時にも UNIX

ファイルはクローズします。

ご使用のプログラムで STOW DISC を出さなければ、CLOSE マクロが、接続されたそれぞれのファイルを処理するために自動的に STOW DISC を出します。ファイルがクローズできない場合は、STOW DISC が状況コード 4 を戻し、エラー・メッセージを出します。異なるタスクで同じファイルに対して FIND と STOW マクロを出すことがエラーの原因となることがあります。

プログラムの接続が終了し、BPAM がファイルをクローズするまでは、プログラムでファイルに対して FIND または BLDL を出している間、UNIX ファイルを削除することはできません。 実行が長時間に及ぶか、多数のファイルにアクセスするプログラムの場合は、このような接続を長時間にわたりオープン状態にしておくと処理上のボトルネックを招くことになります。こうした接続により、16 MB 境界を超える仮想記憶域を使うことになり、ファイルを更新しようとしている他のプログラムに支障が及ぶこともあります。アプリケーション・プログラムでは、STOW DISC

マクロを出してファイルが不要となった時点でただちにファイルをクローズして、こうした問題を解決します。

UNIX ファイルに再度、アクセスするには、アプリケーション・プログラムでBLDL または FIND マクロを再度、出すことが必要です。

z/OS UNIX ファイルの処理

588 z/OS V1R10 DFSMS データ・セットの使用法

Page 613: DFSMS データ・セットの使用法

UNIX ファイルおよびディレクトリーの連結システムでは複数の UNIX ファイルまたはディレクトリーを自動的に検索して、1

つのファイルとして正しく処理することができます。 この技法は、連結と呼ばれます。連結には、順次と区分の 2 つのタイプがあります。順次連結内または区分連結内のそれぞれの DD ステートメントは、BINARY または TEXT の FILEDATA 値をもつことができます。

順次連結順次連結データ・セットと UNIX ファイルを処理するには、DSORG=PS をもつDCB を使用してください。 それぞれの DD ステートメントには、以下のタイプのデータ・セットのどれかを指定することができます。

v 順次データ・セット。これはディスク、テープ、インストリーム (SYSIN)、TSO/E 端末、カード読取装置、およびサブシステム (SUBSYS) に入れておくことができます。

v UNIX ファイル

v PDS メンバー

v PDSE メンバー

順次連結 内に UNIX ファイルが見つけられた時点で、システムは、前のデータ・セットから LRECL、RECFM、および BUFNO を使用するように求めます。 (類似順次連結の中に非類似 属性ビットが設定されることはありません。) 同様に、システムは、BSAM 順次類似 連結に同じ NCP および BLKSIZE 値を使用します。QSAM では、システムはデータ・セットごとに BLKSIZE の値を使用します。類似データ・セットと非類似 データ・セットの連結の規則については、 458ページの『データ・セットの順次連結』を参照してください。また、UNIX ファイルの DD

ステートメントでアプリケーションによって指定変更されない限り、システムは前のデータ・セットから LRECL の使用を強制する可能性があります。

制約事項: 順次連結 (DCB の中の DSORG=PS) を使用して UNIX ディレクトリーを順次に読み取ることはできません。

区分連結連結 UNIX ディレクトリーは、DCB の中の DSORG=PO により処理されます。UNIX ディレクトリーの連結時には、システムはグループを 1 つのデータ・セットとして扱います。 区分連結には、PDS、PDSE、および UNIX ディレクトリーの混合したものを任意の順序で含めることができます。 区分連結は、DCB が入力処理のためにオープンしている場合のみサポートされます。

区分連結で許される DD ステートメントの数には制限があります。 PDS エクステント、PDSE、および UNIX ディレクトリーを足し合わせたものが連結の制限値である 255 を超えてはなりません。 この連結制限値の中では、それぞれの UNIX ディレクトリーが 1 と数えられます。 例えば、16 エクステントのそれぞれの 15

PDS に 8 PDSE と 7 UNIX ディレクトリー ((15 x 16) + 8 + 7 = 255 エクステント) を連結することができます。

z/OS UNIX ファイルの処理

第 28 章 z/OS UNIX ファイルの処理 589

|

|

|

Page 614: DFSMS データ・セットの使用法

図 113 は、PDS エクステント、いくつかの PDSE、および 2 つの UNIX ディレクトリーの合計 255 エクステントの区分連結の例を示したものです。

連結された UNIX ディレクトリーは、ブロック・サイズを除き、常に、類似 属性をもつものとして扱われます。 このようなディレクトリーでは、ブロック・サイズを除き、最初のファイルのみの属性が使用されます。 BPAM OPEN では、連結されたファイルの中の最大ブロック・サイズが使用されます。指定されたブロック・サイズ・パラメーターと競合しても、最初のデータ・セットのすべての属性が使用されます。

//DATA01 DD DSN=XPM17U19.PDS001,DISP=SHR,VOL=SER=1P0101,UNIT=SYSDA// DD DSN=XPM17U19.PDS001,DISP=SHR,VOL=SER=1P0101,UNIT=SYSDA// DD DSN=XPM17U19.PDS001,DISP=SHR,VOL=SER=1P0101,UNIT=SYSDA// . . .// DD DSN=XPM17U19.PDSE01,DISP=SHR,VOL=SER=1P0101,UNIT=SYSDA// DD DSN=XPM17U19.PDSE01,DISP=SHR,VOL=SER=1P0101,UNIT=SYSDA// DD DSN=XPM17U19.PDSE01,DISP=SHR,VOL=SER=1P0101,UNIT=SYSDA// DD DSN=XPM17U19.PDSE01,DISP=SHR,VOL=SER=1P0101,UNIT=SYSDA// DD PATH=’/sj/sjpl/xsam/xpm17u01/’, # two UNIX directories// PATHDISP=KEEP,FILEDATA=TEXT,// PATHOPTS=(ORDONLY)// RECFM=FB,LRECL=80,BLKSIZE=800// DD PATH=’/sj/sjpl/xsam/xpm17u02/’,// PATHDISP=KEEP,FILEDATA=TEXT,// PATHOPTS=(ORDONLY)// RECFM=FB,LRECL=80,BLKSIZE=800

図 113. PDS エクステント、PDSE、および UNIX ディレクトリーの区分連結

z/OS UNIX ファイルの処理

590 z/OS V1R10 DFSMS データ・セットの使用法

Page 615: DFSMS データ・セットの使用法

第 29 章 世代別データ・グループの処理

この章では以下のトピックを扱います。

トピック 該当ページ

絶対世代およびバージョン番号 592

相対世代番号 593

複数ステップ・ジョブに関するプログラミングの考慮事項 594

ISO/ANSI バージョン 3 またはバージョン 4 のラベル用の世代別データ・グループの命名

595

新規世代の作成 596

世代別データ・セットのレクラメーション 601

世代別データ・セットの検索 601

世代別データ・グループ索引のビルド 603

関連するデータの連続する更新または世代はカタログすることができます。これらは、世代別データ・グループ (GDG) と呼ばれます。GDG 内の各データ・セットは、世代別データ・セット (GDS) または世代と呼ばれます。GDG 内で、世代は類似または非類似 DCB 属性およびデータ・セット編成を持つことができます。グループ内のすべての世代の属性および編成が同一である場合、世代は単一のデータ・セットとして一緒に検索することができます。

関連するデータ・セットをグループ化するのには、利点があります。たとえば、カタログ管理ルーチンは、カタログ内の世代別索引と呼ばれる特殊な索引にある情報を参照することができます。したがって、

v グループ内のすべてのデータ・セットは、共通の名前によって参照することができます。

v オペレーティング・システムは、世代を年代順に保持することができます。

v 時代遅れになったか、廃止された世代は、オペレーティング・システムによって自動的に削除されます。

世代別データ・セットは、それらの経過日数を表す順次に配列された絶対名および相対名を持ちます。カタログ管理ルーチンは、絶対世代名を使用します。古いデータ・セットの方が、より小さな絶対番号を持ちます。相対名は、符号付き整数で、最新 (0)、最新の次 (-1)、といったように世代を表すのに使用されます。たとえば、データ・セット名 LAB.PAYROLL(0) は、グループの最新のデータ・セットを表し、LAB.PAYROLL(-1) は、2 番目に新しいデータ・セットというように表されます。新世代 (+1) をカタログするには、相対番号も使用されます。

世代別データ・グループ (GDG) ベースは、世代別データ・セットがカタログされる前にカタログの中で割り振られます。各 GDG は GDG ベース項目によって表されます。 GDG ベースを割り振るには、アクセス方式サービス・プログラムのDEFINE コマンドを使用します。

© Copyright IBM Corp. 1987, 2008 591

Page 616: DFSMS データ・セットの使用法

注: 新規の非システム管理データ・セットでは、ボリュームを指定せず、データ・セットがオープンされない場合、システムはデータ・セットをカタログに入れません。新規のシステム管理データ・セットは、ストレージ・グループからボリュームが割り当てられて割り振られるときは、いつでもカタログに入れられます。

カタログ内に世代別データ・セットを定義し、カタログすることについては、「z/OS DFSMS Access Method Services for Catalogs」を参照してください。

注:

1. システム管理される GDG ベースは、カタログ内に作成する必要があります。システム管理される世代別データ・セットも、カタログに入れる必要があります。

2. システム管理および非システム管理の世代別データ・セットは、同じ GDG に入れることができます。ただし、GDG のカタログがシステム管理ボリューム上にある場合、モデル DSCB を定義することはできません。

3. カタログ・ボリューム上にモデル DSCB を必要とせずに、カタログされたデータ・セットをモデルとして使用することによって、新規の非システム管理世代別データ・セットを GDG に追加することができます。

世代別データ・セットのデータ・セット編成世代別データ・セットには、順次、PDS、または直接編成が可能です。 PDS を世代別データ・セットとして使用する場合は、相対名ではなく、絶対データ・セット名で参照する必要があります。

例: 世代別データ・セットを参照するときには、一般に、A.B.C(0)、A.B.C(+1)、A.B.C(-1) のように相対名を使用します。PDS では、相対名は使用できません。世代別データ・セットである PDS の特定のメンバーを参照することもできます。PDS

のメンバーを参照するときには、A.B.C.G0005V00(member) などの絶対名を使用します。

制約事項: 世代別データ・セットは、PDSE、 UNIX ファイル、または VSAM データ・セットにすることはできません。

絶対世代およびバージョン番号特定の世代の GDG を識別するために絶対世代およびバージョン番号が使用されます。世代およびバージョン番号は、 GxxxxVyy の形式をとります。ここで、xxxx

は、符号なしの 4 桁の 10 進世代番号 (0001 から 9999) で、 yy は符号なしの 2

桁の 10 進バージョン番号 (00 から 99) です。以下に例を示します。

v A.B.C.G0001V00 は、世代別データ・グループ A.B.C. にある世代別データ・セット 1、バージョン 0 です。

v A.B.C.G0009V01 は、世代別データ・グループ A.B.C. にある世代別データ・セット 9、バージョン 1 です。

世代およびバージョンの番号は、絶対世代名での桁数によって制限されます。つまり、9,999 の世代がありえます。各世代は 100 のバージョンを持つことができます。

世代別データ・グループの処理

592 z/OS V1R10 DFSMS データ・セットの使用法

Page 617: DFSMS データ・セットの使用法

システムは、世代番号を自動的に保持します。保持される世代の数は、世代別索引のサイズに応じて異なります。たとえば、世代別索引のサイズが 10 の項目を許可する場合、最後の 10 世代を GDG 内に保持することができます。

バージョン番号により、GDG の管理を中断することなく、通常のデータ・セット操作を実行することができます。たとえば、3 世代のグループのうち 2 番目の世代を更新したい場合は、世代 2、バージョン 0 を世代 2、バージョン 1 で置き換えます。各世代でバージョンは 1 つだけ保持されます。

絶対または相対番号を使用して世代をカタログすることができます。世代がカタログされるとき、世代とバージョンの番号は GDG の下位項目として置かれます。V00 以外のバージョン番号をカタログするには、絶対世代およびバージョン番号を使用する必要があります。

古い世代番号を新しい バージョン番号と共に指定することによって、特定の世代の新しいバージョンを自動的にカタログできます。たとえば、世代 A.B.C.G0005V00

がカタログされており、今度は A.B.C.G0005V01 を定義してカタログする場合、前に A.B.C.G0005V00 によって占有されていたロケーションに新しい項目がカタログされます。古い項目は、新しいバージョンに場所を空けるためにカタログから除去され、GDG ベースでどの限度処理オプションが指定されていたかに応じて、消去される場合も消去されない場合もあります。システム管理データ・セットでは、スクラッチが指定された場合は、古いバージョンがボリュームから消去されます。非スクラッチが指定された場合、または DSCB を消去する試みが失敗した場合、古いバージョンは消去されず、GnnnnVnn 名は GDG ベースに関連付けられずに、世代別データ・セットが非 VSAM データ・セットとして再カタログ化されます。非システム管理データ・セットの場合、古いバージョンも、GDG ベース限度処理オプションによって管理されます。ベースに対して非スクラッチが指定された場合、古いGDS バージョンは消去されません。古いバージョンを消去し、そのスペースを再割り振りに使用できるように場所を空けるには、データ・セットが新しいバージョンによって置き換わるときに、 DISP=(OLD,DELETE) を指定して削除するデータ・セットを記述する DD ステートメントを組み込みます。

相対世代番号世代をカタログするか参照するときに、絶対世代およびバージョン番号を使用する代わりに、相対世代番号を使用することができます。相対番号を指定するには、GDG 名に続けて括弧でくくった負整数、正整数、または 0 を付けます。たとえば、A.B.C(-1)、A.B.C(+1)、または A.B.C(0)。

指定された整数の値は、オペレーティング・システムに新しい世代に割り当てる世代番号を知らせるか、システムに前にカタログされていた世代を表す項目のロケーションを知らせます。

世代をカタログ化するために相対世代番号を使用する場合、オペレーティング・システムは、その世代を表すために絶対世代番号および V00 のバージョン番号を割り当てます。割り当てられる絶対世代番号は、最後に割り当てられた番号および指定しようとしている相対世代番号によって決まります。たとえば、直前のジョブ生成で、 A.B.C.G0005V00 が最後にカタログされた世代であり、A.B.C(+1) を指定する場合、現在カタログされている世代には番号 G0006V00 が割り当てられます。

世代別データ・グループの処理

第 29 章 世代別データ・グループの処理 593

Page 618: DFSMS データ・セットの使用法

任意の正の相対世代番号を使用できるとはいえ、1 より大きな番号は、絶対世代番号がスキップされる原因となることがあります。たとえば、単一のジョブ・ステップを持ち、カタログされる世代が +2 である場合、1 つの世代番号がスキップされます。ただし、複数ステップのジョブで、1 つのステップが +1 を持ち、2 番目のステップが +2 を持つ場合は、番号はスキップされません。

複数ステップ・ジョブに関するプログラミングの考慮事項GDG を使用する 1 つの理由は、システムが所定の数の関連するカタログ式データ・セットを保持できるようにすることです。複数ステップ・ジョブで GDG のデータ・セットのうち最も古いもの以外のものを削除またはアンカタログしようとする場合、カタログ管理はデータ・グループ内での方向を失う可能性があります。これにより、指定された世代を参照するときに、間違ったデータ・セットが削除、非カタログ化、または検索されることになります。規則としては、複数ステップ・ジョブで世代別データ・セットを削除した場合は、それ以降のジョブ・ステップで古い世代を参照しないことです。

世代別データ・グループのカタログ化また、複数ステップ・ジョブでは、IEHPROGM またはユーザー・プログラムではなく、 JCL を使用して、データ・セットをカタログまたはアンカタログする必要があります。データ・セット割り振りと割り振り解除はジョブ実行中にデータ・セットをモニターし、 IEHPROGM またはユーザー・プログラムによって実行される機能は認識しないので、データ・セットの方向が失われたり、それ以降のジョブ・ステップで矛盾する機能が実行されることがあります。

相対世代番号を使用して、前にカタログされた世代を参照するとき、相対番号には次の意味があります。v A.B.C(0) は、最新の既存のカタログされた項目を参照します。v A.B.C(-1) は、最新の次の項目というように参照します。

JCL を使用してカタログ化が要求されるとき、実際のすべてのカタログ化は、ステップの終了時に発生しますが、相対世代番号はジョブを通じて同じままです。以下の結果が生じる可能性があります。

v JCL で使用される相対番号はジョブを通じて同じ世代を参照します。

v 異常終了したジョブ・ステップを据え置いて、後でステップを再始動することができます。ジョブ・ステップがその GDG で世代別データ・セットを正常にカタログした場合、ジョブを再実行依頼する前に JCL を使用して次のステップですべての相対世代番号を変更する必要があります。

たとえば、次のステップに次の相対世代番号が含まれていた場合、v A.B.C(+1) は、終了されたジョブ・ステップでカタログされた項目を参照します。または

v A.B.C(0) は、最新の項目の次のものを参照します。またはv A.B.C(-1) は、A.B.C(0) より前の最後の項目を参照します。

ステップを再始動する前に、A.B.C(+1) を A.B.C(0) に、A.B.C(0) を A.B.C(-1) に、および A.B.C(-1) を A.B.C(-2) に変更する必要があります。

世代別データ・グループの処理

594 z/OS V1R10 DFSMS データ・セットの使用法

Page 619: DFSMS データ・セットの使用法

世代別データ・グループを更新するための複数ジョブの実行依頼ここでは、特定の GDG を更新する複数ジョブを実行依頼するときに使用できる指針を示します。

v 並行して実行されている 2 つのジョブが同じ GDG を参照することはできません。

v 相対世代番号を指定するバッチ・ジョブまたは動的割り振りジョブの場合は、システムは、ジョブで使用される最高位後処理に応じて、GDG ベース名を共用または排他的としてエンキューします。最高位ジョブ後処理が NEW または MOD の場合は、GDG ベース名は排他的です。最高位ジョブ後処理が SHR の場合は、GDG ベース名は共用されます。この保護により、同時ユーザーは、他のユーザーが GDG を使用している間に世代別データ・セットを追加または削除することにより GDG を更新することができなくなります。

v 絶対世代別データ・セット名を使用するバッチ・ジョブまたは動的割り振りジョブの場合は、システムは GDG ベースをエンキューしません。複数のユーザーが、世代別データ・セットを同時に削除または追加することにより GDG を更新することができます。この状態は、GDG または世代別データ・セットの保全性に影響を及ぼしません。ただし、相対世代番号を使用するジョブは、誤った世代を取得することがあります。これは、世代番号が変更される可能性があるためです。絶対世代番号を使用する場合でも、ジョブは、別のジョブが使用している世代別データ・セットを誤って置換することがあります。

絶対世代番号を使用できるのは、同じ GDG を使用する並行ジョブを実行する必要があり、かつそれらのジョブの少なくとも 1 つが NEW または MOD の後処理を使用する場合に限られます。それらのジョブが、別のジョブが使用している世代別データ・セットを誤ってオーバーレイしないようにしてください。

制約事項: GDG を更新する際は注意が必要です。これは、複数のジョブが同じリソースに対して競合し、誤って世代別データ・セットを GDG の中の誤ったバージョンと置き換える可能性があるためです。2 人のユーザーが同じ絶対世代別データ・セットを割り振らないようにするには、次のいずれかの処置を講じてください。

v DISP=OLD を指定する。

v DISP=SHR を指定し、出力用のデータ・セットをオープンする。

ISO/ANSI バージョン 3 またはバージョン 4 のラベル用の世代別データ・グループの命名

バージョン 3 またはバージョン 4 ISO/ANSI ラベル (LABEL=(,AL)) で、世代番号とバージョン番号は、ファイル ID から個別に保持されます。ラベル処理は、世代別データ・セット名から世代番号とバージョン番号を除去します。世代番号は世代番号フィールド (ファイル・ラベル 1 の位置 36 から 39) に置かれ、バージョン番号は同じラベル上のその位置 (位置 40 と 41) に置かれます。バージョン 3 またはバージョン 4 ISO/ANSI ラベルのファイル ID 部分には、世代番号とバージョン番号が付かない世代別データ・セット名が含まれます。

バージョン 3 またはバージョン 4 のラベルについて、GDG 命名規則によって作成された次の指定を守る必要があります。

世代別データ・グループの処理

第 29 章 世代別データ・グループの処理 595

Page 620: DFSMS データ・セットの使用法

v 最後の 9 文字が .GnnnnVnn (n は 0 から 9 です) の形式をもつデータ・セット名は、GDG データ・セットを指定するためにのみ使用することができます。.GnnnnVnn で終了する名前が検出されると、それは GDG として自動的に処理されます。世代番号 Gnnnn とバージョン番号 Vnn は、データ・セット名の残りの部分から分離され、世代番号とバージョン番号フィールドに置かれます。

v GDG ファイルのテープ・データ・セット名は、最大 8 のユーザー指定文字から17 のユーザー指定文字に拡張されます。(磁気テープ・ラベル・ファイル ID フィールドには、 9 つの追加のユーザー指定文字用のスペースがあります。世代番号とバージョン番号は、このフィールドにはもはや含まれていないからです。)

v すべてゼロの世代番号は無効であり、ラベル検証時にエラーとして扱われます。エラーは、ラベル検証インストール・システム出口の間にメッセージ IEC512I

(IECIEUNK) の中で「RANG」エラーとして表示されます。

v MVS システム作成 GDG 名では、バージョン番号は常に 0 になります。 (MVS

は、それ以降のバージョンについてバージョン番号を 1 ずつ増やしません。) 0

以外のバージョン番号を入手するには、データ・セットが割り振られるときにバージョン番号 (たとえば、A.B.C.G0004V03) を明示的に指定する必要があります。また、0 以外のバージョン番号を持つ GDG を検索するのにも、バージョン番号を明示的に指定する必要があります。

v 世代番号とバージョン番号は、HDR1 の ID 上には含まれないので、同じ GDG

の世代は同じ名前を持ちます。したがって、同じボリューム上に複数の世代のGDG を置こうとすると、バージョン 3 をサポートするシステム内で ISO/ANSI

規格の違反が発生し、 MVS は検証インストール・システム出口に入ります。

新規世代の作成新規の世代別データ・セットを割り振るには、まずその世代用のスペースを割り振ってから、世代をカタログ化する必要があります。このセクションでは、世代別データ・セットの受け渡し、および世代別データ・セットのロールインに関する検討も行います。

世代別データ・セットの割り振り割り振りは、次に説明するように、新規世代について DCB 属性を指定することにより、同じグループ内で以前に割り振られた世代にならってパターン化することができます。

絶対世代番号とバージョン番号を使用している場合、世代用の DCB 属性は、作成およびカタログ化される世代を定義する DD ステートメントで直接提供することができます。

相対世代番号を使用して世代をカタログ化している場合は、DCB 属性を次の方法で提供することができます。

1. その属性を使用するためにカタログ化されたデータ・セットを参照することによって。

2. 索引が常駐するボリューム (カタログを含むボリューム) 上でモデル DSCB を作成することによって。属性は、世代をカタログ化する前か、それをカタログ化しているとき、あるいはその両方のときに提供することができます。

世代別データ・グループの処理

596 z/OS V1R10 DFSMS データ・セットの使用法

Page 621: DFSMS データ・セットの使用法

制約事項: システム管理世代別データ・セットにモデル DSCB を使用することはできません。

3. システム管理と非システム管理の両方の世代別データ・セットについて DD ステートメントで DATACLAS および LIKE キーワードを使用することによって。世代別データ・セットは、テープまたは DASD 上に存在することができます。

4. データ・クラス ACS ルーチンによって世代別データ・セットにデータ・クラスを割り当てることによって。

カタログ式データ・セットの参照属性が希望するものと同一のカタログ式データ・セットを参照する場合は、モデルDSCB を作成する必要はありません。カタログ式データ・セットの DCB 属性は、その DCB またはそれを割り振った DD ステートメントを参照することによって、参照することができます。

カタログ式データ・セットをその属性の使用について参照するには、世代を作成し、カタログ化する DD ステートメントで次のいずれかを指定することができます。

v DCB=(dsname)。ここで、dsname はカタログ式データ・セットの名前です。

v LIKE=dsname。ここで、dsname はカタログ式データ・セットの名前です。

v REFDD=ddname。ここで、ddname はカタログ式データ・セットを割り振った DD

ステートメントの名前です。

例: DATACLAS を使用して、その DCB 属性を提供することによって世代別データ・セットを割り振る例は、次のとおりです。

//DD1 DD DSN=GDG(+1),DISP=(NEW,CATLG),DATACLAS=ALLOCL01

新規データ・セットに割り振られる DCB 属性は、データ・クラス ALLOCL01 で定義される属性によって決まります。ストレージ管理者は、ご使用のシステムに使用可能なデータ・クラスによって指定される属性に関する情報を提供することができます。

カタログ式データ・セットを、その DD ステートメントを参照することによって参照する例は、次のとおりです。

//DD2 DD DSN=GDG(+1),DISP=(NEW,CATLG),REFDD=DD1

新規世代別データ・セットは、最初の例で定義されるデータ・セットと同じ属性を持ちます。

指定変更する属性を提供することができる既存のモデル DSCB も参照することができます。

既存のモデルを参照するには、世代を作成しカタログ化する DD ステートメントでDCB=(modeldscbname、属性) と指定します。GDG・ベース名 ICFUCAT8.GDGBASE

を持っており、そのモデル DSCB 名が ICFUCAT8.GDGBASE であると想定します。

次のように指定することができます。

世代別データ・グループの処理

第 29 章 世代別データ・グループの処理 597

Page 622: DFSMS データ・セットの使用法

//DD1 DD DSN=ICFUCAT8.GDGBASE(+1),DISP=(NEW,CATLG),// UNIT=3380,SPACE=(TRK,(5)),VOL=SER=338001

モデル DSCB の作成索引が常駐するボリューム上でモデル DSCB を作成することができます。

制約事項: システム管理世代別データ・セットにモデル DSCB を使用することはできません。

モデルを作成するときに、初期 DCB 属性を提供することができますが、今回は属性を提供する必要はありません。データ・セット・ラベルにある属性のみが使用されるので、直接アクセス・スペースを保管するために SPACE=(TRK,0) を使用してモデル・データ・セットを割り振ります。世代を作成およびカタログ化するために初期または指定変更属性を提供することができます。モデル DSCB を作成するには、索引をビルドするジョブ・ステップで、または世代を作成しカタログ化するステップに先行する他のジョブ・ステップで次の DD ステートメントを組み込みます。

//name DD DSNAME=datagrpname,DISP=(,KEEP),SPACE=(TRK,(0)),// UNIT=yyyy,VOLUME=SER=xxxxxx,// DCB=(applicable subparameters)

推奨: 任意の数の世代に対して 1 つだけのモデル DSCB が必要です。 1 つだけのモデルを使用することを計画している場合は、モデルを作成するときに DCB 属性を提供しないでください。それ以降に世代を作成およびカタログ化するときに、世代を参照する DD ステートメントに必要な DCB 属性を組み込みます。この方法で、任意の数の GDG が同じモデルを参照することができます。カタログおよびモデル・データ・セット・ラベルは、磁気テープ GDG の場合であっても、常に直接アクセス・ボリュームにあります。

世代別データ・グループの処理

598 z/OS V1R10 DFSMS データ・セットの使用法

Page 623: DFSMS データ・セットの使用法

前の例で、datagrpname は、各世代を識別する共通名で、 xxxxxx は、カタログを含むボリュームのシリアル番号です。初期に DCB サブパラメーターを必要としない場合は、DCB パラメーターをコーディングする必要はありません。

モデル DSCB は、カタログ・ボリューム上にある必要があります。カタログを新規ボリュームに移動する場合は、この新規ボリューム上で新規モデル DSCB を移動または作成する必要もあります。カタログを分割またはマージしており、カタログが既存のモデル DSCB と同じボリューム上に残っている場合、新規モデル DSCB を移動または作成する必要はありません。

DATACLAS および LIKE キーワードの使用システム管理と非システム管理の両方の世代別データ・セットについて DD ステートメントで DATACLAS および LIKE キーワードを使用することができます。非システム管理世代別データ・セットでは、DATACLAS および LIKE はモデル DSCB

の代わりに使用することができます。データ・セットは、テープまたは DASD 上にあることができます。 テープ・データ・セットでのデータ・クラスの使用については、「z/OS DFSMS Using Magnetic Tapes」を参照してください。

LIKE キーワードは、カタログ式モデル・データ・セットの属性をコピーすることにより新規データ・セットの割り振り属性を指定します。LIKE=dsname で参照されるカタログ式データ・セットは、DASD 上になければなりません。

推奨: LIKE および DATACLAS が非システム管理世代別データ・セットに使用される場合であっても、モデル DSCB がボリューム上に存在する場合は、まだそれらのモデルを使用することができます。モデル DSCB を使用する場合は、データをシステム管理ストレージにマイグレーションするか、システム管理ストレージからマイグレーションするときに、 JCL を変更する (モデル DSCB を消去するために)

必要はありません。非システム管理世代別データ・セットについて JCL でDATACLAS および LIKE を指定せず、モデル DSCB がない場合、割り振りは失敗します。

DATACLAS および LIKE を使用して、その DCB 属性を提供することによって非システム管理世代別データ・セットを割り振る例は、次のとおりです。 この例は、システム管理世代別データ・セットでも働きます。

//DDNAME DSN=HLQ.----.LLQ(+1),DISP=(NEW,CATLG),DATACLAS=dc_name

//DDNAME DSN=HLQ.----.LLQ(+1),DISP=(NEW,CATLG),LIKE=dsn

世代別データ・セットを割り振るために使用される JCL キーワードについて詳しくは、「z/OS MVS JCL 解説書」を参照してください。

新規の世代別データ・セットは、割り振り時にカタログ化され、ジョブ終了ステップで GDG にロールインされます。ジョブが割り振りの後だがジョブ終了ステップの前に終了する場合、世代別データ・セットは据え置きロールイン状態でカタログ化されます。 SMS が一時カタログ項目を除去せず、かつ GDG ベースを更新しない場合は、世代別データ・セットは据え置きロールイン状態になります。新規世代別データ・セットを GDG にロールインするようジョブを再実行依頼することができます。世代別データ・セットにロールインすることについて詳しくは、 600ページの『世代別データ・セットのロールイン』を参照してください。

世代別データ・グループの処理

第 29 章 世代別データ・グループの処理 599

Page 624: DFSMS データ・セットの使用法

世代別データ・セットのパス新規世代は、作成されるときにパスすることができます。その世代は、後続するジョブ・ステップでカタログするか、DD ステートメントで DISP=(,PASS) が指定されるときに通常の後処理と同様にジョブの終了時に削除することができます。

ただし、DD ステートメントで DISP=(NEW,PASS) を指定して世代が作成された後、そのデータ・グループについての別の世代は、パスされたバージョンが削除またはカタログされるまでカタログしてはいけません。別の世代をカタログすると、パスされた世代別データ・セットを参照するときに誤った世代が使用されることになります。そのデータ・セットが後でカタログされると、誤った世代がカタログされ、正しい世代が失われることになります。

たとえば、DD ステートメントで DISP=(NEW,PASS) を指定して A.B.C(+1) が作成された場合は、 A.B.C(+1) がカタログまたは削除されるまで、A.B.C.(+2) がDISP=(NEW,CATLG) を使用して作成されてはなりません。

適正な JCL を使用することによるこのサポートに対する利点は次のとおりです。

v JCL は、ジョブを再実行するために変更する必要はありません。

v 最下位世代バージョンは、有効なバージョンがカタログされるまで索引から削除されません。

世代別データ・セットのロールインシステム管理 GDG に DISP=(NEW,CATLG) をコーディングした場合は、システムは、データ・セットの割り振り時に、据え置きロールイン状態の新しい世代をカタログします。システムがジョブ終了ステップ処理を行うときに、システムは据え置き世代別データ・セットを GDG にロールインします。 世代別データ・セットは、ジョブがジョブ終了ステップに到達していないか、それらのデータ・セットがDISP=(NEW,KEEP) を使用して割り振られている場合は、据え置きロールイン状態になる場合があります。据え置きロールイン状態にある世代別データ・セットは、それらの絶対世代番号によって参照することができます。アクセス方式サービス・プログラム・コマンド ALTER ROLLIN にアクセスして、これらの世代別データ・セットにロールインできます。

GDG について指定される属性は、新しい世代がロールされるときに古い世代がどうなるかを決定します。アクセス方式サービス・プログラム・コマンド DEFINE

GENERATIONDATAGROUP は、GDG を作成します。これは、GDG についての限度 (アクティブ世代別データ・セットの最大値) も指定し、その限度に達するときにすべてまたは最も古い世代別データ・セットのみのどちらをロールオフする必要があるかを指定します。

GDG がその最大数のアクティブ世代別データ・セットを含み、ジョブ終了ステップ時に新しい世代別データ・セットがロールインされる場合、最も古い世代別データ・セットがロールオフされ、もはやアクティブでなくなります。GDG が、DEFINE GENERATIONDATAGROUP EMPTY を使用して定義され、その限界にある場合は、新しい世代別データ・セットがロールインすると、現在アクティブな世代別データ・セットはすべてロールオフされます。

DEFINE GENERATIONDATAGROUP コマンドで指定するパラメーターは、ロールオフされた世代別データ・セットがどうなるかを決定します。たとえば、SCRATCH

世代別データ・グループの処理

600 z/OS V1R10 DFSMS データ・セットの使用法

Page 625: DFSMS データ・セットの使用法

パラメーターを指定する場合、世代別データ・セットは、ロールオフされるときに消去されます。 NOSCRATCH パラメーターを指定する場合、ロールオフされる世代別データ・セットは、ロールオフされるときに再カタログ化され、その GDG との関連付けを解除されます。

アクセス方式サービス・プログラム・コマンド ALTER LIMIT は、既存の GDG の限度を増やしたり、減らしたりできます。限度が減らされる場合は、減らされた限度に合わせるために必要なだけ、最も古いアクティブな世代別データ・セットが自動的にロールオフされます。限度の変更により世代がロールオフされる場合は、ロールオフされた世代別データ・セットがそれらの後処理 (非カタログ化、再カタログ化、または削除) と共にリストされます。限度が増やされ、据え置きロールイン状態にある世代別データ・セットがある場合、これらの世代別データ・セットは、GDG にロールインされません。アクセス方式サービス・プログラム・コマンドALTER ROLLIN を使用して、世代別データ・セットをアクティブ状態にある GDG

にロールインできます。

アクセス方式サービス・プログラムのコマンド DEFINE

GENERATIONDATAGROUP および ALTER の使用法の詳細については、「z/OS

DFSMS Access Method Services for Catalogs」を参照してください。

ロールオフされた世代別データ・セットの有効期限の制御3 つの変数が、ロールオフされた世代別データ・セットの有効期限を、次の順で制御します。

1. コーディングされた有効期限

2. ベースの SCRATCH または NOSCRATCH

3. 管理クラス EXPIRE/MIGRATE

世代別データ・セットの検索JCL プロシージャーを使用して世代を検索することができます。非世代別データ・セットに適用できる操作は、世代別データ・セットに適用できます。たとえば、世代別データ・セットは、更新してカタログに再入できるか、あるいはコピー、印刷、パンチ、または新しい世代別または非世代別データ・セットの作成に使用することができます。

世代別データ・セットは、相対世代番号または絶対世代およびバージョン番号を使用して検索することができます。

据え置きロールイン状態にある世代別データ・セットは、それを割り振るジョブ内で (+1) などの相対番号によって参照します。据え置きロールイン状態にある世代別データ・セットは、後続のジョブではその絶対世代番号 (GxxxxVyy) によって参照します。

世代別データ・セットのレクラメーション据え置きロールイン状態の SMS 管理世代別データ・セット (GDS) を自動的に再利用するか、それともその機能をオフにするかの選択を行うことができます。

世代別データ・グループの処理

第 29 章 世代別データ・グループの処理 601

Page 626: DFSMS データ・セットの使用法

デフォルトにより、SMS が自動的に GDS を再利用するのは、さまざまな理由により世代別データ・セットの新しい世代が GDG ベースにロールインしていないときです。新しい (+1) 世代を作成するジョブにより、SMS は自動的に GDS を再利用します。 SMS が GDS を再利用するときには、据え置きロールイン状態の GDS

が再利用されることになります。この再利用により、最初のジョブにより作成された新しい世代が壊されることがあります。これが起こるのは、他のジョブによりこれがオーバーレイされている場合です。

例えば、ジョブ A は A.B.C.G0009V00 を作成するが、アドレス・スペースの異常終了のためにロールインが行われないものとします。世代 G0009V00 がロールインしていないため、A.B.C (+1) を参照するジョブは G0009V00 の再作成を試みます。重複データ・セット名があるため、SMS は G0009V00 の新しいバージョンをカタログしようとした時点で失敗します。しかし、SMS は G0009V00 の前のロールインが行われなかったことがこの失敗の原因であることを検査して認識します。結果として、SMS は旧バージョンの G0009V00 を再利用します。この旧バージョンで書き込まれたデータはすべて改めて書き込まれることになります。

警告: 通常は、GDS 再利用処理は異常終了ジョブを実行し直した時点で正しく行われます。しかし、前のジョブを再実行する前に偶発的に他のジョブを実行した場合は、データが失われることもあります。ご使用のシステムにおいて、こうした事態が起こった場合は、自動 GDS 再利用処理をオフにしなくてはならないこともあります。 GDS 再利用処理をオフにする場合には、手動で削除するか、IDCAMS

ROLLIN コマンドを使用してロールインしていない世代をロールインさせることが必要となります。 GDS 再利用処理を「オン」または「オフ」にするためのオプションは、システム全体に適用されます。このオプションを 1 つの JOB またはSTEP の特定の値だけに設定することはできません。シスプレックス内の異なるシステムで、このオプションにそれぞれ独自の値を設定できますが、このようにすると予期しない結果につながる場合があります。

GDS 再利用処理をオンにするデフォルトにより、SMS は世代別データ・セットを再利用します。システム・プログラマーは、以下の 2 つの方法のうちの 1 つを使用して GDS 再利用処理をオンにすることができます。

v PARMLIB メンバー IGDSMSxx の中の GDS_RECLAIM の値を YES に設定して、SET SMS=xx コマンドを出す。

v SETSMS GDS_RECLAIM(YES) コマンドを出す。システム・オペレーターまたはシステム・プログラマーがこのコマンドを再び出すか、システムの IPL を実行するまで、この変更は有効です。

GDS 再利用処理をオフにするシステム・プログラマーは、以下の 2 つの方法のうちの 1 つを使用して GDS 再利用処理をオフにすることができます。

v PARMLIB メンバー IGDSMSxx の中の GDS_RECLAIM の値を NO に設定して、SET

SMS=xx コマンドを出す。

v SETSMS GDS_RECLAIM(NO) コマンドを出す。

指針: GDS 再利用処理をオフにする場合は、アクセス方式サービス・プログラムのALTER コマンドを使用して、ロールインしていない世代の削除、名前変更、または

世代別データ・グループの処理

602 z/OS V1R10 DFSMS データ・セットの使用法

Page 627: DFSMS データ・セットの使用法

ロールインを行ってください。このようにしないで新しい (+1) 世代を作成しようとした場合は、エラー・メッセージ IGD17358I が出され、試みは失敗します。

関連資料: GDS 再利用処理の設定の変更については、「z/OS DFSMS Storage

Administration Reference」を参照してください。世代別データ・セットに使用するアクセス方式サービス・プログラムのコマンドについては、「z/OS DFSMS Access

Method Services for Catalogs」を参照してください。

世代別データ・グループ索引のビルドカタログに含まれる GDG は、アクセス方式サービス・プログラムを通じて管理されます。アクセス方式サービス・プログラム DEFINE コマンドを使用して、 GDG

を割り振り、古い廃止された世代を取り扱う方法を指定することができます。

GDG は、世代別索引で検索される情報を使用して管理されます。

注: 別名は、最高レベルの世代索引に割り当てることはできません。

IEHPROGM の BLDG 機能は、索引をビルドします。BLDG 機能は、索引がいっぱいのときに、古い廃止になった世代をどのように取り扱うかも示しています。たとえば、索引がいっぱいのとき、それを空にし、既存の世代を消去し、新しいシリーズの世代のカタログ化を開始することができます。索引がビルドされた後、世代は、その GDG 名によって、および絶対世代とバージョン番号または相対世代番号のどちらかによってカタログ化できます。

GDG 索引をビルドする方法の例は、「z/OS DFSMS Access Method Services for

Catalogs」および「z/OS DFSMSdfp Utilities」にあります。

世代別データ・グループの処理

第 29 章 世代別データ・グループの処理 603

Page 628: DFSMS データ・セットの使用法

604 z/OS V1R10 DFSMS データ・セットの使用法

Page 629: DFSMS データ・セットの使用法

第 30 章 入出力装置制御マクロの使用

この章では、入出力装置を制御するために z/OS オペレーティング・システムのマクロを使用する方法を説明します。 「z/OS DFSMS Macro Instructions for Data

Sets」では、これらの時間節約フィーチャーのそれぞれを起動する方法を説明しています。程度は異なりますが、各マクロは装置依存であるので、装置独立性を達成したい場合には、注意を払う必要があります。DEVTYPE マクロを発行することにより、アプリケーションをさまざまな装置タイプに適応させることができます。「z/OS DFSMSdfp Advanced Services」を参照してください。

この章では以下のトピックを扱います。

トピック 該当ページ

CNTRL マクロを使用して入出力装置を制御する 605

PRTOV マクロを使用してプリンター・オーバーフローをテストする 606

SETPRT マクロを使用してプリンターをセットアップする 606

BSP マクロを使用して磁気テープまたは直接アクセス・ボリュームをバックスペースする

607

NOTE マクロを使用してブロックの相対アドレスを戻す 608

POINT マクロを使用してブロックに位置決めする 609

SYNCDEV マクロを使用してデータを同期する 611

待機アクセス方式を使用するときは、ユニット・レコード装置のみを直接制御することができます。基本アクセス方式を使用するときは、磁気テープと直接アクセス記憶装置の間で限定された装置独立性を達成することができます。BSAM では、装置制御マクロを発行する前に、すべての読み取りまたは書き込み操作を検査する必要があります。

CNTRL マクロを使用して入出力装置を制御するCNTRL マクロは、以下の装置依存の制御機能を実行します。

v カード読取装置スタッカー選択 (SS)

v プリンター行送り (SP™)

v プリンター紙送り制御 (SK)

v 指定されたブロック数を超えての磁気テープ・バックスペース (BSR)

v テープ・マークを通過しての磁気テープ・バックスペース (BSM) およびテープ・マークを超えてのフォワード・スペース

v 指定されたブロック数を超えての磁気テープ・フォワード・スペース (FSR)

v テープ・マークを通過しての磁気テープ・フォワード・スペース (FSM) およびテープ・マークを超えてのバックスペース

バックスペースは、テープをロード開始点に向かって移動します。フォワード・スペースは、テープをロード開始点から遠ざけて移動します。

© Copyright IBM Corp. 1987, 2008 605

Page 630: DFSMS データ・セットの使用法

制約事項: CNTRL マクロは、入力データ・セットがカード読取装置上で可変長レコードを含む状態では使用できません。

DD ステートメントの DCB パラメーター・フィールドで OPTCD=H を指定する場合、VSE テープが組み込みチェックポイント・レコードを含んでいる場合であっても、CNTRL マクロを使用して VSE テープを位置決めすることができます。CNTRL マクロは、データ変換モードで書き込まれ、組み込みチェックポイント・レコードを含む VSE 7 トラック・テープをバックスペースするのに使用することはできません。

PRTOV マクロを使用してプリンター・オーバーフローをテストするPRTOV マクロは、プリンター紙送り制御テープまたは用紙制御バッファー (FCB)

のチャネル 9 または 12 についてテストします。オーバーフロー条件によって、チャネル 1 への自動スキップまたは、指定されている場合は、オーバーフロー処理のためのルーチンへの制御の転送のどちらかが発生します。オーバーフロー出口ルーチンを指定するために、別の PRTOV を発行する前に、DCBIFLGS を X'00' に設定します。

DD ステートメント上で指定された装置が、直接割り振られたプリンター用でない場合は、アクションはとられません。

SETPRT マクロを使用してプリンターをセットアップするSETPRT マクロは、情報がどのように印刷されるかを制御します。これは、IBM

3800 印刷サブシステム、IBM 3900 印刷サブシステム、他のさまざまな汎用文字セット (UCS) プリンター、および SYSOUT データ・セットで使用されます。

プログラムに割り振られるプリンターでは、SETPRT マクロは、プリンター制御情報を初期設定または動的に変更するのに使用されます。SETPRT マクロの使用について詳しくは、「z/OS DFSMS Macro Instructions for Data Sets」を参照してください。

汎用文字セット (UCS) バッファーを持ち、オプションで用紙制御バッファー (FCB)

を持つプリンターでは、SETPRT マクロは、使用される UCS または FCB イメージを指定するのに使用されます。さまざまなプリンター用の汎用文字セットには互換性がないことに注意してください。3 つのフォーマットの FCB イメージ (3800

印刷サブシステム用の FCB イメージ、 4248 フォーマット FCB、および 3211 フォーマット FCB) は、互換性がありません。3211 フォーマット FCB は、3203、3211、4248、 3262 モデル 5、および 4245 プリンターによって使用されます。

IBM 提供の UCS イメージ、UCS イメージ・テーブル、FCB イメージ、および文字配列テーブル・モジュールは、システムの初期設定時に SYS1.IMAGELIB にインクルードされます。 1403、3203、3211、3262 モデル 5、4245、および 4248 の各プリンターでは、ユーザー定義の文字セットを SYS1.IMAGELIB に追加できます。

関連資料:

v イメージが SYS1.IMAGELIB に追加される方法、およびバンド名/別名がイメージ・テーブルに追加される方法については、「z/OS DFSMSdfp Advanced

Services」を参照してください。

入出力装置制御マクロの使用

606 z/OS V1R10 DFSMS データ・セットの使用法

Page 631: DFSMS データ・セットの使用法

v 3800 および 3900 では、ユーザー定義の文字配列テーブル・モジュール、 FCB

モジュール、図形文字変更モジュール、コピー変更モジュール、およびライブラリー文字セットは、「z/OS DFSMSdfp Utilities」で IEBIMAGE について説明されているように SYS1.IMAGELIB に追加されます。

v 4248 フォーマット FCB (これは、 IBM 3262 モデル 5 プリンターにも使用できます) のビルドについては、「z/OS DFSMSdfp Utilities」を参照してください。

FCB コンテンツは、システム・ライブラリー (または、3800 または 3900 を使用している場合は、代替ライブラリー) から選択するか、プログラムで DCB マクロの出口リストを通じて定義することができます。DCB 出口リストについては、 631ページの『DCB 出口リスト』を参照してください。

非 3800 または非 3900 プリンターでは、指定された UCS または FCB イメージは、次のいずれかで見付けることができます。v SYS1.IMAGELIB

v イメージ・テーブル (UCS イメージのみ)

v DCB 出口リスト (FCB イメージのみ)

イメージが見付からない場合は、オペレーターが代替イメージ名を指定するか、要求を取り消すよう求められます。

紙送り制御テープがないプリンターでは、SETPRT マクロを使用して、 FCB を選択するか、バッファーのコンテンツのオペレーター検査を要求するか、オペレーターがプリンター内の用紙を位置合わせできるようにすることができます。

SYSOUT データ・セットでは、指定されたイメージは、データ・セットの宛先(JES2、JES3、VM、または他のタイプのシステムにすることができます) で使用可能でなければなりません。

BSP マクロを使用して磁気テープまたは直接アクセス・ボリュームをバックスペースする

BSP マクロは、処理されている磁気テープまたは直接アクセス・ボリューム上で 1

ブロック分バックスペースします。それからブロックを再読み取りまたは再書き込みすることができます。ブロックを再書き込みしようとすると、テープまたはトラックの残りの部分のコンテンツが破棄されます。 BSP マクロを使用して PDSE を処理するための情報については、 536ページの『BSP マクロを使用して物理レコードをバックスペースする』を参照してください。

移動の方向は、ロード・ポイントまたはエクステントの先頭に向かってです。トラック・オーバーフローが指定されている場合、あるいは CNTRL、NOTE、またはPOINT マクロが使用される場合は、BSP マクロを使用することはできません。BSP

を使用するのは、他の装置制御マクロがバックスペース用に使用できない場合のみにする必要があります。

現行ボリューム上のデータ・セットの先頭を超えてバックスペースしようとすると、レジスター 15 で戻りコード X'04' が出され、テープまたは直接アクセス・ボリュームは、最初のブロックの前に位置決めされます。最初にテープまたは直接アクセス・ボリュームをデータ・セットに再位置決めしない限り、EODAD ルーチン

入出力装置制御マクロの使用

第 30 章 入出力装置制御マクロの使用 607

Page 632: DFSMS データ・セットの使用法

に入った後でバックスペース・コマンドを正常に発行することはできません。CLOSE TYPE=T は、データ・セットの末尾に位置決めすることができます。

BSP マクロを使用して、組み込みチェックポイント・レコードを含む VSE テープをバックスペースすることができます。このバックスペース方法を使用する場合、組み込みチェックポイント・レコードをテストし、迂回する必要があります。変換モードで書き込まれた VSE 7 トラック・テープに BSP マクロを使用することはできません。

NOTE マクロを使用してブロックの相対アドレスを戻すNOTE マクロは、直前に読み取られるか書き込まれたブロックの最初の論理レコードの相対アドレスを要求します。マルチボリューム非拡張フォーマット・データ・セットでは、アドレスは、現在処理されているボリューム上のデータ・セットの先頭に対して相対的です。ストライピング・データ・セットでは、アドレスは常に、データ・セットの先頭に対して相対的です。プログラムはその後操作を位置決めする際にそのアドレスを使用します。

磁気テープでは、アドレスは、4 バイトのブロック・アドレスの形式をとります。TYPE=REL をコーディングした場合、または TYPE をコーディングしなかった場合、NOTE はブロック・アドレスをレジスター 1 に戻します。この場合、ボリューム上の現行ファイルにある最初のブロックは、 X’00000001’ です。TYPE=ABS をコーディングした場合、NOTE はテープ上のデータ・ブロックの物理ブロック ID

をレジスター 0 に戻します。この場合、物理ブロック ID の コンテンツは装置依存であり、ボリュームの先頭に対して相対的です。POINT マクロの検索引数として、後からブロック・アドレスまたはブロック ID を利用することができます。プログラムがテープに TYPE=REL を指定して NOTE マクロを発行した場合、NOTE

はゼロの無効なブロック・アドレスを戻す場合があります。これは、ブロックは直前のボリュームに書き込まれており、現在は異なるボリューム上にいることを意味しています。

直前のテープの最後のブロックを知りたい場合は、上記のロジックを実行する代わりに、以下のことを実行することができます:

1. DECB に対し CHECK マクロを発行する代わりに、WAIT マクロまたはEVENTS マクロを発行する。 DECB は ECB で開始されます。ECB 完了コードはまだ検査しないでください。

2. NOTE を発行します。戻り値が有効であるかどうかはまだ分かりませんが、いったん保存します。

3. ECB 完了コードのバイトが X’7F’ の場合、書き込みは正常に完了しています。CHECK を発行する必要はありません。NOTE が戻した値は有効です。

4. ECB 完了コードが X’7F’ ではない場合、WRITE が失敗した可能性があります。その場合、CHECK マクロを発行します。CHECK の結果は 3 種類あります:

v SYNAD ルーチンへの入り口。これは、入出力エラーを示しています。NOTE

マクロが POINT でテープの誤った場所に戻っています。

v x37 ABEND。他のボリュームが利用できないときにテープがなくなる、また特定して要求されたボリュームが存在しないなど、さまざまな問題により引き起こされます。

入出力装置制御マクロの使用

608 z/OS V1R10 DFSMS データ・セットの使用法

Page 633: DFSMS データ・セットの使用法

v 正しく次のボリュームへ移行しています。CHECK は、次の順次命令に制御を戻しています。直前のボリュームの NOTE が有効であるので、新たに NOTE

を発行しないでください。直前のボリュームに位置決めするために、そのボリュームに対して DCB をクローズにし、DCB オープンにする必要があります。それから LEAVE パラメーター および TYPE=T パラメーター、BSP マクロで、 POINT または CLOSE を発行します。

注: 上記の手法は、テープでのみ有効です。ディスク、または NOTE TYPE=ABS

を使用している場合は上記の問題は発生しません。

直接アクセス記憶装置上の非拡張フォーマット・データ・セットでは、アドレスは4 バイトの相対トラック・レコード・アドレスのフォーマットです。拡張フォーマット・データ・セットでは、アドレスはブロック・ロケーター・トークン (BLT) のフォーマットです。 BLT は、本質的には、データ・セットの現行論理ボリューム内の相対ブロック番号 (RBN) であり、最初のブロックは 1 の RBN を持ちます。ユーザーは、マルチストライプ・データ・セットを単一の論理ボリュームとして見るので、マルチストライプ・データ・セットの場合、 RBN はデータ・セットの先頭に対して相対的であり、すべてのストライプを取り込みます。 PDSE の場合、アドレスはレコード・ロケーター・トークンの形式をとります。オペレーティング・システムによって提供されるアドレスは、レジスター 1 に戻されます。非拡張フォーマット・データ・セットおよび区分データ・セットでは、最後の入出力操作がWRITE であった場合、NOTE はレジスター 0 にトラックの残りを戻し、あるいはNOTE が READ または POINT に後続する場合はトラック容量を戻します。PDSE、拡張フォーマット・データ・セット、および HFS データ・セットの場合、NOTE はレジスター 0 に X'7FFF' を戻します。

NOTE マクロを使用して PDSE を処理するための情報は、 546ページの『NOTE マクロを使用して相対位置を提供する』を参照してください。

POINT マクロを使用してブロックに位置決めするPOINT マクロは、磁気テープまたは直接アクセス・ボリュームを指定されたブロックに再位置決めします。次の読み取りまたは書き込み操作は、このブロックで開始されます。 POINT マクロを使用して PDSE を処理するための情報は、 547ページの『POINT マクロを使用してブロックに位置決めする』を参照してください。

マルチボリューム順次データ・セットでは、参照されているボリュームが、現在処理されているボリュームであることを保証する必要があります。ユーザーは、マルチストライプ拡張フォーマット・データ・セットを単一の論理ボリュームと見なすので、特別な位置決めは必要ありません。ただし、単一ストライピング・マルチボリューム拡張フォーマット・データ・セットは、正しいボリュームに位置決めする必要があります。

ディスクでは、書き込み操作が POINT マクロに後続する場合、データ・セットがUPDAT 用にオープンされていない限り、書き込み操作に続くトラックがすべて消去されます。そのような書き込みの後にデータ・セットをクローズすると、データ・セットは切り捨てられます。データ・セットが UPDAT 用にオープンされているとき、 POINT は WRITE マクロの前に使用するためのものではありません。

入出力装置制御マクロの使用

第 30 章 入出力装置制御マクロの使用 609

|

Page 634: DFSMS データ・セットの使用法

DD ステートメントの DCB パラメーター・フィールドで OPTCD=H を指定する場合、 VSE テープが組み込みチェックポイント・レコードを含んでいる場合であっても、POINT マクロを使用して VSE テープを位置決めすることができます。POINT マクロは、データ変換モードで書き込まれ、組み込みチェックポイント・レコードを含む VSE 7 トラック・テープをバックスペースするのに使用することはできません。

TYPE=ABS を指定する場合、テープ上のデータ・ブロックを見付けるための検索引数として物理ブロック ID を使用することができます。ID は NOTE マクロの以前の実行の出力から提供することができます。

OUTPUT、OUTIN、OUTINX、または INOUT 用にオープンされた直接アクセス記憶装置に POINT マクロを使用しており、レコード・フォーマットが固定された標準でない場合、トラックごとのブロック数は、少し異なる場合があります。

入出力装置制御マクロの使用

610 z/OS V1R10 DFSMS データ・セットの使用法

Page 635: DFSMS データ・セットの使用法

SYNCDEV マクロを使用してデータを同期するまだバッファーにあるデータは、最終的な記録メディア上にない場合があります。これは、同期されていないデータと呼ばれます。データ同期は、WRITE、PUT、および PUTX マクロを介して直前にシステムに与えられたデータが、ストレージ・メディアに書き込まれることをシステムが保証するプロセスです。

SYNCDEV マクロは、次のものに対してデータ同期を実行します。v バッファーされた書き込みモードをサポートする磁気テープ・カートリッジv DASD への PDSE

v DASD への圧縮フォーマット・データ・セット

磁気テープ・カートリッジ装置に対して次のものを行うことができます。

v 同期に関する情報を要求する。または

v バッファーに入れることができる特定の数のデータ・ブロックに基づいて同期が発生するよう要求する。ゼロが指定されると、同期が常に発生します。

SYNCDEV が正常に完了する場合 (戻りコード 0)、制御装置バッファー内に残っているデータ・ブロック数を示す値が戻されます。 PDSE および圧縮データ・セットでは、戻される値は常にゼロです。 PDSE および圧縮データ・セットでは、同期情報または部分同期を要求すると、同期が完了することになります。各 CHECK マクロの完了時に DASD にデータが同期されることを保証するには、ストレージ・クラスを通じて保証同期書き込みを指定します。ただし、これはパフォーマンスを低下させます。これによって、各 CHECK マクロの後で SYNCDEV マクロを発行するのと同じ結果が得られます。ストレージ管理者が保証同期書き込みを指定する方法については、「z/OS DFSMS Storage Administration Reference」を参照してください。

入出力装置制御マクロの使用

第 30 章 入出力装置制御マクロの使用 611

Page 636: DFSMS データ・セットの使用法

612 z/OS V1R10 DFSMS データ・セットの使用法

Page 637: DFSMS データ・セットの使用法

第 31 章 非 VSAM ユーザー作成出口ルーチンの使用

この章では以下のトピックを扱います。

トピック 該当ページ

一般的なガイダンス 613

EODAD データ・セットの終わり出口ルーチン 622

SYNAD 同期エラー・ルーチン出口 623

DCB 出口リスト 631

割り振り検索リスト 634

DCB アベンド出口 636

DCB OPEN 出口 640

据え置き標準外入力トレーラー・ラベル出口リスト項目 642

ブロック数不等出口 642

順次データ・セット用の EOV 出口 643

FCB イメージ出口 644

JFCB 出口 645

JFCBE 出口 646

オープン / クローズ /EOV 標準ユーザー・ラベル出口 647

Open/EOV 非特定テープ・ボリューム・マウント出口 651

Open/EOV ボリューム・セキュリティーおよび検査出口 655

QSAM 並列入力出口 657

BSAM および QSAM でのユーザー合計 657

一般的なガイダンス非 VSAM アクセス方式用のユーザー作成出口ルーチンを識別することができます。これらのユーザー作成出口ルーチンは、エラー分析、ユーザー合計の要求、データ・セット用の入出力操作の実行、およびデータ・セット・ラベルの作成を含む非 VSAM データ・セット用の多数の機能を実行することができます。これらの機能は VSAM データ・セット用ではありません。類似した VSAM 機能は、 279ページの『第 16 章 VSAM ユーザー作成出口ルーチンのコーディング』に説明されています。

DCB および DCBE マクロを使用して、出口ルーチンのロケーションを識別することができます。v データ終わりプロシージャーを実行するルーチン (DCB または DCBE の

EODAD パラメーター)。v オペレーティング・システムのエラー・リカバリー・ルーチンを補足するルーチン (DCB または DCBE の SYNAD パラメーター)。

v 特別な出口ルーチンのアドレスを含むリスト (DCB の EXLST パラメーター)

© Copyright IBM Corp. 1987, 2008 613

Page 638: DFSMS データ・セットの使用法

出口アドレスは、DCB または DCBE マクロで指定することができます。あるいは、DCB または DCBE フィールドを、それらが必要になる前に完了することができます。 表 42 は、DCB または DCBE で明示的に指定するか、DCB での出口リストのアドレスを指定することによって暗黙的に指定することができる出口を要約しています。

表 42. DCB 出口ルーチン

出口ルーチン 使用可能なとき ページ

データ・セットの終わり それ以上順次レコードまたはブロックが使用できないとき 622

エラー分析 訂正不能な入出力エラーの後 623

割り振り検索リスト RDJFCB マクロ命令を発行しているとき 631

ブロック数 ボリュームの終わりルーチンによる不等ブロック数比較の後 631

DCB アベンド OPEN、CLOSE、またはボリュームの終わりルーチンでアベンド条件が発生するとき

631

DCB オープン データ・セットをオープンしているとき 631

ボリュームの終わり ボリュームを変更しているとき 631

FCB イメージ データ・セットをオープンしているか、SETPRT マクロを発行しているとき

631

JFCB TYPE=J を使用してデータ・セットをオープンしているか、JFCB を読み取っているとき

631

標準ユーザー・ラベル (物理順次または直接編成)

データ・セットをオープン、クローズ、またはデータ・セットの終わりに達しているとき、およびボリュームを変更しているとき

631

JFCB 拡張 (JFCBE) IBM 3800 についてデータ・セットをオープンしているとき 631

OPEN/EOV 非特定テープ・ボリューム・マウント

OPEN または EOV ルーチンの間にスクラッチ・テープが要求されるとき

631

OPEN/EOV ボリューム・セキュリティー/検証

OPEN または EOV ルーチンの間にスクラッチ・テープが要求されるとき

631

QSAM 並列処理 データ・セットのオープン 631

ユーザー合計 (BSAM およびQSAM の場合)

ユーザー・ラベルを使用してデータ・セットを作成または処理しているとき

631

プログラミングの考慮事項この章で説明されるほとんどの出口ルーチンは、それらの呼び出し元に戻される必要があります。 2 つだけの例外は、データ終わりルーチンとエラー分析ルーチンです。

入出力操作に続く状況情報DCB を使用しての入出力操作の後で、制御プログラムは、特定の状況情報がアプリケーションに使用できるようにします。この状況情報は、2 バイトの例外コード、または 16 バイトの標準状況表示、あるいはその両方です。

例外コードは、データ制御ブロック (QISAM)、またはデータ・イベント制御ブロック (BISAM および BDAM) で提供されます。データ・イベント制御ブロックは、以下に説明されており、例外コードは 615ページの表 43 に示されるようにブロック内にあります。DCBD マクロ命令がコーディングされる場合、データ制御ブロックは、2 つの 1 バイト・フィールドの DCBEXCD1 および DCBEXCD2 としてア

非 VSAM ユーザー作成出口ルーチンの使用

614 z/OS V1R10 DFSMS データ・セットの使用法

Page 639: DFSMS データ・セットの使用法
Page 640: DFSMS データ・セットの使用法
Page 641: DFSMS データ・セットの使用法
Page 642: DFSMS データ・セットの使用法
Page 643: DFSMS データ・セットの使用法
Page 644: DFSMS データ・セットの使用法
Page 645: DFSMS データ・セットの使用法
Page 646: DFSMS データ・セットの使用法
Page 647: DFSMS データ・セットの使用法
Page 648: DFSMS データ・セットの使用法
Page 649: DFSMS データ・セットの使用法
Page 650: DFSMS データ・セットの使用法
Page 651: DFSMS データ・セットの使用法
Page 652: DFSMS データ・セットの使用法
Page 653: DFSMS データ・セットの使用法
Page 654: DFSMS データ・セットの使用法
Page 655: DFSMS データ・セットの使用法
Page 656: DFSMS データ・セットの使用法
Page 657: DFSMS データ・セットの使用法
Page 658: DFSMS データ・セットの使用法
Page 659: DFSMS データ・セットの使用法
Page 660: DFSMS データ・セットの使用法
Page 661: DFSMS データ・セットの使用法
Page 662: DFSMS データ・セットの使用法
Page 663: DFSMS データ・セットの使用法
Page 664: DFSMS データ・セットの使用法
Page 665: DFSMS データ・セットの使用法
Page 666: DFSMS データ・セットの使用法
Page 667: DFSMS データ・セットの使用法
Page 668: DFSMS データ・セットの使用法
Page 669: DFSMS データ・セットの使用法
Page 670: DFSMS データ・セットの使用法
Page 671: DFSMS データ・セットの使用法
Page 672: DFSMS データ・セットの使用法
Page 673: DFSMS データ・セットの使用法
Page 674: DFSMS データ・セットの使用法
Page 675: DFSMS データ・セットの使用法
Page 676: DFSMS データ・セットの使用法
Page 677: DFSMS データ・セットの使用法
Page 678: DFSMS データ・セットの使用法
Page 679: DFSMS データ・セットの使用法
Page 680: DFSMS データ・セットの使用法
Page 681: DFSMS データ・セットの使用法
Page 682: DFSMS データ・セットの使用法
Page 683: DFSMS データ・セットの使用法
Page 684: DFSMS データ・セットの使用法
Page 685: DFSMS データ・セットの使用法
Page 686: DFSMS データ・セットの使用法
Page 687: DFSMS データ・セットの使用法
Page 688: DFSMS データ・セットの使用法
Page 689: DFSMS データ・セットの使用法
Page 690: DFSMS データ・セットの使用法
Page 691: DFSMS データ・セットの使用法
Page 692: DFSMS データ・セットの使用法
Page 693: DFSMS データ・セットの使用法
Page 694: DFSMS データ・セットの使用法
Page 695: DFSMS データ・セットの使用法
Page 696: DFSMS データ・セットの使用法
Page 697: DFSMS データ・セットの使用法
Page 698: DFSMS データ・セットの使用法
Page 699: DFSMS データ・セットの使用法
Page 700: DFSMS データ・セットの使用法
Page 701: DFSMS データ・セットの使用法
Page 702: DFSMS データ・セットの使用法
Page 703: DFSMS データ・セットの使用法
Page 704: DFSMS データ・セットの使用法
Page 705: DFSMS データ・セットの使用法
Page 706: DFSMS データ・セットの使用法
Page 707: DFSMS データ・セットの使用法
Page 708: DFSMS データ・セットの使用法
Page 709: DFSMS データ・セットの使用法
Page 710: DFSMS データ・セットの使用法
Page 711: DFSMS データ・セットの使用法
Page 712: DFSMS データ・セットの使用法
Page 713: DFSMS データ・セットの使用法
Page 714: DFSMS データ・セットの使用法
Page 715: DFSMS データ・セットの使用法
Page 716: DFSMS データ・セットの使用法
Page 717: DFSMS データ・セットの使用法
Page 718: DFSMS データ・セットの使用法
Page 719: DFSMS データ・セットの使用法
Page 720: DFSMS データ・セットの使用法
Page 721: DFSMS データ・セットの使用法
Page 722: DFSMS データ・セットの使用法
Page 723: DFSMS データ・セットの使用法
Page 724: DFSMS データ・セットの使用法
Page 725: DFSMS データ・セットの使用法
Page 726: DFSMS データ・セットの使用法
Page 727: DFSMS データ・セットの使用法
Page 728: DFSMS データ・セットの使用法
Page 729: DFSMS データ・セットの使用法
Page 730: DFSMS データ・セットの使用法
Page 731: DFSMS データ・セットの使用法
Page 732: DFSMS データ・セットの使用法
Page 733: DFSMS データ・セットの使用法
Page 734: DFSMS データ・セットの使用法
Page 735: DFSMS データ・セットの使用法
Page 736: DFSMS データ・セットの使用法
Page 737: DFSMS データ・セットの使用法
Page 738: DFSMS データ・セットの使用法
Page 739: DFSMS データ・セットの使用法
Page 740: DFSMS データ・セットの使用法
Page 741: DFSMS データ・セットの使用法
Page 742: DFSMS データ・セットの使用法
Page 743: DFSMS データ・セットの使用法
Page 744: DFSMS データ・セットの使用法
Page 745: DFSMS データ・セットの使用法
Page 746: DFSMS データ・セットの使用法
Page 747: DFSMS データ・セットの使用法
Page 748: DFSMS データ・セットの使用法
Page 749: DFSMS データ・セットの使用法
Page 750: DFSMS データ・セットの使用法
Page 751: DFSMS データ・セットの使用法
Page 752: DFSMS データ・セットの使用法
Page 753: DFSMS データ・セットの使用法
Page 754: DFSMS データ・セットの使用法
Page 755: DFSMS データ・セットの使用法
Page 756: DFSMS データ・セットの使用法
Page 757: DFSMS データ・セットの使用法
Page 758: DFSMS データ・セットの使用法
Page 759: DFSMS データ・セットの使用法
Page 760: DFSMS データ・セットの使用法
Page 761: DFSMS データ・セットの使用法
Page 762: DFSMS データ・セットの使用法
Page 763: DFSMS データ・セットの使用法
Page 764: DFSMS データ・セットの使用法
Page 765: DFSMS データ・セットの使用法
Page 766: DFSMS データ・セットの使用法
Page 767: DFSMS データ・セットの使用法
Page 768: DFSMS データ・セットの使用法
Page 769: DFSMS データ・セットの使用法
Page 770: DFSMS データ・セットの使用法
Page 771: DFSMS データ・セットの使用法
Page 772: DFSMS データ・セットの使用法
Page 773: DFSMS データ・セットの使用法
Page 774: DFSMS データ・セットの使用法
Page 775: DFSMS データ・セットの使用法
Page 776: DFSMS データ・セットの使用法
Page 777: DFSMS データ・セットの使用法
Page 778: DFSMS データ・セットの使用法
Page 779: DFSMS データ・セットの使用法
Page 780: DFSMS データ・セットの使用法
Page 781: DFSMS データ・セットの使用法
Page 782: DFSMS データ・セットの使用法
Page 783: DFSMS データ・セットの使用法
Page 784: DFSMS データ・セットの使用法
Page 785: DFSMS データ・セットの使用法
Page 786: DFSMS データ・セットの使用法
Page 787: DFSMS データ・セットの使用法
Page 788: DFSMS データ・セットの使用法
Page 789: DFSMS データ・セットの使用法
Page 790: DFSMS データ・セットの使用法
Page 791: DFSMS データ・セットの使用法
Page 792: DFSMS データ・セットの使用法
Page 793: DFSMS データ・セットの使用法
Page 794: DFSMS データ・セットの使用法
Page 795: DFSMS データ・セットの使用法
Page 796: DFSMS データ・セットの使用法
Page 797: DFSMS データ・セットの使用法
Page 798: DFSMS データ・セットの使用法
Page 799: DFSMS データ・セットの使用法
Page 800: DFSMS データ・セットの使用法
Page 801: DFSMS データ・セットの使用法
Page 802: DFSMS データ・セットの使用法
Page 803: DFSMS データ・セットの使用法
Page 804: DFSMS データ・セットの使用法
Page 805: DFSMS データ・セットの使用法
Page 806: DFSMS データ・セットの使用法
Page 807: DFSMS データ・セットの使用法
Page 808: DFSMS データ・セットの使用法
Page 809: DFSMS データ・セットの使用法
Page 810: DFSMS データ・セットの使用法
Page 811: DFSMS データ・セットの使用法
Page 812: DFSMS データ・セットの使用法
Page 813: DFSMS データ・セットの使用法
Page 814: DFSMS データ・セットの使用法
Page 815: DFSMS データ・セットの使用法
Page 816: DFSMS データ・セットの使用法
Page 817: DFSMS データ・セットの使用法
Page 818: DFSMS データ・セットの使用法
Page 819: DFSMS データ・セットの使用法
Page 820: DFSMS データ・セットの使用法
Page 821: DFSMS データ・セットの使用法
Page 822: DFSMS データ・セットの使用法
Page 823: DFSMS データ・セットの使用法
Page 824: DFSMS データ・セットの使用法
Page 825: DFSMS データ・セットの使用法
Page 826: DFSMS データ・セットの使用法
Page 827: DFSMS データ・セットの使用法
Page 828: DFSMS データ・セットの使用法
Page 829: DFSMS データ・セットの使用法
Page 830: DFSMS データ・セットの使用法
Page 831: DFSMS データ・セットの使用法
Page 832: DFSMS データ・セットの使用法
Page 833: DFSMS データ・セットの使用法
Page 834: DFSMS データ・セットの使用法