oracle数据库同样的查询语句有时候能查出数据,有时候查不出,需要重新连接。导致前端页面点查询也是这个情况。

问题遇到的现象和发生背景

前端页面发现经常查不出数据,用pl/sql连数据库发现用语句查也是一样的情况,对于只是一个运维的我,人都要裂开了,求帮忙看看是哪里出了问题,
可以看下我发在社区的这个帖子,里面有视频。
这个是社区链接https://bbs.csdn.net/topics/603877676

select count() from detect_speed_data t
where t.dcollectiondate between
to_date('2021-12-10 00;00;00', 'yyyy-mm-dd HH24;mi;ss') and
to_date('2021-12-10 23;59;59', 'yyyy-mm-dd HH24;mi;ss');
//
select t.rowid,t.
from detect_speed_data t
where t.dcollectiondate between
to_date('2021-12-10 00;00;00', 'yyyy-mm-dd HH24;mi;ss') and
to_date('2021-12-10 23;59;59', 'yyyy-mm-dd HH24;mi;ss');
//
select count() from detect_speed_data t
where t.dcollectiondate between
to_date('2021-12-22 00;00;00', 'yyyy-mm-dd HH24;mi;ss') and
to_date('2021-12-22 23;59;59', 'yyyy-mm-dd HH24;mi;ss');
//
select t.rowid,t.
from detect_speed_data t
where t.dcollectiondate between
to_date('2021-12-22 00;00;00', 'yyyy-mm-dd HH24;mi;ss') and
to_date('2021-12-22 23;59;59', 'yyyy-mm-dd HH24;mi;ss');
//
select count(*) from(select * from detect_speed_data where dcollectiondate > sysdate - 60/1440)

img

img

img

img

这个问题有意思,
首先应该可以排除查的是视图,视图里可以写随机函数让你有时查不到,应该没人会做这么无聊的事;
然后开始正经分析:
一、虽然视频中是使用同一个已保存的连接,但是,这并不能肯定是连接的同一个数据库实例,你可以通过下面这几种方式验证一下

  1. 在查不到数据的数据库创建一张表,然后到查得到的数据库中看这张表是否存在
  2. 在两个数据库中分别查询 "select * from v$instance;"看看实例名称、机器名称等是否一致
  3. 在两个数据库中查询IP,查询方式参考此篇文章https://www.modb.pro/db/179850

二、如果无论怎么检查的确是同一个数据库,检查2个sql的执行计划是否有区别,尝试在查不到的那个数据库上修改查询条件缩小范围,看是不是的确没有数据,因为可能存在执行计划跑错了导致数据查不到的情况,

三、最后一种可能性,就得看下数据库是不是有损坏了