Oracle表数据误删恢复

问题描述

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。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Pierre_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值