連載
» 2009年06月15日 00時00分 公開

必ずつながる! 接続時トラブル虎の巻Oracleトラブル対策の基礎知識(8)(1/5 ページ)

データベースにつなぐための設定とトラブルシューティングは、慣れていないとどこから手を付けていいのかすら分かりません。最終回となる第8回では、tnsnames.oraにまつわるトラブルの切り分けを詳細に解説します(編集部)

[澤田岳宣,株式会社コーソル]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

Oracleにつながらない?!

連載バックナンバー

今回の主な内容

  • Oracleにつながらない?!
  • ローカル・ネーミングの構成
  • データベースサーバまで届いていないケース
  • リスナーまで届いていないケース
  • データベースまで届かないケース
  • データベースまで届いたあとのケース
    (関連キーワード:tnsnames.ora)

 今回は、「ローカル・ネーミング(tnsnames.ora)を使用してクライアントからデータベースへ接続を行う際に発生するエラー」について紹介します。ここで紹介するエラーがすべてではありませんが、よく遭遇するエラーかと思います。

 ここでは、エラーを以下4ケースに分けて説明します。

1.データベースサーバまで届いていないケース
2.リスナーまで届いていないケース
3.データベースまで届いていないケース
4.データベースまで届いたあとのケース

図1 各ケースのイメージ 図1 各ケースのイメージ

ローカル・ネーミングの構成

 今回の例では、クライアントマシンのtnsnames.oraに記載したtest_nsnという名前のネット・サービス名を使用してデータベースに接続を行います(リスト1参照)。

 この設定はtnsnames.oraの基本的な構成です。

   1:	test_nsn =
   2:	  (DESCRIPTION=
   3:	   (ADDRESS=
   4:	    (PROTOCOL=TCP)(HOST=machine1)(PORT=1522)
   5:	   )
   6:	   (CONNECT_DATA=
   7:	    (SERVICE_NAME=testdb)
   8:	   ) 
   9:	  )
リスト1 tnsnames.ora

 リスト1のパラメータのうち、ポイントとなるものについて簡単に説明します。

test_nsn ネットサービス名。リスト1の2行目から9行目の“ (description = ….<以下略> ) ”を「接続記述子」といいますが、その接続記述子に短い別名を付けたものです。今回はtest_nsnという名前を付けていますが、任意の名前を付けることが可能です。SQL*Plusなどでクライアントからデータベースに接続する際、@以降に記述します。
例:SQL> conn scott/tiger@test_nsn
HOST リスナーが起動しているホスト(またはIPアドレス)を指定します。今回の例では、machine1という名前のデータベースサーバを指定します。
PORT リスナーがリッスンしているポート番号を指定します。今回の例では、1522を指定します。
SERVICE_NAME リスナーが認識している(リスナーに登録されている)データベースサービスを指定します。

 それでは早速、エラーが発生するケースについて紹介しましょう。先に紹介したtest_nsnというネット・サービス名を使用して、データベースに接続します。また、以降ではデータベースサーバはUNIX環境であることを想定します。Windows環境について記載する際には、その旨を記載します。

パターン1:データベースサーバまで届いていないケース

図2 データベースサーバまで届いていないケース 図2 データベースサーバまで届いていないケース

ORA-12545:ターゲット・ホストまたはオブジェクトが存在しないため、接続に失敗しました

 接続を試みたところ、ORA-12545が発生しました。

%sqlplus /nolog
SQL> conn scott/tiger@test_nsn
ERROR:
ORA-12545:
ターゲット・ホストまたはオブジェクトが存在しないため、接続に失敗しました
SQL>
リスト2 ORA-12545の出力例

 このメッセージが出力される場合、基本的にはtnsnames.oraのHOSTパラメータで指定したホスト名の名前解決ができていないことが原因であると考えられます。

 そのため、まずはpingコマンドが成功するかどうかを確認します。今回の例では、ping machine1 の結果が unknown host となったので、クライアントのhosts ファイルにmachine1とそのIPアドレスを記入し、このエラーの対処を行いました。

 補足となりますが、そのほかにデータベースサーバまで届かないケースとして、

ORA-12535: TNS: 操作はタイムアウトしました。
ORA-12170: TNS: 接続タイムアウトが発生しました。

といったメッセージが発生するケースもあります。これらのメッセージは、ネットワークやファイアウォールの問題であったり、データベースサーバが落ちていたり、hostsファイルやtnsnames.oraに設定されているIPアドレスが間違っていたりと発生要因はさまざまです。なお、これらエラーはマシンの負荷やネットワークの負荷でも発生する場合もあります。

       1|2|3|4|5 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。