chengzhihua

背景:程序正常运行中,突然技术支持人员反映数据库数据好久没有增加,于是乎各种排查问题,但是一直没有找到原因,由于代码比较久,也不是本人所写,更气的是居然用的是oracle数据库,并且是通过java代码调用存储过程。存储过程中包含了大量的逻辑。而java服务的日志也就少的可怜,根本无法排查出具体问题,唯一可以确认的是存储过程有问题。

1.首先排查存储过程,从上到下依次看,一共二百多行的代码,花了一小时看了一遍,感觉没什么问题,于是又通过手动输入参数,通过plsql测试存储过程,也没什么问题。

2.经历了第一步,感觉整个世界都不好了,于是开始拆解存储过程逻辑,将存储过程逻辑转移到java代码中(改写了半天),打印详细日志,每一句sql都打印日志。终于在一句insert处出现了问题,返回结果 内部错误。

3.针对这张表,开始了有一个坑,

  a.  select * from tableName; 完全没有问题。

  b. select count(*) from tableName; 提示   ORACLE 报ORA-08103: 对象不再存在错误.

    wtf?什么情况??明明数据库用眼睛是可以看到这个表的,并且select *  是可以正常查询出数据的,难道是眼睛有问题?于是又开始了三次同样的sql,还是同意的结果,于是终于拿出了神器 google,google一圈发现都是说数据损坏,导致无法插入。

       c.  复制表咯。create table tableNameNew as select * from tableName;

  d. 删除原来的表 (本来想重命名的,但是重命名失败,于是直接删除)

  e.重命名新表名为旧表名。

大功告成!!!!!!!!!!!!oracle线上使用检查会出现崩溃还有用户被锁定的情况,很崩溃。

分类:

技术点:

相关文章:

  • 2022-01-05
  • 2021-10-01
  • 2019-09-09
  • 2021-07-28
  • 2021-12-19
  • 2021-04-12
  • 2021-12-30
  • 2019-07-31
猜你喜欢
  • 2021-12-10
  • 2021-11-22
  • 2021-12-20
  • 2021-10-19
  • 2021-10-23
  • 2021-11-18
  • 2021-10-30
相关资源
相似解决方案