網站首頁 編程語言 正文
說明:
由于系統采用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;
寫在最后:
通過后續排查,發現可能是因為代碼中判斷相關代碼查詢結果有誤,導致相關表被誤刪除,暫時通過注釋下方刪除表結構代碼避免問題復發,相關原因后續繼續排查
總結?
原文鏈接:https://www.cnblogs.com/GeoffA/p/16333661.html
相關推薦
- 2022-12-12 Flutter手機權限檢查與申請實現方法詳解_Android
- 2022-06-14 Golang監聽日志文件并發送到kafka中_Golang
- 2022-12-27 python的ImageTk.PhotoImage大坑及解決_python
- 2022-04-19 Go語言標準輸入輸出庫的基本使用教程_Golang
- 2022-06-21 Android幀式布局實現自動切換顏色_Android
- 2023-01-13 BatchNorm2d原理、作用及pytorch中BatchNorm2d函數的參數使用_python
- 2022-06-27 使用AOP+redis+lua做方法限流的實現_Redis
- 2022-11-05 Nginx監控模塊(vts模塊)詳解_nginx
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支