Oracle數(shù)據(jù)庫(kù)丟失表排查思路實(shí)戰(zhàn)記錄
說(shuō)明:
由于系統(tǒng)采用ID取模分表法進(jìn)行Oracle數(shù)據(jù)存儲(chǔ),某日發(fā)現(xiàn)Oracle數(shù)據(jù)庫(kù)中缺少對(duì)應(yīng)的幾張業(yè)務(wù)數(shù)據(jù)表,遂進(jìn)行相關(guān)問(wèn)題查詢,簡(jiǎn)單記錄一下排查思路;
- 由于我們代碼中實(shí)現(xiàn)思路是判斷如果沒(méi)有對(duì)應(yīng)的表會(huì)自動(dòng)創(chuàng)建,所以首先需要查詢一下缺失數(shù)據(jù)庫(kù)表的創(chuàng)建時(shí)間
SELECT * FROM dba_objects where OBJECT_NAME LIKE 'LOG_5%' AND owner = 'Geoff';
- 通過(guò)查詢Oracle執(zhí)行SQL歷史記錄,數(shù)據(jù)庫(kù)表的刪除時(shí)間段
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;
- 通過(guò)上述SQL還是無(wú)法查詢具體表的刪除時(shí)間,故查詢當(dāng)前用戶的數(shù)據(jù)庫(kù)回收站
SELECT * FROM recyclebin_temp WHERE TYPE = 'TABLE' ORDER BY droptime DESC;
- 通過(guò)回收站查詢到相應(yīng)的已刪除數(shù)據(jù)庫(kù)表,并將數(shù)據(jù)庫(kù)已刪除表恢復(fù)至刪除前,包含表中數(shù)據(jù)
flashback TABLE LOG_505 to before drop RENAME to LOG_505_temp ;
- 因?yàn)閿?shù)據(jù)恢復(fù)時(shí),系統(tǒng)已新建數(shù)據(jù)庫(kù)表并產(chǎn)生數(shù)據(jù),所以需要將新老數(shù)據(jù)都恢復(fù)到數(shù)據(jù)庫(kù)表中
--查詢當(dāng)前數(shù)據(jù)庫(kù)表中的最大ID SELECT ID FROM WORK_DUTY_LOG_505_temp ORDER BY ID DESC; --修改序列步長(zhǎng)至最大ID ALTER sequence SEQ_WORK_DUTY_LOG_505 INCREMENT BY 3538; SELECT SEQ_WORK_DUTY_LOG_505.nextval FROM dual; --恢復(fù)序列步長(zhǎng)為默認(rèn)值1 ALTER sequence SEQ_WORK_DUTY_LOG_505 INCREMENT BY 1; --創(chuàng)建觸發(fā)器,并將表中數(shù)據(jù)手動(dòng)插入到從回收站恢復(fù)的臨時(shí)表中 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; --將臨時(shí)表中整合完成的數(shù)據(jù)恢復(fù)至原數(shù)據(jù)庫(kù)表中 INSERT INTO WORK_DUTY_LOG_505 SELECT * FROM WORK_DUTY_LOG_505_temp --查詢確認(rèn) SELECT * FROM WORK_DUTY_LOG_505 ORDER BY ID DESC;
寫(xiě)在最后:
通過(guò)后續(xù)排查,發(fā)現(xiàn)可能是因?yàn)榇a中判斷相關(guān)代碼查詢結(jié)果有誤,導(dǎo)致相關(guān)表被誤刪除,暫時(shí)通過(guò)注釋下方刪除表結(jié)構(gòu)代碼避免問(wèn)題復(fù)發(fā),相關(guān)原因后續(xù)繼續(xù)排查

總結(jié)
到此這篇關(guān)于Oracle數(shù)據(jù)庫(kù)丟失表排查思路的文章就介紹到這了,更多相關(guān)Oracle丟失表排查內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Oracle 11g數(shù)據(jù)庫(kù)詳細(xì)安裝圖文教程
這篇文章主要為大家詳細(xì)介紹了Oracle 11g數(shù)據(jù)庫(kù)詳細(xì)安裝圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-02-02
oracle數(shù)據(jù)庫(kù)慢查詢SQL實(shí)例詳解
一般的業(yè)務(wù)系統(tǒng)如果遇到性能問(wèn)題,絕大部分都是來(lái)自數(shù)據(jù)庫(kù)的,有的業(yè)務(wù)一個(gè)查詢執(zhí)行時(shí)間好幾秒,這就是我們說(shuō)說(shuō)的SQL慢查詢,這篇文章主要給大家介紹了關(guān)于oracle數(shù)據(jù)庫(kù)慢查詢SQL的相關(guān)資料,需要的朋友可以參考下2024-06-06
oracle中if/else的三種實(shí)現(xiàn)方式詳解
本文給大家介紹了oracle中if/else的三種實(shí)現(xiàn)方式及注意事項(xiàng),非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧2017-10-10
重新編譯PLSQL中的無(wú)效對(duì)象或者指定的對(duì)象 的方法
重新編譯PLSQL中的無(wú)效對(duì)象或者指定的對(duì)象 的方法...2007-04-04
Oracle中查詢表結(jié)構(gòu)的6種方法總結(jié)
工作中查看oracle表結(jié)構(gòu)經(jīng)常會(huì)遇到,下面這篇文章主要給大家介紹了關(guān)于Oracle中查詢表結(jié)構(gòu)的6種方法,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-04-04
ORACLE中如何找到未提交事務(wù)的SQL語(yǔ)句詳解
這篇文章主要給大家介紹了關(guān)于ORACLE中如何找到未提交事務(wù)的SQL語(yǔ)句,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用ORACLE具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
Oracle單實(shí)例升級(jí)補(bǔ)丁全過(guò)程記錄
這篇文章主要介紹了Oracle單實(shí)例升級(jí)補(bǔ)丁,oracle19.3升級(jí)補(bǔ)丁到19.18,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-08-08

