oracle回滚到某个时间点的sql语句
在开发或客户使⽤过程中,难免会出现误操作或脏数据,那么怎么迅速处理这个问题呢?
1.备份还原就⽤了,太⿇烦。
就是使⽤ORACLE的备份功能,然后在还原,还原的时候新建⼀个库,然后使⽤dblink进⾏连接。
将数据导回去。
oracle 时间转换
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还原到某⼀点!