Olacle障害対策Oracleトラブル対策の基礎知識(8)

必ずつながる! 接続時トラブル虎の巻



株式会社コーソル
澤田 岳宣
2009/6/15


主な内容
・Oracleにつながらない?!
・ローカル・ネーミングの構成
・データベースサーバまで届いていないケース
・リスナーまで届いていないケース
・データベースまで届かないケース
・データベースまで届いたあとのケース
(関連キーワード:tnsnames.ora)
データベースにつなぐための設定とトラブルシューティングは、慣れていないとどこから手を付けていいのかすら分かりません。最終回となる第8回では、tnsnames.oraにまつわるトラブルの切り分けを詳細に解説します(編集部)

Oracleにつながらない?!

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

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

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

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

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

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

●リスト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のパラメータのうち、ポイントとなるものについて簡単に説明します。

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 データベースサーバまで届いていないケース

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

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

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

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

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

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

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

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


1/4 次のページへ

Index
必ずつながる! 接続時トラブル虎の巻
→ Page 1
Oracleにつながらない?!
ローカル・ネーミングの構成
パターン1:データベースサーバまで届いていないケース

Page 2
パターン2:リスナーまで届いていないケース

Page 3
リスナーの構成
“DBビル”で例えると

Page 4
パターン3:データベースまで届かないケース
データベースまで届いたあとのケース
パターン4:データベースまで届いたあとのケース
1つ1つ原因を探れば必ず接続できる!

Oracleトラブル対策の基礎知識

TechTargetジャパン

Database Expert フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

キャリアアップ

- PR -
@IT Sepcial

イベントカレンダー

PickUpイベント

- PR -
もっと見る
- PR -

お勧め求人情報

ホワイトペーパーTechTargetジャパン

@IT Sepcial
ソリューションFLASH