0

解決策を見つけるために何日も検索しましたが、何も見つからなかったので、コミュニティに連絡することにしました. 私は Windows プログラマーであり、AS400 内の DBA プログラミングとコマンドに精通していません。

私はいくつかのビューを作成しましたが、それらは単に実稼働テーブルのステートメントを選択するだけのものです。これらは、データベースのグリーン スクリーンから直接実行できるほど AS400 に慣れていないため、IBM SQL ナビゲーターを使用して作成されました。私が作成したビューで彼に問題を引き起こしているという苦情をディレクターから受けました。彼は、私のビューがテーブルをロックしていて、AS400 では使用中のファイルを再編成できないと述べています。

彼は、もし彼が DBA なら、私がしたことを私にさせないだろうと言いました。何年にもわたって何千ものビューを作成してきましたが、AS400 ではなく SQL Server を使用して作成したことに途方に暮れています。SQL ビューの作成を許可しないのは、データベース内でこの問題を処理する経験があまりない人のように思えます。

SQLナビゲーターでビューを作成することにより、再編成などのテーブルのロックを防ぐための基本的な助けを求めています。iSeries SQL ナビゲーターを使用してビューを作成し、作成後にビューの権限を調整しただけです。ロックを防ぐために何かする必要がありますか?

更新: ビューを照会して Excel レポートに投入し、それらを電子メールで送信する ASP.NET アプリケーションがあります。そのアプリケーションは、ジョブが完了すると接続を閉じます。

4

1 に答える 1

2

ビューを作成してもロックは作成されません。

ただし、直接またはビューを介してテーブルを読み取ることは、MS SQL Server の場合とまったく同じです。

プログラムから、またはSQuirreLやIBMのRun SQL ScriptsなどのSQLツールから、ビューをどのように読み取っているのかについては言及していません。プログラムからの場合、結果セット/接続を適切に閉じていることを確認する必要があります。結果セット/接続を適切に閉じない多くの悪いコードを見てきました。接続プーリングも使用されている場合は、実際の問題です。

結果セットと接続が適切に閉じられていると仮定すると、もう 1 つの問題は疑似クローズ カーソルと呼ばれるものです。パフォーマンス上の理由から、既定では、システムが特定のカーソル (オープン データ パス (ODP)) に対して 3 回完全に開くと、システムは要求されたときにカーソルを完全に閉じるのを停止します。

これにより、テーブルへの排他アクセスが必要な操作で問題が発生します。

実際には、システムが ODP を自動的に完全に閉じるまで操作が待機しない場合にのみ、問題が発生します。操作に応じて、待機するかどうかは、テーブルの最大ファイル待機時間 (WAITFILE) パラメーターおよび/またはジョブのデフォルト待機時間 (DFTWAIT) 時間によって制御されます。

次のように Allocate Object コマンドを使用して、システムがテーブルの疑似クローズ ODP を完全にクローズするように手動で要求することもできます。

ALCOBJ OBJ((MYLIB/MYTABLE *FILE *EXCL)) CONFLICT(*RQSRLS)

疑似クローズ カーソルの詳細については、この IBM doc Pseudo Closed Cursor FAQを参照してください。

いくつかのオプション

  1. 操作が待機することを確認してください。
    • CHGPF ファイル (MYLIBIB/MYTABLE) WAITFILE(1)
    • CHGJOB DFTWAIT(30)
  2. 上記のように ALCOBJ を使用して、擬似的に閉じられたカーソルを手動で強制的に閉じます。

最後に、誰もが午後 5 時に帰宅していた 1980 年代からのコマンドの使用を停止することを検討してください。

RGZPFM を使用する代わりに、テーブルを変更して、削除されたレコードを再利用します。

CHGPF FILE(MYLIB/MYTABLE) REUSEDLT(*YES)

CLRPFM の代わりに、SQL DELETE ステートメントを使用します。

于 2016-04-06T15:17:40.107 に答える