【案例38】Can’t get connection from database 排查详细记录

问题现象

客户要搭建灰度环境,启动后,登录超级管理员报连接不上数据库的错误。

Can't get connection from database(XXX)

问题分析

1、一般碰到这个问题,初步就开始怀疑是sysconfig数据源不通导致的。

发现数据源是通的。

2、在sysconfig中看到选择的是11G,但是客户数据库版本用的是12C。但驱动都是同一个驱动。为了保险起见,更改了数据库类型为12C,再次重新启动。

3、发现sysconfig中配置了无效数据源,为了排错,直接删掉不通的数据源。

4、重新启动服务,发现依旧有明显的报错,can not get connection.please check the DBSet.

又进到sysconfig中直接测试是通的。

5、怀疑数据库本身有问题。用plsql直接连取数据库,dos窗口直连都无任何异常,数据库alter日志和监听日志中也无报错。(虽然这个没有走驱动,但说明数据库本身暂无异常。)

6、查询了process参数发现配置为150,很低,扩展到2000,重启了数据库服务,问题依旧未解决。

7、于是怀疑代码本身有问题。用sysconfig直接连生产环境的数据库,但这次测试报不通。检查驱动路径driver下发现有冗余代码存在。删除掉冗余代码后,再次测试,测试通过。

8、连新数据源再次重启发现相关代码不报连接数据库的错误。系统正常登录。说明发生问题肯定是在数据库层面。

9、数据库是本地部署和应用在同一台服务器,首先排除网络不通的环境影响。

10、使用nchome\bin>checkDBconnect.bat 检查数据库连接脚本发现报相ORA-28040的错误。

但是发现sqlnet.ora文件已经配置了客户端兼容参数,兼容到9已经很老了。于是暂时认为checkDBconnect.bat脚本检测的有问题所致,忽略了此问题。

注意:坑在这!!CheckDB报错,但sysconfig测试正常。

11、检查监听日志大小为20M,小于4G,非监听日志过大导致。

12、怀疑是不是监听程序本身异常,重新配置了监听程序。问题依旧。

13、检查数据库监听文件listener.ora、tnsnames.ora发现监听配置的为主机名。怀疑是不是解析不到相关主机造成的。

14、 ping相关主机名,发现返回值非服务器IP,修改host文件后问题依旧。

15、怀疑驱动程序有问题,把相关驱动替换到nchome中,发现测试不通过,经过咨询得知12.2版本的驱动基于的jdk编译版本过高用不了。要了12.1版本的驱动包更换drivers、lib问题依旧未解决。

16、查询了数据库本身发现,初始创建的表空间非NNC_DATA_01,重建表空间后导入数据。问题依旧未解决。

17、这类问题,之前很多碰到的是dns解析不通过,于是检查了IPV4的DNS解析配置地址发现里面配置了DNS解析地址为公网地址,但是服务器未开通公网。

直接ping相关地址发现不通。清空DNS服务器地址后,再次尝试,发现问题依旧未解决。

17、所有能想到的办法都已经尝试,但启动后问题依旧。于是又怀疑到了第9步骤。

到底是CheckDB准还是测试数据源准???按照ORA-28040问题处理。

建议把兼容性从9变成8,再次使用CheckDB发现不报协议的错误了。只是报了游标问题。

18、原游标设置为300,扩展游标到2000后,再次尝试CheckDB发现无任何报错出现。

再次尝试重启,发现问题解决。

解决方案

修改\app\product\12.2.0\dbhome_1\network\admin\sqlmet.ora修改为如下参数

bash 复制代码
SQLNET.ALLOWED_LOGON_VERSION_SERVER=8
SQLNET.ALLOWED_LOGON_VERSION_CLIENT=8

重启监听后问题解决。

后续总结

与顾问电话沟通发现,此数据库是客户从8i一直升级到12C的,非直接安装的12C版本。所以sqlnet.ora虽然配置了,但依旧不兼容,应该配置为8。

反思

后续遇到数据库连不通的问题,建议使用CheckDBConnection脚本和sysconfig双层校验为准,并且与顾问先行沟通数据库安装状态。

相关推荐
共享家95279 小时前
QT-界面优化(下)
开发语言·数据库·qt
maray9 小时前
Chroma 的设计哲学
数据库·人工智能
e***09610 小时前
SQL 中UPDATE 和 DELETE 语句的深入理解与应用
数据库·sql
程序员小白条11 小时前
你面试时吹过最大的牛是什么?
java·开发语言·数据库·阿里云·面试·职场和发展·毕设
老华带你飞11 小时前
社区养老保障|智慧养老|基于springboot+小程序社区养老保障系统设计与实现(源码+数据库+文档)
java·数据库·vue.js·spring boot·小程序·毕设·社区养老保障
Coding_Doggy11 小时前
链盾shieldchiain | 团队功能、邀请成员、权限修改、移除成员、SpringSecurity、RBAC权限控制
java·开发语言·数据库
凯子坚持 c12 小时前
不用复杂配置!本地 Chat2DB 秒变远程可用,跨网操作数据库就这么简单
数据库
q***656912 小时前
Windows环境下安装Redis并设置Redis开机自启
数据库·windows·redis
q***965812 小时前
Windows版Redis本地后台启动
数据库·windows·redis