专注各种脚本编程
Baidu
加入收藏夹
本站内容有下面分类知识,欢迎您的到来^_^
shell相关:指令篇 基础篇 脚本欣赏 编程实例 shell问问 shell视频教程 技巧篇 水平测试 E文资料 vi编辑器 高级Bash脚本编程指南
其他:mysql perl c语言 oracle
当前位置:| 主页>oracle>

oracle下分析表及其索引

百度收藏 QQ搜藏

下面这个analyze.sql脚本,能够用来分析某用户下的表及索引,而对于里面的大表,就改为以评估的方式进行分析:

#############代码如下###############
set serveroutput on size 100000
declare
  v_per number(3);
  v_start number := dbms_utility.get_time;
  v_end   number;
begin

for rec in (select segment_name,segment_type,ceil(sum(bytes)/1024/1024) segment_size
  from user_segments group by segment_name,segment_type)
loop

    if rec.segment_type = 'INDEX' then
         dbms_stats.gather_index_stats(ownname=>'???',  --记得自己更改一下
                                       INDNAME=>rec.segment_name
                                      );

--        dbms_output.put_line(rec.segment_name||' '||rec.segment_size||'m '||ceil((dbms_utility.get_time - v_start)/100)||'s');
         v_start := dbms_utility.get_time;

    elsif rec.segment_type = 'TABLE' then
        case when rec.segment_size < 32 then
            v_per := 100;
             when rec.segment_size < 320 then
            v_per := 10;
        else
            v_per := 1;
        end case;
             dbms_stats.gather_table_stats(OWNNAME=>'???',
                   TABNAME=>rec.segment_name,
                   ESTIMATE_PERCENT=>v_per,
                   METHOD_OPT=>'FOR ALL INDEXED COLUMNS');

--         dbms_output.put_line(rec.segment_name||' '||rec.segment_size||'m '||ceil((dbms_utility.get_time - v_start)/100)||'s');
         v_start := dbms_utility.get_time;

    end if;
end loop;
end;
/                                       
#############################

上一篇:Oracle常用Script 下一篇:用来获得某个存储过程、包、函数代码

power by soyo123 2007-2008