私の目標は、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ファイルを検索し、その内容をファイルにコピーしました。パラメータを変更し、すべてが機能するようになりました。なぜ私のものが機能していなかったのかわかりません。
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
で検索されます。
ブラケットは正しいようです。
SIDを使用してみてください。
以下は、tnsnames.oraファイルの例です。
IDENTIFIER =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP) (Host = userid.myhosteddb.net)(PORT = 1521))
)
(CONNECT_DATA = (SID = odb))
)
あなたが使用することができます
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)))'
ファイアウォールがあなたをブロックしていないことを確認するために、telnetを使用して開いているポートにアクセスしようとしましたか?試してみる価値があるかもしれませんtelnetport-num Host
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).
同様の問題が発生しましたが、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がユーザー名/パスワードの入力を求めても、プロンプトで入力すると、偽のエラーメッセージが表示されて失敗します。接続文字列の先頭に(両方!)配置した場合にのみ機能します。
愚かなオラクル!!!
おそらく、作業ディレクトリにsqlnet.logファイルが生成されています。これはあなたを助けるかもしれません、あるいはあなたがその内容を投稿するならば、それは私たちにもっと多くの情報を与えるかもしれません。
あなたの例では、2つの異なることを試みています。コマンドラインで「xxx/yyy @zzz」を使用しました。これはtnsnames.oraの「zzz」エントリを正常に検出しているように見えますが、タイムアウトは、サーバーからまったく応答がないことを示しています。 dbhostに正常にpingできますか?
2回目の試行では、ユーザー名に「xxx」と入力しました。これは、SQLPlusに慣れていない場合は理にかなっていますが、ご覧のとおり、データベース名の入力を求められる場所はありません。したがって、この場合、サービス名なしで「xxx/yyy」に接続しようとしていたため、2番目のエラーが発生しました。これは、デフォルトのサービス名が設定されていないことを意味します。したがって、このエラーは不完全な入力に起因します。 (このプロンプトでサービス名を指定するには、ユーザー名に「xxx @ zzz」を入力します。パスワードが気にならない場合は、ユーザー名プロンプトに接続文字列「xxx/yyy @zzz」全体を実際に入力できます。表示されます。)
同じエラー(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環境変数を削除する必要がありました。
フォロー [〜#〜] this [〜#〜] ステップバイステップのインストールとPOSTインストール方法..注意してください。
そして、SQLPlusに接続するには:
追伸:ブラウザがGoogle Chromeの場合、インストールのテスト中にOracle Enterprise Managerの接続に問題(ブラウザの非互換性)が見つかっても、慌てないでください。戻るページの矢印と次のページの矢印を押して条件に同意し、[OK]をクリックします。
私は1日で私のマシンでこの問題を解決しました。しかし、それはあなたにとって2、3の問題になるでしょう。
ソース:私はコンピューターサイエンスエンジニアで、主にJavaでコードを記述しています