Oracle

如何在 Oracle DBMS 9i 中刪除數據並釋放磁碟空間

  • October 17, 2014

我想知道人們通常如何從實際上釋放磁碟空間的 Oracle 9i DBMS 中刪除數據。在過去的場景中,我們遇到過清理 1-2 百萬行數據並不會轉化為磁碟空間使用量減少的情況。

設想:

sqlplus > delete from audit_log where date_created between today and the day before;

sqlplus > 2 million records deleted.

bash$: du -sh (after issuing the delete above)

不會改變磁碟空間使用情況。

這也讓我想到了一個問題,是否需要刷新表才能讓 oracle 完全刪除所有應該被刪除 DML 刪除的數據

在 Oracle 中,從表中刪除行不會自動釋放任何磁碟空間。釋放磁碟空間是可能的,但要做到這一點,您必須找出表在數據文件中的物理放置方式。只要數據文件末尾有空塊,您就可以將數據文件調整為更小的大小。只有在此之後 - 成功 - 操作您才能獲得真正的磁碟空間。如果您在數據文件中有很多空塊但最後沒有,則將表從數據文件所屬的表空間移動到新表空間並刪除舊表空間可能是最簡單的。這不適用於 SYSTEM 表空間,您不能將 SYS 對象移動到其他表空間。

有時你很幸運,你可以只移動一個小表,因為它被放置在數據文件的末尾,而恰好阻止釋放空間。在這種情況下,一個簡單的alter table thesmalltable move;將重新定位該表並在數據文件的末尾創建可回收空間

$$ s $$. 之後,alter database datafile '/your/df/name.dbf' resize the_new_size;釋放磁碟空間。 表在邏輯上放置在表空間中。一個表空間由最少 1 個數據文件組成,在許多情況下是多個數據文件。

引用自:https://serverfault.com/questions/264619