0

Fedora 19 に SQL*Plus 12.1 をインストールして、Oracle 11g データベースに接続しようとしています。ここから Instantclient RPM パッケージ (basic、devel、sqlplus) をインストールしました。SQL*Plus を使用して他の Oracle データベースに正常に接続できるので、ソフトウェアが正常にインストールされていることがわかります。ただし、この特定のデータベースに接続しようとすると、次のエラーが発生します。

ERROR:
ORA-01017: invalid username/password; logon denied

これが私の tnsnames.ora ファイルです(ホストとポートは難読化されています):

PSPRODDB =
 (DESCRIPTION =
   (ADDRESS_LIST =
     (ADDRESS = (PROTOCOL = TCP)(HOST = #HOST-ADDR)(PORT = #PORT-NUM))
   )
 (CONNECT_DATA =
   (SERVICE_NAME = PSPRODDB)
 )
)

私の TNS_ADMIN 環境変数は、私の tnsnames.ora ファイルのパスに設定されています。

接続するために実行しているコマンド:

sqlplus username/password@PSPRODDB

Enterキーを押した後、ORA-01017エラーが発生する前に、バージョンと著作権情報で約2〜3秒間ハングします。

データベースに正常に接続する別のアプリケーションからコピーして貼り付けたので、ユーザー名とパスワードを正しく入力したことはわかっています。

編集

log.xml ファイル ( 内C:\oracle\product\11.2.0\diag\tnslsnr\test\listener\alert\log.xml) を調べたところ、正しいリスナーと話していることを示すエントリがいくつかあることがわかりました。ログ エントリの例を次に示しますが、機密情報の可能性があるため難読化されています。

<msg time='2013-11-25T09:54:08.530-07:00' org_id='oracle' comp_id='tnslsnr'
 type='UNKNOWN' level='16' host_id='PSTEST100-50'
 host_addr='*my address*'>
 <txt>25-NOV-2013 09:54:08 * (CONNECT_DATA=(SERVICE_NAME=PSPRODDB)(CID=(PROGRAM=sqlplus)(HOST=*localhost*)(USER=njones))) * (ADDRESS=(PROTOCOL=tcp)(HOST=*addr*)(PORT=38906)) * establish * PSPRODDB * 0
 </txt>
</msg>

また、 tnsnames.ora ファイルの *SERVICE_NAME* 要素をSIDに変更しようとしましたが、違いはありませんでした。

パスワードを引用符で囲んでも、問題は解決しませんでした。

バージョンに問題がある可能性はありますか?InstantClient と sqlplus バージョン 12.1 を使用していますが、データベースはバージョン 11.2 です。

編集 2

さて、公式です。私はばかです、そしてそれがエラーの原因です。間違ったパスワードを入力していました。コピーして貼り付けていたものも間違っていたと思います。

4

3 に答える 3

2

ORA-01017 はかなり明確です。これは、ユーザー名またはパスワードが間違っているか、接続していると思われるデータベースに実際には接続していない可能性があることを意味します。

これ以上言うことはありません。接続記述子を再確認し、ユーザー名またはパスワードを間違って入力していないことを確認してください。

于 2013-11-24T04:26:51.310 に答える
1

この問題を引き起こす可能性が高い順に、アイデアを組み合わせてください。

1) パスワードがアルファベット以外の文字で始まる場合は、パスワードを引用符で囲みますuser/"password"@service (注: TOAD や SQLDeveloper などの GUI アプリでは引用符は必要ありません)。

2) 実行する

> tnsping service

出力が、使用していると思われる tnsnames.ora エントリと一致することを確認します

3) サーバー上で実行 (または実行を dba に依頼)

> lsnrctl status

tnsnames.ora にリストされているサービスが適切なデータベースに向けられていることを確認します。

編集: Nathan の質問を見て、「うーん、奇妙なことに、私はクライアントのインストールを検証するために常に tnsping を使用しています。なぜそれが InstantClients に含まれないのでしょうか?」と考えました。Google に尋ねてみると、驚いたことに、TNSPING はほとんど役に立たないことがわかりました。チェックする唯一のことは、ホストが到達可能であり、指定されたポートで tnslistener が実行されていることです (これは telnet で簡単に確認できます)。Oracle フォーラムの「BillyVerreynne」への H/T: https://forums.oracle.com/message/10561771

やあ、今日は何かを学びました!:-) その点で、私は個人的に SQLPlus に切り替えて、TNS 仕様の詳細なチェックを行います。これを読んでいるすべての人に同じことをお勧めします。Nathan が既に投稿したように、SQLPlus 接続の試行に関する問題は、$ORACLE_BASE/diag/tnslsnr/test/listener/alert/log.xml で確認できます。

于 2013-11-24T15:11:47.597 に答える
-1

sqlnet.ora セット内

TRACE_LEVEL_CLIENT = support

これらの機能の説明については、ドキュメントを参照してください。クライアント接続に関する情報を含むファイルが $ORACLE_HOME/network/trace に取得されます。私の推測では、クライアント マシンから TNS リスナーとの通信などで問題が発生していると思われます。

残念ながら、問題がサーバーに近すぎる場合、クライアント トレースはあまり役に立ちません。これは製品データベースであるため、診断が少し難しい場合があります。Oracle のサポート契約を結んでいる場合は、このような問題を解決するのが得意です。

これは完全な答えではないことは承知していますが、そのトレースから、他の興味深いエラーを見つけることができると思います。ORA-01017 は、ネットワーク層が上位層に渡される一般的なエラーである傾向があり、有用なエラーはトレースの下位層です。

于 2013-11-23T14:20:21.760 に答える