[20230516]完善spsw.sql脚本.txt --//以前写的spsw.sql脚本通过加入提示,产生好的执行计划(sql_id=good_sql_id),替换有问题的sql语句(bad_sql_id). --//现在遇到一个问题,就是现在的dg可以做只读查询,里面的sql语句没有在主库执行过,我抽取的脚本在sqlplus执行时里面的\r字符给 --//过滤掉了.即使加入\r也没有用,你可以测试windows写的sql语句(带\r)字符,linux写的sql语句(没带\r)字符,在sqlplus下执行时可以 --//发现生成的sql_id是一样的. --//这样我执行生成的sql_id与原来不一致.而且在spsw.sql在备库无法执行,因为是只读模式. --//我的做法现在在主库执行一次,获得sql_id,相当于bad_sql_id. --//然后加入提示在主库执行一次,获得sql_id,相当于good_sql_id. --//然后执行如下 @spsw good_sql_id 0 bad_sql_id 0 '' true --//这样带来一个问题我使用spext.sql(sql profile extrace)脚本无法查询,因为我无法知道good_sql_id, bad_sql_id值. --//仅仅知道真实的sql_id,除非我看执行计划后面的note部分. --//而现在参数4=0现在脚本是没有使用的(我已经修改通过v$sqlarea获得完整sql文本).我使用它设置orig_sql_id. --//dbms_sqltune.execute_tuning_task执行支持database_link_to参数,看看DBMS_SQLTUNE.import_sql_profile发现不支持该参数. --//还有一个细节问题,就是获取执行计划的来源可以是v$sql_plan或者dba_hist_sql_plan. --//获取完整sql文本的来源可以是v$sqlarea或者dba_hist_sqltext. --//还有参数2指定child_number,有时候也许指定Plan_hash_value更加合理,特别是查询dba_hist_sql_plan视图时。 --//重新改写看看,加入参数7,8表示如下:: --//参数7 sga|awr 定义 执行计划的来源可以是v$sql_plan或者dba_hist_sql_plan. --//参数8 sga|awr 定义 完整sql文本的来源可以是v$sqlarea或者dba_hist_sqltext. --//这样的好处因为备库可以建立awr报表,对应sql语句保存在dba_hist_sqltext视图里面。我可以指定bad_sql_id不在主库运行过. --//例子: @ undefparm.sql ---//tpt 脚步用于清除参数1..25定义. --//不指定参数7,8 相当于sga. @ spsw good_sql_id [child_number|plan_hash_value] bad_sql_id [0|orig_sql_id] '' true --//利用执行计划好的plan_hash_value作为sql profile. @ spsw sql_id [child_number|plan_hash_value] sql_id [0|orig_sql_id] '' true awr awr --//备库有问题的sql语句: @ spsw good_sql_id [child_number|plan_hash_value] sql_id [0|orig_sql_id] '' true sga awr --//我并没有完整的测试,或者讲测试不全面.更新脚本如下: $ cat spsw.sql prompt prompt @spsw good_sql_id [child_number|plan_hash_value] bad_sql_id [0|orig_sql_id] '' true [sga|awr] [sga|awr] prompt col orig_sql_id new_value v3 define noprint='noprint' col tpt_comment1 &noprint new_value _tpt_comment1 col tpt_comment2 &noprint new_value _tpt_comment2 col tpt_comment3 &noprint new_value _tpt_comment3 col tpt_comment4 &noprint new_value _tpt_comment4 col tpt_noprint &noprint new_value _tpt_noprint set term off select decode('&&4','0','&&3','&&4') orig_sql_id ,decode(lower('&&7'),'sga','',NULL,'','--') tpt_comment1 ,decode(lower('&&7'),'awr','','--') tpt_comment2 ,decode(lower('&&8'),'sga','',NULL,'','--') tpt_comment3 ,decode(lower('&&8'),'awr','','--') tpt_comment4 from dual; set term on prompt orig_sql_id=&&v3 DECLARE ar_profile_hints SYS.sqlprof_attr; cl_sql_text CLOB; BEGIN SELECT EXTRACTVALUE (VALUE (d), '/hint') AS outline_hints BULK COLLECT INTO ar_profile_hints FROM XMLTABLE ( '/*/outline_data/hint' PASSING (SELECT xmltype (other_xml) AS xmlval &&_tpt_comment1 FROM v$sql_plan &&_tpt_comment2 FROM dba_hist_sql_plan WHERE sql_id = '&&1' &&_tpt_comment1 AND (child_number = &&2 or plan_hash_value= &&2) &&_tpt_comment2 AND (plan_hash_value= &&2) AND other_xml IS NOT NULL)) d; SELECT &&_tpt_comment3 SQL_FULLTEXT &&_tpt_comment4 SQL_TEXT INTO cl_sql_text FROM -- replace with dba_hist_sqltext -- if required for AWR based -- execution &&_tpt_comment3 v$sqlarea &&_tpt_comment4 sys.dba_hist_sqltext WHERE sql_id = '&&3'and rownum=1; -- plan_hash_value = &&2; DBMS_SQLTUNE.import_sql_profile (sql_text => cl_sql_text, profile => ar_profile_hints, category => '&&5', DESCRIPTION => 'switch &&1 => &&v3', name => 'switch tuning &&v3' -- use force_match => true -- to use CURSOR_SHARING=SIMILAR -- behaviour, i.e. match even with -- differing literals , force_match => &&6); END; / prompt ================================================================================================================================================= prompt if drop or alter sql profile ,run : prompt execute dbms_sqltune.drop_sql_profile(name => 'switch tuning &&v3') prompt execute dbms_sqltune.alter_sql_profile(name => 'switch tuning &&v3',attribute_name=>'STATUS',value=>'DISABLED') prompt ================================================================================================================================================= prompt prompt
[20230516]完善spsw.sql脚本.txt
来源:这里教程网
时间:2026-03-03 18:50:04
作者:
编辑推荐:
下一篇:
相关推荐
-
雷神推出 MIX PRO II 迷你主机:基于 Ultra 200H,玻璃上盖 + ARGB 灯效
2 月 9 日消息,雷神 (THUNDEROBOT) 现已宣布推出基于英
-
制造商 Musnap 推出彩色墨水屏电纸书 Ocean C:支持手写笔、第三方安卓应用
2 月 10 日消息,制造商 Musnap 现已在海外推出一款 Oce
热文推荐
- 谋划高质量增长,拼多多打破电商平台传统路径依赖
谋划高质量增长,拼多多打破电商平台传统路径依赖
26-03-03 - 知乎新财报,商业化难题有解了?
知乎新财报,商业化难题有解了?
26-03-03 - OPPO造芯折戟,V荣米开启“芯”征程
OPPO造芯折戟,V荣米开启“芯”征程
26-03-03 - 说明书Tektronix MSO44信号示波器200MHz
说明书Tektronix MSO44信号示波器200MHz
26-03-03 - 文心领航走进大模型时代,从Q1财报看百度价值重估机遇
文心领航走进大模型时代,从Q1财报看百度价值重估机遇
26-03-03 - 说明书Tektronix泰克MSO32示波器
说明书Tektronix泰克MSO32示波器
26-03-03 - 从逸仙电商Q1财报,看见“三步走”的力量
从逸仙电商Q1财报,看见“三步走”的力量
26-03-03 - 参数指标Tektronix DPO7054数字示波器500MHz
参数指标Tektronix DPO7054数字示波器500MHz
26-03-03 - 钉钉、金山办公、印象笔记“会师”AI大模型
钉钉、金山办公、印象笔记“会师”AI大模型
26-03-03 - 企业用友NC软件被locked勒索病毒攻击,如何恢复nchome配置文件
企业用友NC软件被locked勒索病毒攻击,如何恢复nchome配置文件
26-03-03
