ORACLE中对数据表进行回滚到某个时间点

在开发或客户使用过程中,难免会出现误操作或脏数据,那么怎么迅速处理这个问题呢?

1.备份还原就不用了吧,这样操作的话,每次对数据库的数据进行增删改的时候都需要进行一次备份操作,实在是太过麻烦。

就是使用ORACLE的备份功能,然后在还原,还原的时候新建一个库,然后使用dblink进行连接。

将数据导回去。

2.使用oracle的还原操作,但是这个操作只能还原数据,表发生改变就不能了,切记。这个语句是这样的:

---说明这个语句来自网络:地址:这里就是笔记。

select * from 表名 as of timestamp to_timestamp('2014-6-19 1:10:00','yyyy-mm-dd hh24:mi:ss');

alter table 表名 enable row movement;
flashback table 表名 to timestamp to_timestamp('2011-03-04 05:00:00','yyyy-mm-dd HH24:MI:SS');

到此,我们可以看出,这个操作真的好用,ok。我们来分析一下

select * from a as of timestamp to_timestamp('2014-6-20 17:35:50','yyyy-mm-dd hh24:mi:ss');

as of:截至,就是到某一个事件。

to_timestamp():时间转换函数,转换成更加下精确,和to_date()作用一样。

AS OF TIMESTAMP查询这个表到某一时刻。

AS OF TIMESTAMP但是在某些情况下,我们建议使用AS OF SCN的方式执行Flashback Query。如需要对多个相互有主外键约束的表进行恢复时,如果使用AS OF TIMESTAMP的方式,可能会由于时间点不统一的缘故造成数据选择或插入失败,通过AS OF SCN方式则能够确保记录处理的时间点一致。

alter table a enable row movement;

enable row movement:行迁移,意思就是,一个现存的行允许改变其rowid(物理存储地址),通常情况下,数据行在分配了空间之后,行的rowid就固定了,即使以后行长度超出预留的空间,也不会将其移动,在长数据行的情况下,表会产生行链接,对于io来说,行链接是不利的,为了性能,就需要将行调整为在单个物理存储地址下能保存行的所有信息,这需要行迁移.另外在flashback的时候,由于原始版本的行占据了相应的物理地址,所以,也需要行迁移.

其它的,比如说在收缩段空间的情况下,由于要把所有段数据向段前挤压,大部分行都需要改变其物理地址.也需要行迁。

flashback table a to timestamp to_timestamp('2014-6-20 17:35:50','yyyy-mm-dd HH24:MI:SS');

flashback table还原到某一时间点!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值