Oracle のシグナルの扱いについて


oracle 内部でのシグナルの扱いについて、以下の項目別に記述します。

  1. oracle8i の2 タスク通信で使用するシグナル
  2. oracle が内部で使うシグナル

oracle のシグナルの扱いについて

シグナルは、Pro*C またはその他のプリコンパイラ・アプリケーションに影響します。

Oracle プロセスへの接続時に、SIGCLD (またはSIGCHLD )およびSIGPIPE に 1 つのシグナル・ハンドラをインストールできます。 osnsui()ルーチンを呼び出して設定すると、 複数のシグナル・ハンドラをSIGINT 用にインストールできます。

SIGINT の場合、 osnsui()およびosncui() を使用してシグナル受取りルーチンを登録および削除します。 その他のシグナルにも、シグナル・ハンドラをインストールできます。 Oracle プロセスに接続していない場合は、 複数のシグナル・ハンドラをインストールできます。

2 タスク通信で使用するシグナル
シグナル名 説          明
SIGCLD Oracle プロセスが異常終了すると、 パイプ・ドライバはSIGCLD(SIGCHLD ともいいます)を使用します。 UNIX カーネルはユーザ・プロセスにSIGCLD シグナルを送ります。 サーバ・プロセスが異常終了しているかどうかを調べるには、 シグナル・ハンドラでwait()を使用します。

SIGCLD は、Oracle プロセスではなく、ユーザ・プロセスが受け取ります。

SIGCONT パイプ 2 タスク・ドライバが、 アウトオブバンド・ブレークをユーザ・プロセスから Oracle プロセスへ送信する場合に、SIGCONT を使用します。
SIGINT 2 タスク・ドライバが、ユーザの割込み要求を検出する場合に、 SIGINT を使用します。SIGCLD は、Oracle プロセスではなく、 ユーザ・プロセスが受け取ります。

ユーザが割込みキー([Ctrl]+[c])を押すと、このシグナルが送られます。

SIGIO Net8 プロトコル・メソッドが、ネットワーク・イベントの着信を示すために、 SIGIO を使用します。
SIGPIPE パイプ・ドライバが、通信チャネルでファイルの終わりを検出するために、 SIGPIPE を使用します。 パイプへの書込み時に、読取りプロセスが存在していなければ、 SIGPIPE シグナルが書込みプロセスに送信されます。 SIGPIPE は、Oracle プロセスおよびユーザ・プロセスが受け取ります。 SIGCLD はSIGPIPE と似ていますが、ユーザ・プロセスに適用され、 Oracle プロセスには適用されません。
SIGTERM パイプ・ドライバが、ユーザ側から Oracle プロセスに割込みシグナルを送る場合に SIGTERM を使用します。

SIGTERM は、ユーザ・プロセスではなく、Oracle プロセスが受け取ります。

SIGURG Net8 TCP/IP ドライバが、 アウトオブバンド・ブレークをユーザ・プロセスから Oracle プロセスへ送信する場合に、SIGURG を使用します。

oracle 8 と oracle 7 との Net8 接続でこのシグナルが使われています。

oracle が内部で使うシグナル

oracle が内部で使用するシグナル
シグナル名 説          明
SIGALRM タイマ管理機構を必要とするプロセスで使われています (setitimer(ITIMER_REAL,))。
具体的には、ディスク入出力を伴うプロセスです。
ora_dbwN,ora_lgwr,ora_pNNN,ora_sNNN,ora_ckpt,ora_snpN で使われていることを確認しました。
ora_snpN は 61 秒、その他は 3 秒ごとに送られています。

参照

setitimer(2)