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.
相关产品推荐
相关产品推荐

