我在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
嗯,这是正式的。我是个白痴,这就是造成错误的原因。我输入了错误的密码,我猜我复制粘贴也是错误的。
答案 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往往是网络层传递到更高层的一般错误,有用的错误是跟踪中的一层。