oracle表数据误删除恢复(闪回操作)
数据库开启归档及闪回功能
SQL> startup mount ;
ORACLE instance started.Total System Global Area 4294964952 bytes
Fixed Size 9144024 bytes
Variable Size 1023410176 bytes
Database Buffers 3254779904 bytes
Redo Buffers 7630848 bytes
Database mounted.
SQL> alter database archivelog ;Database altered.SQL> alter database flashback on ;Database altered.SQL> alter database open ;Database altered.
SQL> select log_mode,FLASHBACK_ON from v$database;LOG_MODE FLASHBACK_ON
------------ ------------------
ARCHIVELOG YES
创建测试表并插入数据
SQL> create table employee ( empno int, ename varchar(10), salary int );Table created.SQL> insert into employee values (1, 'a', 20000 );1 row created.SQL> insert into employee values (2, 'b', 80000 );1 row created.SQL> insert into employee values (3, 'c', 60000);1 row created.SQL>
SQL>
SQL>
SQL> commit ;Commit complete.
删除数据
SQL> delete from employee where empno=1;1 row deleted.SQL> commit ;Commit complete.
查询scn的变化及当前的scn
col NAME for a60
SELECTNAME,FIRST_CHANGE# FSCN,NEXT_CHANGE# NSCN,FIRST_TIME
FROMV$ARCHIVED_LOG;NAME FSCN NSCN FIRST_TIM
------------------------------------------------------------ ---------- ---------- ---------/u01/app/oracle/fast_recovery_area/PRODCDB/archivelog/2025_0 3430758 3557724 27-MAY-25
5_29/o1_mf_1_32_n3htww1t_.arc/u01/app/oracle/fast_recovery_area/PRODCDB/archivelog/2025_0 3557724 3622455 29-MAY-25
5_29/o1_mf_1_33_n3hv2lfk_.arc/u01/app/oracle/fast_recovery_area/PRODCDB/archivelog/2025_0 3622455 3674700 29-MAY-25
5_29/o1_mf_1_34_n3hvkto1_.arcNAME FSCN NSCN FIRST_TIM
------------------------------------------------------------ ---------- ---------- ---------
/u01/app/oracle/fast_recovery_area/PRODCDB/archivelog/2025_0 3674700 3731424 29-MAY-25
5_29/o1_mf_1_35_n3hw3d4m_.arc/u01/app/oracle/fast_recovery_area/PRODCDB/archivelog/2025_0 3731424 3798784 29-MAY-25
5_29/o1_mf_1_36_n3j2z8w5_.arc/u01/app/oracle/fast_recovery_area/PRODCDB/archivelog/2025_0 3798784 3932544 29-MAY-25
6_12/o1_mf_1_37_n4nx74qw_.arc
/u01/app/oracle/fast_recovery_area/PRODCDB/archivelog/2025_0 3932544 3957895 12-JUN-25
6_12/o1_mf_1_38_n4o0gd1s_.arcSQL> SELECT DBMS_FLASHBACK.GET_SYSTEM_CHANGE_NUMBER FSCN FROM DUAL;FSCN
----------3958892
使用删除用户统计现有表的数据行数
SQL> select count(*) from employee;COUNT(*)
----------2
创建恢复的新表
SQL> CREATE TABLE employee_1 AS SELECT * from employee where 1=0;Table created.
根据误操作时间及scn号查到最合适的scn 恢复
SELECT COUNT(*) FROM employee AS OF SCN 3955600;COUNT(*)
----------3SELECT COUNT(*) FROM employee AS OF SCN 3955900;COUNT(*)
----------2
恢复到employee_1 , 筛选出误操作数据恢复到生产表中
SQL> INSERT INTO employee_1 SELECT * FROM employee AS OF SCN 3955600;3 rows created.SQL> commit ;Commit complete.