oracle虚拟机回收站在那里,Oracle中的回收站(Recycle Bin)

什么是Recycle Bin

回收站(Recycle Bin)实际上是包含删除对象信息的数据字典表。删除表和其他相关对象,比如索引、约束和嵌套表,实际上没有被真的删除,还是继续占用空间。直到被从回收站中purged出去,才能从数据库释放相关的表空间的空间。

每个用户可以拥有自己的回收站,当然除非用户拥有SYSDBA权限,否则默认都只可以访问用户所属的回收站。

可以通过下列语句,查看在回收站中自己的对象:

select * from recyclebin;

特别需要注意的是:在sys下drop的表是不记录recyclebin的。

使用Flashback Table命令,可以在无需使用时间点恢复的情况下,还原drop table语句的结果。

由初始化参数REECYCLEBIN用于控制闪回删除功能是打开(on)还是关闭(off)。如果是off,则删除的表不会进入回收站。如果是on,则删除的表将进入回收站,并且可能可以恢复(取决于是否还被保留)。默认情况下,不管10g和11g中。RECYCLEBIN设置为ON。

如果不启用回收站,则删除表时,与该表及其从属对象关联的空间会立即变为可回收。

如果启用了回收站,则删除表时,与该表及其从属对象管理的空间不会立即变为可回收。即使该空间确实显示在dba_free_space中。相反,会在回收站中引用删除的对象,这些对象仍属于其各自的所有者。在空间不紧张时,绝不会把回收站对象使用的快乐自动回收。从而可以尽可能长的期限内恢复回收站的对象。

回收站中对象的命名

将删除的表“移动”到回收站时,将使用系统生成的名称对该表机器关联对象和约束条件进行重命名。

这样做的好处是避免以下情况:

用户删除表后,又用相同的名重建,又再删除。

两个用户使用相同的表名,但又都删除这些表。

重命名惯例如下:BIN$unique_id$version。

其中unique_id是该对象的全局唯一标识符,包含26个字符,用于在所有数据库之间的唯一的标识回收站名称。

而version是数据库分配的版本号。

只要回收站对象使用的空间没有被回收,就可以使用闪回删除功能恢复这些对象。

下面是回收站对象的回收策略:

显式发出purge命令时执行手动清理

空间不足时执行自动清除:对象在回收站中时,DBA_FREE_SPACE也会报告其对应的空间,因为这些空间是可以自动回收的。然后按以下顺序使用特定表空间中的空闲空间:

1.与回收站对象不对应的空闲空间

2.与回收站对象对应的空闲空间。在这种情况下,将使用先进先出(FIFO)算法自动将回收站对象从回收站清理

3.自动分配的空闲空间。

回收站管理

启停回收站

停用回收站

ALTER SESSION SET recyclebin = OFF;

ALTER SYSTEM SET recyclebin = OFF SCOPE = SPFILE;

启用回收站

ALTER SESSION SET recyclebin = ON;

ALTER SYSTEM SET recyclebin = ON SCOPE = SPFILE;

注意:上述操作都需要重启数据库生效。

查看和查询回收站中的对象

试图描述

USER_RECYCLEBIN用户查看回收站中自身删除的对象,也可用通过同义词recyclebin查看。

DBA_RECYCLEBIN管理员查看回收站中所有的删除对象。

查看回收站中中的对象

select original_name, object_name, ts_name, droptime from dba_recyclebin

SQL> show recyclebin  –不显示索引

ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME

—————- —————————— ———— ——————-

PP               BIN$9dV9fqwIE+TgQwEAAH/i4w==$0 TABLE        2014-03-31:00:30:15

PP               BIN$9dV9fqwHE+TgQwEAAH/i4w==$0 TABLE        2014-03-31:00:16:25

PP               BIN$9dV9fqwGE+TgQwEAAH/i4w==$0 TABLE        2014-03-30:23:21:34

查询回收站中的对象,但是必须要用”"指定正确回收站中的对象名

SQL> select * from “BIN$9dV9fqwGE+TgQwEAAH/i4w==$0″;

回收站:手动回收空间

使用PURGE命令可从回收站中永久地删除对象。从回收站中清除某个对象时,会从数据库中永久地删除该对象及其从属对象。因此,将无法再使用闪回删除功能恢复从回收站中清除的对象。

下面是可能使用的一些PURGE命令:

清除指定表和索引

PURGE {TABLE |INDEX }

示范:

purge table ”BIN$9dV9fqwGE+TgQwEAAH/i4w==$0″;

purge table table_name;

purge index index_name;

清除驻留在指定表空间中的所有对象(也可能清楚从属、驻留在其它表空间中的对象)

PURGE TABLESPACE [USER ]

示范:

purge tablespace test;

purge tablespace test user z;

清除属于当前用户的所有对象或者清除所有对象(dba_recyclenbin,必须具有足够的系统权限或者sysdba权限)

PURGE [USER_|DBA_]RECYCLEBIN

不使用回收站

drop table [purge];

表空间中的对象不会移到回收站中,且回收站中所属该表空间的对象也会被清理。

drop tablespace [including contents]

从数据库中永久地删除该用户及其拥有的所有对象。且回收站中所属的已删除用户的所有对象都将被清理。

drop user [cascade]

从回收站回复表

使用flashback table…to before drop语句从回收站恢复对象。你可以指点回收站中的对象名,也可以指定原始表名。

rename to子句选项可以使恢复的时候重命名。

语法:

FLASHBACK TABLE TO BEFORE DROP

[RENAME TO ];

示范:

在恢复前,先查询,所需要的信息

SQL> show recyclebin

ORIGINAL NAME    RECYCLEBIN NAME                OBJECT TYPE  DROP TIME

—————- —————————— ———— ——————-

PP               BIN$9dV9fqwIE+TgQwEAAH/i4w==$0 TABLE        2014-03-31:00:30:15

PP               BIN$9dV9fqwHE+TgQwEAAH/i4w==$0 TABLE        2014-03-31:00:16:25

PP               BIN$9dV9fqwGE+TgQwEAAH/i4w==$0 TABLE        2014-03-30:23:21:34

或者

SQL> select object_name, original_name, createtime from recyclebin;

OBJECT_NAME                    ORIGINAL_NAME                    CREATETIME

—————————— ——————————– ——————-

BIN$9dV9fqwHE+TgQwEAAH/i4w==$0 PP                               2014-03-31:00:16:19

BIN$9dV9fqwGE+TgQwEAAH/i4w==$0 PP                               2014-03-30:23:21:28

BIN$9dV9fqwIE+TgQwEAAH/i4w==$0 PP                               2014-03-31:00:30:13

使用如下命令恢复表:

flashback table pp to before drop rename to zzz;

SQL> select object_name, original_name, createtime from recyclebin;OBJECT_NAME                   ORIGINAL_NAME                    CREATETIME

—————————— ——————————– ——————-

BIN$9dV9fqwHE+TgQwEAAH/i4w==$0 PP                               2014-03-31:00:16:19

BIN$9dV9fqwGE+TgQwEAAH/i4w==$0 PP                               2014-03-30:23:21:28

我们可以看出,恢复的表是最后被删除的,但是这个表不是我们实际需要的,怎么办?

还可以使用回收站中的对象名:

flashback table “BIN$9dV9fqwGE+TgQwEAAH/i4w==$0″ to before drop;

恢复依赖对象

注意:恢复删除的表时,恢复的索引、触发器和约束条件将保留各自的回收站名称。因此,建议在闪回删除表前查询回收站和DBA_CONSTRAINTS。

1、在闪回之前,必须要先查询好表的相关信息

SQL>  select object_name, original_name, createtime from recyclebin;

OBJECT_NAME                    ORIGINAL_NAME                    CREATETIME

—————————— ——————————– ——————-

BIN$9daqMpoEFoLgQwEAAH/mBQ==$0 IDX_PPP_02                       2014-03-31:00:45:01

BIN$9daqMpoFFoLgQwEAAH/mBQ==$0 IDX_PPP_01                       2014-03-31:00:45:14

BIN$9daqMpoGFoLgQwEAAH/mBQ==$0 PP                               2014-03-31:00:44:32

2、恢复表

SQL> flashback table pp to before drop;

3、查询在回收站中恢复表对应关联对象

SQL> select index_name from user_indexes where table_name=’PP’;

INDEX_NAME

——————————

BIN$9daqMpoFFoLgQwEAAH/mBQ==$0

BIN$9daqMpoEFoLgQwEAAH/mBQ==$0

4、重命名到正确的对象名

alter index “BIN$9daqMpoFFoLgQwEAAH/mBQ==$0″ rename to IDX_PPP_01;

alter index “BIN$9daqMpoEFoLgQwEAAH/mBQ==$0″ rename to IDX_PPP_02;

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/29960155/viewspace-1320182/,如需转载,请注明出处,否则将追究法律责任。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值