recyclebin空间管理(ZT)

本文介绍了Oracle 10g中回收站的功能及其维护方法。回收站能够保存被删除的对象,便于恢复误删的数据。但长期积累可能导致空间占用过多,文中详细说明了如何手动清理回收站,包括删除特定对象、清空整个表空间以及禁用回收站等功能。

 

How to maintain Oracle10g Recyclebin?

作者:eygle | English Version 【转载时请以超链接形式标明文章和作者信息及本声明
链接:     

从Oracle10g开始,Oracle引入了flashback drop的新特性,这个新特性,允许你从当前数据库中恢复一个被drop了的对象。在执行drop操作时,现在Oracle不是真正删除它,而是将该对象自动将放入回收站。对于一个对象的删除,其实仅仅就是简单的重令名操作。


所谓的回收站,是一个虚拟的容器,用于存放所有被删除的对象。在回收站中,被删除的对象将占用创建时的同样的空间,你甚至还可以对已经删除的表查询,也可以利用flashback功能来恢复它, 这个就是flashback drop功能。

这个功能虽然可以极大的简化误drop导致的恢复操作,但是长时间的积累可能会导致大量的空间占用(虽然Oracle具有自己的清理机制),很多时候我们需要手工介入去清理回收站。本文主要介绍清理回收站的几种方法.

 1.大量累计的空间占用

Connected to Oracle Database 10g Enterprise Edition Release 10.1.0.3.0 
Connected as SYS

SQL> col owner for a12
SQL> select owner,object_name,CREATETIME,DROPTIME from dba_recyclebin
  2  order by droptime
  3  /
OWNER        OBJECT_NAME                    CREATETIME          DROPTIME
------------ ------------------------------ ------------------- -------------------
COMMON       BIN$AHsQ+pi+Kb/gRAADumkBdQ==$0 2005-08-29:16:42:19 2005-09-11:15:36:17
COMMON       BIN$AHsQ+pi9Kb/gRAADumkBdQ==$0 2005-08-29:16:42:19 2005-09-11:15:36:17
PDA          BIN$AdEb4zqqUcTgRAADumkBdQ==$0 2005-09-05:10:31:01 2005-09-28:15:40:39
......
BJLAIS_RUN   BIN$BtkGRT0dSwfgRAADumkBdQ==$0 2005-11-30:10:54:07 2005-12-01:16:13:17
BJLAIS_RUN   BIN$BtkGRT0cSwfgRAADumkBdQ==$0 2005-11-30:10:54:07 2005-12-01:16:13:17
750 rows selected
SQL> 

2.不同用户在回收站的对象

SQL> select owner,count(*) from dba_recyclebin group by owner;   
OWNER                  COUNT(*)
-------------------- ----------
BJLAIS_RUN                   44
COMMON                        8
MMSBLOG                     618
MMSHAWA_RUN                   2
PDA                           8
RING_RUN                     70
6 rows selected.

3.我们可以指定删除某些特定对象

SQL> purge table common.T_SERVICE_CODE_INFO;

Table purged.

4.指定清除某个表空间的所有回收站对象

SQL> purge tablespace common;
Tablespace purged.
SQL> select owner,count(*) from dba_recyclebin group by owner;   
OWNER                  COUNT(*)
-------------------- ----------
BJLAIS_RUN                   44
MMSBLOG                     618
MMSHAWA_RUN                   2
PDA                           8
RING_RUN                     70

5.以SYSDBA身份可以清除所有回收站对象

SQL> purge dba_recyclebin;

DBA Recyclebin purged.

SQL> select owner,count(*) from dba_recyclebin group by owner;  

no rows selected

6.禁用recyclebin

 

如果我们不希望使用Oracle的recyclebin,可以通过参数禁用这个特性。

在Oracle10gR1中,通过修改一个隐含参数:_recyclebin 为False可以禁用这个特性:

SQL> set linesize 132
SQL> column name format a30
SQL> column value format a25
SQL> select
  2    x.ksppinm  name,
  y.ksppstvl  value,
  3    y.ksppstdf  isdefault,
  4    5    decode(bitand(y.ksppstvf,7),1,'MODIFIED',4,'SYSTEM_MOD','FALSE')  ismod,
  6    decode(bitand(y.ksppstvf,2),2,'TRUE','FALSE')  isadj
  7  from
  8    sys.x$ksppi x,
  9    sys.x$ksppcv y
 10  where
 11    x.inst_id = userenv('Instance') and
 12    y.inst_id = userenv('Instance') and
 13    x.indx = y.indx and
 14    x.ksppinm like '%&par%'
 15  order by
 16    translate(x.ksppinm, ' _', ' ')
 17  /
Enter value for par: recyclebin
old  14:   x.ksppinm like '%&par%'
new  14:   x.ksppinm like '%recyclebin%'
NAME                           VALUE                     ISDEFAULT ISMOD      ISADJ
------------------------------ ------------------------- --------- ---------- -----
_recyclebin                    TRUE                      TRUE      FALSE      FALSE
1 row selected.

在Oracle10gR2中,recyclebin变成了一个常规参数,可以在session/system级动态修改:

[oracle@danaly ~]$ sqlplus "/ as sysdba"
SQL*Plus: Release 10.2.0.1.0 - Production on Mon Dec 12 15:34:56 2005
Copyright (c) 1982, 2005, Oracle.  All rights reserved.

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, Oracle Label Security, OLAP and Data Mining Scoring Engine options
SQL> show parameter recyclebin 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
recyclebin                           string      on
SQL> alter session set recyclebin=off;
Session altered.
SQL> alter session set recyclebin=on
  2  /
Session altered.
SQL> alter system set recyclebin=off;
System altered.
SQL> alter system set recyclebin=on;
System altered.

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

转载于:http://blog.itpub.net/228190/viewspace-1056/

Oracle数据库中的回收站(Recyclebin)功能允许用户恢复意外删除的数据库对象,如表、索引等,而无需从备份中恢复。这一特性极大地简化了数据恢复过程,提高了数据库管理的效率。回收站主要适用于非系统表空间中的对象,这意味着如果一个表位于非系统的、本地管理的表空间中,即使它的一个或多个依赖段(对象)位于字典管理的表空间中,这些对象也将受到回收站的保护[^1]。 ### 查看回收站内容 要查看回收站中的内容,可以使用`SHOW RECYCLEBIN`命令或者查询`RECYCLEBIN`视图。对于DBA来说,可能更倾向于使用SQL查询来获取更详细的回收站信息。例如: ```sql SELECT * FROM RECYCLEBIN; ``` 此查询将显示所有可回收对象的信息,包括原对象名称、对象类型、所属表空间、以及在回收站中的名称等。通过这些信息,DBA可以确定哪些对象可以从回收站中恢复或永久删除。 ### 清理回收站 当确定某些对象不再需要恢复时,可以通过`PURGE`命令从回收站中移除这些对象。`PURGE`命令可以作用于特定的对象,也可以用于清空整个回收站。例如,要清除特定的回收站条目,可以使用如下命令: ```sql PURGE TABLE "RECYCLEBIN_OBJECT_NAME"; ``` 其中,`RECYCLEBIN_OBJECT_NAME`是回收站中对象的实际名称,这通常不是原始对象的名称。若要清空整个回收站,可以使用: ```sql PURGE RECYCLEBIN; ``` 需要注意的是,执行`PURGE`操作后,相关对象将无法恢复,因此在执行此操作前应确保已经确认不再需要这些对象。 ### 恢复被删除的对象 恢复被删除的对象是回收站的主要用途之一。当需要恢复某个已被删除的对象时,可以使用`FLASHBACK DROP`命令。这个命令可以将对象恢复到其被删除前的状态,包括对象的结构和数据。例如,要恢复名为`EMPLOYEES`的表,可以执行: ```sql FLASHBACK TABLE EMPLOYEES TO BEFORE DROP; ``` 如果回收站中有多个同名的对象(例如,多次删除了同一个表),则可能需要指定回收站中的具体对象名来确保恢复正确的版本: ```sql FLASHBACK TABLE "RECYCLEBIN_OBJECT_NAME" TO BEFORE DROP RENAME TO EMPLOYEES; ``` 这里,`RENAME TO EMPLOYEES`子句用于在恢复时给对象一个新的名称,这对于恢复具有相同名称的不同对象非常有用。 ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值