我经常在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;
我尝试了以下奇怪的事情,连续的免费区块,我无法调整大小:
这意味着我们有19095个可以调整大小的免费区块(约150 Mb)。
为了避免完全丢弃并创建表空间,有人可以帮助我吗?
答案 0 :(得分:0)
你是如何尝试"调整大小"表空间?
看起来您需要做的就是运行Segment Advisor的Tablepsace级别Shrink选项,它将为您缩小并回收该空间。
如果您拥有它,可以从OEM轻松完成 - 只需为您的表空间运行Segment Advisor。
如果您需要脚本来执行此操作,请在此处检查DBMS_ADVISOR包的用法: https://docs.oracle.com/cd/B28359_01/server.111/b28310/schema003.htm