2

MS アクセスを使用して Oracle データベースに接続しようとしています。次のエラー メッセージが表示され続けます。

ORA-12154: TSN- 指定された接続識別子を解決できませんでした

Oracle Drivers OracleClient10g は、データベース サーバーが存在することを確認できます。

tsnnames.ora ファイルに次のようなセクションがあります: UBASEP10G = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = bxxx-xxx.yyyy.com)(PORT = 1521)) ) ( CONNECT_DATA = (SERVICE_NAME = UBASE) ) )

このエラーを解決しようとする試みごとに、これを sqlnet.ora ファイルに追加しました。

NAMES.DIRECTORY_PATH= (ホスト名、ONAMES、TNSNAMES、LDAP、EZCONNECT)

Windows ODBC ドライバー構成ユーティリティーを使用すると、次の情報を要求されます。 DATA SOURCE NAME : MYSOURCE NAME TSN SERVICE NAME:UBASEP10G USERID:MYUSERID

助言がありますか ?????

4

5 に答える 5

3

私は Access を持っていませんが、Excel 2007 を使用して、次のことを行う必要がありました。

  1. ODBC アドミニストレーターを開きます (アドミニストレーター コントロール パネル内)。
  2. ユーザー DSN またはシステム DSN のいずれかで、[追加...] をクリックします。
  3. ドライバーとして「Oracle in OraDb10g_home1」を選択します
  4. Oracle ODBC Driver Configuration で、次のように入力しました。
    • データ ソース名: myOracleDsn
    • 説明: これは、私の Oracle データベースの DSN です。
    • TNS サービス名: oratns
    • ユーザーID: スコット
  5. [接続のテスト] をクリックし、パスワードに「tiger」と入力します。明らかに、scott/tiger サンプルの Oracle データベースに接続しています。また、Oracle をインストールしたときに、TNS 名として oratns を選択しました。上記の他の 2 つの値は任意です。Excel のダイアログに表示されます。
  6. テストが機能する場合は、[OK] をクリックします。
  7. Excel に移動し、DSN への新しい接続を作成します。ダイアログには、オプションとして「myOracleDsn」が表示されます。それを選択し、パスワードに「tiger」をもう一度入力すると、接続が機能するはずです。
于 2008-10-29T16:08:48.900 に答える
0

SQL * Plusを介して問題のデータベースにログインできますか?接続が機能している別のマシン(またはDBサーバー自体)からこれを行うことも問題ありません。

もしそうなら、これを実行します:

select value from v$parameter where name='service_names';

TNSNAMES.ORAで、そこにリストされている値の1つをSERVICE_NAMEに使用します。

ODBC接続では、TNSサービス名を上記で使用した名前「UBASEP10G」に設定するだけです。

于 2008-10-29T16:50:16.213 に答える
0

tnspingを試して、結果を報告してください。

悪い:

C:\>tnsping notreal.world

TNS Ping Utility for 32-bit Windows: Version 9.2.0.5.0 - Production on 29-OCT-2008 15:56:47

Copyright (c) 1997 Oracle Corporation.  All rights reserved.

Used parameter files:
C:\oracle\ora92\network\admin\sqlnet.ora

TNS-03505: Failed to resolve name

良い:

O:\>tnsping real.world

TNS Ping Utility for 32-bit Windows: Version 9.2.0.5.0 - Production on 29-OCT-2008 15:57:42

Copyright (c) 1997 Oracle Corporation.  All rights reserved.

Used parameter files:

C:\oracle\ora92\network\admin\sqlnet.ora

Used TNSNAMES adapter to resolve the alias
Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)
(HOST = DBSERVER.DOMAIN.COM)(PORT = 1521)) (LOAD_BALANCE = YES) (FAILOVER = YES))
(CONNECT_DATA = (SERVICE_NAME = REAL.WORLD) 
(FAILOVER_MODE = (TYPE = SELECT) (METHOD = BASIC) (RETRIES = 10) (DELAY = 3))))
OK (40 msec)
于 2008-10-29T20:08:46.797 に答える
0

TNSNAMES.ora ファイルで (CONNECT_DATA = (SERVICE_NAME = UBASE) ) を (CONNECT_DATA = (SID = UBASE) ) に変更してみてください。

ServiceName と SID は必ずしも同じであるとは限らず、したがって、常に交換できるとは限りません。

SERVICENAME パラメータは、データベース サーバーの listener.ora ファイルで指定された特定の GLOBAL_DBNAME を参照します。サーバー上のインスタンスのエイリアスです。同じ SID を参照するサーバー上で複数のサービス名を持つことができます。SID パラメータは、そのサーバー上の特定のインスタンスを参照します。

クライアント側でサービス名を使用する利点は、DBA がサービス名によって参照される実際のインスタンスを、その名前を使用するクライアントに対して透過的に変更できることです。サーバーのlistener.oraファイルにこれを入れることができます:

(SID_DESC =
  (GLOBAL_DBNAME = THESERVICE)
  (ORACLE_HOME = d:\oracle\10.2.0_DB)
  (SID_NAME = SID1)

後で、listener.ora 構成を切り替えることで、参照される実際のデータベースを変更できます。

(SID_DESC =
  (GLOBAL_DBNAME = THESERVICE)
  (ORACLE_HOME = d:\oracle\10.2.0_DB)
  (SID_NAME = SID2)

そして、クライアント側で賢明な人はいません。クライアントの tnsnames.ora ファイルを変更する必要はありませんでした。

于 2008-10-29T16:22:59.077 に答える
0

振り出しに戻りましょう。コマンド ウィンドウを開き、データベースに接続します。

sqlplus myuserid/mypassword@UBASEP10G

これは正常に接続されますか?

答えはノーなので、このデータベースに正常に接続できる方法はありますか? BQ は正しいです。問題は UBASE のサービス名にあります。サーバー上のリスナーがそのデータベースの名前を認識しているものを判別する必要があります。サーバーにアクセスできますか? サーバー上でコマンド「lsnrctl status」を実行できますか? これにより、リスナーに登録されているサービスが次のように表示されます。

Services Summary...
Service "UBASE" has 1 instance(s).
  Instance "UBASE", status READY, has 1 handler(s) for this service...
于 2008-10-29T17:20:30.317 に答える