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

按下回车后,它会在版本和版权信息上挂起大约 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

嗯,这是官方的。我是个白痴,这就是导致错误的原因。我输入了错误的密码,我猜我复制粘贴的内容也是错误的。

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 来验证客户端安装,为什么它不包含在即时客户端中???” 问了谷歌,结果发现 TNSPING 几乎没用。唯一认为它检查的是主机可访问并且 tnslistener 正在指定端口上运行(您可以使用 telnet 轻松检查)。在 Oracle 论坛上向“BillyVerreynne”发送 H/T:https ://forums.oracle.com/message/10561771

耶,我今天学到了一些东西!:-) 关于这一点,我个人将切换到 SQLPlus 来深入检查 TNS 规范,并建议阅读本文的每个人都这样做。正如 Nathan 已经在上面发布的那样,可以在 $ORACLE_BASE/diag/tnslsnr/test/listener/alert/log.xml 中查看 SQLPlus 连接尝试的问题。

于 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 回答