sqlplus が接続できないのはなぜですか?
質問
私の目標は、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)
)
)
おそらく環境変数を設定する必要があるのでしょうか?
アップデート
DB ホスト マシンに問題なく ping できます。
試してみました...
sqlplus xxx/yyy@//dbhost/zzz
わかった...
ERROR:
ORA-12170: TNS:Connect timeout occurred
使ってみた SID
の代わりに SERVICE_NAME
tnsnames.ora 内。結果は変わらないようでした。に戻りました 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も試してみました。住所。が必要であることがわかりました 内部 「10.1.x.x」この OS X マシンで動作するためのアドレス (ただし、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)))'
おそらく、作業ディレクトリに sqlnet.log ファイルが生成されています。これは役立つ場合があります。また、その内容を投稿すると、さらに詳しい情報が得られる場合があります。
あなたの例では、2 つの異なることを試みています。コマンドラインでは「xxx/yyy@zzz」を使用しました。これは tnsnames.ora 内の「zzz」エントリを正常に見つけているように見えますが、タイムアウトはサーバーから応答をまったく受け取っていないことを示しています。dbhost に正常に ping できますか?
2 回目の試行では、ユーザー名として「xxx」を入力しました。SQLPlus に慣れていない場合はこれは意味がありますが、ご覧のとおり、データベース名の入力を求めるプロンプトは表示されません。したがって、この場合はサービス名なしで「xxx/yyy」に接続しようとしていたため、2 番目のエラーが発生しました。これは、デフォルトのサービス名が設定されていないことを意味します。したがって、このエラーは入力が不完全であることが原因です。(このプロンプトでサービス名を指定するには、ユーザー名に「xxx@zzz」と入力します。パスワードが表示されても構わない場合は、実際にはユーザー名プロンプトで接続文字列「xxx/yyy@zzz」全体を入力できます。)
ファイアウォールによってブロックされていないことを確認するために、Telnet を使用して開いているポートにアクセスしてみましたか?Telnet port-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).
私も同様の問題を抱えていましたが、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 がユーザー名とパスワードを要求しても、プロンプトで入力すると、愚かにも偽のエラー メッセージが表示されて失敗します。これは、接続文字列の先頭にそれら (両方!) を配置した場合にのみ機能します。
バカオラクル!!!
フォローする これ 段階的なインストールとインストール後の方法に関するリンク。注意してください。
SQL Plus で接続するには:
- ユーザー名は、上記のリンクに記載されている指示に従ってシステムになります
- パスワードは Tiger ではなく、インストールの最初に設定したものにする必要があります
追伸:ブラウザがGoogle Chromeの場合、インストールのテスト中にOracle Enterprise Managerの接続に問題(ブラウザの非互換性)が見つかってもパニックにならないでください。戻るページの矢印と次のページの矢印を押して規約に同意し、「OK」をクリックします。
私のマシンではこの問題を 1 日で解決しました。しかし、あなたにとっては数馬の問題でしょう。
情報源:私はコンピューター サイエンス エンジニアで、主に Java でコードを作成しています
同じエラーが発生しました (ORA-12162:TNS:ネット サービス名が間違って指定されています)、理由は異なります (Windows 7 Enterprise 64 ビットの場合)。これが誰かの役に立てば幸いです:
それ。私の職場では 32 ビットと 64 ビットの Oracle がインストールされており、PATH 変数に基づいて、シェルは SQLPLUS.exe の 64 ビット パスを 32 ビット パスと比較して調べました。
異なるパスでは異なる TNSNAMES.ora ファイルが使用されており、64 ビット パスに接続文字列がありませんでした。
Oracle\product\11.1.0\client_1_64bit etwork\admin NSNAMES.ora
32 ビット TNSNAMES.ora には接続文字列しかありませんでした。Oracle\product\11.1.0\client_1_32bit etwork\admin NSNAMES.ora
また、複数の ORACLE インストールがあったため、両方のインストールで異なるホーム ディレクトリを使用できるように、ORACLE_HOME 環境変数を削除する必要がありました。