由于系统采用ID取模分表法进行Oracle数据存储,某日发现Oracle数据库中缺少对应的几张业务数据表,遂进行相关问题查询,简单记录一下排查思路;
SELECT * FROM dba_objects where OBJECT_NAME LIKE "LOG_5%" AND owner = "Geoff";
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;
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丢失表排查内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!