oracle資料庫災難挽救應急方案之DML誤操作恢復
1核心業務表誤delete恢復
1.1模擬delete誤操作
建立jason業務表,如下:
SQL> create table jason as select * from dba_objects; SQL> create index idx_jason_oid on jason(object_id);
刪除jason業務表部分資料,在提交之後,發現部分資料存在誤刪,如下:
SQL> delete from jason where object_id between 3000 and 6000; 3001 rows deleted.
1.2閃回查詢恢復誤刪資料
首先,檢查當前時間和undo保留時間,如下:
SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss'; SQL> select sysdate from dual; SYSDATE ------------------- 2022-05-06 23:29:07 SQL> show parameter undo_retention NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ undo_retention integer 900
根據時間戳執行閃回查詢,檢查資料能否被找回,如下:
SQL> select count(*) from sys.jason as of timestamp to_timestamp('2022-05-06 23:14:07','yyyy-mm-dd hh24:mi:ss') where object_id between 3000 and 6000; COUNT(*) ---------- 3001
如果資料確認可以被找回來,立即將undo中前映象資料插回至jason業務表,如下:
SQL> insert into jason select * from sys.jason as of timestamp to_timestamp('2022-05-06 23:14:07','yyyy-mm-dd hh24:mi:ss') where object_id between 3000 and 6000; 3001 rows created.
如果資料無法透過undo閃回查詢找到,則嘗試1.1.3節方案進行資料挽救。
SQL> select count(*) from sys.jason as of timestamp to_timestamp('2022-05-06 23:14:07','yyyy-mm-dd hh24:mi:ss') where object_id between 3000 and 6000; ERROR at line 1: ORA-01555: snapshot too old: rollback segment number 7 with name "_SYSSMU7_2329891355$" too small
1.3歸檔日誌挖掘恢復誤刪資料
檢查資料庫全域性force_logging和supplemental_log_data_min特性是否開啟,如下:
SQL> select name,open_mode,log_mode,force_logging,supplemental_log_data_min from v$database; NAME OPEN_MODE LOG_MODE FORCE_LOGGING SUPPLEMENTAL_LOG_DATA_MIN --------- -------------------- ------------ --------------- ------------------------- TESTDB19 READ WRITE ARCHIVELOG NO NO
手動切換歸檔日誌,並記錄當前時間,如下:
SQL> alter system switch logfile; SQL> select sysdate from dual; SYSDATE ------------------- 2022-05-06 23:58:35
檢查資料誤刪除期間產生的歸檔日誌檔案,如下:
select unique NAME, THREAD#, SEQUENCE#, COMPLETION_TIME from gv$archived_log where thread# = 1 and COMPLETION_TIME >= to_date('2022-05-07 03:09:24', 'yyyy-mm-dd hh24:mi:ss') and COMPLETION_TIME <= to_date('2022-05-07 03:11:19', 'yyyy-mm-dd hh24:mi:ss') order by SEQUENCE#;
新增第一個要載入的歸檔日誌檔案,如下:
SQL> execute dbms_logmnr.add_logfile(logfilename=>'/oracle/app/fast_recovery_area/TESTDB19C/archivelog/2022_05_07/o1_mf_1_134_k7d6w2g6_.arc',options=>dbms_logmnr.new);
多次新增要載入的歸檔日誌檔案,如下:
SQL> execute dbms_logmnr.add_logfile(logfilename=>'/oracle/app/fast_recovery_area/TESTDB19C/archivelog/2022_05_07/o1_mf_1_135_k7d6wo28_.arc',options=>dbms_logmnr.addfile);
執行日誌挖掘分析,如下:
SQL> execute dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);
查詢v$logmnr_contents動態效能檢視,獲取歸檔日誌解析資訊,如下:
SQL> select count(*) from v$logmnr_contents; COUNT(*) ---------- 391721 SQL> create table sys.hzmc_logmnr_contents as select * from v$logmnr_contents;
關閉日誌挖掘分析,如下:
SQL> execute dbms_logmnr.end_logmnr;
將誤刪除操作的反向插入語句輸出至jason_insert.sql,如下:
SQL> set lines 1000 pages 0 SQL> spool jason_insert.sql SQL> select sql_undo from sys.hzmc_logmnr_contents where OPERATION='DELETE' and sql_redo like '%JASON%'; SQL> spool off
清理jason_insert.sql文字中的首行和尾行,如下:
shell> vi jason_insert.sql
將反向解析出來的SQL語句插回至jason業務表,如下:
SQL> @jason_insert.sql
2、核心業務表誤update恢復
2.1模擬update誤操作
建立jason業務表,如下:
SQL> create table jason as select * from dba_objects; SQL> create index idx_jason_oid on jason(object_id);
更新jason業務表部分資料,在提交之後,發現部分資料存在誤更新,如下:
SQL> update jason set object_id=1 where object_id<=70000; 69346 rows updated. SQL> commit;
2.2閃回查詢恢復誤刪資料
首先,檢查當前時間和undo保留時間,如下:
SQL> alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss'; SQL> select sysdate from dual; SYSDATE ------------------- 2022-05-07 06:13:38 SQL> show parameter undo_retention NAME TYPE VALUE ------------------------------------ ----------- ------------------------------ undo_retention integer 900
根據時間戳執行閃回查詢,檢查資料能否被找回,如下:
SQL> select count(*) from sys.jason as of timestamp to_timestamp('2022-05-07 06:12:38','yyyy-mm-dd hh24:mi:ss') where object_id<=70000; COUNT(*) ---------- 69346
如果資料確認可以被找回來,先建立jason業務表的備份jason_old,再基於閃回資料建立新業務表jason_new,然後立即刪除jason業務表誤更新的資料,再將undo中前映象資料插回至jason表,如下:
SQL> create table jason_old as select * from jason; SQL> create table jason_new as select * from jason where 1=2; SQL> insert into jason_new select * from sys.jason as of timestamp to_timestamp('2022-05-07 06:12:38','yyyy-mm-dd hh24:mi:ss') where object_id<=70000; 69346 rows created. SQL> commit; SQL> delete from jason where object_id<=70000; SQL> commit; SQL> insert into jason select * from jason_new; 69346 rows created. SQL> commit;
如果資料無法透過undo閃回查詢找到,則嘗試1.2.3節方案進行資料挽救。
SQL> select count(*) from sys.jason as of timestamp to_timestamp('2022-05-07 06:12:38','yyyy-mm-dd hh24:mi:ss') where object_id<=70000; ERROR at line 1: ORA-01555: snapshot too old: rollback segment number 7 with name "_SYSSMU7_2329891355$" too small
2.3歸檔日誌挖掘恢復誤刪資料
檢查資料庫全域性force_logging和supplemental_log_data_min特性是否開啟,如下:
SQL> select name,open_mode,log_mode,force_logging,supplemental_log_data_min from v$database; NAME OPEN_MODE LOG_MODE FORCE_LOGGING SUPPLEMENTAL_LOG_DATA_MIN --------- -------------------- ------------ --------------- ------------------------- TESTDB19 READ WRITE ARCHIVELOG NO NO
手動切換歸檔日誌,並記錄當前時間,如下:
SQL> alter system switch logfile; SQL> select sysdate from dual; SYSDATE ------------------- 2022-05-07 06:34:09
檢查資料誤刪除期間產生的歸檔日誌檔案,如下:
select unique NAME, THREAD#, SEQUENCE#, COMPLETION_TIME from gv$archived_log where thread# = 1 and COMPLETION_TIME >= to_date('2022-05-07 06:12:38', 'yyyy-mm-dd hh24:mi:ss') and COMPLETION_TIME <= to_date('2022-05-07 06:34:09', 'yyyy-mm-dd hh24:mi:ss') order by SEQUENCE#;
新增第一個要載入的歸檔日誌檔案,如下:
SQL> execute dbms_logmnr.add_logfile(logfilename=>'/oracle/app/fast_recovery_area/TESTDB19C/archivelog/2022_05_07/o1_mf_1_137_k7dlrmqx_.arc',options=>dbms_logmnr.new);
多次新增要載入的歸檔日誌檔案,如下:
SQL> execute dbms_logmnr.add_logfile(logfilename=>'/oracle/app/fast_recovery_area/TESTDB19C/archivelog/2022_05_07/o1_mf_1_138_k7dlrtnr_.arc',options=>dbms_logmnr.addfile);
執行日誌挖掘分析,如下:
SQL> execute dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);
查詢v$logmnr_contents動態效能檢視,獲取歸檔日誌解析資訊,如下:
SQL> select count(*) from v$logmnr_contents; COUNT(*) ---------- 345231 SQL> create table sys.hzmc_logmnr_contents as select * from v$logmnr_contents;
關閉日誌挖掘分析,如下:
SQL> execute dbms_logmnr.end_logmnr;
將誤刪除操作的反向插入語句輸出至jason_insert.sql,如下:
SQL> set lines 1000 pages 0 SQL> spool jason_update.sql select sql_undo from sys.hzmc_logmnr_contents where OPERATION = 'UPDATE' and sql_redo like '%JASON%' and TIMESTAMP >= to_date('2022-05-07 06:12:38', 'yyyy-mm-dd hh24:mi:ss') and TIMESTAMP <= to_date('2022-05-07 06:34:09', 'yyyy-mm-dd hh24:mi:ss'); SQL> spool off
清理jason_update.sql文字中的首行和尾行,如下:
shell> vi jason_update.sql
將反向解析出來的SQL語句插回至jason業務表,如下:
SQL> @jason_update.sql
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30310891/viewspace-2919466/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle資料庫災難挽救應急方案之DDL誤操作恢復(drop)Oracle資料庫
- oracle資料庫災難挽救應急方案之DDL誤操作恢復(truncate)Oracle資料庫
- MySQL資料災難挽救之ibdata檔案誤刪恢復MySql
- 【資料庫資料恢復】ORACLE常見資料災難&資料恢復可能性資料庫資料恢復Oracle
- MySQL資料災難挽救之truncate tableMySql
- MySQL資料災難挽救之drop tableMySql
- MySQL資料災難挽救之Delete\UpdateMySqldelete
- 【資料庫資料恢復】誤truncate table的Oracle資料庫資料恢復方案資料庫資料恢復Oracle
- 【oracle資料庫資料恢復】誤操作導致的資料庫誤刪除的資料恢復案例Oracle資料庫資料恢復
- 【資料庫資料恢復】Oracle資料庫誤truncate table的資料恢復案例資料庫資料恢復Oracle
- 【資料庫資料恢復】oracle資料庫誤truncate table怎麼恢復資料?資料庫資料恢復Oracle
- Oracle資料庫恢復之resetlogsOracle資料庫
- 【資料庫資料恢復】LINUX環境下ORACLE資料庫誤刪除的資料恢復資料庫資料恢復LinuxOracle
- Oracle恢復誤刪資料Oracle
- 檢查Oracle災難恢復場景下的物理備庫XIOracle
- 恢復Oracle資料庫誤刪除資料的語句Oracle資料庫
- 【資料庫資料恢復】HP-UX系統ORACLE資料庫被誤刪除的資料恢復資料庫資料恢復UXOracle
- 【資料庫資料恢復】LINUX EXT3檔案系統下ORACLE資料庫誤操作導致資料丟失的資料恢復案例資料庫資料恢復LinuxOracle
- 【資料庫資料恢復】如何恢復Oracle資料庫truncate表的資料資料庫資料恢復Oracle
- 【北亞資料恢復】誤刪除oracle表和誤刪除oracle表資料的資料恢復方法資料恢復Oracle
- 伺服器資料恢復-誤操作導致mysql資料庫資料丟失的資料恢復案例伺服器資料恢復MySql資料庫
- Sybase ASE資料庫恢復,Sybase資料恢復,資料誤刪除恢復工具READSYBDEVICE資料庫資料恢復dev
- 【資料庫資料恢復】Oracle資料庫ASM磁碟組掉線如何恢復資料?資料庫資料恢復OracleASM
- IT系統災難恢復基本指南
- 資料庫資料恢復—附加資料庫錯誤823的SQL Server資料恢復案例資料庫資料恢復SQLServer
- 【資料庫資料恢復】ASM磁碟組掉線的Oracle資料庫資料恢復案例資料庫資料恢復ASMOracle
- 【北亞資料恢復】誤操作分割槽損壞導致SqlServer資料庫資料丟失的資料恢復資料恢復SQLServer資料庫
- 【北亞資料庫資料恢復】誤操作導致資料丟失的華為雲mysql資料恢復案例資料庫資料恢復MySql
- 【儲存資料恢復案例】Netapp誤操作刪除lun的資料恢復資料恢復APP
- Sybase SQL Anywhere(ASA)資料庫恢復,ASA資料恢復,資料誤刪除恢復工具ReadASADBSQL資料庫資料恢復
- Oracle資料庫冷備和恢復Oracle資料庫
- Oracle & MySQL & PostgreSQL資料庫恢復支援OracleMySql資料庫
- 【資料庫資料恢復】ASM例項不能掛載的Oracle資料庫資料恢復案例資料庫資料恢復ASMOracle
- 資料庫資料恢復-oracle資料庫報錯無法開啟的如何恢復資料?資料庫資料恢復Oracle
- Oracle ASM故障資料恢復解決方案OracleASM資料恢復
- 伺服器資料恢復-UNIX類檔案系統資料災難的資料恢復可能性分析伺服器資料恢復
- SQL Server資料庫恢復,SQL Server資料恢復,SQL Server資料誤刪除恢復工具SQLRescueSQLServer資料庫資料恢復
- 【資料庫資料恢復】斷電導致Oracle資料庫資料丟失的資料恢復案例資料庫資料恢復Oracle