首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否有一种方法可以通过存储过程/ plsql重建每个模式中的每个索引?

是否有一种方法可以通过存储过程/ plsql重建每个模式中的每个索引?
EN

Stack Overflow用户
提问于 2020-12-10 15:53:10
回答 1查看 805关注 0票数 0

无法显示一个存储过程,该存储过程将在线重建数据库中每个架构中的每个索引。我只是对这件事不太清楚。

代码语言:javascript
复制
create or replace procedure rebuild_indexes(
    p_owner in varchar2,
    p_table_name in varchar2
) as
begin
    for indexes_to_rebuild in
    (
        select index_name
        from all_indexes
        where owner = p_owner
        and table_name = p_table_name
    ) loop
        execute immediate 'alter index '||p_owner||'.'
            ||indexes_to_rebuild.index_name||' rebuild online';
    end loop;
end;
/
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-10 16:19:00

您可以通过稍微修改参数和对ALL_INDEXES进行查询来尝试这样的过程

代码语言:javascript
复制
DECLARE
    PROCEDURE rebuild_indexes (p_owner        IN VARCHAR2 DEFAULT NULL,
                               p_table_name   IN VARCHAR2 DEFAULT NULL)
    AS
    BEGIN
        FOR indexes_to_rebuild
            IN (SELECT owner, index_name
                  FROM all_indexes
                 WHERE owner = NVL (p_owner, owner) AND table_name = NVL (p_table_name, table_name))
        LOOP
            BEGIN
                EXECUTE IMMEDIATE   'alter index '
                                 || indexes_to_rebuild.owner
                                 || '.'
                                 || indexes_to_rebuild.index_name
                                 || ' rebuild online';
            EXCEPTION
                WHEN OTHERS
                THEN
                    DBMS_OUTPUT.put_line (
                           'Failed to rebuild index '
                        || indexes_to_rebuild.owner
                        || '.'
                        || indexes_to_rebuild.index_name
                        || ': '
                        || SQLERRM);
            END;
        END LOOP;
    END;
BEGIN
    --Rebuild all indexes on a table
    rebuild_indexes (p_owner => 'APEX_190200', p_table_name => 'WWV_FLOWS');
    --Rebuild all indexes in a schema
    rebuild_indexes (p_owner => 'APEX_190200', p_table_name => NULL);
    --Rebuild all indexes
    rebuild_indexes (p_owner => NULL, p_table_name => NULL);
END;
/
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65237864

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档