曾经在下面文章中介绍过使用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 --
《【实验】【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/