《Oracle索引的维护方法》由会员分享,可在线阅读,更多相关《Oracle索引的维护方法(5页珍藏版)》请在金锄头文库上搜索。
1、一. 查看系统表中的用户索引 在 Oracle 中,SYSTEM 表是安装数据库时自动建立的,它包含数据库的全部数据字典,存储过程、包、函数和触发器的定义以及系统回滚段。 一般来说,应该尽量避免在 SYSTEM 表中存储非 SYSTEM 用户的对象。因为这样会带来数据库维护和管理的很多问题。一旦 SYSTEM 表损坏了,只能重新生成数据库。我们可以用下面的语句来检查在 SYSTEM 表内有没有其他用户的索引存在。 select count(*) from dba_indexes where tablespace_name = “SYSTEM“ and owner not in (“SYS“,“
2、SYSTEM“) 二. 索引的存储情况检查 Oracle 为数据库中的所有数据分配逻辑结构空间。数据库空间的单位是数据块(block)、范围(extent)和段(segment)。 Oracle 数据块(block)是 Oracle 使用和分配的最小存储单位。它是由数据库建立时设置的DB_BLOCK_SIZE 决定的。一旦数据库生成了,数据块的大小不能改变。要想改变只能重新建立数据库。(在 Oracle9i 中有一些不同,不过这不在本文讨论的范围内。) Extent 是由一组连续的 block 组成的。一个或多个 extent 组成一个 segment。当一个 segment中的所有空间被用完
3、时,Oracle 为它分配一个新的 extent。 Segment 是由一个或多个 extent 组成的。它包含某表空间中特定逻辑存储结构的所有数据。一个段中的 extent 可以是不连续的,甚至可以在不同的数据文件中。 一个 object 只能对应于一个逻辑存储的 segment,我们通过查看该 segment 中的 extent,可以看出相应 object 的存储情况。 (1)查看索引段中 extent 的数量: select segment_name, count(*) from dba_extentswhere segment_type=“INDEX“ and owner=UPPER(“ from dba_free_space_coalesced where percent_blocks_coalesced!=100/ 整理表空间的碎片。 alter tablespace 表空间名 coalesce