–DBMS_SQLTUNE
https://docs.oracle.com/en/database/oracle/oracle-database/19/arpls/index.html
–DBMS_SQLPA
https://docs.oracle.com/en/database/oracle/oracle-database/19/arpls/DBMS_SQLPA.html#GUID-9AAF3672-1CF3-4354-AF41-5BA50BA295F8
SPA for CACHE执行过程,如果是RAC,需要收集每个实例的CACHE SQL
1. creates a SQL tuning set object in the database
alter user SPA identified by oracle; EXEC DBMS_SQLTUNE.CREATE_SQLSET ( - SQLSET_NAME => 'TESTDB_STSTAB_0519', - DESCRIPTION => '11204 to 19600 upgrade SQL Set Create at : '||TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS'), - SQLSET_OWNER => 'SPA');
复制
2. 从AWR中收集SQL语句(DBMS_SQLTUNE.SELECT_CURSOR_CACHE)
PARSING_SCHEMA_NAME 可选择收集的SCHEMA,也可排除某些SCHEMA
DECLARE SQLSET_CUR DBMS_SQLTUNE.SQLSET_CURSOR; BEGIN OPEN SQLSET_CUR FOR SELECT VALUE(P) FROM TABLE( DBMS_SQLTUNE.SELECT_CURSOR_CACHE( 'PARSING_SCHEMA_NAME NOT IN (''SYS'', ''SYSTEM'', ''SPA'')', NULL, NULL, NULL, NULL, 1, NULL, 'ALL')) P; DBMS_SQLTUNE.LOAD_SQLSET( SQLSET_NAME => 'TESTDB_STSTAB_0519', SQLSET_OWNER => 'SPA', POPULATE_CURSOR => SQLSET_CUR); CLOSE SQLSET_CUR; END; /
复制
3. 创建一个临时表,通过该临时表导入和导出SQL tuning sets
EXEC DBMS_SQLTUNE.CREATE_STGTAB_SQLSET ('TESTDB_STSTAB_0519', 'SPA', 'USERS');
复制
4. 将一个或多个SQL tuning sets从它们在SYS schema中的位置复制到 CREATE_STGTAB_SQLSET 过程创建的临时表
EXEC DBMS_SQLTUNE.PACK_STGTAB_SQLSET ( - SQLSET_NAME => 'TESTDB_SQLSET_0519', - SQLSET_OWNER => 'SPA', - STAGING_TABLE_NAME => 'TESTDB_STSTAB_0519', - STAGING_SCHEMA_OWNER => 'SPA');
复制
5. 查询当前用户可访问的SQL tuning sets
STATEMENT_COUNT,SQL tuning sets中的语句数
set line 300 col NAME for a25 col DESCRIPTION for a70 select NAME,STATEMENT_COUNT,DESCRIPTION from user_sqlset; NAME STATEMENT_COUNT DESCRIPTION ------------------------- --------------- ---------------------------------------------------------------------- TESTDB_SQLSET_0519 400 11204 to 19600 upgrade SQL Set Create at : 2020-05-22 15:27:00
复制
6. 导出临时表,并导入到目标端上
expdp SPA/oracle dumpfile=TESTDB_STSTAB_0519.dmp directory=PUMP_DIR tables=TESTDB_STSTAB_0519 logfile=expdp_TESTDB_STSTAB_0519.log exclude=STATISTICS cluster=N scp /backup/expdp/TESTDB_STSTAB_0519.dmp oracle@192.168.1.197:/data/expdp
复制
目标端创建用户
sqlplus system/oracle@TESTDBPDB alter user SPA identified by oracle;
复制
目标端导入
impdp SPA/oracle@TESTDBPDB dumpfile=TESTDB_STSTAB_0519.dmp directory=PUMP_DIR FULL=Y logfile=impdp_TESTDB_STSTAB_0519.log cluster=N
复制
7. 将一个或多个SQL tuning sets从它们在临时表中的位置复制到SQL tuning sets schema中,从而使它们成为正确的SQL tuning sets。
EXEC DBMS_SQLTUNE.UNPACK_STGTAB_SQLSET (- SQLSET_NAME => 'TESTDB_SQLSET_0519', - SQLSET_OWNER => 'SPA', - REPLACE => TRUE, - STAGING_TABLE_NAME => 'TESTDB_STSTAB_0519', - STAGING_SCHEMA_OWNER => 'SPA');
复制
8. 创建了一个任务来处理和分析一个或多个SQL语句
VARIABLE SPA_TASK VARCHAR2(64); EXEC :SPA_TASK := DBMS_SQLPA.CREATE_ANALYSIS_TASK( - TASK_NAME => 'SPA_TASK_0519', - DESCRIPTION => '11.2.0.4 to 19.6.0.0 upgrade SPA Analysis task at : '||TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS'), - SQLSET_NAME => 'TESTDB_SQLSET_0519', - SQLSET_OWNER => 'SPA');
复制
9. 执行以前创建的分析任务,读取源端SQL语句执行信息
EXECUTION_TYPE=CONVERT SQLSET 用于读取在SQL Tuning Set中捕获的统计信息。
当希望避免执行SQL语句时可以使用它,因为SQL Tuning Set中已经存在用于实验的有效数据。
EXEC DBMS_SQLPA.EXECUTE_ANALYSIS_TASK( - TASK_NAME => 'SPA_TASK_0519', - EXECUTION_NAME => 'EXEC_11204_0519', - EXECUTION_TYPE => 'CONVERT SQLSET', - EXECUTION_DESC => 'Convert 11204 SQLSET for SPA Task at : '||TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS'));
复制
- 执行以前创建的分析任务,在目标端执行SQL获取执行信息
EXECUTION_TYPE=TEST EXECUTE 测试执行每条SQL语句并收集其执行计划和执行统计信息
vi spa_exec_sql_TESTDB_0519.sh echo "WARNING: spa_exec_sql Start @`date`" sqlplus SPA/oracle@TESTDBPDB << EOF! EXEC DBMS_SQLPA.EXECUTE_ANALYSIS_TASK( - TASK_NAME => 'SPA_TASK_0519', - EXECUTION_NAME => 'EXEC_19600_0519', - EXECUTION_TYPE => 'TEST EXECUTE', - EXECUTION_DESC => 'Execute SQL in 19600 for SPA Task at : '||TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS')); exit EOF! echo "WARNING:spa_exec_sql OK @`date`" nohup sh spa_exec_sql_TESTDB_0519.sh &
复制
11. 生成对比报告
vi spa_html_TESTDB_0519.sql --ELAPSED_TIME EXEC DBMS_SQLPA.EXECUTE_ANALYSIS_TASK( - TASK_NAME => 'SPA_TASK_0519', - EXECUTION_NAME => 'COMPARE_ET_0519', - EXECUTION_TYPE => 'COMPARE PERFORMANCE', - EXECUTION_PARAMS => DBMS_ADVISOR.ARGLIST( - 'COMPARISON_METRIC', 'ELAPSED_TIME', - 'EXECUTE_FULLDML', 'TRUE', - 'EXECUTION_NAME1','EXEC_11204_0519', - 'EXECUTION_NAME2','EXEC_19600_0519'), - EXECUTION_DESC => 'Compare SQLs between 11204 and 19600 at :'||TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS')); --CPU_TIME EXEC DBMS_SQLPA.EXECUTE_ANALYSIS_TASK( - TASK_NAME => 'SPA_TASK_0519', - EXECUTION_NAME => 'COMPARE_CT_0519', - EXECUTION_TYPE => 'COMPARE PERFORMANCE', - EXECUTION_PARAMS => DBMS_ADVISOR.ARGLIST( - 'COMPARISON_METRIC', 'CPU_TIME', - 'EXECUTE_FULLDML', 'TRUE', - 'EXECUTION_NAME1','EXEC_11204_0519', - 'EXECUTION_NAME2','EXEC_19600_0519'), - EXECUTION_DESC => 'Compare SQLs between 11204 and 19600 at :'||TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS')); --BUFFER_GETS EXEC DBMS_SQLPA.EXECUTE_ANALYSIS_TASK( - TASK_NAME => 'SPA_TASK_0519', - EXECUTION_NAME => 'COMPARE_BG_0519', - EXECUTION_TYPE => 'COMPARE PERFORMANCE', - EXECUTION_PARAMS => DBMS_ADVISOR.ARGLIST( - 'COMPARISON_METRIC', 'BUFFER_GETS', - 'EXECUTE_FULLDML', 'TRUE', - 'EXECUTION_NAME1','EXEC_11204_0519', - 'EXECUTION_NAME2','EXEC_19600_0519'), - EXECUTION_DESC => 'Compare SQLs between 11204 and 19600 at :'||TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS')); --DISK_READS EXEC DBMS_SQLPA.EXECUTE_ANALYSIS_TASK( - TASK_NAME => 'SPA_TASK_0519', - EXECUTION_NAME => 'COMPARE_DR_0519', - EXECUTION_TYPE => 'COMPARE PERFORMANCE', - EXECUTION_PARAMS => DBMS_ADVISOR.ARGLIST( - 'COMPARISON_METRIC', 'DISK_READS', - 'EXECUTE_FULLDML', 'TRUE', - 'EXECUTION_NAME1','EXEC_11204_0519', - 'EXECUTION_NAME2','EXEC_19600_0519'), - EXECUTION_DESC => 'Compare SQLs between 11204 and 19600 at :'||TO_CHAR(SYSDATE, 'YYYY-MM-DD HH24:MI:SS')); ALTER SESSION SET EVENTS='31156 TRACE NAME CONTEXT FOREVER, LEVEL 0X400'; SET LINES 1111 PAGES 50000 LONG 1999999999 TRIM ON TRIMS ON SERVEROUTPUT ON SIZE UNLIMITED SPOOL spa_TESTDB_elapsed_all_0519.html SELECT XMLTYPE(DBMS_SQLPA.REPORT_ANALYSIS_TASK('SPA_TASK_0519','HTML','ALL','ALL',NULL,1000,'COMPARE_ET_0519')).GETCLOBVAL(0,0) FROM DUAL; spool off SPOOL spa_TESTDB_buffer_all_0519.html SELECT XMLTYPE(DBMS_SQLPA.REPORT_ANALYSIS_TASK('SPA_TASK_0519','HTML','ALL','ALL',NULL,1000,'COMPARE_BG_0519')).GETCLOBVAL(0,0) FROM DUAL; spool off SPOOL spa_TESTDB_cputime_all_0519.html SELECT XMLTYPE(DBMS_SQLPA.REPORT_ANALYSIS_TASK('SPA_TASK_0519','HTML','ALL','ALL',NULL,1000,'COMPARE_CT_0519')).GETCLOBVAL(0,0) FROM DUAL; spool off SPOOL spa_TESTDB_disk_all_0519.html SELECT XMLTYPE(DBMS_SQLPA.REPORT_ANALYSIS_TASK('SPA_TASK_0519','HTML','ALL','ALL',NULL,1000,'COMPARE_DR_0519')).GETCLOBVAL(0,0) FROM DUAL; spool off SPOOL spa_TESTDB_error_0519.html SELECT XMLTYPE(DBMS_SQLPA.REPORT_ANALYSIS_TASK('SPA_TASK_0519','HTML','ERRORS','ALL',NULL,1000,'COMPARE_ET_0519')).GETCLOBVAL(0,0) FROM DUAL; spool off SPOOL spa_TESTDB_unsupported_0519.html SELECT XMLTYPE(DBMS_SQLPA.REPORT_ANALYSIS_TASK('SPA_TASK_0519','HTML','UNSUPPORTED','ALL',NULL,1000,'COMPARE_ET_0519')).GETCLOBVAL(0,0) FROM DUAL; spool off sqlplus SPA/oracle@TESTDBPDB set echo on @spa_html_TESTDB_0519.sql
复制
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
TA的专栏
目录