Reports index fragmentation statistics:
========== Script #1: ========== SET ECHO off REM NAME: TFSIFRAG.SQL REM USAGE:"@path/tfsifrag schema_name index_name" REM ------------------------------------------------------------------------ REM REQUIREMENTS: REM SELECT on INDEX_STATS REM ------------------------------------------------------------------------ REM PURPOSE: REM Reports index fragmentation statistics REM ------------------------------------------------------------------------ REM EXAMPLE: REM Index Fragmentation Statistic REM REM index name S_EMP_USERID_UK REM leaf rows deleted 0 REM leaf rows in use 25 REM index badness 0.000 REM REM ------------------------------------------------------------------------ REM Main text of script follows: set verify off def ownr = &&1 def name = &&2 ttitle - center 'Index Fragmentation Statistic' skip 2 set heading off col name newline col lf_blk_rows newline col del_lf_rows newline col ibadness newline validate index &ownr..&name; select 'index name '||name, 'leaf rows deleted '||to_char(del_lf_rows,'999,999,990') del_lf_rows, 'leaf rows in use '||to_char(lf_rows-del_lf_rows,'999,999,990') lf_blk_rows, 'index badness '||to_char(del_lf_rows/(lf_rows+0.00001),'999,990.999') ibadness from index_stats / undef ownr undef name set verify on ============== Sample Output: ============== Index Fragmentation Statistic index name S_EMP_USERID_UK leaf rows deleted 0 leaf rows in use 25 index badness 0.000 ========== Script #2: ========== SET ECHO off REM NAME: TFSISTAT.SQL REM USAGE:"@path/tfsistat schema_name index_name" REM ------------------------------------------------------------------------ REM REQUIREMENTS: REM SELECT on INDEX_STATS REM ------------------------------------------------------------------------ REM PURPOSE: REM Report index statistics. REM ------------------------------------------------------------------------ REM EXAMPLE: REM Index Statistics REM REM S_EMP_USERID_UK REM ---------------------------------------------------------- REM height 1 REM blocks 5 REM del_lf_rows 0 REM del_lf_rows_len 0 REM distinct_keys 25 REM most_repeated_key 1 REM btree_space 1,876 REM used_space 447 REM pct_used 24 REM rows_per_key 1 REM blks_gets_per_access 2 REM lf_rows 25 br_rows 0 REM lf_blks 1 br_blks 0 REM lf_rows_len 447 br_rows_len 0 REM lf_blk_len 1,876 br_blk_len 0 REM REM ------------------------------------------------------------------------ REM Main text of script follows: set verify off def ownr = &&1 def name = &&2 ttitle - center 'Index Statistics' skip 2 set heading off col name newline col headsep newline col height newline col blocks newline col lf_rows newline col lf_blks newline col lf_rows_len newline col lf_blk_len newline col br_rows newline col br_blks newline col br_rows_len newline col br_blk_len newline col del_lf_rows newline col del_lf_rows_len newline col distinct_keys newline col most_repeated_key newline col btree_space newline col used_space newline col pct_used newline col rows_per_key newline col blks_gets_per_access newline validate index &ownr..&name; select name, '----------------------------------------------------------' headsep, 'height '||to_char(height, '999,999,990') height, 'blocks '||to_char(blocks, '999,999,990') blocks, 'del_lf_rows '||to_char(del_lf_rows,'999,999,990') del_lf_rows, 'del_lf_rows_len '||to_char(del_lf_rows_len,'999,999,990') del_lf_rows_len, 'distinct_keys '||to_char(distinct_keys,'999,999,990') distinct_keys, 'most_repeated_key '||to_char(most_repeated_key,'999,999,990') most_repeated_key, 'btree_space '||to_char(btree_space,'999,999,990') btree_space, 'used_space '||to_char(used_space,'999,999,990') used_space, 'pct_used '||to_char(pct_used,'990') pct_used, 'rows_per_key '||to_char(rows_per_key,'999,999,990') rows_per_key, 'blks_gets_per_access '||to_char(blks_gets_per_access,'999,999,990') blks_gets_per_access, 'lf_rows '||to_char(lf_rows, '999,999,990')||' '||+ 'br_rows '||to_char(br_rows, '999,999,990') br_rows, 'lf_blks '||to_char(lf_blks, '999,999,990')||' '||+ 'br_blks '||to_char(br_blks, '999,999,990') br_blks, 'lf_rows_len '||to_char(lf_rows_len,'999,999,990')||' '||+ 'br_rows_len '||to_char(br_rows_len,'999,999,990') br_rows_len, 'lf_blk_len '||to_char(lf_blk_len, '999,999,990')||' '||+ 'br_blk_len '||to_char(br_blk_len, '999,999,990') br_blk_len from index_stats / undef ownr undef name set verify on ============== Sample Output: ============== Index Statistics S_EMP_USERID_UK ---------------------------------------------------------- height 1 blocks 5 del_lf_rows 0 del_lf_rows_len 0 distinct_keys 25 most_repeated_key 1 btree_space 1,876 used_space 447 pct_used 24 rows_per_key 1 blks_gets_per_access 2 lf_rows 25 br_rows 0 lf_blks 1 br_blks 0 lf_rows_len 447 br_rows_len 0 lf_blk_len 1,876 br_blk_len 0 ========== Script #3: ========== SET ECHO off REM NAME: TFSIKEYS.SQL REM USAGE:"@path/tfsikeys idx_owner table_name" REM ------------------------------------------------------------------------ REM REQUIREMENTS: REM SELECT on DBA_IND_COLUMNS and DBA_INDEXES REM ------------------------------------------------------------------------ REM PURPOSE: REM Shows the index keys for a particular table. REM ------------------------------------------------------------------------ REM EXAMPLE: REM Index Keys Summary REM REM Uniqueness Index Name Column Name REM ---------- ---------------------------------------- ------------------ REM UNIQUE SCOTT.S_EMP_ID_PK ID REM REM UNIQUE SCOTT.S_EMP_USERID_UK USERID REM REM ------------------------------------------------------------------------ REM Main text of script follows: set verify off def ixowner = &&1 def tabname = &&2 ttitle - center 'Index Keys Summary' skip 2 col uniq format a10 heading 'Uniqueness' justify c trunc col indname format a40 heading 'Index Name' justify c trunc col colname format a25 heading 'Column Name' justify c trunc break - on indname skip 1 - on uniq select ind.uniqueness uniq, ind.owner||'.'||col.index_name indname, col.column_name colname from dba_ind_columns col, dba_indexes ind where ind.owner = upper('&ixowner') and ind.table_name = upper('&tabname') and col.index_owner = ind.owner and col.index_name = ind.index_name order by col.index_name, col.column_position / undef ixowner undef tabname set verify on ============== Sample Output: ============== Index Keys Summary Uniqueness Index Name Column Name ---------- ---------------------------------------- ---------------------- UNIQUE SCOTT.S_EMP_ID_PK ID UNIQUE SCOTT.S_EMP_USERID_UK USERID