r0t*_*0tt 8 oracle shrink tablespaces oracle-12c
我有一个大小为 90GB 的 Oracle 12c 表空间。几乎 40GB 是免费的。
TB1 54 % 90880 41383 49497 46 98304 50 % ONLINE PERMANENT
Run Code Online (Sandbox Code Playgroud)
表空间有 3 个数据文件。
E:\ORACLE\ORADATA\xx\TB1.DBF 33554416 True 100
F:\ORACLE\ORADATA\xx\TB1_2.DBF 33554416 True 100
G:\ORACLE\ORADATA\xx\TB1_3.DBF 25344000 True 100
Run Code Online (Sandbox Code Playgroud)
如何缩小表空间以回收可用的 40GB(磁盘上的数据文件)?我不能有停机时间。
我同意 EdStevens 的评论,但这里有一些其他想法:
该AskTom网站 有一个脚本,将列出究竟有多少可以收缩现有的数据文件。
如果这不会产生多少节省,您可以在该表空间上找到最大的索引并重建它们;这是一个临时解决方案,索引最终会再次变大,但如果现在预算不允许更多磁盘空间,请尝试以下查询:
select segment_name, sum(bytes)/1024/1024 as mb
from dba_segments
where tablespace_name='TB1' and segment_type like 'INDEX%'
group by segment_name
order by mb;
Run Code Online (Sandbox Code Playgroud)
那么如果你发现一个名为的索引 ind_big_stuff
很大,那么
alter index ind_big_stuff rebuild online;
Run Code Online (Sandbox Code Playgroud)
此外,如果您的应用程序是商业应用程序,则可能有多个表为零行。或者如果你有分区表,你可能有一些零行的分区。您可以删除分配给他们的空间
exec dbms_space_admin.drop_empty_segments(schema_name=>'HR');
Run Code Online (Sandbox Code Playgroud)
您可以segment creation deferred
对诸如分区表或您知道没有任何行的表之类的内容使用 alter table 语句上的子句。
我认为有五种方法可以处理这个oracle维护问题:
\n\n