Oracle數據庫丟失表排查思路實戰(zhàn)記錄
更新時間:2022年06月09日 10:13:55 作者:昊狼
相信大家無論是開發(fā)、測試還是運維過程中,都可能會因為誤操作、連錯數據庫、用錯用戶、語句條件有誤等原因,導致錯誤刪除、錯誤更新等問題,這篇文章主要給大家介紹了關于Oracle數據庫丟失表排查思路的相關資料,需要的朋友可以參考下
說明:
由于系統(tǒng)采用ID取模分表法進行Oracle數據存儲,某日發(fā)現Oracle數據庫中缺少對應的幾張業(yè)務數據表,遂進行相關問題查詢,簡單記錄一下排查思路;
- 由于我們代碼中實現思路是判斷如果沒有對應的表會自動創(chuàng)建,所以首先需要查詢一下缺失數據庫表的創(chuàng)建時間
SELECT * FROM dba_objects where OBJECT_NAME LIKE 'LOG_5%' AND owner = 'Geoff';
- 通過查詢Oracle執(zhí)行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 ;
- 因為數據恢復時,系統(tǒng)已新建數據庫表并產生數據,所以需要將新老數據都恢復到數據庫表中
--查詢當前數據庫表中的最大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; --創(chuàng)建觸發(fā)器,并將表中數據手動插入到從回收站恢復的臨時表中 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; --刪除觸發(fā)器 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;
寫在最后:
通過后續(xù)排查,發(fā)現可能是因為代碼中判斷相關代碼查詢結果有誤,導致相關表被誤刪除,暫時通過注釋下方刪除表結構代碼避免問題復發(fā),相關原因后續(xù)繼續(xù)排查

總結
到此這篇關于Oracle數據庫丟失表排查思路的文章就介紹到這了,更多相關Oracle丟失表排查內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

