orcl索引失效,重建所有索引,或者根据命名空间重建所有索引

本文介绍了一个用于在Oracle数据库中批量重建索引的PL/SQL过程。该过程可以根据指定的表空间或者仅针对状态为不可用的索引进行操作。提供了详细的实现逻辑,包括如何跳过不需要重建的情况。

create or replace procedure p_rebuild_all_index
   (tablespace_name in varchar2,--这里是表空间名,如果不改变表空间,可以传入null
   only_unusable in boolean)    --是否仅对无效的索引操作
as
   sqlt varchar(200);
begin
    --只取非临时索引
    for idx in (select index_name, tablespace_name, status from user_indexes where temporary = 'N') loop
        --如果是如重建无效的索引,且当索引不是无效时,则跳过
        if only_unusable = true and idx.status <> 'UNUSABLE' then
           goto continue;
        end if;

        if (tablespace_name is null) or idx.status = 'UNUSABLE' then
           --如果没有指定表空间,或索引无效,则在原表空间重建
           sqlt := 'alter index ' || idx.index_name || ' rebuild ';
        elsif upper(tablespace_name) <> idx.tablespace_name then
           --如果指定的不同的表空间,则在指定表空间待建索引
           sqlt := 'alter index ' || idx.index_name || ' rebuild tablespace ' || tablespace_name;
        else
           --如果表空间相同,则跳过
           goto continue;
        end if;

        dbms_output.put_line(idx.index_name);
        EXECUTE IMMEDIATE sqlt;
        <<continue>>
        null;
     end loop;
end;
/*
功能:重建索引。
说明:如果表空间参数传入null,则在原表空间内重建索引,否则在目标表空间重建索引。
      如果表空间相同,则跳过。
      only_unusable表示是否只对无效的索引进行重建
作者:Lsetea,   2017年12月21日

突然找到的,可能是网上神仙的资源,如果需要删除可以联系我删除
*/

### Oracle 数据库中禁用或隐藏索引的方法 在Oracle数据库中,可以通过特定命令来禁用或逻辑上“隐藏”索引。这有助于优化性能测试、维护操作期间减少锁定冲突以及执行大规模数据加载时提高效率。 #### 禁用索引 要临时停止使用某个索引而不删除它,可以采用`ALTER INDEX ... UNUSABLE;`语句使该索引变为不可用状态[^4]: ```sql ALTER INDEX index_name UNUSABLE; ``` 此命令不会释放分配给索引的空间,也不会影响其他依赖于相同表的对象;但是查询计划将不再考虑这个被标记为UNUSABLE的索引直到重建为止。为了恢复索引的功能,则需通过REBUILD选项将其重新构建: ```sql ALTER INDEX index_name REBUILD; ``` #### 隐藏索引 对于希望保留索引结构但又不想让SQL优化器立即利用的情况,“隐藏”索引是一个有效策略。可通过设置索引的可见性 Invisible 来实现这一点,在不影响物理存储的情况下改变其对查询解析的影响方式[^1]: ```sql ALTER INDEX index_name INVISIBLE; ``` 一旦设置了INVISIBLE属性之后,除非显式指定了USE_INDEX提示,否则CBO (Cost-Based Optimizer) 将忽略这些索引的存在。如果想要再次启用它们参与查询规划过程,只需简单地切换回VISIBLE模式即可: ```sql ALTER INDEX index_name VISIBLE; ``` 需要注意的是,虽然这两种方法都可以达到相似的效果——即暂时不让某些索引参与到实际的数据检索过程中去,但在具体应用场景下各有优劣,应根据实际情况合理选择适用的方式[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值