CPYF CRTFILE(*YES)(複写)
- ライブラリーの指定をしなくても、ライブラリーリスト(*LIBL)から検索してくれる。
- QTEMPにワークファイルを作る時、あくまで、データの複写なので、レコードが最低1件複写される。
- 総称名が使えない。
- 開発プログラムのテストなどの目的で、論理ファイルをCRTFILE(*YES)で、他のライブラリーに複写すれば、同じキーの物理ファイルが作成されます。物理+論理にしなくてもすみます。
- CPYFでは、OS内部では通常のレコード単位のデータコピー用のプログラムが動きますので、そのプログラムが必要とする、バッファなどの環境はそのCPYFで使われます。このため、OVRDBF
NBRRCDS() SEQONLY(*YES)なども、有効です。但し、ファイル名の指定変更は、CPYFでエラーになります。
- 削除済みレコードは転送されませんし、キー付きファイルの場合、そのキー順に複写されます。したがって、まったく同一のファイルが作成されるわけではありません。
CRTDUPOBJ XXXX *FILE XXXXX DATA(*YES/*NO) (複製)
- DATA(*YES)の時は、複製元が、使用中だと複製できません。
- 総称名 AAAA*などとすれば、一括複製できます。物理ファイルと論理ファイルが同じ名称で始まっていれば、まとめて複製できます。
- 昔、CPYFよりもCRTDUPOBJ DATA(*YES)の方が、早いと聞きました。これは、CPYFは、ほんとにデータを1レコードづつアクセスパス経由で複写しますが、CRTDUPOBJは、ファイルオブジェクトごと、(データもひっくるめて、ファイルイメージのまま、といえばいいのか)複製するから、らしいです。
- ライブラリー名指定を必須とするので、*LIBLからは検索できない。但し、RTVOBJDと組み合わせて、RTNLIBを指定すれば、ライブラリー名を指定せずにできます。
- CRTDUPOBJは、オブジェクトの複製作業なので、レコード単位のデータ複写とは違います。よって、削除済みのレコードも、そのまま、削除済みレコードとして複製されてしまうことに注意してください。
CRTPF/CRTLF XXXXX OPTION(*NOSRC *NOLIST)
- ソースファイルがどこにあるか、はっきりしている場合使えます。(当然ですが)
- もし、修正中のシステムだったりすると、ソースが修正されて(現在、それに基づき変更中とか、移行直前とか)、レベルチェックエラーになるかも。
- 当然ですが、複数まとめて、一括作成はできません。後で、論理ファイルが増えた時なども、気をつけねばなりません。
私は、CRTDUPOBJを使っています。でも、上記の注意(ロックとライブラリー名)に気をつけてください。本来はライブラリー名は指定したくないはずです。やっぱり、RTVOBJDでライブラリー名を取り出してからがいいでしょうね。ワークファイルの場合も、私は、CRTDUPOBJを使っています。AAMST*とかで、複製すれば、後で論理ファイルが増えても、すべて複写されるからです。たいていは、DATA(*NO)で使っています。
CRTDUPOBJ DATA(*YES)の時のロック(確か排他ロック)は、ある方がいいとも、ないほうがいいともいえます。それを使用する局面において、はっきりしてきますね。
追記
もし、物理ファイルとその論理ファイルが、別々のライブラリーにある場合、CRTDUPOBJで物理ファイルと、論理ファイルを、各々指定して(ライブラリーが別なので、物理ファイルと論理ファイルは、各々別に実行することになる)複製する場合、その論理ファイルは、複写もとのライブラリーの物理ファイルに接続されるようです。でも、物理ファイルとその論理ファイルは、たいてい同じライブラリーにセットすべきですね。それは、SAVRSTの時も、厄介ですよ。
- 物理ファイルから、従となる論理ファイルを見るには、DSPDBR
物理ファイル名
- 論理ファイルから、主となる物理ファイルを見るには、DSPFD
論理ファイル名 *ACCPTH
です。
それから、このように、はた、と後で分かったことは「追記」として、記ます。変に、文章中に入れると、修正された部分を識別するのが面倒なので。
|