---关于回收站
1.从oracle10g开始删除数据库表的时候并不是真正删除,而是放到了recyclebin中,这个过程类似windows里面删除的文件会被临时放到回收站中。(truncate的表不放入回收站)
2.删除的表系统会自动地给它重命名,以BIN$开头如下所示:
3.查看被删掉的表的详细信息
select * from recyclebin;
---恢复drop掉的表
flashback table 原表名 to before drop;或
flashback table "BIN$b+XkkO1RS5K10uKo9BfmuA==$0" to before drop;
(必须9i或10g以上版本支持,flashback无法恢复全文索引)
---清空回收站
purge recyclebin;
---不经过回收站,永久删除
drop table 表名 purge
或者
停用数据库的回收站功能
--10.1版本中,修改隐藏参数_recyclebin:alter system set "_recyclebin"=false;
--10.2版本中,alter system set recyclebin=off;
----oracle Database 10g中的闪回表特性
--将表放在回收站里并不在原始表空间中释放空间,要释放空间需要清空回收站
----管理回收站
当表空间被回收站数据完全占满,以至于必须扩展数据文件来容纳更多数据时,可以说表空间处于“空间压力”情况下。此时,对象以先进先出的方式从回收站中自动清除。在删除表之前,相关对象(如索引)被删除。
---手动控制回收站
purge table 表名;
或者使用其回收站中的名称:
purge table "BIN$04LhcpndanfgMAAAAAANPw==$0";
此命令将从回收站中删除表test及所有相关对象如索引、约束,从而节省了空间。
----清除表空间users的回收站中的所有对象
purge tablespace users;
----限定只清除特定的用户
purge tablespace users user scott;
----scott用户可以用以下命令来清空自己的回收站
purge recyclebin;
----DBA使用以下命令清除任何表空间中的所有对象
purge dba_recyclebin;
--------------------------------------------------利用时间戳恢复-------------------------------------------------
恢复误删除数据信息:
1、执行 alter table table_name enable row movement;
2、执行 FlashBack table table_name to timestamp to_timestamp('2012-05-24 14:59:36','yyyy-mm-dd hh24:mi:ss');
查询历史操作数据信息:
比较合理的方法是先从闪回区查找出被误删的数据,再将被误删的数据插入到原来的表中。
1、执行 select * from A as of timestamp sysdate-10/1440;
该SQL语会查找出距离现在10分钟之前A表的所有数据。
sysdate-10/1440表示距离现在10分钟之前,1440这个数字表示一天有1440分钟。
如果不写距离时间,SQL语句可写成:select * from A as of timestamp sysdate;表示查找出到现在为止A表中的所有数据。
2、从以上查找出的数据中找出被误删的数据,再插入到原来的表中就可以了。