• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 在ORACLE里按用戶名重建索引的方法

    發表于:2007-07-13來源:作者:點擊數: 標簽:
    如果你管理的ORACLE 數據庫 下某些應用項目有大量的修改刪除操作, 數據索引是需要周期性的重建的.它不僅可以提高查詢 性能 , 還能增加索引表空間空閑空間大小.在ORACLE里大量刪除記錄后, 表和索引里占用的數據塊空間并沒有釋放.重建索引可以釋放已刪除記錄索
    如果你管理的ORACLE數據庫下某些應用項目有大量的修改刪除操作, 數據索引是需要周期性的重建的.它不僅可以提高查詢性能, 還能增加索引表空間空閑空間大小. 在ORACLE里大量刪除記錄后, 表和索引里占用的數據塊空間并沒有釋放. 重建索引可以釋放已刪除記錄索引占用的數據塊空間. 轉移數據, 重命名的方法可以重新組織表里的數據.

    下面是可以按ORACLE用戶名生成重建索引的SQL腳本:

    SET ECHO      OFF;

    SET FEEDBACK  OFF;

    SET VERIFY    OFF;

    SET PAGESIZE  0;

    SET TERMOUT   ON;

    SET HEADING   OFF;

    ACCEPT username CHAR PROMPT 'Enter the index username: ';

    spool /oracle/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;

    如果你用的是WINDOWS系統, 想改變輸出文件的存放目錄, 修改spool后面的路徑成:

    spool c:\oracle\rebuild_&username.sql;

    如果你只想對大于max_bytes的索引重建索引, 可以修改上面的SQL語句: 在AND  owner='&username' 后面加個限制條件 AND  bytes> &max_bytes

    如果你想修改索引的存儲參數, 在重建索引rebuild_&username.sql里改也可以.

    比如把pctincrease不等于零的值改成是零.

    生成的rebuild_&username.sql文件我們需要來分析一下, 它們是否到了需要重建的程度:

    分析索引,看是否碎片嚴重

    SQL>ANALYZE INDEX &index_name VALIDATE STRUCTURE;

    col name         heading 'Index Name'          format a30

    col del_lf_rows  heading 'Deleted|Leaf Rows'   format 99999999

    col lf_rows_used heading 'Used|Leaf Rows'      format 99999999

    col ratio    heading '% Deleted|Leaf Rows' format 999.99999

    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% 時,肯定是需要索引重建的. 經過刪改后的rebuild_&username.sql文件我們可以放到ORACLE的定時作業里: 比如一個月或者兩個月在非繁忙時間運行.

    如果遇到ORA-00054錯誤, 表示索引在的表上有鎖信息, 不能重建索引. 那就忽略這個錯誤, 看下次是否成功. 對那些特別忙的表要區別對待, 不能用這里介紹的方法, 還要把它們的索引從rebuild_&username.sql里刪去.

      

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>