編集/序文: 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にアップグレードするので、これらのバージョンのアイデアは役に立ちます。