您的位置:首页 > 数据库 > Oracle

Oracle表数据误删恢复

2015-06-25 20:44 543 查看

问题描述

Oracle 11g数据库,在一次更新过程中,对某张表数据进行了错误的dml删除、update操作,现希望回退回更新之前的记录。

解决过程

1、查看SCN

使用管理员账户(system, sys)登陆数据库,然后执行如下SQL,获取系统变更序号。

select * from flashback_transaction_query where table_name='THE_TABLE_NAME';


查询结果如下:



其中,根据上图中的Start_Timestamp,可定位到本次dml更改之前的最近一次的scn。当事务提交后,数据库会自动创建scn,即Commit_SCN及时间戳字段。

如果之前是执行的DML语句,undo_sql为自动生成回滚SQL;本例中因为是手动update一条记录,系统未给出回滚SQL。

2、根据SCN号还原表中原来的记录

select * from "THE_TABLE_NAME" as of scn 6033676601003
where ...


该表在scn时的记录可通过如上语句查询到。

然后再通过相应的 dml sql语句对当前的最新表数据进行还原即可。

延伸阅读

1、什么是SCN

SCN(System Change Number),SCN是顺序递增的一个数字,在Oracle 中用来标识数据库的每一次改动,及其先后顺序。一种常见的SCN是,当用户执行事务提交(commit)时,系统则将当前SCN赋给该事务。

2、一般用法

查看系统当前SCN:

select dbms_flashback.get_system_change_number from dual;


通过ora_rowscn,可得到table表的每一条记录对应的SCN:

select ora_rowscn, t.* from my_table t;


通过timestamp_to_scn(),将timestamp转换为scn;

通过scn_to_timestamp(),将scn转换为timestamp。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: