Oracle 收缩表空间 Oracle调整表空间大小——ORA-03297: 文件包含在请求的 RESIZE 值以外使用的数据

参考文章:

Oracle调整表空间大小——ORA-03297: 文件包含在请求的 RESIZE 值以外使用的数据

ORACLE 收缩表空间的数据文件

收缩表空间-ORA-03297错误解决

 个人文章:

创建表空间时,设置了最大表空间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_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;

猜你喜欢

转载自www.cnblogs.com/no6bky/p/10038678.html
今日推荐