ITPub博客

首页 > 数据库 > Oracle > Oracle空间碎片的处理

Oracle空间碎片的处理

原创 Oracle 作者:mqxiao07 时间:2007-02-09 00:23:50 0 删除 编辑
  今天在客户现场处理了一起空间碎片的问题。有问题的表空间已经使用97.1%,数据文件为自动扩展,但磁盘空间已经很紧张。整个表空间已经达到14G之多,另外,查询速度也是越来越慢。[@more@]

  查询如下语句:

SQL> select tablespace_name "TABLESPACE",file_id,count(*) "PIECES", max(blocks) "MAXIMUM",min(blocks) "MinIMUM",avg(blocks) "AVERAGE",SUM(blocks) "TOTAL" from dba_free_space group by tablespace_name,file_id;


TABLESPACE FILE_ID PIECES MAXIMUM MinIMUM AVERAGE TOTAL
---------- -------- ------- ------- ------- ---------- -----
SMSCDRRPT 16 1 15600 15600 15600 15600
SMSCDRRPT 17 3 240 32 106.666667 320
SMSCDRRPT 18 2 15344 144 7744 15488
SMSCDRRPT 20 1 15856 15856 15856 15856
SMSCDRRPT 21 5 3072 16 704 3520
SMSCDRRPT 22 2 16112 6912 11512 23024
SMSCDRRPT 23 1 32496 32496 32496 32496

SQL> col FSFI for 999
SQL> select tablespace_name,sqrt(max(blocks)/sum(blocks))*
(100/sqrt(sqrt(count(blocks)))) FSFI from dba_free_space group by tablespace_name order by 1;

TABLESPACE_NAME FSFI
------------------------- ----
CWMLITE 100
DRSYS 100
EXAMPLE 100
INDX 100
RMANTS 100
SMSCDMACDR01 100
SMSCDMACDR02 100
SMSCDMACDR03 100
SMSCDRRPT 28
SMSGSMCDR01 100
SMSGSMCDR02 100

TABLESPACE_NAME FSFI
------------------------- ----
SMSGSMCDR03 100
SYSTEM 100
TOOLS 100
UNDOTBS 17
USERINDEX 84
USERS 36

SQL> col owner for a5
SQL> col segment_name for a25
SQL>select owner, SEGMENT_NAME,TABLESPACE_NAME ,bytes/1024/1024 mb from dba_segments where tablespa;

OWNER SEGMENT_NAME TABLESPACE_NAME MB
----- ------------------------- ------------------------- ----------
SMS T_RPT_COUNT SMSCDRRPT 8378.00781
SMS T_RPT_COUNT_BACKUP SMSCDRRPT .0625
SMS T_CDR_FILE_REC SMSCDRRPT .0625
SMS T_C_FILELOAD SMSCDRRPT 39
SMS T_EMAIL_LIST SMSCDRRPT .0625
SMS IDX_T_PRPT_COUNT SMSCDRRPT 5483.00781
SMS IDX_T_RPT_COUNT_BACKUP SMSCDRRPT .0625
SMS PK_T_CDR_FILE_REC SMSCDRRPT .0625
SMS IDX_T_C_FILELOAD SMSCDRRPT 20

已选择9行。

SMSCDRRPT表空间的碎片问题还是很严重的,alter tablespace SMSCDRRPT coalesce好象只对范围起作用,但对段的碎片无能为力,表空间中有两最大的SEGMENT_NAME ,一个是表,达到8G多,另一个是索引,5G多。经沟通得知情况如下:T_RPT_COUNT 可以只保存最近三个月以来的数据,其它的都可以不保留:),如此一来,问题就非常容易处理了。

1、create table T_PRPT_COUNTNEW as select * from T_RPT_COUNT where ......取最近三个月的;

2、truncate T_PRPT_COUNT;

3、drop T_PRPT_COUNT;

3、rename T_PRPT_COUNTNEW to T_PRPT_COUNT;

做完之后,空间降为800M,用户非常^_^。
 

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

上一篇: Oracle培训
下一篇: temp tablespace监控
请登录后发表评论 登录
全部评论
  • 博文量
    21
  • 访问量
    498022