Oracle

Oracle 收縮/回收空閒表空間空間

  • March 1, 2021

我有一個大小為 90GB 的 Oracle 12c 表空間。近 40GB 是免費的。

TB1 54 %    90880   41383   49497   46  98304   50 %    ONLINE  PERMANENT

表空間有 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

如何縮小表空間以回收可用的 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;

那麼如果你發現一個名為 ind_big_stuff巨大的索引,那麼

alter index ind_big_stuff rebuild online;

此外,如果您的應用程序是商業應用程序,則可能有多個零行表。或者如果你有分區表,你可能有一些零行的分區。您可以刪除分配給他們的空間

exec dbms_space_admin.drop_empty_segments(schema_name=>'HR');

您可以將segment creation deferredalter table 語句中的子句用於分區表或您知道不會有任何行的表。

引用自:https://dba.stackexchange.com/questions/192625