今天某个系统上的数据库,在日常维护的过程中发现,查询表空间使用情况,比其他的数据库明显慢,得等到10分钟左右才能得到查询结果。
需查询发现是因为Oracle 10g的的新特性RECYCLEBIN机制导致的。
按网上介绍执行了
SQL> purge recyclebin;
语句,语句执行的很快,但是问题仍未解决。根据过去学习记忆,执行了如下语句:
SQL> purge dba_recyclebin;
该语句执行时间相当长,可能是因为业务时间执行原因导致的,最终问题得以解决。说明DBA有必要定期进行对Oracle回收站的清理操作。
[@more@]如下为具体处理过程:
[root@dbserv ~]# su - oracle
-bash-3.2$ sqlplus / as sysdba
SQL> select count(*) from sys.RECYCLEBIN$;
COUNT(*)
----------
135178
SQL> PURGE DBA_RECYCLEBIN;
DBA Recyclebin purged.
以上的purge过程大概执行了5过多小时,终于执行完了。
SQL> select count(*) from sys.RECYCLEBIN$;
COUNT(*)
----------
0
在执行如下表空间使用情况查询后,很快就看到了结果。
SQL> set linesize 1000
SQL> set wrap off
SQL> select substr(a.TABLESPACE_NAME,1,30) TablespaceName,
2 sum(a.bytes/1024/1024) as "Totle_size(M)",
3 sum(nvl(b.free_space1/1024/1024,0)) as "Free_space(M)",
4 sum(a.bytes/1024/1024)-sum(nvl(b.free_space1/1024/1024,0)) as "Used_space(M)",
5 round((sum(a.bytes/1024/1024)-sum(nvl(b.free_space1/1024/1024,0)))*100/sum(a.bytes/1024/1024),2) as "Used_percent%" from dba_data_files a,
6 (select sum(nvl(bytes,0)) free_space1,file_id from dba_free_space
7 group by file_id) b where a.file_id = b.file_id(+) group by a.TABLESPACE_NAME
8 order by "Used_percent%";
TABLESPACENAME Totle_size(M) Free_space(M) Used_space(M) Used_percent%
------------------------------------------------------------ ------------- ------------- ------------- -------------
USERS 500 499.9375 .0625 .01
SYSAUX 7000 4903.25 2096.75 29.95
UNDOTBS2 7000 4902.3125 2097.6875 29.97
SYSTEM 2000 638.3125 1361.6875 68.08
...
SQL>