参考文章:
Oracle调整表空间大小——ORA-03297: 文件包含在请求的 RESIZE 值以外使用的数据
个人文章:
创建表空间时,设置了最大表空间32G,自动扩展。
测试过程中导入了大量的数据导致表空间文件扩展到最大值,后删除测试数据,发现表空间文件占用空间不会自动减少。
网上查找资料收缩表空间的大小,在此过程中遇到不少问题,记录一下。
1、收缩表空间
ALTER DATABASE TEMPFILE ‘表空间文件‘ RESIZE 1024M
直接执行该语句,会报错ORA-03297: 文件包含在请求的 RESIZE 值以外使用的数据,原因是“数据文件空间并不是连续使用的,你只能resize到high water mark处,要想收回完整空余空间需要进行move操作”。
2、查询表空间high water mak
--1、查询表空间
SELECT TABLESPACE_NAME,SUM(BYTES)/1024/1024 MB,FILE_NAME,FILE_ID FROM DBA_DATA_FILES WHERE TABLESPACE_NAME=‘表空间‘ GROUP BY TABLESPACE_NAME,FILE_ID
--2、查询表空间high water mak
SELECT MAX(BLOCK_ID) FROM DBA_EXTENTS WHERE TABLESPACE_NAME=‘表空间‘ AND FILE_ID=文件ID;
MAX(BLOCK_ID)*8191/1024/1024/1024G即为能RESIZE到的空间(使用数据库块大小为8192字节)。
high water mak远远大于了实际使用的表空间,所以采用将该表空间A的数据move到另外一个表空间B,这个过程完成后会降低表空间A的high water mak,此时再对A进行收缩,收缩完成后,再将移动到B的数据move回来,最后删除B。
3、移动表空间
--1、 移动表
select disTINCT ‘alter table ‘|| segment_name || ‘ move tablespace B;‘ from dba_extents where segment_type=‘TABLE‘ and file_id=12;
执行该sql生成移动表的sql语句,执行移动表的sql语句。
--2、 移动索引
select disTINCT ‘alter index ‘|| segment_name || ‘ rebuild tablespace B;‘ from dba_extents where segment_type=‘INDEX‘ and file_id=12;
执行该sql生成移动索引的sql语句,执行移动索引的sql语句。
--3、移动分区表
select disTINCT ‘alter table ‘|| segment_name || ‘ move partition ‘|| partition_name || ‘ tablespace B;‘ from dba_extents where segment_type=‘TABLE PARTITION‘ and file_id=12;
执行该sql生成移动分区表的sql语句,执行移动分区表的sql语句。
--4、移动LOB数据
alter table 表名 modify default attributes tablespace B; alter table 表名 move partition T1_分区1 lob(LOB列名1) store as (tablespace B); alter table 表名 move partition T1_分区2 lob(LOB列名1) store as (tablespace B);
LOB数据比较特殊,需要用这种方式来移动表空间。
第一行修改该表默认表空间,第二三行分别移动改表不同分区的LOB列数据。
4、收缩表空间
执行完第3步后,可执行第2步再次查看表空间A的high water mak,此时high water mak已经下降(有可能表空间已经没有数据,查不到MAX(BLOCK_ID))。
ALTER DATABASE TEMPFILE ‘表空间文件‘ RESIZE 1024M
执行成功。
5、将移动到B的数据,move回表空间A。如果需要删除表空间B,执行
alter tablespace B offline; drop tablespace B including contents and datafiles;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。