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

相关推荐
零炻大礼包30 分钟前
【SQL server】数据库远程连接配置
数据库
zmgst39 分钟前
canal1.1.7使用canal-adapter进行mysql同步数据
java·数据库·mysql
随心............40 分钟前
python操作MySQL以及SQL综合案例
数据库·mysql
€☞扫地僧☜€41 分钟前
docker 拉取MySQL8.0镜像以及安装
运维·数据库·docker·容器
CopyDragon1 小时前
设置域名跨越访问
数据库·sqlite
xjjeffery1 小时前
MySQL 基础
数据库·mysql
写bug的小屁孩1 小时前
前后端交互接口(三)
运维·服务器·数据库·windows·用户界面·qt6.3
恒辉信达1 小时前
hhdb数据库介绍(8-4)
服务器·数据库·mysql
齐 飞2 小时前
MongoDB笔记01-概念与安装
前端·数据库·笔记·后端·mongodb
云空2 小时前
《Python 与 SQLite:强大的数据库组合》
数据库·python·sqlite