Oracle数据库丢失表排查思路实战记录

 更新时间:2022年06月09日 10:13:55   作者:昊狼  
相信大家无论是开发、测试还是运维过程中,都可能会因为误操作、连错数据库、用错用户、语句条件有误等原因,导致错误删除、错误更新等问题,这篇文章主要给大家介绍了关于Oracle数据库丢失表排查思路的相关资料,需要的朋友可以参考下

说明:

由于系统采用ID取模分表法进行Oracle数据存储,某日发现Oracle数据库中缺少对应的几张业务数据表,遂进行相关问题查询,简单记录一下排查思路;

  • 由于我们代码中实现思路是判断如果没有对应的表会自动创建,所以首先需要查询一下缺失数据库表的创建时间
SELECT * FROM dba_objects where OBJECT_NAME LIKE 'LOG_5%' AND owner = 'Geoff';
  • 通过查询Oracle执行SQL历史记录,数据库表的删除时间段
select * from v$sqlarea b
   where b.FIRST_LOAD_TIME between '2022-05-31/21:30:00' and'2022-05-31/23:30:00'` 
    order by b.FIRST_LOAD_TIME;
  • 通过上述SQL还是无法查询具体表的删除时间,故查询当前用户的数据库回收站
SELECT * FROM recyclebin_temp WHERE TYPE = 'TABLE' ORDER BY droptime DESC;
  • 通过回收站查询到相应的已删除数据库表,并将数据库已删除表恢复至删除前,包含表中数据
flashback TABLE LOG_505 to before drop RENAME to LOG_505_temp ;
  • 因为数据恢复时,系统已新建数据库表并产生数据,所以需要将新老数据都恢复到数据库表中
--查询当前数据库表中的最大ID
SELECT ID FROM WORK_DUTY_LOG_505_temp ORDER BY ID DESC;
--修改序列步长至最大ID
ALTER sequence SEQ_WORK_DUTY_LOG_505 INCREMENT BY 3538;
SELECT SEQ_WORK_DUTY_LOG_505.nextval FROM dual;
--恢复序列步长为默认值1
ALTER sequence SEQ_WORK_DUTY_LOG_505 INCREMENT BY 1;

--创建触发器,并将表中数据手动插入到从回收站恢复的临时表中
CREATE OR REPLACE TRIGGER T_WORK_DUTY_LOG_505 BEFORE INSERT ON WORK_DUTY_LOG_505_temp REFERENCING OLD AS "OLD" NEW AS "NEW" FOR EACH ROW 
begin
 select SEQ_WORK_DUTY_LOG_505.Nextval into:new.ID from dual;  --base_login_user_id序列名称  --ID给ID装上序列
end;

--删除触发器
DROP TRIGGER T_WORK_DUTY_LOG_505;
--将临时表中整合完成的数据恢复至原数据库表中
INSERT INTO  WORK_DUTY_LOG_505 SELECT * FROM WORK_DUTY_LOG_505_temp
--查询确认
SELECT * FROM WORK_DUTY_LOG_505 ORDER BY ID DESC;

写在最后:

通过后续排查,发现可能是因为代码中判断相关代码查询结果有误,导致相关表被误删除,暂时通过注释下方删除表结构代码避免问题复发,相关原因后续继续排查

总结 

到此这篇关于Oracle数据库丢失表排查思路的文章就介绍到这了,更多相关Oracle丢失表排查内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Oracle查看执行计划的实现

    Oracle查看执行计划的实现

    查看Oracle 的执行计划的目的是为了了解 SQL 查询或语句在数据库中的执行方式和性能表现,本文主要介绍了Oracle查看执行计划的实现,感兴趣的可以了解一下
    2024-02-02
  • oracle用imp导入dmp文件的方法

    oracle用imp导入dmp文件的方法

    这篇文章主要介绍了oracle用imp导入dmp文件的方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • oracle中左填充(lpad)和右填充(rpad)的介绍与用法

    oracle中左填充(lpad)和右填充(rpad)的介绍与用法

    这篇文章主要跟大家介绍了关于oracle中左填充(lpad)和右填充(rpad)的相关资料,通过填充我们可以固定字段的长度,文中通过示例代码介绍的非常详细,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-08-08
  • PL/SQL数据类型及操作符

    PL/SQL数据类型及操作符

    PL/SQL数据类型及操作符...
    2007-03-03
  • Oracle使用in语句不能超过1000问题的解决办法

    Oracle使用in语句不能超过1000问题的解决办法

    最近项目中使用到了Oracle中where语句中的in条件查询语句,在使用中发现了问题,所以下面这篇文章主要给大家介绍了关于Oracle使用in语句不能超过1000问题的解决办法,需要的朋友可以参考下
    2022-05-05
  • oracle 数据库数据迁移解决方案

    oracle 数据库数据迁移解决方案

    大部分系统由于平台和版本的原因,做的是逻辑迁移,少部分做的是物理迁移,接下来把心得与大家分享一下
    2012-12-12
  • oracle 删除重复数据

    oracle 删除重复数据

    我们可能会出现这种情况,表里面的数据重复,那么,如何对重复的数据进行删除呢?
    2009-07-07
  • oracle通过行范围查询取4至10行并排序

    oracle通过行范围查询取4至10行并排序

    这篇文章主要介绍了oracle如果查询取4至10行并排序,很简单,很实用,正在学习oracle的朋友可以参考下
    2014-09-09
  • Oracle官方工具SQL Developer的简单使用

    Oracle官方工具SQL Developer的简单使用

    这篇文章介绍了Oracle官方工具SQL Developer的简单使用,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-05-05
  • Oracle 11g 安装配置方法图文教程

    Oracle 11g 安装配置方法图文教程

    这篇文章主要为大家详细介绍了Oracle 11g 下载与安装配置方法的图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04

最新评论