こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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ファイルというのは、クライアント側で設定するものではないのでしょうか??

基本的な質問で本当に申し訳ないのですが、
どなたかご回答をお願い致します。

投稿日時 - 2009-10-08 10:54:32

QNo.5350941

すぐに回答ほしいです

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

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

投稿日時 - 2009-10-09 00:08:49

お礼

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

投稿日時 - 2009-10-24 19:42:52

このQ&Aは役に立ちましたか?

4人が「このQ&Aが役に立った」と投票しています

回答(4)

ANo.3

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

はい、その通りです。

投稿日時 - 2009-10-08 21:58:44

ANo.2

tnsnames.oraは、DBサーバでもクライアントでも使用します。

あるDBサーバから他のDBサーバに接続する時、接続情報はtnsnames.oraに設定されたものを使用します。
Oracleクライアントのみインストールした環境からDBサーバへアクセスする場合も、tnsnames.oraに設定されたものを使用します。

どこかに接続先の情報を設定しなければアクセスできませんよね?
そのリモートのサーバ環境のIPアドレスやらホスト名やらを設定するのがtnsnames.oraです。

というか、Oracleアプリケーション、Oracleサーバー間のネットワーク通信は「Oracle Net」という共通のコンポーネントを使用して行われます。
その設定ファイルとしてtnsnames.oraがあるわけです。

投稿日時 - 2009-10-08 18:57:24

ANo.1

Oracle Clientのインストールの最後の方で,ネーミングメソッドが云々と言う画面が出てきて、そこに適当な値を設定すると、tnsnames.oraが作成されます。
tnsnames.oraがないのならインストールが中断したか、ネーミングメソッドの設定をキャンセルしたのでしょう。

ちなみに、Oracle Clientにはデータベースはないですけど。
データベースサーバに接続することだけが可能です。
データベースサーバはどこかほかにあるのですよね。

投稿日時 - 2009-10-08 12:52:36

補足

ご回答ありがとうございます。

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

投稿日時 - 2009-10-08 13:27:34