1. 執行表重建指令 alter table table_name move(驗證不可行,不降低水位線,但可釋放表空間)
當你建立了乙個物件如表以後,不管你有沒有插入資料,它都會占用一些塊,oracle也會給它分配必要的空間.同樣,用alter table move釋放自由空間後,還是保留了一些空間給這個表.
alter table ... move 後面不跟引數也行,不跟參數列還是在原來的表空間,move後記住重建索引.
查詢失效索引語句:select index_name,table_name,tablespace_name,status from dba_indexes where owner='hnunicom' and status<>'valid';
重建索引語句:alter index index_name rebuild tablespace tablespace_name;
如果以後還要繼續向這個表增加資料,沒有必要move,只是釋放出來的空間,只能這個錶用,其他的表或者segment無法使用該空間。
2. 執行alter table table_name shrink space;(已經驗證成功,推薦使用,可釋放資料庫和磁碟空間空間,大表可同時降低表自身和表空間的高水位線,小表則只可以降低表自身的高水位線,原因不詳)
注意,此命令為oracle 10g新增功能,執行該指令之前必須允許行移動 alter table table_name enable row movement;
3. 複製要保留的資料到臨時表t,drop原表,然後rename臨時表t為原表(未驗證)
4. 用exp匯出後,刪除原表/表空間,之後用imp重新匯入(驗證成功)
5. alter table table_name deallocate unused(驗證不可行,不降低水位線)
注:這證明,deallocate unused為釋放hwm上面的未使用空間,但是並不會釋放hwm下面的自由空間,也不會移動hwm的位置.
6. 盡量使用truncate(驗證不可行,不降低水位線,可釋放資料庫空間,但truncate後表預設空間大小為刪除前的空間大小,如想釋放計算機磁碟空間,需要用方法2壓縮)
ps:注意上文的磁碟空間與資料庫空間是不同的概念
ORACLE的高水位線
這幾天一直在看乙個問題,乙個統計程式突然統計的資料量不正常了,從頭查到尾,覺得程式和配置都沒有問題,但就是統計出的結果不對,但發現有乙個程式的入庫檔案還存留很多,推斷可能是資料還沒入庫完全,但是什麼導致的呢,以為是那部分檔案太大,入庫太慢,但後來發現還是資料庫的問題,乙個temp表查詢空表都花費很長...
oracle 高水位線詳解
一 什麼是水線 high water mark 所有的oracle段 segments,在此,為了理解方便,建議把segment作為表的乙個同義詞 都有乙個在段內容納資料的上限,我們把這個上限稱為 high water mark 或hwm。這個hwm是乙個標記,用來說明已經有多少沒有使用的資料塊分配...
oracle 高水位線問題
查詢高水位線 50295 0 28185 0 select blocks,empty blocks from dba tables where table name todayotherconsumerecords and owner iccardyiwu alter table todayothe...