选择显示字体大小

在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 'deletedleaf rows'   format 99999999

col lf_rows_used heading 'usedleaf rows'      format 99999999

col ratio    heading '% deletedleaf 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里删去.

  


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons