Oracle
Oracle 收縮/回收空閒表空間空間
我有一個大小為 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 deferred
alter table 語句中的子句用於分區表或您知道不會有任何行的表。