降低分區表的High Water Mark

一、場景

某天發現操作系統的空間快100%,左後檢查發現時某個表空間無限制的增大,即將達到100%,此時需要收縮表空間,但由於HWM的原因,無法直接resize,需要使用Move分區的方法進行。

 

二、操作步驟

1、檢查當前系統空間;
[root@alex、 ~]# df -kh
文件系統              容量  已用 可用 已用% 掛載點
/dev/mapper/VolGroup00-LogVol00
                      384G  357G  7.5G  98% /
/dev/sda1              99M   13M   82M  13% /boot
tmpfs                 5.9G  2.4G  3.6G  40% /dev/shm

2、找出佔用空間最多的目錄和文件;
[root@alex oracle]# du -sh oradata/
336G    oradata/

3、找出佔用空間最多的表空間;
select tablespace_name,bytes/1024/1024 from dba_data_files;
TABLESPACE_NAME                BYTES/1024/1024
------------------------------ ---------------
SYSTEM                                    4096
SYSAUX                                    4096
UNDOTBS1                                  8192
USERS                                     8192
TBS_ALEX                       311728

4、清除部分空間,作爲接近HWM的分區新的存儲空間,該表爲LIST分區表,包含執行時間字段,3個月前的數據可以清楚;
1)找出可以清除的數據;
SELECT 'P_'||upper(taskid) FROM TB_TASK  WHERE EXECTIME <= to_date('20110901 23:59:59','yyyymmddhh24:mi:ss') AND DELFLAG='n' ORDER BY EXECTIME;
2)執行清除;
alter table tb_alex drop P_749160901374E9FAECB03B7;

 此時HWM不變,表空間依然無法resize;


5、找出接近高水位上的分區,並執行MOVE;
select partition_name,block_id from dba_extents where tablespace_name='TBS_ALEX order by 2 desc;
------------------------------ ----------
P_749160901374E9FAECB03B7         3139328
1)執行分區MOVE
alter table TB_ALEX move partition P_647AF670136CD234C78255E;
2)檢查該分區新的Block_ID,應小於MOVE前的的值;
select segment_name,block_id from dba_extents where partition_name='P_647AF670136CD234C78255E';

6、回收空間
alter tablespace TBS_ALEX resize 300000m;
表空間已更改。
 

7、限制表空間無限擴展,設定一個最高值;

ALTER TABLESPACE TBS_ALEX AUTOEXTEND ON NEXT 100M MAXSIZE 300000m;

ALTER TABLESPACE TBS_ALEX AUTOEXTEND OFF;

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章