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

相关推荐
小白勇闯网安圈5 小时前
Django 响应对象、文件上传与类视图
数据库·django·sqlite
努力的小雨6 小时前
同一份 SQL 跑多套环境:Ksql 变量怎么用才安全
数据库
科技绘图6 小时前
快鲸GEO vs 传统AI搜索优化:全链路自动化与高效内容生产在转化闭环上的对比
数据库·人工智能·自动化
ltl7 小时前
数据库作为 LLM 记忆体:语义缓存、RAG 与一致性
数据库
ltl7 小时前
WAL 与崩溃恢复:ARIES 协议怎么跑通
数据库
ltl7 小时前
TEE 数据库:EnclaveDB、Oblivious 原语与机密 SQL
数据库
麻瓜code8 小时前
【Mysql】重新学一遍 SQL 执行顺序
数据库·sql
这个DBA有点耶9 小时前
数据库一体机架构演进:从硬件堆叠到软硬深度耦合
服务器·网络·数据库·硬件架构·运维开发·database·数据库架构
安_10 小时前
RAG的向量数据库:为LLM提供语义搜索能力
数据库
喜欢的名字被抢了10 小时前
程序出问题怎么查,以及如何让它不掉线
java·运维·数据库