程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> Oracle清除表的高水位線

Oracle清除表的高水位線

編輯:Oracle教程

Oracle清除表的高水位線


在新增記錄時,HWM會慢慢往上移,但是在刪除記錄後,HWM卻不會往下移。所以在使用delete from命令刪除大量數據時會導致因HWM引起的性能問題。 刪除高水位的最直接的方法就是truncate Table 但是這種方式太過暴力,所以用以下的方法來刪除高水位線。
--刪除數據 DELETE FROM GJDS_BUS_OIL_LOG WHERE VERSION < (13112-100);
--壓縮快 move最好是在空閒時做 記得move的是會產生TM鎖的 move以後記得重建index ALTER TABLE GJDS_BUS_OIL_LOG MOVE;
--壓縮快之後所有索引都會失效,需要重建一下索引 ALTER INDEX INDEX_NAME REBUILD;
--然後分析下表 ANALYZE TABLE GJDS_BUS_OIL_LOG COMPUTE STATISTICS FOR TABLE FOR ALL INDEXES FOR ALL INDEXED COLUMNS;
--查看塊總數 SELECT SEGMENT_NAME, EXTENTS, BLOCKS FROM USER_SEGMENTS WHERE SEGMENT_NAME = 'GJDS_BUS_OIL_LOG'; --查看高水位 SELECT BLOCKS, EMPTY_BLOCKS FROM DBA_TABLES WHERE TABLE_NAME = 'GJDS_BUS_OIL_LOG' AND OWNER = 'BUS'; --查看實際用了多少塊 SELECT COUNT(DISTINCT DBMS_ROWID.ROWID_BLOCK_NUMBER(ROWID)) USED_BLOCK FROM GJDS_BUS_OIL_LOG S;
另一種方法是使用SHRINK SPACE 以下情況不能使用SHRINK SPACE ■ IOT mapping tables
■ Tables with rowid based materialized views
■ Tables with function-based indexes --函數索引
■ SECUREFILE LOBs
■ Compressed tables
如果有函數索引需要刪除函數索引才可以使用 --啟用ROW MOVEMENT ALTER TABLE GJDS_BUS_OIL_LOG ENABLE ROW MOVEMENT; --壓縮段 ALTER TABLE GJDS_BUS_OIL_LOG SHRINK SPACE; 同樣需要重建索引和重新分析表
參考資料:http://www.blogjava.net/decode360/archive/2009/07/14/287767.html

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved