システムファイル

Natural for UNIX では、オペレーティングシステム機能からアクセスできるファイルにオブジェクトを保存します。オブジェクトが Adabas システムファイルに保存されている Natural for Mainframes とは異なり、Natural for UNIX では、ディスク上の特定のディレクトリにオブジェクトを保存します。そのため、Adabas などのデータベースは、Natural for UNIX でNatural を実行する必要はありません。

このドキュメントでは、次のトピックについて説明します。


システムファイル構造

デフォルトでは、Natural ライブラリは、特定の Natural バージョンの Natural ルートディレクトリの下にサブディレクトリとして作成されます。サブディレクトリの名前はライブラリと同じです。

Natural オブジェクトは、サブディレクトリにファイルとして保存されます。Natural オブジェクトのファイル名には、次の形式があります。

file-name.NKT
file-name これはオブジェクトの名前です。『Natural の使用』の「オブジェクトの命名規則」も参照してください。
N 拡張子の最初の文字は常に "N" です。これは "Natural" を表します。
K
拡張子の 2 番目の文字は、次のいずれかです。
S ソースファイルの場合
G 生成プログラムの場合
R リソースの場合
T 拡張子の 3 番目の文字は、オブジェクトのタイプを表します。有効な値の詳細については、次のリストを参照してください。

例えば、ソースプログラム TESTPROG はファイル TESTPROG.NSP として保存され、マップ TESTMAP に対して生成されるコードはファイル TESTMAP.NGM として保存されます。

注意:
ファイル名はオブジェクト名とは異なる場合があります。現在のオブジェクト名と対応する内部オブジェクト名の両方がファイル FILEDIR.SAG に記述されます。

可能な拡張子では、次のオブジェクトタイプに対してそれぞれの文字および数字が使用されます。

文字または数字 オブジェクトタイプ
A パラメータデータエリア(PDA)
C コピーコード
D DDM
G グローバルデータエリア(GDA)
H Helproutine
L ローカルデータエリア(LDA)
M マップ
N Subprogram
P プログラム
S サブルーチン
T テキスト
4 クラス
5 コマンドプロセッサ
7 関数
8 アダプタ

アクセス権

デフォルトでは、Natural によって割り当てられたオブジェクトはアクセス権 "rw-rw-rw-".を取得します。これにより、オーナー(他のユーザー)のグループに属していないユーザーが、Natural プログラムを再カタログできるようにします。これが望ましくない場合は、UNIX ユーティリティ umask を実行し、適切なマスクを設定する必要があります。

Natural アプリケーションを開発するユーザーは、アプリケーションに属するすべてのオブジェクトに対し、読み取りおよび書き込みアクセス権を保持する必要があります。通常の実稼働環境では、書き込みアクセス権がメンテナンスチームに制限される場合があります。アクセス権が低すぎるためにオブジェクトにアクセスできない場合、Natural はオブジェクトが見つからなかったときと同様に動作します。

システムファイル FNAT および FUSER

Natural システムファイル FNAT(システムプログラム用)と FUSER(ユーザー作成プログラム用)は、異なるサブディレクトリにあります。

FNAT は以下のディレクトリ構造を想定しています。

FNAT
 LIBDIR.SAG
 SYSTEM
      FILEDIR.SAG
      SRC
      GP
      ERR
      RES
 SYS*
      FILEDIR.SAG
      SRC
      GP
      ERR
      RES

ファイル LIBDIR.SAG は、FNAT でのみ利用可能です。Natural を使用してインストールされたすべての Software AG 製品に関する情報が含まれています。この情報は、システムコマンド SYSPROD を使用して表示できます。

FUSER は以下のディレクトリ構造を想定しています。

FUSER
 SYSTEM
      FILEDIR.SAG
      SRC
      GP
      ERR
      RES
 user-library1
      FILEDIR.SAG
      SRC
      GP
      ERR
      RES

ユーザーライブラリの名前を "SYS" という文字で始めることはできません。

ディレクトリ構造は、Natural のインストール中に生成されます。システムおよびユーザーライブラリを表すディレクトリには、次のものが含まれています。

  • FILEDIR.SAG
    このファイルには、Natural によって使用される内部ライブラリ情報が含まれています。詳細については、次の「ファイル FILEDIR.SAG」を参照してください。

  • SRC
    このサブディレクトリには、ライブラリに保存されている Natural ソースオブジェクトが含まれています。

  • GP
    このサブディレクトリには、ライブラリに保存されている生成された Natural プログラムが含まれます。

  • ERR
    このサブディレクトリには、ライブラリに保存されているエラーメッセージが含まれています。

  • RES
    このサブディレクトリには、ライブラリに保存されているプライベートリソースおよび共有リソースが含まれています。

DDM はローカルライブラリに保存できます。プログラムで DDM が使用されている場合、Natural は最初に現在のライブラリを検索し、次に steplib を検索してから、ライブラリ SYSTEM を検索します。DDM が見つからない場合、プログラムはコンパイルされず、エラーメッセージが表示されます。ただし、FDDM モードが有効になっている場合は、Natural はシステムファイル FDDM.でのみ DDM を検索します。

システムファイル FNATFUSER および FDDM へのパスは、コンフィグレーションユーティリティで定義します。システムファイルはバージョンに依存します。したがって、Natural は現行の Natural バージョンのシステムファイルにのみアクセスできます。FNAT システムファイルは 1 つのみ持つことをお勧めします。ただし、複数の FUSER システムファイルを定義することは可能です(例えば、目的ごとに異なる開発領域がある場合)。

システムファイル FDDM

システムファイル FDDM は、すべての DDM を保存できるコンテナです。

FDDM は以下のディレクトリ構造を想定しています。

FDDM
 SYSTEM
      FILEDIR.SAG
      SRC
      GP

デフォルトでは、システムファイル FDDM はアクティブではありません。このモードを使用するには、次の説明に従って FDDM モードをアクティブにする必要があります。

FDDM モードをアクティブ化します。

FDDM モードがアクティブの場合(グローバルコンフィグレーションファイルでデータベース ID とファイル番号の両方が 0 に一致しない場合)、すべての DDM が保存され、システムファイル FDDM に読み込まれます。ライブラリに格納された DDM は、Natural からアクセスできません。これは、すべての DDM がシステムファイル FDIC に保存されるメインフレームに類似しています。

グローバルコンフィグレーションファイルで FDDM システムファイルが未定義の場合、DDM は Natural ライブラリ FUSER および FNAT に保存されます。

Start of instruction setFDDM モードをアクティブ化するには

  1. FDDM モードで DDM を保存する空のディレクトリを作成します。ディレクトリには、Natural の命名規則に対応する任意の名前を付けることができます。

  2. コンフィグレーションユーティリティを呼び出します。

  3. グローバルコンフィグレーションファイル(カテゴリ System Files)で、システムファイル FDDM のデータベース ID とファイル番号を割り当て、最初のステップで作成したディレクトリへのパスを定義します。

  4. 必要なパラメータファイルを選択します。

  5. パラメータ FDDM を見つけます。

    ヒント:
    "FDDM" を検索して、このパラメータを見つけます。詳細については、『コンフィグレーションユーティリティ』ドキュメントの「パラメータの検索」を参照してください。

  6. パラメータ FDDM には、グローバルコンフィグレーションファイルで定義したものと同じデータベース ID とファイル番号を指定します。

  7. 変更を保存します。

  8. 以下の説明に従って、必要な DDM をすべてシステムファイル FDDM に移行します。

DDM のシステムファイル FDDM への移行

FDDM モードで使用できるすべての DDM は、システムファイル FDDM に含まれている必要があります。特に、Natural に付属するライブラリ SYSEXDDM のサンプル DDM は、システムファイル FDDM で使用できることが必要です。

DDM を FDDM システムファイルに移行する場合は、以下のようなさまざまな方法を選択できます。

  • オブジェクトハンドラを使用できます。これは、FDDM システムファイルをサポートし、DDM を FDDM システムファイルに移行可能にします。DDM は Natural ライブラリからアンロードでき、アクティブな Natural セッションの FDDM システムファイルに保存できます。

    重要:
    開発環境を完全に移行するには、オブジェクトハンドラを使用することをお勧めします。

  • また、SYSMAIN ユーティリティのコピー機能または移動機能を使用して DDM を移行することもできます。この場合、古い環境を再度使用するために、最初に FDDM パラメータを非アクティブ化する必要があります。

これらの代替策についての詳細は次に説明します。

注意:
INPL ユーティリティは、FDDM モードがアクティブでない場合は Natural ライブラリに、または FDDM モードがアクティブな場合はシステムファイル FDDM に、DDM をロードします。ロードされた INPL ファイルが両方のモードで動作するように設計されている場合、このことで多少影響を受ける可能性があります。このためには、DDM が Natural ライブラリおよび FDDM システムファイルで使用できることが必要です。

Start of instruction setオブジェクトハンドラを使用して DDM をシステムファイル FDDM に移行するには

  1. 上述の説明に従って、FDDM モードをアクティブ化します。

  2. 修正されたパラメータファイル(パラメータ FDDM のパスが定義されているパラメータファイル)を使用して、Natural を起動します。

  3. ダイレクトコマンド SYSOBJH を発行して、オブジェクトハンドラを呼び出します。

    次の手順は、オブジェクトハンドラウィザードを使用することを前提としています。

  4. メインメニューで、Unload 機能をマークして ENTER キーを押します。

  5. 結果の画面で、オプション[Unload objects into Natural work file(s)]をマークして ENTER キーを押します。

  6. 結果の画面で、オプション[Set additional options]をマークして ENTER キーを押します。

  7. 結果の画面で、オプション[Use FDDM file for processing DDMs]を非アクティブ化し、ENTER キーを押して前の画面に戻ります。

    これにより、(移行される DDM が含まれる)古い環境がアクティブになります。このオプションを非アクティブ化しないと、移行する DDM にアクセスできません。

  8. ENTER キーを繰り返し押して、アンロードするオブジェクトタイプを選択する画面を表示します。

    オプション[Natural library objects only]は、デフォルトで選択されています。このオプションは次の手順で必要です。

  9. ENTER キーを押します。

  10. 表示される画面で、フィールド[Library]と[Object name]にアスタリスク(*)を入力します。さらに、フィールド[More detailed specification of objects]にマークを付けます。ENTER キーを押します。

  11. 結果の画面で、オプション[Error messages]および[Shared resources]を非アクティブ化します。[Natural types]フィールドで「"V"」と入力し、ENTER キーを押します。

  12. ENTER キーを押して、処理するコマンドを表示します。

  13. ENTER キーを押して、アンロード機能を開始します。

  14. オブジェクトがアンロードされたら、メインメニューに戻ります。

  15. メインメニューで、Load 機能をマークして ENTER キーを押します。

  16. 結果の画面で、オプション[Load objects from Natural work file(s)]をマークして ENTER キーを押します。

  17. 結果の画面で、オプション[Set additional options]をマークして ENTER キーを押します。

  18. 結果の画面で、オプション[ Use FDDM file for processing DDMs]をアクティブ化します。

    これにより、FDDM システムファイルが含まれる新しい環境がアクティブになります。

    注意:
    DDM は同じ名前で異なるライブラリに存在することができます。FDDM システムファイルの DDM が上書きされないようにして同じ名前の DDM を検出するには、[Do not replace]オプションを使用して DDM をロードすることをお勧めします。このオプションは、オプション[Use FDDM file for processing DDMs]と同じページにあります。

  19. ENTER キーを押して前の画面に戻ります。

  20. ENTER キーを繰り返し押して、ロードするオブジェクトタイプを選択する画面を表示します。

    オプション[Load all option from the work file]は、デフォルトで選択されています。このオプションは次の手順で必要です。

  21. ENTER キーを押します。

    これで、処理するコマンドが表示されます。

  22. ENTER キーを押してオブジェクトをロードします。

システムファイル FDDM が使用されているかどうかをチェックする

すべての DDM をシステムファイル FDDM に移行したら、FDDM が使用されているかどうかを確認できます。

Start of instruction setFDDM が使用されているかどうかを確認するには

  1. Natural を開始します。

  2. システムコマンド SYSPROF を発行します。

  3. FDDM ファイルが表示されている場合、Natural はこのシステムファイルに保存されている DDM のみにアクセスします。

    FDDM ファイルが表示されない場合、または予期されるファイルが表示されない場合は、セッションに使用されるパラメータファイルを改訂します。

重要な情報および警告

Natural 開発者は、すべてのオブジェクトに対して読み取り、書き込み、および削除を行う権限を持っている必要があります。

エンドユーザーは、生成されたプログラムの読み取り権限のみを必要とします(場合によっては、ソースの読み取り権限も必要です)。

オペレーティングシステムユーティリティを使用して Natural ファイルにアクセスしないでください。これらのユーティリティは、Natural ディレクトリ情報を変更したり、破壊したりする可能性があります。

コードページの競合が発生することがあるため、外部のエディタは使用しないことをお勧めします。競合が発生すると、必ずではありませんが、ソースコードが破損するおそれがあります。

プライベートデータファイルはディレクトリ FUSERFNAT および FDDM に保存しないでください。Natural により予期しない方法で削除または変更される可能性があります。

UNIX アプリケーションの作業ディレクトリとして、ディレクトリ FNATFUSER および FDDM のいずれも使用しないでください。Natural システムコマンドの発行時に問題を引き起こす可能性があります。

Natural からアクセスするオブジェクトのファイル名(8.3 フォーマットのファイル名を含むパス)は、255 バイトを超えてはなりません。

ファイル FILEDIR.SAG

ファイル FILEDIR.SAG は最大 60000 個のオブジェクトをサポートします。オブジェクトのプログラミングモード(ストラクチャードまたはレポーティング)や内部的に変換されたオブジェクト名など、Natural によって使用される内部ライブラリ情報が含まれています。これらの内部オブジェクト名は、Natural オブジェクトを保存する際に、以下の名前でディスクに自動的に作成されます。

  • 8 文字を超える名前(DDM の場合もあります)

  • Natural ではサポートされているものの、オペレーティングシステムではサポートされていない特殊文字を含む名前。

内部オブジェクト名は一意であり、現在のオブジェクト名の省略形と任意の数値で構成されます。現在のオブジェクト名と対応する内部オブジェクト名の両方が FILEDIR.SAG に記載されます。

オブジェクトが正しいディレクトリにある場合でも、このライブラリ情報が FILEDIR.SAG に含まれた後でのみ Natural で使用できます。Natural 内で作成されたオブジェクトの場合、ライブラリ情報は自動的に組み込まれます。その他のオブジェクトでは、SYSMAIN ユーティリティの Import 機能を使用する必要があります。

ユーティリティ FTOUCH は、Natural の外部で FILEDIR.SAG の更新に使用できます。

ポータブルな Natural システムファイル

Natural ライブラリ内のディレクトリファイル FILEDIR.SAG および Natural エラーメッセージファイルは、プラットフォームに依存しないポータブル名フォーマットで作成されます。例えば、異なる Windows、UNIX、OpenVMS の各プラットフォーム間で、オペレーティングシステムのコマンドを使用してライブラリをコピーするだけで FUSER ライブラリを交換できます。

FNAT システムファイルは、Natural のインストールに付属し、バージョン固有かつプラットフォーム固有です。したがって、異なるプラットフォーム間で FNAT システムファイルを共有することはお勧めしません。特に、Windows プラットフォーム上の FNAT システムファイルには、一部の UNIX または OpenVMS プラットフォームの FNAT システムファイルとまったく異なる一連のユーティリティが含まれています。

異なるプラットフォーム間で FUSER システムファイルを共有することが可能になりましたが、実行する場合は慎重に処理する必要があります。これは、Natural のロックメカニズムはマシン境界を越えるものではなく、したがって、異なるプラットフォーム上の 2 つの Natural セッションで、予期しない結果を伴って同じオブジェクトを同時に修正する可能性があるためです。

以下では次のトピックについて説明します。

言語依存オブジェクト

移植対象のアプリケーションがシステム変数 *LANGUAGE を使用する場合は、次の情報に注意する必要があります。

ほとんどすべての Natural オブジェクトは、大文字のみを含む名前でシステムファイルに保存されます。例外は、言語依存オブジェクト(特定の言語用に作成されたオブジェクト)です。言語依存オブジェクトの名前には、小文字を含めることができます。Windows は大文字と小文字が厳格には区別されない(case-preserving)オペレーティングシステムであるため(一方 UNIX は大文字と小文字が区別される(case-sensitive)オペレーティングシステム)、UNIX で作成された名前が Windows で競合を起こしたり、UNIX で開発されたアプリケーションが Windows で予期しない結果を招くことがあります。

注意:
OpenVMS は Windows と同様に動作します。大文字と小文字は区別されません。ただし、ファイル名は常に大文字で作成されます。

コマンド SAVE PGM& は、オブジェクト名に言語識別子を含むオブジェクトを作成します。結果のオブジェクト名は、次の *LANGUAGE の設定によって異なります。

*LANGUAGE の設定 次の名前のオブジェクトが作成されます
33 PGMX(大文字の X を使用)
59 PGMx(小文字の x を使用)

UNIX(PGMX.NGP および PGMx.NGP)で作成された異なるオブジェクトは、ファイル FILEDIR.SAG 内で名前 PGMx.および PGMX のエントリを取得します。これら 2 つのオブジェクトには、Natural が実行される環境に応じて異なる処理が行われます。

  • Natural for UNIX で PGMX を実行する場合、ファイル PGMX.NGP はバッファプールにロードされ、実行されます。

  • Natural for Windows で PGMX を実行する場合、ファイル PGMX.NGP または PGMx.NGP のいずれかがバッファプールにロードされ、実行されます。これは、Windows がこれらの 2 つのオブジェクトを区別しておらず、1 つの同じオブジェクトとして扱うためです。したがって、FUSER またはそのような FUSER のコピーを共有するアプリケーションが異なって動作する可能性があります。

非ポータブルメッセージファイルを 64 ビットプラットフォームに移行する

64 ビットプラットフォームで作成されていない、非ポータブルフォーマットの古いメッセージファイルは読み取れません。

アプリケーションを 32 ビットプラットフォームから 64 ビットプラットフォームに移行する場合は、最初に古いメッセージファイルをポータブルフォーマットに変換する必要があります。これを行うには、SYSERR ユーティリティのエクスポート機能およびインポート機能を使用します。まず、メッセージファイルをテキストファイルにエクスポートし、次にテキストファイルを Natural にインポートして新しいメッセージファイルを生成します。これにより、Windows、UNIX、OpenVMS で読み取り可能なポータブルメッセージファイルが作成されます。エクスポート機能およびインポート機能の詳細については、『ツールおよびユーティリティ』ドキュメントの「メッセージファイルとテキストファイルの生成」を参照してください。

セマフォを使用したシステムファイルへのアクセスの同期

セマフォは、Natural システムファイルへのアクセスを同期するために使用されます。これには追加のオペレーティングシステムリソースが必要なため、カーネルパラメータ SEMMNI および SEMMNS を、アクセスされるシステムファイル数に合わせて増やすことを検討する必要があります。

セマフォを使用すると、複数のユーザーがシステムファイル FNAT および FUSER を扱う権限を持つことができます。セマフォ ID は、ロックファイル(*.LCK)とともに保存されます。さらに Natural セッションが開始されると、バッファプールはセマフォ ID と対応するロックファイルを探して同期します。

ロックファイルが存在しない場合は、新しいセマフォ ID とロックファイルが生成されます。これは、同期が不可能であることを意味します。

注意:
1 つのリソースのみを削除することはできません。セマフォ ID と対応するロックファイルを必ず削除する必要があります。

NFS を使用した Natural ライブラリの保存

Natural ライブラリを保存するために NFS(Network File System)を使用する場合、Natural ライブラリを保存するディレクトリをネットワークのファイルサーバーから NFS を経由してマウントすると、障害が発生することがあります。

これは、Natural オブジェクトの更新中に各ライブラリに保存された FILEDIR.SAG ファイルをロックする必要があるためです。

NFS のロックが、関与しているプラットフォーム間で不適合があったり、正しく設定されていないと、Natural は要求が処理されるまでに終了できない状態でハングすることがあります。この要求は、通常、関連するシステムのコンソールに表示されるか、システムに依存する別のログファイルに記録されます。

ニュークリアスがハングしたり、終了できない障害を回避するには、Natural ライブラリをローカルディスクにだけ保存します。