使用连续的空闲块调整Oracle表空间大小

时间:2016-01-04 12:44:38

标签: oracle resize block tablespace shrink

我经常在Oracle实例中减少表空间(11g)。

使用以下脚本(来自系统用户)我可以确切知道所选表空间中每个对象的已分配空间(例如MY_TABLESPACE):

select
    tablespace_name, file_id, block_id,
    block_id + blocks - 1  end_block, owner,
    segment_name, partition_name, segment_type
from
    dba_extents
where 1=1
and   tablespace_name = 'MY_TABLESPACE'
union all
select
    tablespace_name, file_id, block_id,
    block_id + blocks - 1   end_block,
    'free' owner, 'free' segment_name,
    null partition_name, null segment_type
from
    dba_free_space
where 1=1
and   tablespace_name = 'MY_TABLESPACE'
order by
    file_id desc,
    block_id desc;

我尝试了以下奇怪的事情,连续的免费区块,我无法调整大小:

Consecutive free blocks

这意味着我们有19095个可以调整大小的免费区块(约150 Mb)。

为了避免完全丢弃并创建表空间,有人可以帮助我吗?

1 个答案:

答案 0 :(得分:0)

你是如何尝试"调整大小"表空间?

看起来您需要做的就是运行Segment Advisor的Tablepsace级别Shrink选项,它将为您缩小并回收该空间。

如果您拥有它,可以从OEM轻松完成 - 只需为您的表空间运行Segment Advisor。

如果您需要脚本来执行此操作,请在此处检查DBMS_ADVISOR包的用法: https://docs.oracle.com/cd/B28359_01/server.111/b28310/schema003.htm