J2EE社区

苟有恒,何必三更起五更眠;
最无益,只怕一日曝十日寒.
posts - 241, comments - 318, trackbacks - 0, articles - 16

oracle数据恢复

Posted on 2011-12-23 10:33 xcp 阅读(4465) 评论(2)  编辑  收藏 所属分类: Database
 1.
表查询闪回
create table xcp as (select * from b_za_bzdzkxx);
select * from xcp;
select count(1) from xcp;--22001
select count(1) from xcp t where t.dzbh like '510521%';--7011
delete from xcp t where t.dzbh like '510521%';
select count(1) from xcp;--14990
--查找指定时间点前的数据
select count(1) from xcp as of timestamp to_timestamp('2011-12-23 10:49:30','yyyy-MM-dd hh24:mi:ss');--22001

select * from xcp for update;--添加一条记录
select count(1) from xcp;--14991

--恢复指定时间点的前delete数据(将删除恢复时间点后面的数据)

alter table xcp enable row movement;--启动的行移动功能
flashback table xcp to timestamp to_timestamp('2011-12-23 10:49:30','yyyy-MM-dd hh24:mi:ss');
select count(1) from xcp;--22001

--恢复指定时间点的前delete数据,并保留恢复时间点后面的数据

create table xcp2 as (select * from xcp t where t.createdtime>to_timestamp('2011-12-23 10:49:30','yyyy-MM-dd hh24:mi:ss'));
select * from xcp2;--临时表
alter table xcp enable row movement;--启动的行移动功能
flashback table xcp to timestamp to_timestamp('2011-12-23 10:49:30,'yyyy-MM-dd hh24:mi:ss');
select count(1) from xcp;--22001
insert into xcp select * from xcp2 --将临时表的数据再插入到源表
select count(1) from xcp;--22002


2.删除
闪回[10g+]
    删除闪回为删除oracle 10G提供了一个数据库安全机制,当用户删除一个表时,oracle 10G会将该表放到回收站中,回收站中的对象一直会保留,直到用户决定永久删除它们或出现表空间的空间不足时才会被删除。回收站是一个虚拟容器,用于存储所有被删除的对象。数据字典user_tables中的列dropped表示被删除的表,查询方法如下:
select table_name,dropped from user_tables;
--设置数据库是否启用回收站
alert session set recyclebin = off;
--查询回收站对象
select * from recyclebin;
select * from user_recyclebin;
select * from dba_recyclebin;


drop table xcp;
select count(1) from xcp;--0
--恢复drop的表
flashback table xcp to before drop;
select count(1) from xcp;--22001

如果不知道原表名,可以直接使用回收站中的名称进行闪回..
flashback table "BIN$JiXyAUO4R+u3qNVfQK/Kiw==$0" to before drop;
在回收的同时可以修改表名
flashback table "
BIN$JiXyAUO4R+u3qNVfQK/Kiw==$0" to before drop rename to xcp1;

--真正删除一个表,而不进入回收站,可以在删除表时增加purge选项
drop table xcp1 purge;
--也可以从回收站永久性删除表
purge table xcp1;
--删除当前用户回收站
purge recyclebin
--删除全体用户在回收站的资源
purge dba_resyclebin



3.数据库闪口
[10g+]
    使用数据库闪回功能,可以使数据库回到过去某一状态,语法如下:
        sql: alter database flashback on;
        sql: flashback database to scn 46963;
        sql: flashback database to timestamp to_timestamp('2007-2-12 12:00:00','yyyy-MM-dd hh24:mi:ss');



注:表结构修改后不能直接恢复
http://blog.csdn.net/colin_liu2009/article/details/6906548

http://www.xifenfei.com/2012/06/%E5%88%A9%E7%94%A8flashback-database%E5%AE%9E%E7%8E%B0%E9%83%A8%E5%88%86%E5%AF%B9%E8%B1%A1%E5%9B%9E%E6%BB%9A.html



名称: ♪4C.ESL | .↗Evon
口号: 遇到新问题♪先要寻找一个方案乄而不是创造一个方案こ
mail: 联系我


Feedback

# re: oracle中恢复 drop表或delete数据  回复  更多评论   

2011-12-23 14:04 by 疯狂
9i不行

# re: oracle中恢复 drop表或delete数据  回复  更多评论   

2011-12-23 15:43 by xcp
@疯狂
恩 要10G的以上

只有注册用户登录后才能发表评论。


网站导航: