首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

按用戶生成 Oracle 索引重建腳本:從碎片分析到定時部署

     編輯:Oracle 資料庫相關知識

生成重建腳本核心 SQL

SET ECHO OFF FEEDBACK OFF VERIFY OFF PAGESIZE 0 TERMOUT ON HEADING OFF
ACCEPT username CHAR PROMPT 'Enter index owner: '
SPOOL rebuild_&username.sql
SELECT 'REM +-----------------------------------------------+' || CHR(10) ||
'REM | INDEX NAME : ' || owner || '.' || segment_name ||
LPAD('|', 33 - (LENGTH(owner)+LENGTH(segment_name))) || CHR(10) ||
'REM | BYTES : ' || bytes || LPAD('|', 34-LENGTH(bytes)) || CHR(10) ||
'REM | EXTENTS : ' || extents || LPAD('|', 34-LENGTH(extents)) || CHR(10) ||
'REM +-----------------------------------------------+' || CHR(10) ||
'ALTER INDEX ' || owner || '.' || segment_name || CHR(10) ||
'REBUILD' || CHR(10) ||
'TABLESPACE ' || tablespace_name || CHR(10) ||
'STORAGE (' || CHR(10) ||
' INITIAL ' || initial_extent || CHR(10) ||
' NEXT ' || next_extent || CHR(10) ||
' MINEXTENTS ' || min_extents || CHR(10) ||
' MAXEXTENTS ' || max_extents || CHR(10) ||
' PCTINCREASE ' || pct_increase || CHR(10) ||
');' || CHR(10) || CHR(10)
FROM dba_segments
WHERE segment_type = 'INDEX' AND owner = '&username'
ORDER BY owner, bytes DESC;
SPOOL OFF

碎片判斷標準

ANALYZE INDEX &index_name VALIDATE STRUCTURE;
SELECT name, del_lf_rows, lf_rows - del_lf_rows lf_rows_used,
TO_CHAR(del_lf_rows / lf_rows * 100, '999.99999') ratio
FROM index_stats WHERE name = UPPER('&index_name');

刪除葉行比率 > 15%-20% 必須重建。

部署注意事項

  • 修改生成腳本調整存儲參數(如 PCTINCREASE 改 0)
  • 納入非繁忙時段定時任務(月/雙月)
  • 遇 ORA-00054(表被鎖)忽略,下次重試
  • 高併發核心表索引剔除出腳本,單獨維護窗口處理
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved