簡體   English   中英

如何減少Oracle數據庫存儲?

[英]How can I reduce oracle database storage?

我有硬盤空間不足的問題。 所以我從oracle數據庫的一個大表中刪除所有記錄。 但是我的硬盤空間沒有改變。 我該如何解決?

試試ALTER TABLE table_name SHRINK SPACE CASCADE; 並重建索引。

從表中刪除所有行不會重置高水位線,也不會釋放任何空間。 這是因為通過DML操作,Oracle假定該空間將在以后重新使用,並且不會費心釋放它。

您可能想改為運行TRUNCATE語句。 它也比DELETE快得多,因為它不會生成任何REDO或UNDO。 但是請注意,截斷表是無法回滾的DDL語句。

TRUNCATE表將空間釋放到表空間,而該空間可用於其他對象。 但是它仍然不會減少所使用的操作系統空間。 減少磁盤空間需要縮小數據文件。

縮小數據文件可能很棘手。 數據文件只能縮小到最后程度。 如果單個數據塊位於文件末尾,則數據文件可能有大量的空白空間,但不可收縮。 在這種情況下,必須對數據文件進行碎片整理。 這可以由Oracle企業管理器完成,您可以找到許多其他腳本來完成。 它們通常涉及移動或重建所有對象。

節省空間的最簡單方法是嘗試縮小每個文件。 這不會釋放所有可用空間,但是實際上,大多數可用空間通常是在最后一個擴展區之后,並且可以回收。

運行以下腳本,它將生成一堆alter語句,以嘗試大量縮小數據文件。 大多數語句將失敗,但是可以。 將數字減半,然后重試。 這是一種“愚蠢”的方法,但是通常可以快速釋放一些空間。

with decrease_size as (select 64 gb from dual)
select 'alter database datafile '''||file_name||''' resize '||to_char(round(bytes/1024/1024/1024)-(select gb from decrease_size))||'g;'
from dba_data_files
where bytes > (select gb from decrease_size) * 1024*1024*1024
order by 1 desc;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM