web-dev-qa-db-ja.com

sqlplusが接続しないのはなぜですか?

私の目標は、OSXマシンからOracle9iインスタンスに接続することです。私はセットアップ手順に従いました ここ そしてエラーなしで(最終的に)それらを通り抜けました。ただし、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.

Looooong待って...

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)
  )
)

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


更新

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

試しました...

sqlplus xxx/yyy@//dbhost/zzz

わかった...

ERROR:
ORA-12170: TNS:Connect timeout occurred

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


Sqlnet.logの最後のカップルエントリ...

***********************************************************************
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を実行できたので、問題なく動作するはずだと思いました。 I.P.も試してみました住所。 internal "10.1.x.x" I.P。が必要であることが判明しましたこのOSXマシンで動作するためのアドレス(ただし、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ファイルを検索し、その内容をファイルにコピーしました。パラメータを変更し、すべてが機能するようになりました。なぜ私のものが機能していなかったのかわかりません。

7
Ethan

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で検索されます。

8
Quassnoi

ブラケットは正しいようです。

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

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

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

SIDについてはこちらをご覧ください。

4
aintnoprophet

あなたが使用することができます

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)))'
2
Chars

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

1
trent

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).
1
Jon Ericson

同様の問題が発生しましたが、Oraclesqlplusが問題だったようです。

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

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

愚かなオラクル!!!

1
Alan Thompson

おそらく、作業ディレクトリにsqlnet.logファイルが生成されています。これはあなたを助けるかもしれません、あるいはあなたがその内容を投稿するならば、それは私たちにもっと多くの情報を与えるかもしれません。

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

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

1
Dave Costa

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

それ。私の仕事では、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環境変数を削除する必要がありました。

0
Mr_Moneybags

フォロー [〜#〜] this [〜#〜] ステップバイステップのインストールとPOSTインストール方法..注意してください。

そして、SQLPlusに接続するには:

  1. ユーザー名は、上記のリンクに記載されている指示に従ってシステムになります
  2. パスワードはtigerではなく、インストールの開始時に設定したものである必要があります

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

私は1日で私のマシンでこの問題を解決しました。しかし、それはあなたにとって2、3の問題になるでしょう。

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

0
SAGAR MANOCHA