最近使用SAA,发现网上很多博客讲解的其实在oracle 11.2之后的后续版本中使用或多或少都有问题,
要么版本改变语法改变要么不够全,花点时间罗列一下新版本的使用.
1.使用介绍
*****************************************
步骤:
创建一个任务,并定义参数;
定义负载;
生成一些建议;
查看并应用建议;
SAA的主要建议有:
创建/删除物化视图;
创建/删除物化视图日志;
创建/删除索引;
收集统计信息;
生成SQL脚本:
创建DIRECTORY;
授权给用户;
生成脚本;
?
*****************************************
2.SAA使用
*****************************************
-----2.1 案例1:
---2.1.1 create a STS
BEGIN DBMS_SQLTUNE.CREATE_SQLSET( sqlset_name => 'OCPYANG_STS', sqlset_owner => 'SCOTT', description => 'ocpyangtest'); END; /
--2.1.2 Load the sql into SQL tuning set
--方法1:from MEM
BEGIN DBMS_SQLTUNE.CAPTURE_CURSOR_CACHE_SQLSET( sqlset_owner =>'SCOTT' , sqlset_name => 'OCPYANG_STS' ,time_limit => 120 --3600秒 ,repeat_interval => 20); --每隔20秒 END; /
--方法2: FROM AWR
declare
baseline_ref_cur DBMS_SQLTUNE.SQLSET_CURSOR;
begin
open baseline_ref_cur for
select VALUE(p) from table(
DBMS_SQLTUNE.SELECT_WORKLOAD_REPOSITORY(&begin_snap_id, &end_snap_id,NULL,NULL,NULL,NULL,NULL,NULL,NULL,'ALL')) p;
DBMS_SQLTUNE.LOAD_SQLSET('OCPYANG_STS', baseline_ref_cur);
end;
/
输入 begin_snap 的值: 11647
egin Snapshot Id specified: 11647
输入 end_snap 的值: 11859
nd Snapshot Id specified: 11859
--或指明sql_id
?
declare
baseline_ref_cur DBMS_SQLTUNE.SQLSET_CURSOR;
begin
open baseline_ref_cur for
select VALUE(p) from table(
DBMS_SQLTUNE.SELECT_WORKLOAD_REPOSITORY(&begin_snap_id, &end_snap_id,'sql_id='||CHR(39)||'&sql_id'||CHR(39)||'',NULL,NULL,NULL,NULL,NULL,NULL,'ALL')) p;
DBMS_SQLTUNE.LOAD_SQLSET('OCPYANG_STS', baseline_ref_cur);
end;
/
---方法3:FROM CURSOR CACHE
DECLARE cur DBMS_SQLTUNE.SQLSET_CURSOR; BEGIN OPEN cur FOR SELECT VALUE(x) FROM table( DBMS_SQLTUNE.SELECT_CURSOR_CACHE( 'parsing_schema_name <> ''SYS'' AND disk_reads > 1000000', NULL, NULL, NULL, NULL, 1, NULL,'ALL')) x; -- DBMS_SQLTUNE.LOAD_SQLSET( sqlset_owner =>'SCOTT', sqlset_name => 'OCPYANG_STS', populate_cursor => cur); END; /
---查看STS具体内容
SELECT sqlset_name, sql_text FROM dba_sqlset_statements WHERE sqlset_name = 'OCPYANG_STS';
---2.1.3 Examples of Using SQL Access Advisor
DECLARE u_taskname VARCHAR2(50) := 'ocpyang_sql_access_task'; u_task_desc VARCHAR2(128) := 'ocpyang SQL Access Task'; u_wkld_name VARCHAR2(50) := 'ocpyang_work_load'; u_saved_rows NUMBER := 0; u_failed_rows NUMBER := 0; u_num_found NUMBER; BEGIN --step1:reset task DBMS_ADVISOR.RESET_TASK(task_name => u_taskname); --step2:delete exists task dbms_advisor.delete_sqlwkld_ref(u_taskname, u_wkld_name); dbms_advisor.delete_sqlwkld(u_wkld_name); dbms_advisor.delete_task(u_taskname); EXCEPTION WHEN OTHERS THEN NULL; -- step3:Create a SQL Access Advisor task. DBMS_ADVISOR.create_task ( advisor_name => DBMS_ADVISOR.sqlaccess_advisor, task_name => u_taskname, task_desc => u_task_desc); --step4:Reset the task. --DBMS_ADVISOR.reset_task(task_name => u_taskname); --step5:Set task parameters DBMS_ADVISOR.SET_TASK_PARAMETER ( task_name => u_taskname, parameter => 'VALID_TABLE_LIST', value => 'SCOTT.%'); --step6:Create a link between the SQL tuning set and the task DBMS_ADVISOR.ADD_STS_REF( task_name => u_taskname, sts_owner => 'SCOTT', workload_name =>