データベースリンクを介したクエリのタイムアウトはありますか?


11

編集/序文: DBリンククエリのタイムアウトに関する質問に特に関心があるため、この質問はSOから移行されました。SOから提供される回避策は多少問題ありませんが、質問自体に本当に興味があります。

動機:
データベースリンクを使用して、クエリを「永久に」(2日以上、セッションを終了するまで)実行しました。問題は、リモートデータベースが利用できなくなり、まだ知られていない理由でノーORA-02068が発生し(ここでは説明しません)、クエリが待機して待機したことです。

(クエリは、PL / SQLパッケージのプロシージャを実行するdbms_schedulerジョブによって発行されます。その結果、ジョブもスタックしました。ただし、この質問の中心には特に関係ありません)

私は、テストDBの1つを静止モードにして、データベースリンクを介してクエリを実行することにより、この状況をシミュレートしました。予想どおり、クエリは手動でキャンセルされるか、リモートDBが静止解除されるまで待機していました。

質問:
リモートデータベースの動作と稼働時間を制御できないため、データベースリンクを使用しているクエリにタイムアウトを設定する可能性を模索しています。

私はすでにプロファイル(CPU_PER_CALLなど)、sqlnet.oraパラメーター、ローカルの名前付けパラメーターを接続文字列に直接追加((connect_timeout=10)データベースリンク定義への追加など)、コマンドを... for update wait 1で実行していますが、ビジーセッションまたはアイドルセッションで機能しますが、待機中のセッション。

したがって、データベースリンクの「ローカル」側で、データベースリンクを介したクエリのタイムアウトを設定するオプションを探しています。
以下のようないくつかの解決策alter session set xyzかはselect ... from a@b "wait 100" --(yes, I know this syntax doesn't exist)、私はこれらの特定のDBにはDBA権限を持っていないとして、高く評価されるだろう。

私は現在10gR2を使用していますが、数週間で11gR2にアップグレードするので、これらのバージョンのアイデアは役に立ちます。


クエリはどのように使用されますか?より大きなプロシージャ/パッケージの一部、matビューの基礎となるSQL、外部アプリから実行、...?私は単純な "wait xxx"構文を知りません、あなたのソリューションはより大きなプログラムの一部である必要があるかもしれません、あなたの使い方に依存します。

問合せは、PL / SQLパッケージのプロシージャを実行するdbms_schedulerジョブによって発行されます。(更新された質問)
GWu 2012

回答:


4

dbms_schedulerを使用しているので、ジョブのmax_run_duration 属性を制限に設定して、そのイベントが発生した場合にスケジューラーにメールを送信することができます。Oracleは舞台裏でキューテーブルを使用します(応答をさらに自動化するために追加の手順を実行する場合イベントが発生したときに起動するジョブを作成できます)。ただし、基本的には、設定したmax_run_durationを超えて実行されるすべてのジョブで、次のイベントタイプが発生します:JOB_OVER_MAX_DUR

メールの一部は11gr2に組み込まれています。詳細については、こちらをご覧ください。

お役に立てば幸いです。


素晴らしいアイデア、ありがとう!これは、DBリンクのタイムアウトに関する特定の質問に対する正確な回答ではありませんが、とにかく私の最初の問題を解決すると思います。+ 1 :-)です。私はmax_run_durationを知らなかったし、この私から始まるはちょうどハングの仕事(ストップ&ドロップする方法を見つけforums.oracle.com/forums/thread.jspa?threadID=521939#2002982を
GWU

なんらかの理由でmax_run_durationイベントを発生させることができないため、ここで
GWu

0

私が解決策を持っていると言っているわけではありませんが、dblinkタイムアウトを制御する方法についてもっと議論したいです。イベントを起動するコード、またはTNSタイムアウトイベントを待機して実行するコードを記述することが考えられます。

ALTER SESSION CLOSE DATABASE LINK dblink;

もちろん、前にリモートサーバーをポーリングすることもできます。

select * from dual@dblink

利用可能かどうかを確認しますが、リモートで長時間実行されるコードの問題は修正されません。不正なリモートコードは待機イベントを起動するはずなので、それらは(12cのクラスレベルでも)トラップされる可能性があります。それでも、dblinkセッションを強制的にタイムアウトさせるエレガントなソリューションは得られません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.