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

解決済みの質問

Oracle10g・・ODBCで接続できない

Oracle10gのStandardEditionをサーバーにインストールし、データベースを作成しました。

それに対してクライアントにも10gをインストールし、ローカルメソッド名を設定して、接続テストも通りました。SQL*Plusを起動して接続することもできました。

ですが、Accessを使ってテーブルの中身を見ようと思い、ODBCを設定したのですが接続テストをすると固まってしまいます。どうすればODBCで接続できるようになるのでしょうか?

投稿日時 - 2005-07-25 16:51:25

QNo.1537187

すぐに回答ほしいです

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

tnspingの引数がわかりませんが、成功しているようですね。

tnspingはリスナーへの接続が成功するかどうかの確認です。

リスナーに接続した後、クライアント用に専用サーバプロセスが起動し、DBに接続します。
この部分が失敗しているようです。

要はリスナーには接続できているが、DBには接続できていない状態です。

一点気になる点がありますので、それを変更して試してもらえますか?

tnsnames.oraを変更してください。

> (CONNECT_DATA =
> (SERVICE_NAME = dev.dev_domain)
> )
> )

この部分を

(CONNECT_DATA=(SID=ORCL)

に変更してください。
SIDはサーバ側のlistener.oraかlsnrctlで調べてみてください。
(間違うとどつぼにはまりますので慎重に確認してみてください)

念のため、tnsnames.oraのサンプルをアップしておきます。

DEV =
(DESCRIPTION=
(ADDRESS_LIST=
(ADDRESS = (PROTOCOL = TCP)(HOST = DEVSV001)(PORT = 1521))
)
(CONNECT_DATA=(SID=ORCL))
)

SIDだけ違ったら変えて、既存のtnsnames.oraと入れ替えてもかまいません。

これでも不可な場合、サーバ側のlistener.oraと
> lsnrctl status
の出力結果を補足に記入してみてください。

たぶんいけると思うのですが...。

投稿日時 - 2005-08-01 10:53:47

お礼

(CONNECT_DATA=(SID=ORCL))
に変更しても状況は変わらなかったのですが、
クライアントに原因があるというアドバイスを元に
Oracle Clientのアンインストール、再インストールを行ってみましたところ
すんなり接続できるようになりました。
もしかしたらODBCドライバーがうまくインストールされていなかったのかもしれません。

今回のことで失敗の連続ではあったものの、ここでいただいた助言のおかげでOracleの設定について結構詳しくなりました。本当に感謝しています。
ありがとうございました!!

投稿日時 - 2005-08-01 15:27:30

ANo.6

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

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

回答(6)

ANo.5

そういえば昔、あるアプリケーションでOracleのODBCドライバはダメだけど、MSから出ているOracleのODBCドライバは接続できたことがありました。

確か、MS ODBC Driver for Oracle...そんな名前かと思います。
当時バージョンが2から2.5に上がった頃の話でした。

今もMSからOracle用のODBCドライバが出ているのではないでしょうか?

試す価値ありと思います。

投稿日時 - 2005-07-31 00:21:24

補足

アドバイスありがとうございます。

ODBCドライバの一覧に該当のドライバーがありましたので試してみました。

Oracleのドライバーを使ったときとは異なり、ODBCの構成時に「接続テスト」というボタンがありませんでしたので、ACCESSを使って、作成したODBCを選択しテーブルのリンクを試してみましたが、
指定された接続識別子を解決できませんでした。
のエラーが出て駄目でした。

投稿日時 - 2005-08-01 09:53:40

ANo.4

今回の件に関してはサーバー環境は問題ないと思いますので、クライアント環境を見直すことだと思います。

>それとsqlnet.oraはサーバーの方のですか?それともクライアントの方でしょうか。

クライアント側です。
でも特に問題はなさそうですね。

tnsnames.oraの内容をアップしてもらえませんか?

サーバローカルはIPC接続もあるので、それでうまくいっているのかもしれませんね。

あとtnspingの結果もアップしてもらえますか?
使用法は
> tnsping 接続文字列
です。

投稿日時 - 2005-07-30 02:34:23

補足

tnsnames.oraは以下のとおりです

**************************
# tnsnames.ora Network Configuration File: C:\Oracle\product\10.1.0\Client_1\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.

DEV =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = DEVSV001)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = dev.dev_domain)
)
)

**************************

tnspingというものは知りませんでした。
実行した結果は以下の通りです。

**************************
パラメータ・ファイルを使用しました:
C:\Oracle\product\10.1.0\Client_1\network\admin\sqlnet.ora

エイリアスを解決するためにTNSNAMESアダプタを使用しました。
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = DEVSV001)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = dev.dev_domain)))
OK (50ミリ秒)
**************************

よろしくお願いします

投稿日時 - 2005-08-01 09:48:41

ANo.3

>SQLState=08004
>[Oracle][ODBC][Ora]ORA-12154:TNS:指定された接続識>別子を解決できませんでした。

ORA-12154はTNSNAMES.ORAに接続文字列が無い場合に発生するエラーです。
SQL*PLUSでは接続できているとの事ですので、まさか接続文字列を間違っているとは思いませんが...。
ODBCの設定の入力項目を一応見直してみてください。

>これってデータベースの名前が間違ってるということ
>でしょうか・・・・そんなはずないんですが

データベースの名前...ではないんですよね。
tnsnames.oraで設定した接続文字列、またはサービス名と言います。
ちょっとデータベースといわれているのが気になりました。
SIDなどと取り違えてはいないですよね?

あと可能性があるとすれば、sqlnet.oraの設定でしょうか?

NAMES.DEFAULT_DOMAIN に入っている値が、tnsnames.oraで使われていますか?

NAMES.DEFAULT_DOMAIN=WORLD で
tnsnames.oraが
db1.world=...
となっていれば、user/pass@db1 で接続できます。

しかし
NAMES.DEFAULT_DOMAIN=oracle
tnsnames.oraが
db1.world=...
となっていると、ORA-12154が発生します。

この場合、user/pass@db1.world と指定しなければなりません。

御確認ください。

投稿日時 - 2005-07-29 03:17:00

補足

>データベースの名前...ではないんですよね。
>tnsnames.oraで設定した接続文字列、またはサービス名と言います。
SIDとグローバル・データベース名が別という事でしょうか?インストールの時に ”.”の前の文字列が勝手にSIDになったのでデータベースの名前=SIDだと思っていました。
ご指摘ありがとうございます!

それとsqlnet.oraはサーバーの方のですか?それともクライアントの方でしょうか。
どちらにしてもNAMES.DEFAULT_DOMAINというパラメータは無く、
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
とだけ記述してあります。

下でも補足しましたが、サーバー上からODBCの設定をして接続するのは出来るんですが、クライアントからやろうとすると繋がりません。
まず接続テストのボタンを押しただけで5分くらい固まった後パスワードを要求するダイアログが開きます。
パスワードを入れて接続するとさらに5分くらい固まった後、問題のエラーがポップアップします。SQL*PLUSでは何秒と待つことなく接続できるのですが・・・・。

投稿日時 - 2005-07-29 14:38:46

ANo.2

>ORA-12154:TNS:指定された接続識別子を解決・・
使用された接続識別子のタイプがネット・サービス名の場合、そのネット・サービス名がネーミング・メソッド・リポジトリで見つからないか、リポジトリが見つからないかだと思います。
まずグローバルデータベース名・ホスト名の確認をしてみてください。
その他は・・
ローカルネーミング(TNSNAMES.ORAファイル)を使用している場合
*Oracle Netプロファイル(SQLNET.ORA)のNAMES.DIRECTORY_PATHパラメータに値としてTNSNAMESが指定されていることを確認する。
*TNSNAMES.ORAファイルが適切なディレクトリに存在していてアクセスできることを確認する。
*接続識別子として使用したネット・サービス名がTNSNAMES.ORAファイルに存在することを確認する。

または、Oracle10gを例えば再インストールしたとかありますでしょうか?
レジストリが正しく参照されていないのかもしれません。その場合も同様のメッセージが出ます。
環境変数でORACLE_HOMEを作り強制的に指定してもダメでしょうか?

>ADOの設定ってどこでやるのですか・・
Accessを開きメニューのツールからマクロを選択しVisualBasicEditorを起動してVBのメニューのツールから参照設定をクリックすると表示されます。現在参照設定されているLibrayはチェックが付いています。
OracleならMicrosoftActiveXDataObjects2.1Librayがチェックされていれば大丈夫なはずです。

投稿日時 - 2005-07-28 13:00:28

補足

最新バージョンのODBCドライバーをOTNから落とし、クライアントにインストールしましたが駄目でした。
ちなみにMicrosoftActiveXDataObjects2.1Librayにはチェックがついておりましたが、
MicroSoft ODBC Administratorでの接続テストの段階でエラーとなっているので、Accessは関係ないかなと思っています。

あと、Oracle10gをインストールしているサーバーにはインストール前に9iが入っていて、アンインストールしてから10gをインストールしました。10gのインストールも3度やり直しています。

サーバーでlsnrctlコマンドを使い、リスナーが認識しているサービス名を確認し、それがクライアントのtnsnames.oraのサービス名と同じことも確認しました。

サーバー上でODBC接続をすればなんの問題もなくうまくいくんですが、クライアントから接続しようとすると駄目なんです・・・・・

投稿日時 - 2005-07-29 14:19:36

お礼

非常に丁寧な説明ありがとうございます。
なんとか解決できました。

色々勉強させていただきました。
本当にありがとうございます!!

投稿日時 - 2005-08-01 15:29:34

ANo.1

Accessの参照設定はどうでしょうか?
ADOを設定してあるか等の確認は?
MicrosoftActiveX Data Objects 2.? Libraryにチェックしてあるかとか・・
でも参照設定がしてない場合はメッセージでるはずですよね。
Oracle10gとODBCドライバがバージョン等で合っていないとか・・。
そのくらいしか思いつきませんが。

投稿日時 - 2005-07-26 10:43:00

補足

ODBCドライバのバージョンは10.01.00.02でした。
これは10gインストール時にインストールされたものなので合っていると思います。
ADOの設定ってどこでやるのですか?詳しくないものでわかりません。

補足ですが、先ほど接続テストをしたまましばらく放っておいたら以下のようなエラーのポップアップが出ました。

接続できませんでした。
SQLState=08004
[Oracle][ODBC][Ora]ORA-12154:TNS:指定された接続識別子を解決できませんでした。

これってデータベースの名前が間違ってるということでしょうか・・・・そんなはずないんですが

投稿日時 - 2005-07-27 15:10:21

あなたにオススメの質問