Oracle按用户名重建索引方法浅析

假如你管理的Oracle数据库下某些应用项目有大量的修改删除操作, 数据索引是需要周期性的重建的. 它不仅可以提高查询性能, 还能增加索引表空间空闲空间大小。在Oracle里大量删除记录后, 表和索引里占用的数据块空间并没有释放。

通过重建索引可以释放已删除记录索引占用的数据块空间来转移数据, 重命名的方法可以重新组织表里的数据。

Oracle按用户名重建索引的SQL脚本

  1. SET ECHO OFF;   
  2.   SET FEEDBACK OFF;   
  3.   SET VERIFY OFF;   
  4.   SET PAGESIZE 0;   
  5.   SET TERMOUT ON;   
  6.   SET HEADING OFF;   
  7.   ACCEPT username CHAR PROMPT 'Enter the index username: ';   
  8.   spool /oracle/rebuild_&username.sql;   
  9.   SELECT   
  10.   'REM +-----------------------------------------------+' || chr(10) ||   
  11.   'REM | INDEX NAME : ' || owner || '.' || segment_name   
  12.   || lpad('|', 33 - (length(owner) + length(segment_name)) )   
  13.   || chr(10) ||   
  14.   'REM | BYTES : ' || bytes   
  15.   || lpad ('|', 34-(length(bytes)) ) || chr(10) ||   
  16.   'REM | EXTENTS : ' || extents   
  17.   || lpad ('|', 34-(length(extents)) ) || chr(10) ||   
  18.   'REM +-----------------------------------------------+' || chr(10) ||   
  19.   'ALTER INDEX ' || owner || '.' || segment_name || chr(10) ||   
  20.   'REBUILD ' || chr(10) ||   
  21.   'TABLESPACE ' || tablespace_name || chr(10) ||   
  22.   'STORAGE ( ' || chr(10) ||   
  23.   ' INITIAL ' || initial_extent || chr(10) ||   
  24.   ' NEXT ' || next_extent || chr(10) ||   
  25.   ' MINEXTENTS ' || min_extents || chr(10) ||   
  26.   ' MAXEXTENTS ' || max_extents || chr(10) ||   
  27.   ' PCTINCREASE ' || pct_increase || chr(10) ||   
  28.   ');' || chr(10) || chr(10)   
  29.   FROM dba_segments   
  30.   WHERE segment_type = 'INDEX'   
  31.   AND owner='&username'   
  32.   ORDER BY owner, bytes DESC;   
  33.   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文件我们需要来分析一下, 它们是否到了需要重建的程度:

分析索引,观察一下是否碎片特别严重。

  1. SQL>ANALYZE INDEX &index_name VALIDATE STRUCTURE;   
  2.   col name heading 'Index Name' format a30   
  3.   col del_lf_rows heading 'Deleted|Leaf Rows' format 99999999   
  4.   col lf_rows_used heading 'Used|Leaf Rows' format 99999999   
  5.   col ratio heading '% Deleted|Leaf Rows' format 999.99999   
  6.   SELECT name,   
  7.   del_lf_rows,   
  8.   lf_rows - del_lf_rows lf_rows_used,   
  9.   to_char(del_lf_rows / (lf_rows)*100,'999.99999') ratio   
  10.   FROM index_stats where name = upper('&index_name'); 

当删除的比率大于15 – 20% 时,肯定是需要索引重建的。

经过删改后的rebuild_&username.sql文件我们可以放到Oracle的定时作业里:

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

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

那就忽略这个错误, 观察下次是否成功。

对于那些特别忙的表要不能用这里上面介绍的方法, 我们需要将它们的索引从rebuild_&username.sql里删去。

 

【编辑推荐】

  1. Oracle数据库中的OOP概念
  2. 前瞻性在Oracle数据库维护中的作用
  3. 使用资源管理器优化Oracle性能
  4. Oracle检索数据一致性与事务恢复
  5. 超大型Oracle数据库应用系统的设计方法

文章来源网络,作者:管理,如若转载,请注明出处:https://shuyeidc.com/wp/231380.html<

(0)
管理的头像管理
上一篇2025-04-19 16:25
下一篇 2025-04-19 16:26

相关推荐

  • 站群服务器和普通服务器到底哪个更适合GEO,怎么选?

    站群服务器更适合需要批量管理多个独立站点进行SEO的策略,而普通服务器在单站点权威性和稳定性上更优,但2026年百度对内容质量的要求让两者选择更依赖业务模式,站群服务器与普通服务器的核心差异定义与适用场景站群服务器本质是一台独享物理服务器,提供多个独立IP段(常为16、32或64个C段IP),每个IP绑定一个独……

    2026-07-28
    0
  • 物理服务器和云服务器做站群到底选哪个,哪个更稳定?

    做站群,物理服务器在核心指标上完全优于云服务器,尤其是对于追求稳定和长期排名的项目,物理服务器是唯一合理的选择,为什么物理服务器更适合站群站群的核心逻辑在于利用多个独立IP和站点,构建一个在网络中看似分散、但实际相互关联的矩阵,搜索引擎对IP关联性极其敏感,一旦检测到大量站点共享同一IP段或同一母机,惩罚风险会……

    2026-07-28
    0
  • 国内高防服务器哪家防御真实靠谱,怎么选?

    国内高防服务器哪家防御真实靠谱?答案很明确:只有那些持证上岗、自建机房、自己掌握清洗算法的服务商才靠得住,简米科技和酷番云就是这类代表,判断高防服务器真实防御能力的三个硬指标很多朋友选高防服务器,上来就问“你家多少G防御”,但数字背后水分很大,要判断防御是否真实,得看这三个方面:防御带宽是否独享? 有些服务商宣……

    2026-07-28
    0
  • 裸金属服务器和物理服务器有什么区别?,怎么选?

    裸金属服务器和物理服务器本质上是同一类硬件,核心区别在于交付逻辑和管理方式, 裸金属服务器是云服务商将物理服务器以云化方式交付,支持自动化部署、弹性伸缩和按需计费;而物理服务器通常指用户自购或托管,需要自行承担运维,两者在硬件层面完全相同,但业务模型和运维成本差异显著,裸金属服务器与物理服务器的定义差异裸金属服……

    2026-07-28
    0
  • 做GEO站群选哪家服务器服务商靠谱,怎么选?

    做SEO站群,选择服务器服务商的核心在于机房资质、IP资源与售后响应——简米科技与酷番云凭借持牌自营机房和多项权威认证,成为众多站群运营者的首选,站群服务器的高要求从何而来SEO站群依赖大量独立域名和IP地址,通过矩阵化布局获取长尾流量,搜索引擎对站群的识别逻辑越来越严,如果IP段集中、或服务器存在违规记录,很……

    2026-07-28
    0

发表回复

您的邮箱地址不会被公开。必填项已用 * 标注