【案例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双层校验为准,并且与顾问先行沟通数据库安装状态。

相关推荐
酷炫码神10 分钟前
MySQL查询
数据库·mysql
大明湖的狗凯.11 分钟前
MySQL 中的排序:索引排序与文件排序
数据库·mysql·oracle
XMYX-019 分钟前
深入解析 Django 中数据删除的最佳实践:以动态管理镜像版本为例
数据库·django·sqlite
Lostgreen23 分钟前
SQL on Hadoop
数据库·hadoop·笔记·分布式·sql·学习
Karoku06644 分钟前
【docker集群应用】Docker常用命令
运维·数据库·docker·容器
小小宇宙中微子1 小时前
MySQL INSERT CRTATE DELETE DORP UPDATE WHERE 的用法
数据库·mysql
swiftlzk1 小时前
redmi 12c 刷机
android·数据库
人才程序员2 小时前
详解Qt 中使用虚拟键盘(软键盘qtvirtualkeyboard)
开发语言·数据库·c++·qt·计算机外设·界面·c语音
打你个大西瓜️3 小时前
单片机知识总结(完整)
数据库·单片机·mongodb
Vae_Mars3 小时前
QT-installEventFilter
数据库·qt