• ベストアンサー

tnsnames.oraファイルについて

初心者の質問で申し訳ないのですが。。。。 下記サイトからOracle Database 10g Client Release(10.2.0.3)を ダウンロードしてインストールしました。 (URL) http://www.oracle.com/technology/software/products/database/oracle10g/htdocs/10203vista.html インストール後、Visual Studioの開発環境からデータソースの新規追加を行い、接続テストを試みたところ、 以下のエラーが出力されました。 (Error) ORA-12514: TNS:listener does not currently know of service requested in connect descriptor いろいろ調べていると、上記エラーの発生原因として、tnsnames.oraファイルの内容に誤りがあるのでは? という認識をもっているのですが、 肝心のtnsnames.oraファイルがOracle Clientのインストール環境下に存在しません。 そもそも、tnsnames.oraファイルというのは、クライアント側で設定するものではないのでしょうか?? 基本的な質問で本当に申し訳ないのですが、 どなたかご回答をお願い致します。

質問者が選んだベストアンサー

  • ベストアンサー
  • mototaker
  • ベストアンサー率100% (7/7)
回答No.4

tnsnames.ora, listener.ora たしかに、いろいろと分かりにくいですよね 今回のエラーは ORA-12514: TNS:listener でありますので、 DBサーバ側の tnsnames.oraは関係ありません。 listener.ora そして DBNAMEの問題です。 listenr.oraは、TNSリスナーの設定ファイルです。 質問に書かれているリンク先から、 Oracle Database 10g Release 2 (10.2.0.3/10.2.0.4) Enterprise/Standard Edition for Microsoft Windows Vista and Windows 2008 をダウンロードして、インストールしたと理解しました。 >tnsnames.oraファイルというのは、クライアント側で設定するものではないのでしょうか その通りです。詳細は異なりますが、おおまかに、 tnsnames.oraは、クライアントで設定します。 そして、サーバー側で設置するものが、 listener.oraです。 not currently know of service とあります。 これは、 サーバーのlistener.oraが設定している、Service名と、 クライアントの tnsnames.oraが設定いる Service名が一致しな いことを意味しています 9i(正式には8i)以降は、listener.oraの中にサービス名を記入せず、 動的リスナーであることが多いので、今回は、すでに起動中の リスナーから確認してみましょう ◆実際にやってみましょう DBサーバー側で コマンドプロンプトを起動してください C:\Users\MOTOTAKA>lsnrctl LSNRCTL for 32-bit Windows: Version 10.2.0.3.0 - Production on 08-10月-2009 Copyright (c) 1991, 2006, Oracle. All rights reserved. LSNRCTLへようこそ。詳細は"help"と入力してください。 ◆状況を確認します LSNRCTL> status (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))に接続中 リスナーのステータス ------------------------ 別名 LISTENER バージョン TNSLSNR for 32-bit Windows: Version 10.2.0.3.0 - Pr 開始日 08-10月-2009 23:57:00 稼働時間 0 日 0 時間 0 分 48 秒 トレース・レベル off セキュリティ ON: Local OS Authentication SNMP OFF パラメータ・ファイル C:\oracle\product\10.2.0\db_1\network\admin\listener ログ・ファイル C:\oracle\product\10.2.0\db_1\network\log\listener. リスニング・エンドポイントのサマリー... (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1ipc))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=MOTOTAKA-PC)(PORT=1521))) サービスのサマリー... サービス"ORCL_XPT"には、1件のインスタンスがあります。 インスタンス"orcl"、状態READYには、このサービスに対する1件のハンドラがあります サービス"PLSExtProc"には、1件のインスタンスがあります。 インスタンス"PLSExtProc"、状態UNKNOWNには、このサービスに対する1件のハンドラが サービス"orcl"には、1件のインスタンスがあります。 インスタンス"orclsid"、状態READYには、このサービスに対する1件のハンドラがあります コマンドは正常に終了しました。 LSNRCTL> いろいろありますが、この サービス"orcl"には、1件のインスタンスがあります。 インスタンス"orclsid"、状態READYには、このサービスに対する1件のハンドラがあります がサービス名です。ですので、この場合は、 サービス名が orcl この名称(大文字小文字関係なし)と、 クライアントの tnsnames.ora のサービス名を合わせる必要があります。 ちなみに、 SID(インスタンス名)が orclsid になります。 ◆ クライアントの tnsnames.oraをみてみます MMM = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 15211)) ) (CONNECT_DATA = (SID = XE) ) ) このようになっていたら、 サービス名接続ではなく、SID接続になります。 よって、サービス名 orcl で接続させためには、 MMM = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 15211)) ) (CONNECT_DATA = (SERVICE_NAME = ORCL) ) ) としてください。 サービス名は、大文字小文字関係なしです。 これにより、 今回のエラー ORA-12514: TNS:listener は、解決します Your DBA MOTO:TAKER

masy0312
質問者

お礼

現在、こちらの環境でテストをしています。 非常にわかりやすいご説明ありがとうございました。

その他の回答 (3)

  • SaKaKashi
  • ベストアンサー率24% (755/3136)
回答No.3

>データベースサーバはリモートのサーバ環境にあります。 >ただ、その場合でも、やはりOracle Clientをインストールした >環境では、データベースサーバに接続するための情報を記述した >tnsnames.oraファイルが必要になるのですよね?? はい、その通りです。

  • 3rd_001
  • ベストアンサー率66% (115/174)
回答No.2

tnsnames.oraは、DBサーバでもクライアントでも使用します。 あるDBサーバから他のDBサーバに接続する時、接続情報はtnsnames.oraに設定されたものを使用します。 Oracleクライアントのみインストールした環境からDBサーバへアクセスする場合も、tnsnames.oraに設定されたものを使用します。 どこかに接続先の情報を設定しなければアクセスできませんよね? そのリモートのサーバ環境のIPアドレスやらホスト名やらを設定するのがtnsnames.oraです。 というか、Oracleアプリケーション、Oracleサーバー間のネットワーク通信は「Oracle Net」という共通のコンポーネントを使用して行われます。 その設定ファイルとしてtnsnames.oraがあるわけです。

  • SaKaKashi
  • ベストアンサー率24% (755/3136)
回答No.1

Oracle Clientのインストールの最後の方で,ネーミングメソッドが云々と言う画面が出てきて、そこに適当な値を設定すると、tnsnames.oraが作成されます。 tnsnames.oraがないのならインストールが中断したか、ネーミングメソッドの設定をキャンセルしたのでしょう。 ちなみに、Oracle Clientにはデータベースはないですけど。 データベースサーバに接続することだけが可能です。 データベースサーバはどこかほかにあるのですよね。

masy0312
質問者

補足

ご回答ありがとうございます。 >ちなみに、Oracle Clientにはデータベースはないですけど。 >データベースサーバに接続することだけが可能です。 >データベースサーバはどこかほかにあるのですよね。 > はい、そうですね。 データベースサーバはリモートのサーバ環境にあります。 ただ、その場合でも、やはりOracle Clientをインストールした 環境では、データベースサーバに接続するための情報を記述した tnsnames.oraファイルが必要になるのですよね??

関連するQ&A