【发布时间】:2021-03-22 01:45:14
【问题描述】:
似乎无法想象一个存储过程可以在线重建数据库中每个模式中的每个索引。我只是想不通。
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;
/
【问题讨论】:
-
鉴于重建索引从长远来看通常除了烧焦之外一无所获,您编写此过程的想法是什么?
-
@APC 频繁更改数据库中的表需要重建索引,这是帮助调整性能的例行程序。而且日常工作通常会自动化。
-
该过程很好,但是它不会捕获分区索引,即它会在它们上失败。
-
定期重建模式中的所有索引不会“调整性能”。分区维护后分区索引存在一个特定问题,但正如 Wernfried 指出的那样,您的过程无论如何都不会处理分区索引。
-
"上面的过程只给了我一个编译错误信息。"什么信息?你的程序为我编译和运行。
标签: oracle stored-procedures indexing plsql