3

DBMS_JOB 上で実行されるジョブ スケジューリング システムを使用しています。マスター ジョブを使用して 1 回限りのジョブを作成します。すべてのクライアントに同じジョブ セットを展開しますが、特定のクライアントでのみ実行するジョブを指定できます。

ハングしているジョブによって実行されるプロセスで時折問題が発生します。これの主な原因は、UTL_TCP が予期された応答を受け取ったときにタイムアウトにならないことです。それらのジョブを強制終了して、再び実行できるようにしたいと考えています。

特定の時間より長く実行されているこれらの 1 回限りのジョブを強制終了する新しいジョブの作成を検討しています。

まだしばらくの間、Oracle 10g にこだわっているので、できることは限られています。

これのほとんどをカバーしていると思われる記事があります

http://it.toolbox.com/blogs/database-solutions/killing-the-oracle-dbms_job-6498

これは、以下を含むすべての不測の事態をカバーするものではないと感じています。

  1. 複数の異なるユーザーとしてジョブを実行でき、ユーザーは作成したジョブのみを中断/削除できます。DBMS_IJOB を使用して回避できると思いますが、DBA に実行を許可してもらう必要があります。
  2. Oracle RAC システムがあります。10g が ALTER SYSTEM KILL SESSION を現在のインスタンスのセッションの強制終了に制限していることを理解しています。すべてのジョブを同じインスタンスで実行するように調整できますが、まだ試していません。

他に考慮すべきことはありますか?スタック オーバーフローには、これに関する明確な回答が必要です。

4

2 に答える 2

1
  • 通常のOSコマンドを使用して、ジョブテーブルからPIDを取得し、スタックしたプロセスを強制終了できます。

  • どのインスタンスでもジョブを強制終了できます。10gでは、スタックしたジョブが実行されているインスタンスを確認し、そのインスタンスに接続する必要があります。

インスタンスとpidを取得するには:

select inst_id, process from gv$session where ...

特定のインスタンスに接続します。

sqplus admin@node3 as sysdba
alter system kill session ...
于 2009-10-07T01:47:54.810 に答える