數據庫存儲空間碎片產生的原因及如何恢復碎片
在表空間中生成段時,將從表空間的有效空閑空間中為該段的初始範圍分配空間。當這些初始範圍充滿數據時,該段將請求添加另壹個範圍。這個擴展過程將壹直持續,直到達到最大範圍值,或者表空間中沒有空閑空間用於下壹個範圍。理想狀態是壹個段的數據可以存儲在單個範圍內。這樣,所有數據都存儲在靠近段中其他數據的位置,並且可以少用壹些指針來查找數據。然而,在很多情況下,壹個段包含多個範圍,並且沒有措施來確保這些範圍被相鄰地存儲。當要滿足壹個空間需求時,數據庫將不再合並相鄰的空閑範圍(除非沒有其他選擇),而是在表空間中找到最大的空閑範圍來使用。這樣就會逐漸形成越來越多的離散的、分離的、更小的自由空間,也就是碎片。碎片整理可分為自由範圍碎片整理和分段碎片整理。在自由區碎片整理中,可以將表空間的默認存儲參數pctincrease改為非0,壹般設置為1,這樣SMON就會自動合並自由區。您也可以手動合並自由範圍。在段的碎片整理中,可以查看數據字典dba_segments,範圍信息可以查看數據字典dba_extents。如果壹個段中有太多的片段,將它的數據壓縮到壹個範圍內的最簡單的方法是用正確的存儲參數重建該段,然後將舊表中的數據插入到新表中,並刪除舊表。