Shrink Table

    版本為 16:26, 6 Oct 2024

    到這個版本。

    返回到 版本存檔.

    查閱目前版本

    Table 在大量刪除歷史紀錄後,原先使用的儲存空間並不會自動被釋出,而是要經過一個 Table 的重組程序,可用空間才會有所變更。

    說明

    要調整 HWM 有以下方式可以做,各有不同優缺點:

    1. export / import
      object id 與 data object id 會改變
    2. alter table <table.name> move;
      data object id,rowid 會改變
    3. alter index <index.name> rebuild online;
      一般會與第 2 項配合一起做
    4. shrink table
      Oracle 10g 以上支援
    Shrink Table

    必要條件

    1.  Enable row movement
    2. Table 所在的 tablespace 不能使用在 segment space management manaual 的tablespace, 必須為 auto (預設)

     

    執行時分兩階段

    1. compact:透過 insert / delete 將資料盡量排例在 segment 前面。這個階段會造成rowid的改變,因此需要enable row movement。
    2. HWM 調整:這個階段是調整HWM位置,釋放表格空間。

    主要步驟

     Shrink 指令:單一個 Table

    SQL> alter table <owner>.<table_name> enable row movement;
    SQL> alter table <owner>.<table_name> shrink space cascade;
    SQL> alter table <owner>.<table_name> disable row movement; 
    

    Shrink:多個 Tables

    set heading off
    set feedback off
    set pagesize 0
    set linesize 1000
    
    SELECT 'alter table ' || OWNER || '.' || TABLE_NAME || ' enable row movement;' || chr(10) || 'alter table ' || OWNER || '.' || TABLE_NAME || ' shrink space cascade;' || chr(10) || 'alter table ' || OWNER || '.' || TABLE_NAME || ' disable row movement;' || chr(10)
    FROM ALL_TABLES
    WHERE OWNER = 'WIN_FDC_STDB'
    AND (
    TABLE_NAME NOT LIKE '%DEF%'
    AND TABLE_NAME LIKE 'PROC%'
    )
    ORDER BY NUM_ROWS DESC, TABLE_NAME ASC;
    
    Powered by MindTouch Core