[Oracle] TNS-12519が発生してOracleが接続を受け付けなくなる | Archive Redo Blog

Archive Redo Blog

DBエンジニアのあれこれ備忘録

Tomcat 上で動作する Java アプリケーションで、あるバッチ系の処理を大量に実行していると、突然 Oracle(11gの Windows版)が接続を受け付けなくなりました。


アラートログには以下のようなログが大量に出力されています。

Errors in file c:\app\oracle\diag\rdbms\orcl\orcl\trace\orcl_pmon_3072.trc:
ORA-28056: Windowsイベント・ログへの監査レコードの書込みが失敗しました
AUD: OS Error = 1502 encountered while writing audit record


リスナーのログには以下のようなログが大量に出力されています。

04-11月-2009 14:18:30 * (CONNECT_DATA=(SID=orcl)(CID=(PROGRAM=)(HOST=__jdbc__)(USER=))) * (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.2)(PORT=3485)) * establish * orcl * 12519
TNS-12519: TNS: 適切なサービス・ハンドラが見つかりません。


Windowsのイベントログ(アプリケーションログ)に以下ようなログが1,000件程度出ています。

イベントの種類: 情報
イベント ソース: Oracle.orcl
イベント カテゴリ: なし
イベント ID: 34
日付: 2009/11/04
時刻: 14:03:30
ユーザー: N/A
コンピュータ: orasrv1
説明:
イベント ID (34) (ソース Oracle.orcl 内) に関する説明が見つかりませんでした。リモート コンピュータからメッセージを表示するために必要なレジストリ情報またはメッセージ DLL ファイルがローカル コンピュータにない可能性があります。この説明を取得するために /AUXSOURCE= フラグを使用することができる可能性があります。詳細については、ヘルプとサポートを参照してください。次の情報はイベントの一部です: LENGTH: "178" SESSIONID:[6] "652738" ENTRYID:[1] "1" ACTION:[3] "102" RETURNCODE:[1] "0" LOGOFF$PREAD:[1] "0" LOGOFF$LREAD:[2] "37" LOGOFF$LWRITE:[1] "4" LOGOFF$DEAD:[1] "0" SESSIONCPU:[1] "0".


SQL*Plus で接続しようとすると以下のようなエラーが発生し、接続できません。

ORA-12520: TNS: リスナーは、リクエストしたサーバー・タイプに使用可能なハンドラを検出できませんでした。


そして、なぜかイベントログを削除すると正常に接続できるようになります。


接続できなくなる前にリスナーログに以下のような大量の接続確立メッセージが出力されていたので、どうもおかしいと思い、

04-11月-2009 14:01:07 * (CONNECT_DATA=(SID=orcl)(CID=(PROGRAM=)(HOST=__jdbc__)(USER=user1))) * (ADDRESS=(PROTOCOL=tcp)(HOST=192.168.0.2)(PORT=1272)) * establish * orcl * 0

実行しているアプリケーションのソースを確認してみたところ、1箇所 データベースの接続を閉じ忘れているところがありました。

これが上記のようなエラーを誘発していたようです。

アプリケーションの不具合ではありますが、エラーの出方に釈然としないものがありますね。