謎
実は、何年か前、不思議なことがあったんです。重複キーのキーに無い部分の並び方はFIFOですよねこの部分は誤りです。ところが、そのキーに無い部分を書き換えたら、まるで、キー付きの部分を書き換えたように、同じレコードがずっと読み込まれて、ループしたんです。
例えば、順序番号をキーにするファイルの、そのキーとなる順序番号を振り直した場合です。よくあるのが、いくらreadしても、書き換えてアクセスパス保守されて、再びそのレコードを読まれるパターンですね。これでループしたのならば、話は分かります。でも、そのファイルは、DDSをみても、DSPFDで*ACCPTHをしらべても、その順序番号はキーになってないんです。デバッグすると、まるでそれがキーかの様に動いています。何じゃコリャ?
「三度自分を疑ってから、OSを疑え」といいますが(うそ)、プログラムではなく、今度はOSを調べてみようと考え出しました。
暗黙のアクセスパス
- ここで、ふと、「共用アクセスパス」を思い出しました。
- プログラムが参照しているファイルとおんなじキー付きの、別のファイルがあって、そのアクセスパスには確かに順序番号が入っています。プログラムでは、それをキーにしていない方を参照していました。
- そこで、さらに調べると、DSPFDの*MBR情報に暗黙のアクセスパスがあるとでていて、よく見ると、別個のファイルのアクセスパスを参照していました。自分が参照しようとしている論理ファイルの再作成は、件数が多いのに「あっ」という間にできます。間違いなく共用されています。
「じゃ、その共用されているファイルを削除しちゃえ。」
- その日は休日だったんです。誰も使っていなかったので削除できます。「これで解決」.と思ったんですが...
- 実は、その後も同じことが、続いたのです。 ??????
役立たずのマニュアル...予期せぬ現象?
ここから先はマニュアルにも載っていないし、英語の本もひっくり返したのですが、出ていません。帰納的類推です。
- どうやら、アクセスパスはOS内部では、ファイルから独立したシステムオブジェクトのようです。ファイルに関連するのですが、そのアクセスパスを参照するファイルがなくなるまでは、アクセスパスは存続するようです。
- つまり、Aというファイルで出来たアクセスパスがあって、後からBというファイルが「暗黙の共用」をすると、Aが削除されても、Bのために、Aのアクセスパスは残るのです。AとB両方を削除して、初めて、そのアクセスパスも消えて、再度Aファイルの無い状態で、Bを作成すると純粋にBファイルのアクセスパスができるらしいのです。(共用アクセスパスそのもののアイデアはとてもいいものですよ。その点、誤解の無いように。)
先ほどのループは、どうなったかというと...
- アクセスパスの元になるファイルを削除してから、件のファイルを作成したら、今度は索引作成に時間がかかっていたので、手応えを感じました。そして、先ほどの謎のループはなくなりました。この間、プログラムの変更は一切していませんでした。
確かに、同じキー構成でファイルを作ることは、資源の無駄です。上記の場合、データベースの移行という通常とは別の作業だったんです。移行用に新規のファイルを作ったら、こうなってしまったんですよ。やれやれ。 |