生成SQL脚本
一种查看建议的替代方法就是查询元数据,它将使用dbms_advisor.task_script过程来为SQL语句创 建建议脚本。最终脚本是一个可以执行的SQL文件,它可能包含drop,create和alter语句。对于新对 象,物化视图名字,物化视图日志名与使用用户定义模板自动生成的索引。你也能在试图执行它之前 生成SQL脚本。
这里有四个任务参数控制着命名规则(mview_name_template与index_name_template),这些对象的所 有者(def_index_owner与def_mview_owner)与表空间(def_mview_tablespace与 def_index_tablespace)。
下面的例子显示了如何生成包含建议的CLOB:
execute dbms_advisor.create_file(dbms_advisor.get_task_script ('MYTASK'),'ADVISOR_RESULTS', 'advscript.sql');
为了保存脚本文件,必须提供目录路径,因此dbms_advisor.create_file过程需要知道脚本存储位置 。另外,必须要对这个目录持有读写权限。下面的例子显示了如何保存一个CLOB类型的指导脚本文件
SQL> create directory advisor_results as '/bak'; Directory created SQL> grant read,write on directory advisor_results to public; Grant succeeded SQL> execute dbms_advisor.create_file(dbms_advisor.get_task_script ('JYTASK'),'ADVISOR_RESULTS', 'jy_advscript.sql'); PL/SQL procedure successfully completed
下面是由这个过程生成的脚本内容的一部分。这个脚本包含了对建议访问结构收集统计信息的调用并 且在最后将建议标记为implemented。
Rem Access Advisor V10.1.0.0.0 - Production Rem Rem Username: SH Rem Task: MYTASK Rem Execution date: 15/04/2005 11:35 Rem set feedback 1 set linesize 80 set trimspool on set tab off set pagesize 60 whenever sqlerror CONTINUE create materialized view log on "sh"."products" with rowid, sequence("prod_id","prod_subcategory") including new values; alter materialized view log force on "sh"."products" add rowid, sequence("prod_id","prod_subcategory") including new values; .. create materialized view "sh"."mv$$_00510002" refresh fast with rowid enable query rewrite as select sh.customers.cust_state_province c1, count(*) m1 from sh.customers where (sh.customers.cust_state_province = 'ca') group by sh.customers.cust_state_province; begin dbms_stats.gather_table_stats('"sh"', '"mv$$_00510002"', null, dbms_stats.auto_sample_size); end; /
如何不再需要建议
dbms_advisor.reset_task过程可以将一个任务重新设置为初始启动状态。这将会删除所有建议和任 务的中间数据。任务的实际状态被设置为initial。语法如下:
dbms_advisor.reset_task (task_name in varchar2);
下面的例子将任务MYTASK进行重设置:
execute dbms_advisor.reset_task('mytask');