在开发或客户使用过程中,难免会出现误操作或脏数据,那么怎么迅速处理这个问题呢?
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');
测试:
create table A (
a number,
b number
)
select sysdate from dual;2014-6-20 17:35:50
insert into a values(1,2);
insert into a values(2,2);
insert into a values(3,2);
insert into a values(4,2);
insert into a values(5,2);
insert into a values(6,2);
查看现在的效果图:
查看刚建完表时的数据:
执行回滚操作,执行之后的结果:
到此,我们可以看出,这个操作真的好用,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的时候,由于原始版本的行占据了相应的物理地址,所以,也需要行迁移.