Oracle mechanics

15.11.2011

ORA-600 [qsmkii:inline obj not found] при выполнении запроса с множественными WITH в Oracle 10.2.0.4

Filed under: bugs,CBO,Oracle — Игорь Усольцев @ 01:04
Tags: ,

Пользовательская ошибка при попытке создать материализованное представление:

ORA-03114: not connected to ORACLE

Судя по трейсам отключение пользовательского процесса:

ORA-07445: exception encountered: core dump [kghalp()+58] [SIGSEGV] [Address not mapped to object] [0x000000068] [] []

вызвано предыдущей ошибкой:

ORA-00600: internal error code, arguments: [qsmkii:inline obj not found], [], [], [], [], [], [], []

Два способа решения проблемы:

1) правильный:

Находим соответствующий баг:

Bug 8813931 Create materialized view fails with OERI [qsmkii:inline obj not found]
Description: Create materialized view with multiple ‘WITH’ clauses may with ORA-600 [qsmkii:inline obj not found]

Предваритетьно согласовав действия с представителями Oracle support, скачиваем и устанавливаем патч 8813931 (точно есть для 10.2.0.4 linux x86_64) с рестартом инстанса

2) быстрый:

по документу MOS ORA-600 Lookup Error Categories [ID 175982.1] расшифруем аргумент ORA-600:

qsmkii = Query Summary Management …

Понимая, что ошибка возникает на пересечении многочисленного применения subquery factoring (реализованного кляузой WITH) и операций суммирования, препреобразуем начальный запрос:

with
   sfq_10 as (select ...),
   sfq_11 as (select ... from (... union ...)),
   sfq_12 as (select ...),
   sfq_13 as (select ... from (select .., count(1) over (partition by ...), row_number() over (...) from (select ...)) ...),
   sub_fact_with_sum1 as (select .., sum(...), sum(...), sum(...) from (select .., sum(...) over (partition by ...) from ...)...),
   sub_fact_with_sum2 as (select .., row_number() over(partition by ... order by ...) ... from sub_fact_with_sum1)
select .., sum(...), sum(...), sum(...) from sub_fact_with_sum2 ...
group by ...;

для исключения мест пересечения конструкций WITH и операторов SUM:

with
   sfq_10 as (select ...),
   sfq_11 as (select ... from (... union ...)),
   sfq_12 as (select ...),
   sfq_13 as (select ... from (select .., count(1) over (partition by ...), row_number() over (...) from (select ...)) ...)
select .., sum(...), sum(...), sum(...) from
   (
    select .., row_number() over(partition by ... order by ...)
    from (
          select .., sum(...), sum(...), sum(...) from (select .., sum(...) over (partition by ...) from ...)...
         ) sub_fact_with_sum1
   ) sub_fact_with_sum2
group by ...;

no errors :)

Добавить комментарий »

Комментариев нет.

RSS feed for comments on this post. TrackBack URI

Добавить комментарий

Заполните поля или щелкните по значку, чтобы оставить свой комментарий:

Логотип WordPress.com

Для комментария используется ваша учётная запись WordPress.com. Выход / Изменить )

Фотография Twitter

Для комментария используется ваша учётная запись Twitter. Выход / Изменить )

Фотография Facebook

Для комментария используется ваша учётная запись Facebook. Выход / Изменить )

Google+ photo

Для комментария используется ваша учётная запись Google+. Выход / Изменить )

Connecting to %s

Блог на WordPress.com.

%d такие блоггеры, как: