データベース(オラクル)に接続できない時の確認項目
「データベース(オラクル)に接続できない時の確認項目」について書く。
業務でクライアントにシステムを導入するときにたまにハマるので。
まず、システム導入時の流れとしては、
1. クライアントにオラクル入れる
2. 設定ファイルを入れる (基本的にこの辺はバッチとかで自動化されている)
3. 接続確認する
4. 詰まる ( \(^o^)/
こういう導入や設定系というのは、作業者は特に何も考えずに手順書通りに右から左と言う感じに作業できるようになっているものなのだが、それ故に一度エラーとかが出ると全然解決できなくなる。
上記の流れでも設定ファイル系が分かってないとなにも解決できない。
まず、接続確認はcmdでsqlplus aaaa/bbbb@cccc as sysdba と言う感じで実施。
よくあるエラーだと、「ORA-12154 TNS 指定された接続識別子を解決できませんでした」
とりあえず、クライアントのtnsnames.oraファイルが正しいか確認する。
「tnsnames.ora」は接続するときの@ccccの部分の記述があるところで、ここが間違っているとサーバ側のoracleに接続できない。
(サーバ側のリスナーの設定に依存する
(tnsnames.oraは%oracle_home%¥network¥admin¥にある
次に、確認する内容としては名前解決ができているか。
tnsnames.oraの内容によるが、ホスト名が記述されている場合は名前解決ができていないと、当然サーバ側のoracleまで到達できないので、hostsファイルもしくはdnsを確認する。
(hostsファイルは、c/windows/system32/drivers/etcにある
名前解決ができているか簡単に確認する方法としては、ホスト名宛にpingを飛ばす事。
ipで帰ってきたら名前解決できている。
あと以前ハマったのは、「ORA-12638: 資格証明の取出しに失敗しました 」のエラー。
クライアント側とサーバ側のドメインが違ったので、認証で失敗していたらしい。
認証系の設定ファイルとして、クライアントに「sqlnet.ora」があるのだが、osでも認証しているのでドメイン違いにより認証が失敗していたらしい。
なので、内容の「SQLNET.AUTHENTICATION_SERVICES=(NTS)」を「=(NONE)」にするか、コメントアウトする。
これでOS側の認証機能は使わないけれども、oracle側が結局IDとPASSの認証はやっているので問題ない。
こんなところ。