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% 必須重建。
ORA-00054(表被鎖)忽略,下次重試