在ORACLE里按用户名重建索引的方法

jessica8879

jessica8879

2016-02-19 19:45

下面是个简单易学的在ORACLE里按用户名重建索引的方法教程,图老师小编详细图解介绍包你轻松学会,喜欢的朋友赶紧get起来吧!
如果你管理的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:oracleebuild_&username.sql;
  
  如果你只想对大于max_bytes的索引重建索引, 可以修改上面的SQL语句:
  在AND owner='&username' 后面加个限制条件 AND bytes &max_bytes
  
  如果你想修改索引的存储参数, 在重建索引rebuild_&username.sql里改也可以.
  比如把pctincrease不等于零的值改成是零.
  
  生成的rebuild_&username.sql文件我们需要来分析一下, 它们是否到了需要重建的程度:
  
  分析索引,看是否碎片严重
  
  SQLANALYZE 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里删去.
展开更多 50%)
分享

猜你喜欢

在ORACLE里按用户名重建索引的方法

编程语言 网络编程
在ORACLE里按用户名重建索引的方法

在Oracle数据库中按用户名重建索引的方法

编程语言 网络编程
在Oracle数据库中按用户名重建索引的方法

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

淘宝用户名怎么改 如何修改淘宝用户名

应用软件
淘宝用户名怎么改 如何修改淘宝用户名

Ajax 用户名验证是否存在

Web开发
Ajax 用户名验证是否存在

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

任务管理器里不能显示用户名怎么解决?

电脑入门
任务管理器里不能显示用户名怎么解决?

Word批注怎样删掉用户名

word
Word批注怎样删掉用户名

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

Oracle的优化原理

Oracle的优化原理

css应用:单击table使点击的行变色

css应用:单击table使点击的行变色
下拉加载更多内容 ↓