sqlplus 12.1中的ORA-01017错误,可以在其他应用程序中使用相同的凭据连接

时间:2013-11-20 17:17:15

标签: sql oracle oracle11g sqlplus ora-01017

我在Fedora 19上安装了SQL * Plus 12.1,试图连接到Oracle 11g数据库。我从here安装了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键后,它会在版本和版权信息上挂起约2-3秒,然后再给我ORA-01017错误。

我知道我输入的用户名和密码正确,因为我从另一个成功连接到数据库的应用程序中复制并粘贴了它。

修改

我查看了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

嗯,这是正式的。我是个白痴,这就是造成错误的原因。我输入了错误的密码,我猜我复制粘贴也是错误的。

3 个答案:

答案 0 :(得分:2)

ORA-01017非常清楚。这意味着您输入的用户名或密码错误,或者您可能真的连接到您认为正在连接的数据库。

真的没什么好说的了。仔细检查您的连接描述符,并确保您没有输错用户名或密码。

答案 1 :(得分:1)

按照可能导致此问题的方式结合想法:

1)如果您的密码以非字母字符开头,则带引号的密码为user/"password"@service(注意,GUI应用程序,例如TOAD和SQLDeveloper不需要引号)。

2)运行

> tnsping service

并确认您的输出与您认为正在使用的tnsnames.ora条目匹配

3)在服务器上,运行(或要求dba运行)

> lsnrctl status

确认您的tnsnames.ora中列出的服务被定向到正确的数据库。

编辑:看到内森的问题,想,“嗯 - 奇怪,我一直用tnsping验证客户端安装,为什么它不会包含在即时客户端?”问谷歌,而且看来TNSPING几乎没用。唯一认为它检查的是主机是否可达,并且tnslistener正在指定的端口上运行(您可以使用telnet轻松检查)。在Oracle论坛上向“BillyVerreynne”发送电子邮件:https://forums.oracle.com/message/10561771

是的,我今天学到了一些东西! :-)就此而言,我将亲自切换到SQLPlus深入检查TNS规范,并建议每个阅读此内容的人都这样做。正如Nathan上面发布的那样,可以在$ ORACLE_BASE / diag / tnslsnr / test / listener / alert / log.xml中查看SQLPlus连接尝试的问题。

答案 2 :(得分:-1)

在你的sqlnet.ora集中

TRACE_LEVEL_CLIENT = support

有关这些内容的说明,请参阅the docs。您将获得$ ORACLE_HOME / network / trace中包含客户端连接信息的文件。 我的猜测是你在客户端机器上与TNS监听器交谈时遇到了麻烦。

不幸的是,如果问题太靠近服务器,客户端跟踪可能没有那么多帮助。由于这是一个prod数据库,诊断可能有点棘手。如果你有Oracle支持合同,他们真的很擅长解决这类问题。

我意识到这不是一个完整的答案,但我怀疑从那个痕迹你会发现其他更有趣的错误。 ORA-01017往往是网络层传递到更高层的一般错误,有用的错误是跟踪中的一层。