ORA-12514
ORA-12514: TNS:listener does not currently know of service requested in connect
descriptor
だけ見ても分かりづらいけど、ORACLEサービス名がリスナーに登録されていない場合に発生するエラーとの事。
発生状況
客先で発生。
始業後1時間ほど経ったタイミングで障害発生の一報がありました。
システムがDBに接続できずに作業できないとの事。
その時点で確認したことは、
- 他のネットワーク機器は問題ないか?
- PC再起動したか?
- その他の、DB接続可能なアプリケーションでは接続可能か?
上記の3点。
この時点で、もう1個確認しておけば割とあっさり解決してたんですが、そこまで考えが至らず・・・
他のネットワーク機器は問題ないか?
まぁ、定番っちゃ定番だと思う。
そもそもDBはローカル環境に構築してあるとはいえ、他のネットワーク機器に接続できないんじゃ、それはそれで問題なので。
ただ、ネットワークドライブをはじめ、社内ポータルとかは接続できる様子。
PC再起動したか?
PC起動直後だと、サービスが立ち上がりきってなくて、ORACLEが使えないという状況も考えられたんだけど、この時点で、起動してから1時間以上は経過しているとの事。
ここで可能性を切り捨ててしまった・・・
その他の、DB接続可能なアプリケーションでは接続可能か?
DB接続を試してもらうも、エラーとなる。
エラーは、ORA-12514。
リスナーの起動とか調べる
このエラーの調査で定番なのは、そもそもリスナーが起動しているかどうか?
リスナーが起動していなかったら、このエラーになる・・・と。
ということで、とりあえず、リスナーの調査。
コマンドプロンプトで、下記コマンドを入力。
lsnrctl status (サービス名)
パスが登録されてなくて、エイリアスで通じない場合は、直接ORACLE_HOMEまで移動して実行します。
ORACLE_HOMEってなんぞや?って場合は、次の章ORACLE_HOMEの調べ方で確認します。
リスナーが起動していれば、こんな感じで何らかの反応がある。
当然ながら、適当なリスナー名では、サービス名が見つかりませんと帰ってくるだけですw
ORACLE_HOMEの調べ方
他にもあるんだけど、手っ取り早いのはsetコマンド。
コマンドプロンプトで
set
と入力。
その中で、多分「Path=」で始まる部分があるので、そこからORACLEという文字を見つけます。
要は環境変数なので、環境変数プロパティ画面から確認しても良いんだけど、多分見づらいので、こちらがいいと思う。
コマンドプロンプトの画面上で見つけづらい場合は、
set > set_list.txt
とかやって、テキストに吐き出して検索する。
SQL*Plusにログインしてコマンドで確認も出来るんだけど、そもそも今回の事態では、ORACLEへログインすら出来ない状態なので、使えない・・・
色々準備したけど、サービスが立ち上がっていないだけだった
結論は、ORACLEサービスが起動していなかったのが原因でした。
リモート環境での調査が出来ないところなので、電話口での説明で作業してもらうしかない状態だったので、リスナーの確認方法とか、ORACLE_HOMEの資料を準備して、PC操作に不慣れな人でも出来るように用意したんですが、そもそもサービスが起動していないことが判明して苦笑いw
PC再起動したか?
PC起動直後だと、サービスが立ち上がりきってなくて、ORACLEが使えないという状況も考えられたんだけど、この時点で、起動してから1時間以上は経過しているとの事。
ここで可能性を切り捨ててしまった・・・
先に書いたとおり、この時点で可能性を切り捨ててしまっていたのが痛かった。
少なくても1時間以上経ってるんだから大丈夫だろうっていう思い込み。
それに加え、エラー内容を鵜呑みにしてしまったことが敗因・・・
念のためでもいいから、サービスの確認も先にやれていれば・・・と悔やまれる。