问题一:
用户在windows电脑使用pl/sql developer客户端使用tns方式连接数据库时,出现ORA-12170 TNS连接超时报错
使用ezconnect方式连接可以成功
问题一分析:
首先,查看pl/sql developer软件的Oracle客户端配置configure-->preferences,确认客户端目录的位置c:\instantclient_11_2\
查看客户端安装目录network/admin下面的tnsnames.ora,sqlnet.ora配置,配置了orcl连接串,经检查ip地址、端口服务名都是正确的,地址解析顺序NAMES.DIRECTORY_PATH也是正确的,优先TNSANMES路径
新增一个测试的连接串test,奇怪的事发生了,通过这个连接串test可以连接成功,怀疑是不是orcl连接串字符有乱码情况,重写orcl再尝试连接还是出现报错ORA-12170 TNS连接超时报错
检查了一遍配置都没问题之后,只能启动客户端跟踪方法进行下一步的分析,在Oracle客户端的sqlnet.ora配置了跟踪参数开启客户端跟踪
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
Trace_level_client=16
Trace_directory_client=C:\instantclient_11_2\network\admin
Trace_unique_client=on
Trace_timestamp_client=on
Diag_adr_enabled=off
tnsping.trace_directory=C:\instantclient_11_2\network\admin
tnsping.trace_level=admin
查看客户端生成的跟踪文件cli_xxx,发现了可疑的地方,在进行tns解析时,pl/sql developer工具会先访问本地的安装目录路径下的tnsnams.ora文件 local name file is C:\PLSQL Developer\tnsnames.ora文件,再去访问Oracle客户端所在的C:\instantclient_11_2\network\admin\tnsnames.ora文件路径
打开C:\PLSQL Developer\tnsnames.ora文件,发现里面也有一个orcl连接串,而这个连接串的IP地址配为127.0.0.1,真相大白,难怪使用orcl就会出现连接超时,pl/sql developer工具会先访问本地的安装目录路径下的tnsnams.ora文件,再去访问Oracle客户端所在的tnsnames.ora文件,所以每次orcl解析到的IP地址都是127.0.0.1,而这个地址并没有监听1521端口,那可不就会出现tns连接超时的问题
问题一解决:
将C:\PLSQL Developer\tnsnames.ora文件重命名挪走,以Oracle客户端所在的tnsnames.ora文件为准即可
问题二:
在解决完客户端连接超时报错问题,交给用户使用之后,用户又反馈使用客户端连接数据库,大量用户登录提示密码错误ORA-01017: invalid username/password; logon denied
问题二分析:
看到当前数据库版本为Oracle19c,马上想到的就是用户的密码版本是不是有问题,查看当前用户的密码版本为11g,12c,也就是说用户的密码版本只包含11g和12c的密码算法,客户端使用其他的密码版本10G会由于算法不一致导致出现密码不一致的问题
可以看到当前连接到数据库服务器上的最小客户端版本为8(ALLOWED_LOGON_VERSION_CLIENT),数据库服务器上的最小服务端版本为8(ALLOWED_LOGON_VERSION_SERVER),如果在当前配置下,用户的密码版本生成应该是有10G版本的
查看sqlnet.ora修改时间2023/11/29 17:49晚于用户的创建时间2023-11-29 12:00,应该是在没有配ALLOWED_LOGON_VERSION_SERVER之前就创建了用户,最小服务端版本默认为12导致创建的密码版本只有11g以及12c
问题二解决:
重新对应用用户的密码进行重置,产生包括密码版本10G,11G,12C的用户密码