Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
 Re: Закрепить план в 10g  [new]
Sayan Malakshinov
Member

Откуда: Мск
Сообщений: 5947
belyrabbit,

ну вот мой рабочий огрызок из pl.sql developer'a. Переменные только нужные поставь и все.
+
declare
    ar_profile_hints sys.sqlprof_attr;
    cl_sql_text clob;
    l_profile_name varchar2(30);
    l_dbid number;
    l_force_match boolean;
begin
    -- заполняем исходные переменные:
    select dbid into l_dbid from v$database;
--    l_dbid := :dbid;
    
    l_profile_name := nvl(:profile_name
                          ,'PROF_'||:sql_id
                         );
    l_force_match:=case :force_match 
                        when 1 then TRUE
                        else false
                   end;
   begin
      dbms_sqltune.drop_sql_profile(l_profile_name);
   exception when others then
      null;
   end;
   --ar_profile_hints:=sys.sqlprof_attr('LEADING(P)','USE_CONCAT(@SEL$2)');
   --/*
   -- получаем хинты запроса:
    select
        d.hint
        bulk collect into ar_profile_hints
    from
        xmltable('/other_xml/outline_data/*'
            passing (
                select
                    xmltype(other_xml) as xmlval
                from
                    dba_hist_sql_plan
                where
                    sql_id = :sql_id
                    and dbid = l_dbid
                    and plan_hash_value = :plan_hash_value
                    and other_xml is not null
            )
            columns
            "HINT" varchar2(4000) PATH '/hint'
    ) d;
    --*/
    -- Выводим хинты
    for i in ar_profile_hints.first..ar_profile_hints.last loop
       dbms_output.put_line(ar_profile_hints(i));
    end loop;
    -- Получаем текст запроса:
    select sql_text
       into cl_sql_text
    from
        dba_hist_sqltext
    where
        sql_id = :sql_id
        and dbid = l_dbid;

    dbms_sqltune.import_sql_profile(
         sql_text    => cl_sql_text
        ,profile     => ar_profile_hints
        ,name        => l_profile_name
        ,description => :description
        ,category    => nvl(:category,'DEFAULT')
        --,replace => true
        ,force_match => l_force_match
    );

    dbms_output.put_line(' ');
    dbms_output.put_line('SQL Profile '||l_profile_name||' created.');
    dbms_output.put_line(' ');

exception
when NO_DATA_FOUND then
  dbms_output.put_line(' ');
  dbms_output.put_line('ERROR: sql_id: '||:sql_id||' not found in AWR.');
  dbms_output.put_line(' ');

end;
13 ноя 12, 17:08    [13466846]     Ответить | Цитировать Сообщить модератору
 Re: Закрепить план в 10g  [new]
belyrabbit
Member

Откуда: сбежал из дурки
Сообщений: 6485
xtender,

Спасибо!!
Попозже попробую и расскажу о рез-х.
13 ноя 12, 18:02    [13467242]     Ответить | Цитировать Сообщить модератору
 Re: Закрепить план в 10g  [new]
Деев И.
Member

Откуда: отсюда
Сообщений: 783
По ID = 0 в other_xml можно взять из XML список хинтов.
13 ноя 12, 18:33    [13467353]     Ответить | Цитировать Сообщить модератору
 Re: Закрепить план в 10g  [new]
belyrabbit
Member

Откуда: сбежал из дурки
Сообщений: 6485
Деев И.
По ID = 0 в other_xml можно взять из XML список хинтов.


Интересно, а можно с примером?
13 ноя 12, 18:36    [13467375]     Ответить | Цитировать Сообщить модератору
 Re: Закрепить план в 10g  [new]
Деев И.
Member

Откуда: отсюда
Сообщений: 783
так xtender, оказывается, привел пример. См . чуть выше.
13 ноя 12, 18:41    [13467404]     Ответить | Цитировать Сообщить модератору
 Re: Закрепить план в 10g  [new]
Sayan Malakshinov
Member

Откуда: Мск
Сообщений: 5947
belyrabbit
Деев И.
По ID = 0 в other_xml можно взять из XML список хинтов.


Интересно, а можно с примером?
так выше и есть именно этот пример
13 ноя 12, 18:41    [13467405]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
Все форумы / Oracle Ответить