ITPub博客

首页 > 数据库 > Oracle > 验证Oracle 10g在线整理碎片索引是否失效过程

验证Oracle 10g在线整理碎片索引是否失效过程

原创 Oracle 作者:yingyifeng306 时间:2023-10-07 16:05:50 0 删除 编辑

从Oracle 10g开始,Oracle推出了表格在线整理碎片的功能(An ALTER TABLE … SHRINK ),极大的提高了系统可用性。
    那么表格碎片整理之后,索引是否会失效呢?实验结果来证明:

    SQL> CREATE TABLE test_rowid (
      2  id NUMBER,
      3  pad VARCHAR2(4000),
      4  CONSTRAINT test_rowid_pk PRIMARY KEY (id)
      5  );
      

    Table created.

    SQL> INSERT INTO test_rowid
      2  SELECT rownum AS id, dbms_random.string('p',500) AS pad
      3  FROM dual
      4  CONNECT BY level <= 200000;

    200000 rows created.

    SQL> create index idx_pad on test_rowid(pad);

    Index created.

    SQL> select sum(blocks) from dba_extents where owner='ZHOUL' and segment_name='TEST_ROWID';

    SUM(BLOCKS)
    ———–
          15360
          

    SQL> create table test_rowid_old as  select rowid "row_id",id,pad from test_rowid;

    Table created.

    SQL> delete from test_rowid where id>=100000 and id<150000;

    50000 rows deleted.

    SQL> commit;

    Commit complete.

    SQL> select sum(blocks) from dba_extents where owner='ZHOUL' and segment_name='TEST_ROWID';

    SUM(BLOCKS)
    ———–
          15360

    SQL> alter table test_rowid enable row movement;      

    Table altered.

    SQL> ALTER TABLE test_rowid SHRINK space cascade;

    Table altered.

    SQL> select sum(blocks) from dba_extents where owner='ZHOUL' and segment_name='TEST_ROWID';

    SUM(BLOCKS)
    ———–
          10864
          
    SQL> create table test_rowid_new as  select rowid "row_id",id,pad from test_rowid;

    Table created.

    SQL> select t1."row_id",t2."row_id",t1.id,t2.id from test_rowid_old t1,test_rowid_new t2 where t1."row_id"!=t2."row_id" and t1.id=t2.id and rownum<10;

    row_id             row_id                     ID         ID
    —————— —————— ———- ———-
    AAF0CfAAFAAAE53AAA AAF0CfAAFAAAE5tAAE     151929     151929
    AAF0CfAAFAAAE53AAB AAF0CfAAFAAAE5tAAF     151930     151930
    AAF0CfAAFAAAE53AAC AAF0CfAAFAAAE5tAAG     151931     151931
    AAF0CfAAFAAAE53AAD AAF0CfAAFAAAE5tAAH     151932     151932
    AAF0CfAAFAAAE53AAE AAF0CfAAFAAAE5tAAI     151933     151933
    AAF0CfAAFAAAE53AAF AAF0CfAAFAAAE5tAAJ     151934     151934
    AAF0CfAAFAAAE53AAG AAF0CfAAFAAAE5tAAK     151935     151935
    AAF0CfAAFAAAE53AAH AAF0CfAAFAAAE5tAAL     151936     151936
    AAF0CfAAFAAAE53AAI AAF0CfAAFAAAE5tAAM     151937     151937

    9 rows selected.

    SQL> select INDEX_NAME,STATUS from  dba_indexes where owner='ZHOUL' and lower(INDEX_NAME)='test_rowid_pk';

    INDEX_NAME                     STATUS
    —————————— ——–
     TEST_ROWID_PK                  VALID

    SQL> select INDEX_NAME,STATUS from  dba_indexes where owner='ZHOUL' and lower(INDEX_NAME)='idx_pad';

    INDEX_NAME                     STATUS
    —————————— ——–
     IDX_PAD                        VALID


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/23732248/viewspace-2987191/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
ITpub论坛高可用版主,擅长研究Oracle 内部原理、新特性、高可用和性能调优等,多年来一直保持着对新事务旺盛的求知欲。热切关注 Oracle 和其它相关技术

注册时间:2011-10-12

  • 博文量
    291
  • 访问量
    1593028