You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQLPlus 11.2.0.1连接Oracle 12c报ORA-01017错误求助

解决ORA-01017错误:11g SQLPlus客户端连接12c Oracle服务器

针对你遇到的11.2.0.1 SQLPlus客户端连接12.2.0.1 Oracle服务器时出现的ORA-01017错误,虽然密码版本已确认兼容、12c客户端可正常连接,以下是几个针对性的排查和解决步骤:

1. 调整服务器端SQLNET.ORA的兼容参数

Oracle 12c默认可能将SQLNET.ALLOWED_LOGON_VERSION_SERVER设置为12,这会限制仅12c及以上版本的客户端使用新版身份验证协议连接,即使密码版本支持11g。你需要修改服务器端的这个参数:

  • 登录服务器,找到$ORACLE_HOME/network/admin/sqlnet.ora文件(不存在则创建)
  • 添加或修改该行:SQLNET.ALLOWED_LOGON_VERSION_SERVER = 11
  • 重启监听服务(执行lsnrctl stop后再lsnrctl start)和Oracle实例,重新尝试连接

2. 配置客户端SQLNET.ORA的兼容参数

在Windows客户端的ORACLE_HOME\network\admin目录下,确保sqlnet.ora文件中设置了兼容的客户端版本参数:

SQLNET.ALLOWED_LOGON_VERSION_CLIENT = 11

这会强制客户端使用11g兼容的身份验证协议,避免与服务器端的协议不匹配。

3. 测试无TNSNames的直接连接

有时候TNSNames的配置可能存在隐性解析问题(12c与11g客户端的解析逻辑略有差异),尝试使用EZConnect字符串直接连接:

sqlplus user/pass@//10.162.6.52:1521/orcltok

如果这个连接成功,说明问题出在TNSNames配置上,可以检查客户端tnsnames.ora是否有格式错误(比如多余空格、括号不匹配),或者确认TNS_ADMIN环境变量指向了正确的配置目录。

4. 排查字符集不匹配导致的密码转码问题

如果密码包含特殊字符(如中文、非ASCII符号),11g客户端的字符集可能与服务器端不一致,导致密码传递时转码错误:

  • 检查服务器端字符集:执行SELECT value FROM nls_database_parameters WHERE parameter = 'NLS_CHARACTERSET';
  • 检查Windows客户端字符集:查看注册表HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraClient11g_home1\NLS_LANG的值,确保与服务器端一致(比如服务器是AL32UTF8,客户端也设置为AL32UTF8)
  • 修改后重启SQLPlus再尝试连接

5. 再次确认用户的PASSWORD_VERSIONS兼容性

虽然你提到已通过dba_users确认,但可以再次执行以下语句验证:

SELECT username, password_versions FROM dba_users WHERE username = '你的用户名';

确保结果中包含11G(比如11G 12C),如果只有12C,需要重置密码以生成11g兼容的哈希:

ALTER USER 你的用户名 IDENTIFIED BY 你的密码;

内容的提问来源于stack exchange,提问作者O.W.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:48:15