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丢失表排查内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Oracle数据库数据丢失恢复的几种方法总结

    根据oracle数据库的特点和提供的工具,主要方法有以下几种方法: 利用逻辑备份使用import工具丢失数据的表 利用物理备份来通过还原数据文件并进行不完全恢复 利用dbms_logmnr包从redo log文件中恢复 利用flashback特性恢复数据 前提 为了方便使用方法的介绍,上述恢复方法都将基于以下场景进行:系统管理员在前一天晚上11点用export对数据库做了全库逻辑备份,然后对所有数据文件进行了热备份.第二天上午10点,系统管理员在修改表TFUNDASSET的数据时,由于修改语句的

  • oracle下实现恢复一个丢失的数据文件的代码

    如果您目前拥有一个冷备份,但是缺少了其中的一个数据文件,但你目前存在所有的归档,如果您要恢复数据文件,可以参考以下的示例:   复制代码 代码如下: [oracle@jumper eygle]$ sqlplus "/ as sysdba" SQL*Plus: Release 9.2.0.4.0 - Production on Sun Aug 20 01:22:50 2006 Copyright (c) 1982, 2002, Oracle Corporation.  All right

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

    目录 说明: 写在最后: 总结 说明: 由于系统采用ID取模分表法进行Oracle数据存储,某日发现Oracle数据库中缺少对应的几张业务数据表,遂进行相关问题查询,简单记录一下排查思路: 由于我们代码中实现思路是判断如果没有对应的表会自动创建,所以首先需要查询一下缺失数据库表的创建时间 SELECT * FROM dba_objects where OBJECT_NAME LIKE 'LOG_5%' AND owner = 'Geoff'; 通过查询Oracle执行SQL历史记录,数据库表的删

  • Oracle导出导入表结构操作实战记录

    1.Plsql —工具 — 导出用户对象 2.输出文件路径查看导出的xx.sql文件 3.数据库A导表进数据库B,先在B库建立相同的表空间 临时表空间可不需要 创建表空间 create tablespace USER_DEF_DATA logging datafile '/data/oracle/app/oracle/oradata/lcfa/test_lcfa6.dbf' size 1024M autoextend on next 100m maxsize 20480M extent mana

  • java 查询oracle数据库所有表DatabaseMetaData的用法(详解)

    一 . 得到这个对象的实例 Connection con ; con = DriverManager.getConnection(url,userName,password); DatabaseMetaData dbmd = con.getMetaData(); 二. 方法getTables的用法 原型: ResultSet DatabaseMetaData.getTables(String catalog,String schema,String tableName,String []type

  • Mysql数据库按时间点恢复实战记录

    简介:Mysql数据库按时间点恢复实战 对于任何一家企业来讲,数据都是最宝贵的财富. 如何保护数据完整性,数据不受损坏,在发生故障时,如何保住数据,在发生误操作,黑客入侵,数据篡改等场景时,如何基于我们的备份来进行数据恢复,是每个技术人员需要关注的关键点. 阿里云致力于服务客户,为客户数据库提供连续数据保护.低成本的备份服务.它可以为多种环境的数据提供强有力的保护,以及强力恢复.在发生数据丢失.数据损坏的极端情况下,RDS管控平台具有一键还原的功能,基于客户设置的需要恢复的时间点,进行数据全方位

  • 一次现场mysql重复记录数据的排查处理实战记录

    目录 前言 分析 数据总计 重复次数占比 where 和 having 的区别 总结 前言 我当时正好出差在客户现场部署调试软件,有一天客户突然找到我这里,说他们现场生产的数据出现了异常的情况,最直接的表现就是 同一个标签,出现在了多个物料上,需要我配合,看怎么排查问题 分析 客户当时直接一摞重复标签的盒子码在我面前,我慌得一匹,这怕不是捅娄子了 稍加思索,现在需要做的就是,在数据库中查询出重复的标签,即对一个标签进行统计,判断出计数> 1 的即可 emmm,语法错误,我记得还有个Having

  • 一次Spring项目打包问题排查的实战记录

    一个 Spring 项目,打成 jar 包之后运行,在有网络的时候是正常的,但是一旦无网络就会报错,具体是怎么回事呢?这篇文章就来记录下这次问题排查经过. 背景介绍 一个图形化的界面,带本地数据库,要求可以在无网络环境下运行,我帮朋友用的 Java 写的图形化界面,虽然不是很美观,但是胜在熟悉 Java. 项目使用的是 idea 的「Build Artifacts」打包,打包之后运行正常,界面和数据库访问都正常,最开始报过几次错,后来就没出现了,也没找到原因,就先那样了. 后来发给别人了,完全打

  • springboot整合mybatis实现多表查询的实战记录

    目录 什么是mybatis 1.一对一查询(例一个用户一个账户) 1.1.实体类 1.2.数据库表 1.3.持久层接口 2.一对多查询(例一个用户对应多个账户) 2.1.实体类 2.2.数据库表 2.3.持久层接口 3.总结 4.多对多的查询(例一个用户多个角色) 4.1.实体类 4.2.数据库表 4.3.持久层接口 5.多对一(一个用户对应多个老师) 5.1 实体类 5.2.数据库表 5.3.持久层接口 总结 什么是mybatis (1)Mybatis 是一个半 ORM(对象关系映射)框架,它

  • 使用geotools导入shp文件到Oracle数据库时表名带下划线问题的解决方法

    问题: 最近在做利用geotools导入shp文件到Oracle表中,发现一个问题Oracle表名带下划线时导入失败,问题代码行: dsOracle.getFeatureWriterAppend(oracleTable, Transaction.AUTO_COMMIT); dsOracle为org.geotools.data.DataStore类型对象 解决方案: 网上查阅资料发现是Oracle11的java包ojdbc的版本问题,maven中搜索ojdbc发现最新版如下图 pom配置: <!-

  • 一次关于Redis内存诡异增长的排查过程实战记录

    一.现象 实例名:r-bp1cxxxxxxxxxd04(主从) 问题:一分钟内存上涨了2G,如下图所示: 键值规模:6000万左右 内存一分钟增长2G.png 二.Redis内存分析 1. 内存组成 上图中的内存统计的是Redis的info memory命令中的used_memory属性,例如: redis>infomemory#Memoryused_memory:9195978072used_memory_human:8.56Gused_memory_rss:9358786560used_me

  • MySQL千万级数据表的优化实战记录

    前言 这里先说明一下,网上很多人说阿里规定500w数据就要分库分表.实际上,这个500w并不是定义死的,而是与MySQL的配置以及机器的硬件有关.MySQL为了提升性能,会将表的索引装载到内存中.但是当表的数据到达一定的量的时候,会导致内存无法存储这些索引,无法存储索引,就只能进行磁盘IO,从而导致性能下降. 实战调优 我这里有张表,数据有1000w,目前只有一个主键索引 CREATE TABLE `user` ( `id` int(10) NOT NULL AUTO_INCREMENT, `u

随机推荐