收缩表空间

以T20111113为例,有索引,索引名为I_T20111113_ID;

alter table T20111113 move;


alter table t20111113 enable row movement;
alter table T20111113 shrink space;

alter index "BIN$sZ7XZPrJWh/gQKjAChI9+w==$0" shrink space;

analyze table t20111113 compute statistics;


空间总的大小和实际使用大小

 

select 'alter database datafile ''' || a.file_name || ''' resize ' ||

       round(a.filesize - (a.filesize - c.hwmsize - 100) * 0.8) || 'M;',
       a.filesize || 'M' as "数据文件的总大小",
       c.hwmsize || 'M' as "数据文件的实用大小"
  from (select file_id, file_name, round(bytes / 1024 / 1024) as filesize
          from dba_data_files) a,
       (select file_id, round(max(block_id) * 8 / 1024) as HWMsize
          from dba_extents
         group by file_id) c

 where a.file_id = c.file_id


其中的move 以及shrink space 解释可查阅其他文章


在暂停表空间后,您将无法使用ALTER TABLESPACE命令来收缩表空间。这是因为ALTER TABLESPACE命令需要在表空间在线时运行。为了收缩表空间,您需要使用ALTER DATABASE命令。 以下是收缩Oracle表空间的步骤: 1. 检查表空间碎片情况,以确定是否可以进行收缩操作。可以使用以下命令检查: SELECT TABLESPACE_NAME, FILE_NAME, BYTES/1024/1024 MB_SIZE, MAXBYTES/1024/1024 MAX_SIZE FROM DBA_DATA_FILES; 如果表空间的MAX_SIZE小于MB_SIZE,则表空间中有未使用的空间,可以进行收缩操作。 2. 确认表空间中的段是否可以移动。只有不含有不可移动段的表空间才可以进行收缩操作。您可以使用以下命令检查表空间中的不可移动段: SELECT SEGMENT_NAME, SEGMENT_TYPE, TABLESPACE_NAME, BYTES/1024/1024 MB_SIZE, MAX_EXTENT_SIZE/1024/1024 MAX_EXTENT_SIZE FROM DBA_EXTENTS WHERE TABLESPACE_NAME='your_tablespace_name' AND SEGMENT_TYPE NOT IN ('LOBSEGMENT','LOBINDEX'); 如果查询结果为空,则表空间中不含有不可移动段,可以进行收缩操作。 3. 确认表空间中的数据文件是否可以自动扩展。只有可以自动扩展的数据文件才可以进行收缩操作。您可以使用以下命令检查数据文件的自动扩展设置: SELECT FILE_NAME, AUTOEXTENSIBLE, BYTES/1024/1024 MB_SIZE, MAXBYTES/1024/1024 MAX_SIZE FROM DBA_DATA_FILES; 如果AUTOEXTENSIBLE的值为YES,则数据文件可以自动扩展,可以进行收缩操作。 4. 使用以下命令将数据文件的大小调整为表空间中已使用空间的大小: ALTER DATABASE DATAFILE '/path/to/your/datafile.dbf' RESIZE [new_size]M; 其中,new_size是您要将数据文件调整为的新大小,以MB为单位。可以使用以下命令计算表空间中已使用空间的大小: SELECT SUM(BYTES)/1024/1024 USED_SPACE from DBA_SEGMENTS where TABLESPACE_NAME='your_tablespace_name'; 5. 最后,您可以再次查询表空间和数据文件信息,以确保收缩操作已成功完成。 SELECT TABLESPACE_NAME, FILE_NAME, BYTES/1024/1024 MB_SIZE, MAXBYTES/1024/1024 MAX_SIZE FROM DBA_DATA_FILES; 请注意,在执行任何操作之前,请备份您的数据库以防止数据丢失。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值