zoukankan      html  css  js  c++  java
  • sql_patch用法

    如果我们有一个问题 SQL 语句与SQL_ID 556prbqmcw8d1",我们可能会执行以下操作。

    输出建议

    DECLARE
      l_task    VARCHAR2(50);
      l_report  CLOB;
    BEGIN
      l_task := SYS.DBMS_SQLDIAG.create_diagnosis_task( 
                      sql_id       => '556prbqmcw8d1',
                      task_name    => 'sql_repair_task',
                      problem_type => DBMS_SQLDIAG.problem_type_execution_error);
    
      SYS.DBMS_SQLDIAG.execute_diagnosis_task(task_name => l_task);
    
      l_report := SYS.DBMS_SQLDIAG.report_diagnosis_task(task_name => l_task);
     
      DBMS_OUTPUT.PUT_LINE ('Report : ' || l_report);
    END;
    /

    参数使用包中定义的以下常量之一定义。PROBLEM_TYPEDBMS_SQLDIAG

    • PROBLEM_TYPE_PERFORMANCE- SQL 性能不佳。
    • PROBLEM_TYPE_WRONG_RESULTS- 查询似乎给出不一致的结果。
    • PROBLEM_TYPE_COMPILATION_ERROR- 查询无法编译,即使它应该有效。
    • PROBLEM_TYPE_EXECUTION_ERROR- 查询会编译,但会导致运行时错误,可能是由于执行计划不周,或者遇到 Bug 的执行计划。
    • PROBLEM_TYPE_ALT_PLAN_GEN- 用户希望顾问寻找替代计划。

    检查报表的输出,应用建议。

    BEGIN
      SYS.DBMS_SQLDIAG.accept_sql_patch(
            task_name  => 'sql_repair_task',
            task_owner => 'SYS',
            replace    => TRUE);
    END;
    /

    直接给sql添加hint
    BEGIN
      SYS.DBMS_SQLDIAG_INTERNAL.i_create_patch(
        sql_text  => 'SELECT * FROM big_table WHERE id >= 8000',
        hint_text => 'PARALLEL(big_table,10)',
        name      => 'big_table_sql_patch');
    END;
    /
    12.2+
    DECLARE
      l_patch_name  VARCHAR2(32767);
    BEGIN
      -- SQL Text
      l_patch_name := SYS.DBMS_SQLDIAG.create_sql_patch(
        sql_text  => 'SELECT * FROM big_table WHERE id >= 8000',
        hint_text => 'PARALLEL(big_table,10)',
        name      => 'big_table_sql_patch_1');
    
      -- SQL ID
      l_patch_name := SYS.DBMS_SQLDIAG.create_sql_patch(
        sql_id    => '19v5guvsgcd1v',
        hint_text => 'PARALLEL(big_table,10)',
        name      => 'big_table_sql_patch_2');
    END;
    /

    如果以后要删除 SQL 修补程序,可以使用该过程执行此操作。DROP_SQL_PATCH

    BEGIN
      SYS.DBMS_SQLDIAG.drop_sql_patch(name => 'my_sql_patch');
    END;
    /
    dba_sql_patch




  • 相关阅读:
    LCPhash求解
    BSGS
    洛谷—— P1849 [USACO12MAR]拖拉机Tractor
    BZOJ——2101: [Usaco2010 Dec]Treasure Chest 藏宝箱
    洛谷—— P1561 [USACO12JAN]爬山Mountain Climbing
    BZOJ——1601: [Usaco2008 Oct]灌水
    洛谷—— P1342 请柬
    [SDOI2009]Elaxia的路线 SPFA+Topo
    1737 配对
    51Nod 1378 夹克老爷的愤怒
  • 原文地址:https://www.cnblogs.com/nadian-li/p/13827828.html
Copyright © 2011-2022 走看看