Oracle mechanics

12.03.2015

12c: ошибки

Filed under: error,Oracle — Игорь Усольцев @ 23:30
Tags: ,

, всплывающие при тестировании:

1) Подробно разобранная у Jonathan Lewis. Subquery with OR проблема и отражённая в Bug 18650065 : WRONG RESULTS ON QUERY WITH SUBQUERY USING OR EXISTS проблема при тестировании ОЁБС (aka Oracle Apps) на версии бд 12.1.0.* заиграла новыми красками

Дело в том, что проблемная конструкция используется в VPD политиках стандартных модулей OEBS при использовании Multi-Org Access Control (MOAC), что легко видеть из запроса:

select distinct object_owner, object_name, policy
  from v$vpd_policy
 where predicate like 'EXISTS (SELECT 1
                        FROM mo_glob_org_access_tmp oa
                       WHERE oa.organization_id = security_id_int_1) OR security_id_int_1 IS NULL%'

А непонятность, собственно, состоит в том, что в рекомендациях оёбс по миграции на 12c ни этот баг, ни доступные workaround-ы никак не отмечены, несмотря на попытки Леонида Борчука донести это простое соображение до команды поддержки

И, кстати, на наст.момент для бага 18650065 есть всего два патча для 12.1.0.1 и 12.1.0.2, оба — для Linux x86-64 платформы, причём последний был оперативно подготовлен по запросу Леонида, что может говорить о невысокой активности процесса тестирования оёбс на 12c в мировом масштабе)

2) Второй наблюдавшийся баг — просто настоящий новый жирный BUG:

12.1.0.2.@ SQL> SELECT
  2    distinct CASE WHEN 1!=1 THEN sum(sal) ELSE 0 END,
  3    sum(sal)
  4   FROM scott.emp
  5  GROUP BY deptno
  6  /

CASEWHEN1!=1THENSUM(SAL)ELSE0END   SUM(SAL)
-------------------------------- ---------- -- wrong result
                               0

SQL> SELECT
  2    distinct CASE WHEN 1!=1 THEN sum(sal) ELSE 0 END,
  3    sum(sal)
  4   FROM scott.emp
  5  GROUP BY deptno||''
  6  /

CASEWHEN1!=1THENSUM(SAL)ELSE0END   SUM(SAL)
-------------------------------- ---------- -- правильный рез-т
                               0       9400
                               0       6775
                               0       8750

— по поводу которого заведён непубличный Bug 20593125 — DISTINCT, CASE AND GROUP BY GIVES WRONG RESULTS, который точно исправят в 12.2, но ждём патча и для 12.1.0.2, обещано-с *

3) Ещё одна проявившаяся в 12c ошибка может быть отнесена к категории бессмысленных и беспощадных:

12.1.0.2.@ SQL> alter system set events 'trace [rdbms.SQL_Compiler.*][sql:fppuw3hpvww2d]';
alter system set events 'trace [rdbms.SQL_Compiler.*][sql:fppuw3hpvww2d]'
*
ERROR at line 1:
ORA-49113: Scope event limit exceeded, scoped events may work incorrectly


SQL> oradebug eventdump system
trace [RDBMS.ADS] [sql:fppuw3hpvww2d]
trace [RDBMS.SQL_Plan_Directive] [sql:fppuw3hpvww2d]
trace [RDBMS.MPGE] [sql:fppuw3hpvww2d]
trace [RDBMS.SQL_Plan_Management] [sql:fppuw3hpvww2d]
trace [RDBMS.SQL_Expression_Analysis] [sql:fppuw3hpvww2d]
trace [RDBMS.SQL_Parallel_Compilation] [sql:fppuw3hpvww2d]
trace [RDBMS.SQL_Code_Generator] [sql:fppuw3hpvww2d]
trace [RDBMS.SQL_Parallel_Optimization] [sql:fppuw3hpvww2d]
trace [RDBMS.SQL_Costing] [sql:fppuw3hpvww2d]
trace [RDBMS.SQL_APA] [sql:fppuw3hpvww2d]
trace [RDBMS.SQL_Virtual] [sql:fppuw3hpvww2d]
trace [RDBMS.SQL_VMerge] [sql:fppuw3hpvww2d]
trace [RDBMS.SQL_MVRW] [sql:fppuw3hpvww2d]
trace [RDBMS.SQL_Transform] [sql:fppuw3hpvww2d]
trace [RDBMS.SQL_Optimizer] [sql:fppuw3hpvww2d]
trace [RDBMS.SQL_Semantic] [sql:fppuw3hpvww2d]

— т.е. появление ошибки никак не влияет на рез-т успешного выполнения ALTER SYSTEM SET EVENTS

4) На версии 12.1.0.2 всплыла ошибка, слишком похожая на Bug 20178550 : ORA-4021 DROPPING MVIEW WHEN THERE IS ANOTHER MVIEW ON SAME MASTER TABLE, «дедушка» которого 17793460 формально входит в Bugs fixed in the 12.1.0.2 Patch Set

В деталях это выглядит так: попытка выполнить DROP MVIEW очень похоже на указанный баг заканчивается ORA-4021 при ожидании Wait for Table Lock на объекте SYS.SUM$ (по данным v$active_session_history.current_obj#) при одновременном выполнении с DML типа INSERT /*+ APPEND */ INTO SOME_TABLE SELECT * FROM SOME_VIEW при условии что SOME_VIEW зависит от тех же объектов / в смысле пересекается по зависимостям с удаляемым MVIEW

Неприятность последней проблемы состоит ещё и в том, что рекомендуемый поддержкой для создания кейса инструмент SQLT может работать только с запросами, находящимися в Shared Pool или AWR, а sql-предложения типа DROP MVIEW ни там, ни там не фиксируются:

SQL> select * from dba_hist_sqltext where command_type = 76 -- DROP MATERIALIZED VIEW
  2  /

no rows selected

UPD *) Patch 20593125: DISTINCT, CASE AND GROUP BY GIVES WRONG RESULTS уже в наличии

3 комментария »

  1. Добрый день, Игорь!

    1.
    После upgrade 11.2.0.3->12.1.0.1 при обновлении mat view с MASTER=11.2.0.3 ( MVIEV_SITE=12.1.0.1) возникала ошибка ORA-01555 нулевой продолжительности вида:
    Sat Feb 08 02:00:06 2014
    ORA-01555 caused by SQL statement below (SQL ID: 9t4pka1hy92a2, Query Duration=0 sec, SCN: 0x0180.0cb27d47):

    Ошибка была плавающей и проявлялась не всегда. Mat view обновлялось несколько раз в сутки, а ошибка возникала раз в 2-3 дня.

    Сначала действовал по документу:
    ORA-01555 When Max Query Length Is Less Than Undo Retention, small or 0 Seconds (Doc ID 1131474.1)
    Пересоздание индексов, создание нового UNDO, _undo_autotune=false — ошибки не устранило.

    Затем я создал mat view в 12c с нуля — ошибки сохранились.

    В результате, помог последний workaround из документа:
    Ora-1555 Dbms_Refresh.Refresh or Dbms_Mview.Refresh On a Distributed Refresh (Doc ID 464524.1)
    Перед обновлением mat view делается какой-нибудь «фиктивный» SELECT по линку с master site (например, из DUAL).

    2. Ночью в БД выполняется масса заданий, выполняющих в том числе команды DDL (TRUNCATE TABLE/EXCHANGE PARTITION), shared pool наводнили SELECT-ы вида:

    select FLAGS from SYS_FBA_TRACKEDTABLES where OBJ# = 508758
    select FLAGS from SYS_FBA_TRACKEDTABLES where OBJ# = 508754
    select count(FA#) from SYS_FBA_TRACKEDTABLES where OBJ# = 508576 and bitand(FLAGS, 128)=0
    select count(FA#) from SYS_FBA_TRACKEDTABLES where OBJ# = 508759 and bitand(FLAGS, 128)=0

    Total Recall — не используем.
    Это:
    Bug 15931756 — ORA-4031 / Queries against SYS_FBA_TRACKEDTABLES not shared (do not use binds) (Doc ID 15931756.8)

    Баг раньше был указан, как исправленный в 12.1.0.1, на деле это не так и сейчас в документе есть об этом упоминание.
    Баг воспроизводится и в чистой 12.1.0.2 (на MOS упомянута только 12.1.0.1).
    Нам сделали патч под SPARC Solaris 12.1.0.1.3, т.к. тестировали все приложения на этом патчсете, было трудозатратно заново тестировать под 12.1.0.2.

    Не возникало подобных проблем?

    комментарий от Mikhail Velikikh — 13.03.2015 @ 07:20 | Ответить

    • Спасибо, Михаил, за подробное описание, полезно
      Именно таких ошибок пока не наблюдали, но будем искать)

      комментарий от Игорь Усольцев — 13.03.2015 @ 10:01 | Ответить

  2. […] основным багам уже прошёлся Игорь Усольцев, я лишь немного дополню […]

    Уведомление от Баги 12c | leborchuk — 16.03.2015 @ 22:20 | Ответить


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 такие блоггеры, как: