`

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

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

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

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

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

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

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

---------------------------------------------------------------------------
SET ECHO OFF;
SET FEEDBACKOFF;
SET VERIFY OFF;
SET PAGESIZE0;
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
WHEREsegment_type = 'INDEX'
ANDowner='&username'
ORDER BY owner, bytes DESC;

spool off;

-----------------------------------------------------------------------------

如果你用的是WINDOWS系统, 想改变输出文件的存放目录, 修改spool后面的路径成:
spool c:/oracle/rebuild_&username.sql;

如果你只想对大于max_bytes的索引重建索引, 可以修改上面的SQL语句:
在ANDowner='&username' 后面加个限制条件 ANDbytes> &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_rowsheading '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里删去.
分享到:
评论

相关推荐

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

    Oracle 数据库中导入 DMP 文件方法 Oracle 数据库是一种关系型数据库管理系统,广泛应用于企业级应用中。DMP 文件是 Oracle 数据库的导出文件,包含了数据库中的表结构、数据和索引信息。下面将详细介绍如何将 DMP ...

    SQLServer数据库导入Oracle

    9. **索引和约束**:重建索引和外键约束,以保持数据的完整性和查询性能。 10. **测试**:在生产环境导入数据前,务必在测试环境中进行完整的功能测试,以确保迁移后的系统能够正常运行。 以上就是从SQL Server...

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

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

    oracle11g-exp文件

    Oracle 11g是甲骨文公司发布的一款关系数据库管理系统,其强大而高效的数据处理能力在业界享有盛誉。在给定的“oracle11g-exp”文件中,重点涉及了Oracle数据库的数据导出和导入工具,即EXP(Export)和IMP(Import...

    OracleToMysql转换器

    4. **约束和索引重建**:在数据迁移完成后,转换器会尝试重建在Oracle中的表间约束(如外键)以及索引,以保持数据库的完整性和查询性能。 5. **错误处理和日志记录**:在迁移过程中,工具会记录任何遇到的问题,如...

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

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

    ORACLE常用命令

    #### 四.ORACLE里常用的数据对象 (SCHEMA) 在Oracle数据库中,schema(模式)是一组数据库对象的集合,包括表、视图、存储过程等。每个数据库用户都有一个默认的schema,通常是用户名本身。 - **创建表空间**: `...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    其一、就业面广:全球前100强企业99家都在使用ORACLE相关技术,中国政府机构,大中型企事业单位都能有ORACLE技术的工程师岗位。 其二、技术层次深:如果期望进入IT服务或者产品公司(类似毕博、DELL、IBM等),...

    oracle数据库备份与还原

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

    Oracle直方图的详细解析

    `DBMS_STATS`提供了多种选项,如`skewonly`用于检测索引中不均匀分布的列并创建直方图,`repeat`用于每次分析都重建直方图,`auto`则让Oracle自动选择合适的策略。以下是一个使用`DBMS_STATS`创建直方图的例子: ``...

    oracle数据库监控

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

    erwin7.1反向工程oracle

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

    最全的oracle常用命令大全.txt

    下面按类别列出一些ORACLE用户常用数据字典的查询使用方法。 1、用户 查看当前用户的缺省表空间 SQL>select username,default_tablespace from user_users; 查看当前用户的角色 SQL>select * from user_...

    ORACLE数据库优化

    - **自动分析日志表**:为了记录重建索引的操作及结果,可以创建一个名为`ANALYZE_LOG`的日志表,该表用于存储执行重建索引操作的用户名、操作时间以及可能出现的错误信息等。 ##### 2. 提升效率 除了索引之外,...

    oracle日常维护手册

    - Oracle数据库会在`alert_SID.log`文件中记录数据库运行状态、启动参数、重做日志切换、操作记录和错误信息。 - 定期检查警告日志有助于及时发现并解决问题,例如启动参数异常、重做日志切换问题、表空间问题以及...

    oracle.exportsql.(导出建表脚本)

    Oracle提供多种方式来导出建表脚本,以方便在不同环境或者进行数据重建时使用。标题中的"oracle.exportsql.(导出建表脚本)"就指的这个过程。 建表脚本通常包含了创建数据库表结构的所有SQL语句,包括表名、字段名、...

    oracle数据库数据导出.doc

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

    oracle dba 面试题目及答案

    在Oracle数据库中,数据库的启动过程分为三个主要阶段:`STARTUP NOMOUNT`、`STARTUP MOUNT` 和 `STARTUP OPEN`。 - **STARTUP NOMOUNT**:此时数据库实例已经启动,但数据库文件还没有被装载。在这个阶段,我们...

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

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

Global site tag (gtag.js) - Google Analytics