ITPub博客

首页 > 数据库 > Oracle > 使用游标for循环修复多表失效索引

使用游标for循环修复多表失效索引

原创 Oracle 作者:skyin_1603 时间:2016-11-12 23:58:33 0 删除 编辑

若是用户多个表中的索引由于某种原因,导致了多表的索引失效的情况下,
如果我们一个一个表的去检查并修复它的的索引,无疑是增加的工作量,如果
使用游标for循环就很容易解决,以下是演示过程。

---使用for游标修复用户表中损坏的索引:

--创建两个测试表:

suxing@PROD>create table t3 as select * from all_objects

  2  where rownum<=20;

Table created.

 

suxing@PROD>create table t4 as select * from all_objects

  2  where rownum<=50;

Table created.

#两个测试表已经创建成功:

 

--给两个测试表各创建创建一个索引:

suxing@PROD>create index idx_t3 on t3(object_id);

Index created.

 

suxing@PROD>create index idx_t4 on t4(object_id);

Index created.

#索引创建成功:

 

--查看两个表的索引状态:

suxing@PROD>select index_name,status from user_indexes;

INDEX_NAME                     STATUS

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

IDX_T4                         VALID

IDX_T3                         VALID

#可见两个表的索引处于正常状态。

 

--移动两个表致使两个表的所以失效:

suxing@PROD>alter table t3 move;

Table altered.

 

suxing@PROD>alter table t4 move;

Table altered.

#已做移动操作。

--再次查看两个表的索引状态:

suxing@PROD>select index_name,status from user_indexes;

INDEX_NAME                     STATUS

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

IDX_T4                         UNUSABLE

IDX_T3                         UNUSABLE

#表移动之后导致表中的索引失效。

 

--使用for游标修复用户的所有表失效的索引:

suxing@PROD>begin

  2             for i in (select index_name,status from user_indexes where status='UNUSABLE') loop

  3             execute immediate 'alter index '||i.index_name||' rebuild online';

  4             end loop;

  5        end;

  6        /

PL/SQL procedure successfully completed.

#程序执行完成。

 
--再次查看两个表的索引状态:

suxing@PROD>select index_name,status from user_indexes;

INDEX_NAME                     STATUS

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

IDX_T4                         VALID

IDX_T3                         VALID

#索引已经修复。

这样,就几步的操作,就完成多个表失效索引的修复。

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

下一篇: 创建过程
请登录后发表评论 登录
全部评论

注册时间:2016-09-06

  • 博文量
    231
  • 访问量
    215124