`
onelark
  • 浏览: 32530 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

在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://tech.ccidnet.com/art/1105/20080729/1525405_1.html

分享到:
评论

相关推荐

    dmp文件导入oracle数据库方法[参考].pdf

    DMP 文件是 Oracle 数据库的导出文件,包含了数据库中的表结构、数据和索引信息。下面将详细介绍如何将 DMP 文件导入 Oracle 数据库中。 首先,需要准备相关的环境,包括将 DMP 文件拷贝到目标服务器上,使用超大...

    oracle数据库备份与还原

    - 重建索引到新的表空间: ``` ALTER INDEX PK_DM_RES_TEMP_SAMPLE REBUILD TABLESPACE base_c6 NOLOGGING; ``` #### 五、总结 综上所述,Oracle数据库备份与恢复是数据库管理的重要组成部分。通过合理利用...

    oracle数据库监控

    在当前的IT环境中,Oracle数据库作为关系型数据库管理系统的重要组成部分,它的监控和运维管理显得尤为重要。有效的监控不仅可以帮助数据库管理员(DBA)及时发现并解决问题,还可以提高数据库的性能和稳定性,确保...

    使用ant执行sql脚本重建oracle数据库

    在Oracle数据库重建场景中,我们可能需要执行一系列的SQL脚本来创建表、索引、存储过程等数据库对象,或者进行数据导入导出。Ant提供了`sql`任务,可以方便地与数据库交互,执行SQL脚本。 在描述中提到的博文链接...

    oracle数据库数据导出.doc

    Oracle数据库是世界上最广泛使用的数据库系统之一,特别是在企业级应用中。数据导出是数据库管理中的常见任务,用于备份、迁移或分析数据。Oracle提供了多种工具和技术来实现这一目标,其中包括EXPDP(Export Data ...

    Oracle导入导出命令bat执行命.rar

    Oracle数据库在IT行业中被广泛使用,特别是在大型企业中,它提供了高效、稳定的数据存储和管理功能。Oracle的导入导出功能是数据库管理的重要部分,它允许我们方便地备份数据、迁移数据以及在不同环境间同步数据。这...

    ORACLE数据库教程.pptx

    在Oracle数据库中,`COMMENT`用于添加注释,`EXPLAIN PLAN`帮助分析查询执行计划,`ANALYZE`用于收集统计信息以优化查询性能,`VALIDATE`验证约束有效性,`CALL`用于调用存储过程。 总的来说,这个Oracle数据库教程...

    java备份还原oracle数据库.pdf

    数据库还原在IT行业中是至关重要的任务,特别是在Oracle数据库管理中。Java可以用来编写脚本,实现对Oracle数据库的备份和还原操作。以下是对标题和描述中所述知识点的详细解释: 1. **Java调用操作系统命令**: ...

    oracle数据库基本操作讲义.pptx

    Oracle数据库是世界上最广泛使用的数据库管理系统之一,尤其在企业级应用中占据重要地位。本讲义主要涵盖了Oracle数据库的基本操作,包括数据类型、SQL/Plus环境以及对表、索引和视图的创建、删除和修改。以下将详细...

    第6章Oracle数据库基本操作之二.pptx

    Oracle数据库是企业级广泛使用的数据库管理系统,尤其在大型企业及组织中,它的强大功能和稳定性使其成为数据存储和管理的首选。本章主要关注Oracle数据库的基本操作,特别是与数据类型、SQL/Plus环境以及表、索引和...

    Oracle数据库错误消息

    Oracle数据库在运行过程中可能会遇到各种错误,这些错误通常由特定的错误代码标识,并附带详细的错误消息,以帮助用户诊断和解决问题。以下是对部分Oracle数据库错误消息的详细解析,涵盖从EXP-00000至EXP-00024的...

    Oracle创建删除用户、角色、表空间、导入导出数据库命令行方式总结

    Oracle数据库管理是数据库管理员(DBA)日常工作中不可或缺的一部分,涉及到用户、角色、表空间以及数据的导入导出。在Oracle环境中,理解如何创建、删除这些元素以及如何通过命令行进行操作至关重要。以下是对这些...

    网上书店系统oracle数据库创建

    在构建网上书店系统时,Oracle数据库的使用是关键一环,因为Oracle是全球知名的大型企业级数据库管理系统,能够处理大量数据并提供高效、稳定的服务。本文将深入探讨如何利用Oracle来创建一个网上书店系统,包括...

    ORACLE数据库优化

    在Oracle数据库管理与维护过程中,优化工作是一项持续性的任务。它不仅涉及到查询优化、索引管理等技术细节,还包括了整体架构的设计与调整。良好的数据库性能对于提高业务系统的响应速度、保障用户体验至关重要。 ...

    Oracle数据库日常维护手册.txt

    在Oracle数据库的日常维护工作中,对警告日志文件进行监控是非常重要的一个环节。警告日志文件(通常命名为`alert_SID.log`,其中`SID`是数据库实例名)记录了数据库运行过程中发生的各种警告信息、错误消息以及其他...

    数据库转成数据字典工具类,能完美的从数据库导出数据字典。

    3. **建表语句生成**:工具能够自动生成各表的创建语句,这些语句可以用于在其他环境中重建相同的数据库结构。 4. **视图和存储过程的处理**:除了基本的表结构,工具可能还会处理数据库中的视图和存储过程,提供...

    erwin7.1反向工程oracle

    Erwin将连接到Oracle数据库,扫描表、视图、索引、存储过程等对象,并在图形界面中显示它们的结构。你可以自定义显示选项,例如选择要反向工程的对象类型和过滤条件。 反向工程完成后,你可以利用Erwin提供的各种...

    SQLServer数据库导入Oracle

    在IT行业中,数据库迁移是一项常见的任务,特别是在不同的数据库系统之间,如从SQL Server迁移到Oracle。这个过程涉及多个步骤和注意事项,确保数据的完整性和一致性。以下是对标题和描述中所述知识点的详细说明: ...

Global site tag (gtag.js) - Google Analytics