Oracle之降低高水位線
Shrink方式
從10g開始,Oracle開始提供Shrink的命令,假如我們的表空間中支援自動段空間管理(ASSM),就可以使用這個特性縮小段,即降低HWM。這裡需要強調一點,10g的這個新特性,僅對ASSM表空間有效,否則會報 ORA-10635: Invalid segment or tablespace type。
一、segment shrink大概分為兩個階段:
1、資料重組(compact):透過一系列insert、delete操作,將資料儘量排列在段的前面。在這個過程中需要在表上加RX鎖,即只在需要移動的行上加鎖。由於涉及到rowid的改變,需要enable row movement.同時要disable基於rowid的trigger.這一過程對業務影響比較小。
2、HWM調整:第二階段是調整HWM位置,釋放空閒資料塊。此過程需要在表上加X鎖,會造成表上的所有DML語句阻塞。在業務特別繁忙的系統上可能造成比較大的影響。
二、使用方法
1、使用前提
更新統計資訊
因為所有的資訊都是根據dba_tables,表的資訊是根據統計資訊得到的,所以如果統計資訊不準確,那麼整個搜尋的結果都可能是錯誤的;
統計資訊的指令碼:exec dbms_stats.gather_table_stats('user','table_name');
開啟動行移動
在使用shrink功能時,必須對錶開啟動行移動功能
alter table enable row movement ;
2、語法
alter table shrink space [ | compact | cascade ];
alter table shrink space 兩個階段都執行。收縮表,降低 high water mark
alter table shrink space compcat 只執行第一個階段。收縮表,但會保持 high water mark
alter table shrink space cascade 兩個階段都執行。收縮表,降低 high water mark,並且相關索引也會收縮。
注意:如果系統業務比較繁忙,可以先執行shrink space compact重組資料,然後在業務不忙的時候再執行shrink space降低HWM釋放空閒資料塊。
3、檢查HWM方法
select
a.file_id,
a.file_name,
a.filesize,
b.freesize,
(a.filesize - b.freesize) usedsize,
c.hwmsize,
c.hwmsize - (a.filesize - b.freesize) can_shrink_hwm_size,
a.filesize - c.hwmsize can_shrink_filesize
from
(select file_id,file_name,round(bytes/1024/1024) filesize from dba_data_files) a,
(select file_id,round(sum(bytes)/1024/1024) freesize from dba_free_space group by file_id) b,
(select file_id,round(max(block_id)*8/1024) hwmsize from dba_extents where tablespace_name='CANCER' group by file_id) c
where a.file_id = b.file_id and a.file_id=c.file_id;
shrink注意:
1. move時產生的日誌比shrink時少.參看http://blog.csdn.net/huang_xw/article/details/7016365
2. shrink在移動行資料時,也一起維護了index上相應行的資料rowid的資訊,當然shrink過程中用來維護index的成本也會比較高。而表move後index的狀態是UNUSABLE的,需要進行rebuild。參見http://blog.csdn.net/huang_xw/article/details/7016415
3. oracle是從後向前移動行資料,那麼,shrink的操作就不會像move一樣,shrink不需要使用額外的空閒空間。
Move方式
執行表重建指令 alter table table_name move tablespace tablespace_name(驗證不可行,不降低水位線,但可釋放表空間),可以將表空間進行resize以後,再將物件move回來,可以降低水位線。
Move後會引發索引失效記得重建索引
查詢失效索引語句:
select 'alter index '||index_name||' rebuild tablespace '||tablespace_name||';' from dba_indexes where owner='owner_name' and status<>'VALID';
重建索引語句:將上述語句執行查詢的結果執行即可。
Exp方式
將佔用高水位的物件用exp匯出後,將物件在徹底刪除後,resize表空間大小,再將匯出的檔案重新imp即可。或者全部匯出exp,刪除表空間重建,再imp也可。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29812844/viewspace-1988804/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle 降低高水位線Oracle
- oracle 高水位線及如何有效的降低高水位線Oracle
- 降低Oracle高水位線的方法Oracle
- ORACLE資料庫降低高水位線方法Oracle資料庫
- ORACLE 高水位線(HWM)Oracle
- oracle 回收高水位線Oracle
- oracle回收高水位線Oracle
- oracle高水位線處理Oracle
- oracle 高水位線詳解Oracle
- oracle的高水位線HWMOracle
- oracle的高水位線(HWM)Oracle
- 一、oracle 高水位線詳解Oracle
- Oracle的高水位線介紹Oracle
- Oracle 高水位線的一點研究Oracle
- oracle表碎片以及整理(高水位線)Oracle
- Oracle高水位Oracle
- Oracle delete 高水位線處理問題Oracledelete
- Oracle高水位線(HWM)及效能優化Oracle優化
- 對Oracle高水位線的研究實踐Oracle
- Oracle表段中的高水位線HWMOracle
- oracle回收高水位Oracle
- Oracle 高水位(HWM)Oracle
- Oracle案例10——HWM(高水位線)效能優化Oracle優化
- oracle高水位問題Oracle
- oracle 高水位分析處理Oracle
- Oracle 高水位(HWM)標記Oracle
- delete與高水位線HWM回收delete
- 關於高水位線和deletedelete
- 高水位線、行遷移行連結
- ORACLE的簡單處理高水位Oracle
- ORACLE高水位表的查詢方法Oracle
- 深入瞭解oracle的高水位(HWM)Oracle
- Oracle表段中高水位線HWMOracle
- Rollback&Truncate操作對高水位線影響之效能優化篇優化
- Oracle 找出需要回收高水位的表Oracle
- 【TABLESPACE】怎麼去降低資料檔案的高水位呢(BLOCK_ID)BloC
- oracle11g表的高水位線hwm與dbms_space系列一Oracle
- Oracle 高水位查詢和處理方法彙總Oracle