oracle滚动清理,Oracle清理recyclebin的几种方法 | 信春哥,系统稳,闭眼上线不回滚!...

有人在群里咨询Oracle数据库的回收站里的表太多了,直接使用PURGE RECYCLEBIN命令清理回收站非常慢,对数据库的性能存在一定的影响,有没有什么办法,可以分批进行清理。

在正常情况下,只要表空间可以扩展,也就是表空间还有可用空间,那么Oracle就不会清理回收站而释放空间。就好比在表空间充足的情况下,一张DELETE操作非常频繁的表,你会发现这张表会越来越大,碎片越来越多,那些被删除的数据释放的空间Oracle并不会被使用,这就导致明明表空间还有使用率,但数据文件一直在扩展,只有在数据文件无法扩展时,才会使用这部分空间。回收站也是一样,表空间充足时,不会释放回收站内对象占用的空间,只有当表空间比较紧张的时候,才会回收这部分空间。所以定期清理回收站还是很有必要的。

正好我维护的数据库也存在被删除后放在回收站里的表,可以进行案例演示。

SQL> select OWNER,OBJECT_NAME,ORIGINAL_NAME,TS_NAME,type from dba_recyclebin order by 4;

OWNER OBJECT_NAME ORIGINAL_NAME TS_NAME TYPE

---------- ------------------------------ -------------------------------- ---------- ----------

CHGSHS BIN$UXRgImw4c6/gU2gCAArT/g==$0 FUL_D_STOCK_H_TEMP0815 TS_BSC TABLE

IVL_DEBUG BIN$RBweIEQ5nv7gU2oCAArKJg==$0 LT_STOCK_DIFF USERS TABLE

IVL_DEBUG BIN$NvMZ2/SZHBjgU2ACAApZDA==$0 ORD_S_STOCK_TEMP USERS TABLE

IVL_DEBUG BIN$NvMZ2/SYHBjgU2ACAApZDA==$0 IDX_ORD_S_STOCK_TEMP_01 USERS INDEX

… …

CHGSHS BIN$UXRVT29MbWvgU2gCAArvKQ==$0 IX_WMS_TB_WH_DAILY_201508_02 USERS INDEX

CHGSHS BIN$UXRVT29NbWvgU2gCAArvKQ==$0 WMS_TB_WH_DAILY_201508 USERS TABLE

CHGSHS BIN$UXRVT29LbWvgU2gCAArvKQ==$0 IX_WMS_TB_WH_DAILY_201508_01 USERS INDEX

105 rows selected.

DBA_RECYCLEBIN可以查看到当前数据库中所有回收站中的对象,USER_RECYCLEBIN和RECYCLEBIN只能看到当前用户下回收站中的对象,正常情况下,普通用户只能清理自己的回收站,DBA权限的用户可以清理所有用户的回收站。

可以按照表级别进行清理,只清理指定的表,可以通过表的名字进行清理,也可以按照回收站中的名字进行清理。

SQL> purge table chgshs.WMS_TB_WH_DAILY_201508;

Table purged.

SQL> purge table chgshs.”BIN$UXRVT29MbWvgU2gCAArvKQ==$0”;

Table purged.

可以直接清理掉指定用户在不同表空间中的对象,比如清理CHGSHS用户在USERS表空间里的所有对象,当然这里指的是已经在回收站里的被删除的对象,没有被删除到回收站的对象是不会被清理掉的。

SQL> purge tablespace users user CHGSHS;

Tablespace purged.

这样,CHGSHS用户的回收站中,存在于USERS表空间的对象就全部被清理掉了,在回收站中已经查询不到这些对象了。

SQL> select OWNER,OBJECT_NAME,ORIGINAL_NAME,TS_NAME,type from dba_recyclebin where owner='CHGSHS' and ts_name='USERS' order by 4;

no rows selected

可以按照表空间进行清理,这样会清理掉回收站中,所有存在于指定表空间中的对象,不管是哪个用户下的对象,只要存在于这个表空间,就全部被清理掉。比如,清理USERS表空间下的所有回收站中的对象。

SQL> purge tablespace users;

Tablespace purged.

这样,回收站中存在于USERS表空间中的所有对象,就都被清理掉了。

SQL> select OWNER,OBJECT_NAME,ORIGINAL_NAME,TS_NAME,type from dba_recyclebin where ts_name='USERS' order by 4;

no rows selected

可以按照用户级别进行清理,这样会清理掉这个用户下面的所有回收站的信息。但是这个操作只能在当前用户下执行,不存在PURGE USER这样的语法。下面清理CHGSHS用户下的所有回收站中的对象。

SQL> conn chgshs

Enter password:

Connected.

SQL> purge recyclebin;

Recyclebin purged.

这样CHGSHS用户下的所有回收站中的对象就被清理掉了。下面简单介绍下查询回收站信息的几种方法。

SELECT * FROM RECYCLEBIN;

SELECT * FROM USER_RECYCLEBIN;

SHOW RECYCLEBIN;

上面这三种方法效果是一样的,都是查询当前用户下的回收站信息,只能看到属于这个用户的回收站数据,看不到其他用户的回收站数据,最常用的就是SHOW RECYCLEBIN命令,毕竟这个命名会少敲好几下键盘。

SELECT * FROM DBA_RECYCLEBIN;

这个命令只能是DBA权限的用户使用,可以查询数据库中所有在回收站中的信息,也很常用。

以上几种清理回收站的操作,需要根据需求,选择适合的操作,如果回收站中的对象实在太多,而且又不想对性能造成影响,最好的方法是写一个脚本或者存储过程,慢慢去清理,毕竟清理回收站操作基本上是没有对操作时间的要求的,如果表空间使用率很紧张,可以先清理比较大的对象,先释放出大对象占用的空间,然后再慢慢清理其他的对象。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值