降低分区表的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;

 

 

 

 

你可能感兴趣的:(mark,回收,分区表,water,high)