Chinaunix首页 | 论坛 | 博客
  • 博客访问: 229377
  • 博文数量: 57
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 674
  • 用 户 组: 普通用户
  • 注册时间: 2013-11-30 22:48
个人简介

2014,换个角度,希望接下来的事情值得期待。

文章分类

全部博文(57)

文章存档

2015年(1)

2014年(55)

2013年(1)

我的朋友

分类: Oracle

2014-01-25 15:12:08

从10g出现的,用于恢复用户删除的对象(包括表和索引,约束,触发器,LOB段,LOB索引段,对于SYS和SYSTEM用户无效),Flashback Drop基于Tablespace RecycleBin实现。 只闪回与表相关连的对象。如果函数或者存储的恢复,则要使用Flashback Query。 每个表空间都有一个回收站的逻辑概念区域,当执行drop时,被删除的表和相关连对象,会转移到回收站, 以便用户恢复。
一、查看回收站功能是否启用
SQL> show parameter recyclebin;


NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
recyclebin                           string      OFF
二、启用回收站功能,需要重启数据库(如果只在当前会话级别,则不用重启)


SQL> alter session set recyclebin=on;


会话已更改。


SQL>  alter session set recyclebin=off;


会话已更改。


SQL>  alter system set recyclebin=on;
 alter system set recyclebin=on
                               *
第 1 行出现错误:
ORA-02096: 此选项的指定初始化参数不可修改


SQL> alter system set recyclebin=on scope=spfile;


系统已更改。


SQL> shutdown immediate;
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
SQL> startup
ORACLE 例程已经启动。


Total System Global Area  778387456 bytes
Fixed Size                  1374808 bytes
Variable Size             352322984 bytes
Database Buffers          419430400 bytes
Redo Buffers                5259264 bytes
数据库装载完毕。
数据库已经打开。


SQL> show parameter recyclebin


NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
recyclebin                           string      ON


禁用回收站,则删除的对象不会保存在recyclebin里面,如果删除时指定purge,则也不会保存。
drop table table_name purge;


三、测试
3.1连接到非sys或system测试用户
SQL> conn scott/tiger;
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 
Connected as scott
3.2查看当前用户下的表
SQL> select table_name from user_tables;
 
TABLE_NAME
------------------------------
DEPT
EMP
BONUS
SALGRADE
TESTNAME
 3.3选择一个进行删除操作
SQL> desc testname;
Name Type         Nullable Default Comments 
---- ------------ -------- ------- -------- 
NAME VARCHAR2(50) Y   


SQL> select * From testname;
 
NAME
--------------------------------------------------
A%_WQ123
A%BWQ123
AB_WQ123
CD EF
3.4删除
SQL> drop table testname;
 
Table dropped
 
SQL> select * From testname;
 
select * From testname
 
ORA-00942: 表或视图不存在


SQL> show recyclebin;
ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME
---------------- ------------------------------ ------------ -------------------
TESTNAME         BIN$fm+hddx2TWCNTBzn7GT+Zg==$0 TABLE        2014-01-25:13:01:27
3.5查看回收站中的对象
SQL> select object_name,original_name,operation from recyclebin;


OBJECT_NAME                    ORIGINAL_NAME                    OPERATION
------------------------------ -------------------------------- ---------
BIN$fm+hddx2TWCNTBzn7GT+Zg==$0 TESTNAME                         DROP


3.6查看对象中的内容 ,注意表名用引号括起来,否则可能会由于特殊符号的问题,导致不认为是一个表名。
SQL> select * From BIN$fm+hddx2TWCNTBzn7GT+Zg==$0 ;
select * From BIN$fm+hddx2TWCNTBzn7GT+Zg==$0
                    *
第 1 行出现错误:
ORA-00933: SQL 命令未正确结束




SQL> select * From "BIN$fm+hddx2TWCNTBzn7GT+Zg==$0";


NAME
--------------------------------------------------
A%_WQ123
A%BWQ123
AB_WQ123
CD EF 


回收站是一个逻辑概念,不会存储数据,因此被删除的对象和普通对象实际上位于同样的存储区域,这样可能会产生争用或覆盖的问题.
覆盖以先进先出的顺序进行。


3.7闪回
SQL> flashback table testname to before drop;


闪回完成。


SQL> select * from testname;


NAME
--------------------------------------------------
A%_WQ123
A%BWQ123
AB_WQ123
CD EF


可以手动删除recyclebin表空间
purge tablespace tablespace_name 删除某个表空间的recyclebin
purge tablespace tablespace user user_name删除某个表空间下面recyclebin中指定的用户的对象
purge recyclebin清除当前用户的recyclebin中的对象
purge dba_recyclebin 删除所有用户的recyclebin中的对象,需要DBA权限。


drop table table_name purge 永久删除对象,不存放于recyclebin中,不能用flashback恢复,需要进行不完全恢复。
purge index recycle_bin_object_name ,释放index所占用的空间,因为索引可以重建(包括在线重建)。


3.8 如果闪回时,发现已经有重名对象,则可以在闪回过程中重命名要闪回的对象
SQL> drop table testname;


表已删除。


SQL> create table testname (id number,name varchar2(32));


表已创建。


SQL> flashback table testname to before drop;
flashback table testname to before drop
*
第 1 行出现错误:
ORA-38312: 原始名称已被现有对象使用




SQL>  flashback table testname to before drop rename to testnamenew;


闪回完成。


SQL> select * From testnamenew;


NAME
--------------------------------------------------
A%_WQ123
A%BWQ123
AB_WQ123
CD EF


3.9闪回完成后,则recyclebin中的对象消失。
SQL> drop table testnamenew;


表已删除。


SQL> select object_name,original_name, operation from recyclebin;


OBJECT_NAME                    ORIGINAL_NAME                    OPERATION
------------------------------ -------------------------------- ---------
BIN$WIyQaK0XQKm00pjxNursyA==$0 TESTNAMENEW                      DROP


SQL> flashback table testnamenew to before drop;


闪回完成。


SQL> select object_name,original_name, operation from recyclebin;


未选定行


Flashback Drop 特性
1.只用于非系统表空间和本地管理的表空间
2.指向该对象的外键约束需要重建
3.对象恢复的成功依赖于对象空间是否被覆盖。
4.当删除表时,对应的物化视图会被删除,但是不会恢复,需要重建。
5.recyclebin中的对象只读。
6.闪回表时,索引等信息会恢复,但是会被ORACLE自动命名,因此需要重新命名。
alter index index_name rename to original_name;

阅读(1640) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~