如果你管理的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 数据库的导出文件,包含了数据库中的表结构、数据和索引信息。下面将详细介绍如何将 DMP 文件导入 Oracle 数据库中。 首先,需要准备相关的环境,包括将 DMP 文件拷贝到目标服务器上,使用超大...
- 重建索引到新的表空间: ``` ALTER INDEX PK_DM_RES_TEMP_SAMPLE REBUILD TABLESPACE base_c6 NOLOGGING; ``` #### 五、总结 综上所述,Oracle数据库备份与恢复是数据库管理的重要组成部分。通过合理利用...
在当前的IT环境中,Oracle数据库作为关系型数据库管理系统的重要组成部分,它的监控和运维管理显得尤为重要。有效的监控不仅可以帮助数据库管理员(DBA)及时发现并解决问题,还可以提高数据库的性能和稳定性,确保...
在Oracle数据库重建场景中,我们可能需要执行一系列的SQL脚本来创建表、索引、存储过程等数据库对象,或者进行数据导入导出。Ant提供了`sql`任务,可以方便地与数据库交互,执行SQL脚本。 在描述中提到的博文链接...
Oracle数据库在IT行业中被广泛使用,特别是在大型企业中,它提供了高效、稳定的数据存储和管理功能。Oracle的导入导出功能是数据库管理的重要部分,它允许我们方便地备份数据、迁移数据以及在不同环境间同步数据。这...
Oracle数据库是世界上最广泛使用的数据库系统之一,特别是在企业级应用中。数据导出是数据库管理中的常见任务,用于备份、迁移或分析数据。Oracle提供了多种工具和技术来实现这一目标,其中包括EXPDP(Export Data ...
在Oracle数据库中,`COMMENT`用于添加注释,`EXPLAIN PLAN`帮助分析查询执行计划,`ANALYZE`用于收集统计信息以优化查询性能,`VALIDATE`验证约束有效性,`CALL`用于调用存储过程。 总的来说,这个Oracle数据库教程...
数据库还原在IT行业中是至关重要的任务,特别是在Oracle数据库管理中。Java可以用来编写脚本,实现对Oracle数据库的备份和还原操作。以下是对标题和描述中所述知识点的详细解释: 1. **Java调用操作系统命令**: ...
Oracle数据库是世界上最广泛使用的数据库管理系统之一,尤其在企业级应用中占据重要地位。本讲义主要涵盖了Oracle数据库的基本操作,包括数据类型、SQL/Plus环境以及对表、索引和视图的创建、删除和修改。以下将详细...
Oracle数据库是企业级广泛使用的数据库管理系统,尤其在大型企业及组织中,它的强大功能和稳定性使其成为数据存储和管理的首选。本章主要关注Oracle数据库的基本操作,特别是与数据类型、SQL/Plus环境以及表、索引和...
Oracle数据库在运行过程中可能会遇到各种错误,这些错误通常由特定的错误代码标识,并附带详细的错误消息,以帮助用户诊断和解决问题。以下是对部分Oracle数据库错误消息的详细解析,涵盖从EXP-00000至EXP-00024的...
Oracle数据库管理是数据库管理员(DBA)日常工作中不可或缺的一部分,涉及到用户、角色、表空间以及数据的导入导出。在Oracle环境中,理解如何创建、删除这些元素以及如何通过命令行进行操作至关重要。以下是对这些...
在构建网上书店系统时,Oracle数据库的使用是关键一环,因为Oracle是全球知名的大型企业级数据库管理系统,能够处理大量数据并提供高效、稳定的服务。本文将深入探讨如何利用Oracle来创建一个网上书店系统,包括...
在Oracle数据库管理与维护过程中,优化工作是一项持续性的任务。它不仅涉及到查询优化、索引管理等技术细节,还包括了整体架构的设计与调整。良好的数据库性能对于提高业务系统的响应速度、保障用户体验至关重要。 ...
在Oracle数据库的日常维护工作中,对警告日志文件进行监控是非常重要的一个环节。警告日志文件(通常命名为`alert_SID.log`,其中`SID`是数据库实例名)记录了数据库运行过程中发生的各种警告信息、错误消息以及其他...
Erwin将连接到Oracle数据库,扫描表、视图、索引、存储过程等对象,并在图形界面中显示它们的结构。你可以自定义显示选项,例如选择要反向工程的对象类型和过滤条件。 反向工程完成后,你可以利用Erwin提供的各种...
在IT行业中,数据库迁移是一项常见的任务,特别是在不同的数据库系统之间,如从SQL Server迁移到Oracle。这个过程涉及多个步骤和注意事项,确保数据的完整性和一致性。以下是对标题和描述中所述知识点的详细说明: ...
解决方法可能包括修复损坏的数据库文件、重建索引、重新创建表等。 #### 4. 附注 提供额外的信息或注意事项,帮助读者更好地理解文档内容。 #### 5. 参考资料 列出本文档所引用的所有参考资料,包括官方文档、...