7

私の目標は、OS X マシンから Oracle 9i インスタンスに接続することです。こちらのセットアップ手順に従いましたが、(最終的には) エラーなしで完了しました。ただし、sqlplus が接続できないことがわかりました。

[ ethan@gir ~ ]$ sqlplus xxx/yyy@zzz

SQL*Plus: Release 10.2.0.4.0 - Production on Fri Apr 17 10:13:08 2009

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

ちょっと待って...

ERROR:
ORA-12170: TNS:Connect timeout occurred

Enter user-name: xxx
Enter password: 
ERROR:
ORA-12162: TNS:net service name is incorrectly specified

Enter user-name:

私のtnsnames.oraファイル...

zzz =
  (DESCRIPTION = 
    (ADDRESS_LIST =
      (ADDRESS =
        (PROTOCOL = TCP)
        (HOST = dbhost)
        (PORT = 1521))
    )
  (CONNECT_DATA =
    (SERVICE_NAME = zzz)
  )
)

たぶん、設定する必要があるenv変数がありますか?


アップデート

DB ホスト マシンに問題なく ping を実行できます。

試した...

sqlplus xxx/yyy@//dbhost/zzz

わかった...

ERROR:
ORA-12170: TNS:Connect timeout occurred

tnsnames.oraSIDの代わりに使用してみました。SERVICE_NAME結果は変わらなかったようです。に戻しましたSERVICE_NAME


sqlnet.log の最後の 2 つのエントリ...

***********************************************************************
Fatal NI connect error 12170.

  VERSION INFORMATION:
    TNS for MacOS X Server: Version 10.2.0.4.0 - Production
    TCP/IP NT Protocol Adapter for MacOS X Server: Version 10.2.0.4.0 - Production
  Time: 17-APR-2009 10:33:06
  Tracing not turned on.
  Tns error struct:
    ns main err code: 12535
    TNS-12535: Message 12535 not found; No message file for product=network, facility=TNS
    ns secondary err code: 12560
    nt main err code: 505
    TNS-00505: Message 505 not found; No message file for product=network, facility=TNS
    nt secondary err code: 60
    nt OS err code: 0


***********************************************************************
Fatal NI connect error 12170.

  VERSION INFORMATION:
    TNS for MacOS X Server: Version 10.2.0.4.0 - Production
    TCP/IP NT Protocol Adapter for MacOS X Server: Version 10.2.0.4.0 - Production
  Time: 17-APR-2009 11:24:08
  Tracing not turned on.
  Tns error struct:
    ns main err code: 12535
    TNS-12535: Message 12535 not found; No message file for product=network, facility=TNS
    ns secondary err code: 12560
    nt main err code: 505
    TNS-00505: Message 505 not found; No message file for product=network, facility=TNS
    nt secondary err code: 60
    nt OS err code: 0

部分的な回答

回答ありがとうございます。彼らは役に立ちました。DNSに問題があることがわかりました。ホスト名でpingできたので、うまくいくはずだと思いました。IPアドレスも試しました。このOS Xマシンで動作するには、内部「10.1.xx」IPアドレスが必要であることが判明しました(ただし、Windowsではホスト名で問題ありません)。

この時点で、接続できます...

sqlplus xxx/yyy@//INTERNAL_IP/zzz

ただし、これらの値を tnsnames.ora に入力しても、これはまだ機能しません...

sqlplus xxx/yyy@zzz

...

ORA-12154: TNS:could not resolve the connect identifier specified

必要なものに近いサンプルの tnsnames.ora ファイルを検索し、その内容をファイルにコピーしました。パラメータを変更したところ、すべてが機能するようになりました。なぜ私のものが機能しなかったのかわかりません。

4

9 に答える 9

9

クライアントを使用しているため、代わりに構文10gを使用することをお勧めします。Easy Connect

export TWO_TASK=//dbhost/zzz
sqlplus xxx/yyy

、またはこれだけ:

sqlplus 'xxx/yyy@//dnhost/zzz'

またORACLE_HOME、正しいフォルダーへのポイントを確認してください:tnsnames.oraで検索されます$ORACLE_HOME/network/admin/tnsnames.ora

于 2009-04-17T17:40:10.757 に答える
4

角かっこは正しいようです。

SIDを使用してみてください。

以下は、tnsnames.oraファイルの例です。

IDENTIFIER =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP) (HOST = userid.myhosteddb.net)(PORT = 1521))
    )
    (CONNECT_DATA = (SID = odb))
  )

ここでSIDについて読んでください。

于 2009-04-17T17:45:57.590 に答える
2

使用できます

sqlplus user/password@servicename_host

接続できない場合は使用できます

sqlplus user/password@(DESCRIPTION=((ADDRESS=(PROTOCOL = TCP)(HOST = dbhost)(PORT = 1521))(CONNECT_DATA=(SERVICE_NAME = zzz)))

Linux を使用している場合、別の *Nix OS を使用している場合は、引用符を使用する必要があります。そうでない場合、() はシェルによって解釈されます。

例えば

sqlplus user/password@'(DESCRIPTION=((ADDRESS=(PROTOCOL = TCP)(HOST = dbhost)(PORT = 1521))(CONNECT_DATA=(SERVICE_NAME = zzz)))'
于 2010-03-25T09:41:39.003 に答える
1

作業ディレクトリに sqlnet.log ファイルが生成されている可能性があります。これはあなたを助けるかもしれませんし、あなたがその内容を投稿すれば、より多くの情報を提供するかもしれません.

あなたの例では、2 つの異なることを試みています。コマンドラインで「xxx/yyy@zzz」を使用しました。これは tnsnames.ora の「zzz」エントリを正常に検出しているように見えますが、タイムアウトは、サーバーからまったく応答がないことを示しています。dbhost に正常に ping できますか?

2 回目の試行では、ユーザー名に「xxx」と入力しました。これは、SQLPlus に慣れていない場合には意味がありますが、ご覧のとおり、データベース名の入力を求めるポイントはありません。この場合、サービス名なしで「xxx/yyy」に接続しようとしたため、2 番目のエラーが発生しました。これは、デフォルトのサービス名が設定されていないことを意味します。したがって、このエラーは入力が不完全なために発生します。(このプロンプトでサービス名を指定するには、ユーザー名に「xxx@zzz」と入力します。パスワードが変更されてもかまわない場合は、実際にはユーザー名プロンプトで接続文字列「xxx/yyy@zzz」全体を入力できます。見える。)

于 2009-04-17T18:12:02.973 に答える
1

同様の問題がありましたが、Oracle sqlplus が問題だったようです!

これらの作品のいずれかのように接続します。

   > sqlplus MyUsername/MyPassword@MyHostname:1521/MyServiceName
   > sqlplus MyUsername/MyPassword@//MyHostname:1521/MyServiceName

(ホスト名の前の // はオプションです)。ただし、パスワードをオフにするか、ユーザー/パスの両方を残すと、次のように失敗します。

    sqlplus @//MyHostname:1521/MyServiceName

    SQL*Plus: Release 11.2.0.4.0 Production on Thu Apr 2 15:59:49 2015

    Copyright (c) 1982, 2013, Oracle.  All rights reserved.

    SP2-0310: unable to open file "//MyHostname:1521/MyServiceName.sql"
    Enter user-name: MyUsername
    Enter password: MyPassword
    ERROR: 
    ORA-12162: TNS:net service name is incorrectly specified

そのため、sqlplus がユーザー名とパスワードを要求しても、プロンプトでそれらを入力すると、偽のエラー メッセージが表示されて失敗します。接続文字列の先頭にそれら (両方!) を配置した場合にのみ機能します。

愚かなオラクル!!!

于 2015-04-02T23:08:56.397 に答える
1

oraenvスクリプトを使用して環境をセットアップしましたか?

試しましたtnspingか?

$ tnsping $ORACLE_SID

おそらく、接続するマシンの出力と接続できないマシンの出力を比較すると役立つでしょう。少なくとも、DBA に連絡する直前に私が行っていることです。

oerr次のコマンドを使用すると、エラーの詳細をもう少し詳しく知ることができます。

$ oerr ora 12170
12170, 00000, "TNS:Connect timeout occurred"
// *Cause:  The server shut down because connection establishment or
// communication with a client failed to complete within the allotted time
// interval. This may be a result of network or system delays; or this may
// indicate that a malicious client is trying to cause a Denial of Service
// attack on the server.
// *Action: If the error occurred because of a slow network or system,
// reconfigure one or all of the parameters SQLNET.INBOUND_CONNECT_TIMEOUT,
// SQLNET.SEND_TIMEOUT, SQLNET.RECV_TIMEOUT in sqlnet.ora to larger values.
// If a malicious client is suspected, use the address in sqlnet.log to
// identify the source and restrict access. Note that logged addresses may
// not be reliable as they can be forged (e.g. in TCP/IP).
于 2009-04-17T22:36:54.193 に答える
1

telnet を使用して開いているポートにアクセスし、ファイアウォールによってブロックされていないことを確認しましたか? 試してみる価値があるかもしれません telnet port-num host

于 2009-04-17T18:39:28.040 に答える
0

ステップバイステップのインストールとインストール後の方法については、このリンクをたどってください。注意してください

そしてSQLプラスに接続するには:

  1. ユーザー名は、上記のリンクの指示に従ってシステムになります
  2. パスワードは tiger ではなく、インストールの最初に設定したものであってはなりません

PS: ブラウザが Google Chrome の場合、インストールのテスト中に Oracle Enterprise Manager に接続する際に問題 (ブラウザの非互換性) が見つかっても慌てないでください。戻るページの矢印と次のページの矢印を押して条件に同意し、[OK] をクリックします。

私はこの問題を私のマシンで 1 日で解決しました。

ソース: 私はコンピューター サイエンス エンジニアであり、主に Java でコードを記述しています。

于 2013-09-10T09:34:20.647 に答える
0

同じエラー (ORA-12162: TNS:net サービス名が正しく指定されていません) が発生しましたが、別の理由 (Windows 7 Enterprise 64 ビット) でした。これが誰かに役立つことを願っています:

私の職場の IT は 32 ビットと 64 ビットの Oracle をインストールし、私の PATH 変数に基づいて、シェルは 32 ビット パスと比較して SQLPLUS.exe の 64 ビット パスを調べました。

異なるパスは異なる TNSNAMES.ora ファイルを使用し、64 ビット パスに接続文字列がありませんでした。

Oracle\product\11.1.0\client_1_64bit\network\admin\TNSNAMES.ora

32ビットのTNSNAMES.oraに接続文字列しかありませんでした:Oracle\product\11.1.0\client_1_32bit\network\admin\TNSNAMES.ora

また、複数の ORACLE インストールがあったため、両方のインストールで異なるホーム ディレクトリを使用できるように、ORACLE_HOME 環境変数を削除する必要がありました。

于 2013-10-21T20:39:30.237 に答える