2016-04-06 76 views
0

解決策を見つけようとしている日を検索しましたが見つかりませんでしたので、コミュニティに連絡することにしました。私はWindowsプログラマです。私はAS400のDBAプログラミングとコマンドに精通していません。AS400 IBM SQL Navで作成されたDB2ビュー使用中のファイルをロックする

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

彼はDBAであれば、私がやったことを私がすることを許しませんでした。私は何年もの間に何千ものビューを作成したが、SQL ServerはAS400ではないという点で紛失している。私がSQLビューを作成することを許可していないのは、データベース内でこの問題を処理するのにあまり経験がない人のようです。

私は、SQLナビゲータでビューを作成することで、re-orgsなどのテーブルのロックを防ぐためのいくつかの基本的な助けを求めています。 iSeries SQLナビゲーターを使用してビューを作成し、ビューの作成後にそのビューの許可を調整しました。私は間違ったことをしましたが、ロックを防ぐために何かする必要がありますか?

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

+0

ディレクターがDBAの場合は、おそらくテーブルを再編成する必要はありません。必要でないようにテーブルを定義することができます。 RGZPFMコマンドは、ALWCANCEL(* YES)とLOCK(* EXCLRD)またはLOCK(* SHRUPD)のいずれかがコマンド・パラメーターとして指定されていない限り、**排他的**使用が必要です。しかし、ALWCANCEL(* YES)はテーブルをジャーナルにする必要があり、ディレクターはDBAではないので、そうではないと思います。あなたがテーブルからのみ読んでいるのなら、VIEWは必要ありません。なぜあなたはそれらを作りましたか? – user2338816

+0

複数のクエリを組み合わせたクエリが複雑なため、ビューが作成されました。むしろ、これらのクエリをハードコーディングし、アプリケーション内の複数のクエリの結果を読み込むことでプログラムを膨らませることで、ビューは最適なソリューションと最速でした。ビューはうまくいく。私は、ロックをチェックするために提供されたコマンドを使用し、それらのビューに対するオープンな接続が期待どおりに閉じられない問題があるかどうかを確認します。 – Mike

+1

十分な理由があります。もちろん、ロックはいずれの方法でも同じでしょう。あなたのディレクターの苦情は、排他的アクセスが必要な時に照会が実行されるということです。 VIEWを使用するかどうかは関係ありません。 VIEWを作成するデータベース権限を持っている場合は、差異(ロック)の違いがないため、クレームの根拠はありません。 – user2338816

答えて

2

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

しかし、テーブルを直接またはビューを介して読むことは、MS SQL Serverと同じように機能します。

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

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

これは、テーブルへの排他的アクセスが必要な操作に問題を引き起こします。

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

あなたはまた、手動でシステムが完全にそのようなオブジェクトのコマンドを割り当てて使用してテーブルの上に任意の擬似閉じODPを閉じるように要求することができます。このIBMを参照してください、擬似近いカーソルの詳細情報については

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

DOC Pseudo Closed Cursor FAQ

オプションのカップル

  1. は操作が待って喜んでであることを確認します。..
    • CHGPFファイル(MYLIBIB/MYTABLE)WAITFILE(1)
    • CHGJOB DFTWAIT(30)
  2. 手動擬似閉鎖カーソルを強制
  3. 上記 最後

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

RGZPFMを使用する必要はなく、削除されたレコードを再利用するようにテーブルを変更します。

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

CLRPFMではなく、SQL DELETE文を使用してください。

+0

ビューを読み取り専用として使用するクエリを実行できるかどうかは疑問です。それはロックを解除するだろうか?私はAS400の情報を持って私のディレクターに行くことができません。なぜなら、私があたかも彼を傷つけるかのように見えると言いますからです。私はレコードのロックの問題を避けるためにASP.NETのアプローチを使用したいと思います。 – Mike

+0

1. IIRC物理ファイルの再編成には排他的なファイルアクセスが必要です。つまり、開かれた読み取り専用アクセスであってもブロックされます。 2.ディレクターが物理ファイルの 'RGZPFM'コマンドまたは削除/名前の変更を意味するかどうか確認してください。作成されたビューは、ジョブがそれを使用しているかどうかにかかわらず、これらのアクションを防止します。 –

+0

いいえ、すぐに使えません。ロックは、システムが将来の読み取りのために開いたままのレコードを読み取るために使用するODPの結果です。 – Charles

関連する問題