oracle怎么重建索引 oracle重建索引会锁表吗

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

如果你管理的Oracle数据库下某些应用项目有大量的修改删除操作 数据索引是需要周期性的重建的

10多年的兴宾网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。成都营销网站建设的优势是能够根据用户设备显示端的尺寸不同,自动调整兴宾建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。成都创新互联公司从事“兴宾网站设计”,“兴宾网站推广”以来,每个客户项目都认真落实执行。

它不仅可以提高查询性能 还能增加索引表空间空闲空间大小

在ORACLE里大量删除记录后 表和索引里占用的数据块空间并没有释放

重建索引可以释放已删除记录索引占用的数据块空间

转移数据 重命名的方法可以重新组织表里的数据

下面是可以按ORACLE用户名生成重建索引的SQL脚本

SET ECHO OFF; SET FEEDBACK OFF; SET VERIFY OFF; SET PAGESIZE ; SET TERMOUT ON; SET HEADING OFF; ACCEPT username CHAR PROMPT Enter the index username: ; spool /oracle/rebuild_username sql; SELECT REM + + || chr( ) || REM | INDEX NAME : || owner || || segment_name || lpad( | (length(owner) + length(segment_name)) ) || chr( ) || REM | BYTES : || bytes || lpad ( | (length(bytes)) ) || chr( ) || REM | EXTENTS : || extents || lpad ( | (length(extents)) ) || chr( ) || REM + + || chr( ) || ALTER INDEX || owner || || segment_name || chr( ) || REBUILD || chr( ) || TABLESPACE || tablespace_name || chr( ) || STORAGE ( || chr( ) || INITIAL || initial_extent || chr( ) || NEXT || next_extent || chr( ) || MINEXTENTS || min_extents || chr( ) || MAXEXTENTS || max_extents || chr( ) || PCTINCREASE || pct_increase || chr( ) || ); || chr( ) || chr( ) FROM dba_segments WHERE segment_type = INDEX AND owner= username ORDER BY owner bytes DESC; spool off;

如果你用的是WINDOWS系统 想改变输出文件的存放目录 修改spool后面的路径成

spool c oraclerebuild_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 a col del_lf_rows heading Deleted|Leaf Rows format col lf_rows_used heading Used|Leaf Rows format col ratio heading % Deleted|Leaf Rows format SELECT name del_lf_rows lf_rows del_lf_rows lf_rows_used to_char(del_lf_rows / (lf_rows)* ) ratio FROM index_stats where name = upper( index_name );

当删除的比率大于 % 时 肯定是需要索引重建的

经过删改后的rebuild_username sql文件我们可以放到ORACLE的定时作业里

比如一个月或者两个月在非繁忙时间运行

如果遇到ORA 错误 表示索引在的表上有锁信息 不能重建索引

那就忽略这个错误 看下次是否成功

对那些特别忙的表要区别对待 不能用这里介绍的方法

lishixinzhi/Article/program/Oracle/201311/19038

oracle数据库如何重建索引

当索引的碎片过多时 会影响执行查询的速度 从而影响到我们的工作效率 这时候采取的最有利的措施莫过于重建索引了 本文主要介绍了Oracle数据库中检查索引碎片并重建索引的过程 接下来我们就开始介绍这一过程

重建索引的步骤如下

确认基本信息

登入数据库 找到专门存放index 的tablespace 并且这个tablespace下所有index的owner都是tax 将index专门存放在一个独立的tablespace 与数据表的tablespace分离 是常用的数据库设计方法

查找哪些index需要重建

通过anlyze index validate structure命令可以分析单个指定的index 并且将单个index 分析的结果存放到 index_stats试图下 一般判断的依据是

height pct_used % del_lf_rows / lf_rows + g )

google上下载了遍历所有index脚本

发现anlyze index validate structure只能填充单个index分析信息 于是google了下 从网上下了个Loop 脚本 遍历索引空间下所有的索引名字 并且可以把所有index的分析信息存放到自己建立的一个用户表中

anlyze index 锁定index

发现下载的脚本不好用 应为anlyze index在分析索引前要争取独占锁 锁住index 很明显有些index正在被应用系统的使用 所以运行anlyze失败 这里吸取的教训是 尽量晚上做这种事 但是本人比较喜欢准时回家 所以在语句中添加Exception Handler 抛出anlyze index执行失败的那些index 名称 使脚本正常运行完毕 并且根据打印到前台的index name手动执行那些index分析

总结

虽然发现 个index中有 个符合上面的判断的依据 但是发现索引都不大 而那些拥有百万leaf的索引又没有符合上面的判断条件 所以结论是无需index rebuild online 没有啥碎片

什么时候可以rebuild index呢?

rebuild index online 对那些有大量DML操作的大索引是有益的 可以每个月季度做一次针对较大索引的rebuild 通常哪怕rebuild index online也会造成I/O争用 所以有无online意义不大 可以放到 个晚上 分批执行rebuild index 锁定index 不让用户用(没有用户等入的时候) 并且加上paralle 关键字 应为发现数据库服务器有 个cpu processors

lishixinzhi/Article/program/Oracle/201311/19014

oracle 数据库如何建立索引 如何用索引?

创建索引语法:

CREATE[UNIQUE]|[BITMAP]INDEXindex_name

--unique表示唯一索引

ONtable_name([column1[ASC|DESC],column2

--bitmap,创建位图索引

[ASC|DESC],?]|[express])[TABLESPACEtablespace_name][PCTFREEn1]

--指定索引在数据块中空闲空间

[STORAGE(INITIALn2)][NOLOGGING]

--表示创建和重建索引时允许对表做DML操作,默认情况下不应该使用

[NOLINE][NOSORT];

--表示创建索引时不进行排序,默认不适用,如果数据已经是按照该索引顺序排列的可以使用

扩展资料:

1、如果有两个或者以上的索引,其中有一个唯一性索引,而其他是非唯一,这种情况下oracle将使用唯一性索引而完全忽略非唯一性索引

2、至少要包含组合索引的第一列(即如果索引建立在多个列上,只有它的第一个列被where子句引用时,优化器才会使用该索引)

3、小表不要简历索引

4、对于基数大的列适合建立B树索引,对于基数小的列适合简历位图索引

5、列中有很多空值,但经常查询该列上非空记录时应该建立索引

6、经常进行连接查询的列应该创建索引

7、使用createindex时要将最常查询的列放在最前面

8、LONG(可变长字符串数据,最长2G)和LONGRAW(可变长二进制数据,最长2G)列不能创建索引

9、限制表中索引的数量(创建索引耗费时间,并且随数据量的增大而增大;索引会占用物理空间;当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,降低了数据的维护速度)


网页标题:oracle怎么重建索引 oracle重建索引会锁表吗
网站网址:http://pwwzsj.com/article/hgjsij.html