【analyze】使用PL/SQL 方法完成多用户数据分析

曾经在下面文章中介绍过使用SQL脚本方法完成数据分析的内容。
《【实验】【analyze】分析特定用户的表和索引》
http://space.itpub.net/519536/viewspace-613551

这篇文章我来将这些分析动作都封装在一个PL/SQL块中,以便达到脚本的简洁和易用的目的。

1.编写的脚本内容如下
DECLARE
   v_sqlstring   VARCHAR2 (500);
BEGIN
   FOR rec IN (SELECT owner, table_name
                 FROM all_tables
                WHERE owner IN ('SECOOLER', 'SEC', 'HOU'))
   LOOP
      BEGIN
         v_sqlstring :=
               'begin dbms_stats.gather_table_stats ( wnname => '''
            || rec.owner
            || ''', tabname => '''
            || rec.table_name
            || ''',estimate_percent => null, '
            || 'method_opt => ''FOR ALL COLUMNS SIZE 254'', '
            || 'degree => 6, cascade => TRUE); end;';
         DBMS_OUTPUT.put_line (v_sqlstring);

         EXECUTE IMMEDIATE v_sqlstring;
      END;
   END LOOP;
END;
/


【注意】在构造分析语句的时候,注意要以“begin”开头。

2.脚本执行效果
sys@ora10g> DECLARE
  2     v_sqlstring   VARCHAR2 (500);
  3  BEGIN
  4     FOR rec IN (SELECT owner, table_name
  5                   FROM all_tables
  6                  WHERE owner IN ('SECOOLER', 'SEC', 'HOU'))
  7     LOOP
  8        BEGIN
  9           v_sqlstring :=
 10                 'begin dbms_stats.gather_table_stats ( wnname => '''
 11              || rec.owner
 12              || ''', tabname => '''
 13              || rec.table_name
 14              || ''',estimate_percent => null, '
 15              || 'method_opt => ''FOR ALL COLUMNS SIZE 254'', '
 16              || 'degree => 6, cascade => TRUE); end;';
 17           DBMS_OUTPUT.put_line (v_sqlstring);
 18
 19           EXECUTE IMMEDIATE v_sqlstring;
 20        END;
 21     END LOOP;
 22  END;
 23  /

begin dbms_stats.gather_table_stats ( wnname => 'SECOOLER', tabname => 'T',estimate_percent => null, method_opt => 'FOR ALL COLUMNS SIZE 254', degree => 6, cascade => TRUE); end;
…… 省略 ……
begin dbms_stats.gather_table_stats ( wnname => 'SEC', tabname => 'T_SEC',estimate_percent => null, method_opt => 'FOR ALL COLUMNS SIZE 254', degree => 6, cascade => TRUE); end;
…… 省略 ……
begin dbms_stats.gather_table_stats ( wnname => 'HOU', tabname => 'T_HOU',estimate_percent => null, method_opt => 'FOR ALL COLUMNS SIZE 254', degree => 6, cascade => TRUE); end;
…… 省略 ……

PL/SQL procedure successfully completed.

3.小结
这个分析脚本是可以随心所欲去定制的。例如,调整需要分析的用户名、调整dbms_stats.gather_table_stats分析脚本的参数亦或记录更多有意义日志信息等。
维护脚本最大的好处就是随需而变,当遇到一个较复杂的需求的时候,可以考虑编写一段得心应手的脚本来提高效率。
自动化,简洁,高可控性都是我们追求的目标。

Good luck.

secooler
10.03.06

-- The End --

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

转载于:http://blog.itpub.net/519536/viewspace-628807/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值