降低分区表的High Water Mark
2012-05-20 14:38:57 来源:WEB开发网 一、场景
某天发现操作系统的空间快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;
更多精彩
赞助商链接