oracle 恢复 被delete的数据 使用dbms_flashback的scn

本文通过实例演示了如何使用Oracle数据库的闪回功能来恢复已删除的数据。具体步骤包括以DBA身份登录、插入和删除数据、获取System Change Number (SCN)、按SCN恢复数据并最终将数据恢复到原始状态。

1:以具有dba身份的用户登录,如果不是dba用户在使用过程中无法查看scn(System Change Number).

登录到sqlplus : sqlplus rpg/rpg;

设置显示时间标识:set time on;

本例使用数据表为:

 

create table STU

(

  ID  INTEGER,

  SNM VARCHAR2(30)

)

先加入一条数据

 

16:17:20 SQL> insert into  stu values(1,'rpg');

 

16:23:51 SQL> select * from stu;

 

                                     ID SNM

--------------------------------------- ------------------------------

                                      2 rpg

                                      1 rpg

---删除数据 使用delete不要使用truncate

 16:25:42 SQL> delete from stu;

 

        2 rows deleted

---注意此处要提交修改的结果

16:26:03 SQL> commit;

 

         Commit complete

---查看当前表,可见数据已经被删除

 

16:26:11 SQL> select * from stu;

 

                                     ID SNM

--------------------------------------- ------------------------------

 ---查看当前dbms_flashback得到scn以便于确认当前数据的存在范围

16:27:14 SQL> select dbms_flashback.get_system_change_number from dual;

 

GET_SYSTEM_CHANGE_NUMBER

------------------------

                  554631

 --修改后面的scn的值,测试在哪一个scn上数据还存在

16:27:32 SQL>  select * from stu as of scn 554625;

 

                                     ID SNM

--------------------------------------- ------------------------------

 

16:28:40 SQL> select * from stu as of scn 554590;

 

                                     ID SNM

--------------------------------------- ------------------------------

 ---可见在下面554570以前的号上数据是存在的

16:28:51 SQL> select * from stu as of scn 554570;

 

                                     ID SNM

--------------------------------------- ------------------------------

                                      2 rpg

 

---恢复数据到当前表中

 

16:28:58 SQL> insert into stu select * from stu as of scn 554570;

 

1 row inserted

 --提交

16:30:24 SQL> commit;

 

Commit complete

--- 查看恢复结果 

16:30:28 SQL> select * from stu;

 

                                     ID SNM

--------------------------------------- ------------------------------

                                      2 rpg

 

PS:也可以按照时间上来恢复

 

 

 

 

 

 

### Oracle 数据库中查找数据删除时间与方法 在 Oracle 数据库中,可以通过多种方式追踪数据的删除时间及操作方法。以下是几种常用的技术和工具: #### 1. 使用闪回查询 (Flashback Query) 闪回查询允许用户检索过去某个时间点的数据状态。通过指定时间戳或系统更改编号 (SCN),可以查看在特定时间点之前的数据版本。如果某条记录已被删除,但仍在闪回范围内,则可以通过闪回查询恢复该记录[^1]。 示例代码: ```sql SELECT * FROM your_table AS OF TIMESTAMP TO_TIMESTAMP('2023-10-01 12:00:00', 'YYYY-MM-DD HH24:MI:SS') WHERE condition; ``` #### 2. 启用数据库审计功能 Oracle 提供了强大的审计功能,可以记录对表的所有 DML 和 DDL 操作。启用审计后,所有删除操作会被记录到 `SYS.AUD$` 表中,并包含操作的时间戳、用户信息以及其他相关细节[^3]。 启用审计的示例代码: ```sql AUDIT DELETE ON your_table BY ACCESS; ``` 查询审计记录的示例代码: ```sql SELECT ACTION_NAME, OBJ_NAME, USERID, TIMESTAMP FROM DBA_AUDIT_TRAIL WHERE OBJ_NAME = 'your_table' AND ACTION_NAME = 'DELETE'; ``` #### 3. 利用 RMAN 的备份与恢复功能 RMAN 是 Oracle 提供的官方备份工具,支持全备份、增量备份等多种策略。通过 RMAN 的恢复功能,可以将数据恢复到删除操作发生之前的状态,从而间接获取删除时间[^5]。 示例命令: ```bash RUN { SET UNTIL TIME '2023-10-01:12:00:00'; RESTORE DATABASE; RECOVER DATABASE; } ``` #### 4. 使用 DBMS_TRACE 或事件跟踪 DBMS_TRACE 是 PL/SQL 引擎中的工具,可以记录存储过程的调用树以及异常信息。结合 Oracle 的“事件”功能,可以生成详细的跟踪或诊断信息,帮助分析删除操作的具体执行路径[^2]。 启用事件跟踪的示例代码: ```sql ALTER SESSION SET EVENTS '10046 TRACE NAME CONTEXT FOREVER, LEVEL 12'; ``` #### 5. 查询归档日志 (Archived Logs) 如果删除操作发生在较长时间之前,且不在闪回范围内,则可以通过分析归档日志来追踪删除时间。归档日志包含了所有已提交事务的详细信息,能够重建历史数据变化。 示例命令: ```bash LOGMNR START WITH OPTIONS (STARTTIME => '2023-10-01 12:00:00'); SELECT OPERATION, SQL_REDO, TIMESTAMP FROM V$LOGMNR_CONTENTS WHERE SEG_NAME = 'your_table' AND OPERATION = 'DELETE'; ``` --- ### 注意事项 - 闪回查询的可用性取决于 Undo Retention 参数设置的时间范围。 - 审计功能需要提前启用,否则无法记录删除操作。 - RMAN 和归档日志分析适用于更复杂的场景,但可能需要额外的配置和资源。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值