Oracle mechanics

01.06.2018

12.2: ORA-979 при разборе запросов с использованием WITH clause, PLSQL function и View Merging

Filed under: 12.2,bugs,Oracle — Игорь Усольцев @ 10:25
Tags: ,

Евгений Калинин обнаружил запрос, факт успешности выполнения которого неожиданно зависел от использования/неиспользования столбцов Inline view(*) а качестве параметров PLSQL_FUNCTION, и худшем случае завершавшийся простой ошибкой:

12.2.0.1.@ SQL> with s_q_by_month as
  2   (select contract_id,
...
 19     group by contract_id,
...
 30  s_q as
 31   (select plsql_function(sum_rub, -- вот этих столбцов *
 32                          max_amt,
...
 36      from (select contract_id,    -- вот этого Inline view
...
 43                   max(amt) as max_amt,
 44                   sum(amt_rub) as sum_rub,
...
 48              from s_q_by_month
 49             group by contract_id,
...
 56  select
 57   * from s_q
 58  /
 * from s_q
          *
ERROR at line 57:
ORA-00979: not a GROUP BY expression

, возникавшей на этапе построения плана, обрывая трассировку где-то в районе Query Transformation — в данном случае трейс заканчивался упоминанием OJE(Outer Join Elimination)

Соответствующая трассировка по номеру ошибки, почерпнутая из Bug 21799456 : ORA-979 ERROR GENERATED FROM A SELECT STATEMENT IN 12C: (more…)

Реклама

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-ы никак не отмечены, несмотря на попытки Леонида Борчука донести это простое соображение до команды поддержки (more…)

04.12.2014

ORA-8103 при использовании BCT на standby db

Filed under: Active Data Guard,bugs,Oracle — Игорь Усольцев @ 22:59
Tags: ,

После восстановления очередной тестовой бд с использованием инкрементальных бэкапов, сделанных с использованием Block Change Tracking (BCT) на standby версии 11.2.0.3 получили при попытке последовательно прочитать определённые блоки таблицы:

SQL> select/*+ full(t)*/ count(*) from U2.CALL_STAT t;
 
select/*+ full(t)*/ count(*) from U2.CALL_STAT t
 
ORA-08103: object no longer exists

SQL> analyze table U2.CALL_STAT validate structure;
 
analyze table U2.CALL_STAT validate structure
 
ORA-08103: object no longer exists

, при этом в трейсах можно видеть фактический источник ошибки: (more…)

19.08.2014

Большой план выполнения и трассировка рекурсивных запросов с помощью ASH

Filed under: Active Session History,memory management,Oracle,SQL Tuning — Игорь Усольцев @ 00:18
Tags: ,

Спустя час с небольшим после начала выполнения запроса была получена следующая ошибка*:

ORA-04030: выход за пределы памяти процесса при попытке выделить 4120 байт (kksfr: qkesSet,frame segment)

Из автоматически сгенерированного трейса инциндента можно получить много информации, включая, например, раскладку использованных процессом 10GB из 15GB PGA (!):

=======================================
PRIVATE MEMORY SUMMARY FOR THIS PROCESS
---------------------------------------
******************************************************
PRIVATE HEAP SUMMARY DUMP
10 GB total:
    10 GB commented, 1103 KB permanent
  1452 KB free (0 KB in empty extents),
    6596 MB,   1 heap:    "kxs-heap-c     "            72 KB free held
    3646 MB,   2 heaps:   "callheap       "            1127 KB free held

*** 2014-07-17 13:12:32.395
------------------------------------------------------
Summary of subheaps at depth 1
10 GB total:
  4175 MB commented, 1527 MB permanent
  4508 MB free (0 KB in empty extents),
    3613 MB,   1 heap:    "TCHK^6f1a0bb0  "
    1177 MB, 187983 chunks:  "qkkele                    " 794 MB free held
    1039 MB, 298563 chunks:  "subHeap:qkspmTransformPred" 987 MB free held
     812 MB, 198230 chunks:  "allocator state           " 800 MB free held
     676 MB, 187983 chunks:  "qkkkey                    " 663 MB free held
...

, но для начала, зная указанный в том же трейсе SID.SERIAL сессии и SQL_ID:

*** SESSION ID:(972.11477) 2014-07-17 13:12:25.342
...
----- Current SQL Statement for this session (sql_id=fq5vmt1rjn2xh) -----
insert into t_base_source
        select s.*, sysdate as insert_dt
          from v_base_source s

, полезно посмотреть в ASH чем занималась пользовательская сессия до падения: (more…)

25.05.2014

ORA-01555 Query Duration=0 sec / ORA-00600 [ktbdchk1: bad dscn] — как найти повреждённые индексы-2

Filed under: Диагностика системы (instance),Oracle — Игорь Усольцев @ 01:10
Tags: ,

В версии 11.2.0.3 (x86_64) наблюдалось:

Wed Apr 02 14:49:28 2014
ORA-01555 caused by SQL statement below (SQL ID: c8cnvhk4q2p06, Query Duration=0 sec, SCN: 0x07ba.30370ee5):
...
Wed Apr 02 17:45:24 2014
ORA-01555 caused by SQL statement below (SQL ID: 67zqyf4uan1ra, Query Duration=0 sec, SCN: 0x07ba.33f51fb3):
...
Wed Apr 02 18:55:17 2014
ORA-01555 caused by SQL statement below (SQL ID: 6sdbngwrahabz, Query Duration=0 sec, SCN: 0x07ba.2636cd92):
...

В документе поддержки ORA-01555 When Max Query Length Is Less Than Undo Retention, small or 0 Seconds (Doc ID 1131474.1) в качестве одной из причин упоминается расплывчатое Indexes/table mismatch с рекомендацией to drop/recreate (not rebuild) all table indexes (more…)

30.05.2013

Блокировки direct path DML

Filed under: Active Session History,commonplace,direct-path DML,Блокировки,Oracle — Игорь Усольцев @ 01:02
Tags: ,

Периодически alert.log версии 11.1.0.7 демонстрирует пакетные сообщения об ошибках ORA-00060:

Sun May 19 20:15:25 2013
ORA-00060: Deadlock detected. More info in file /opt/oracle/admin/diag/rdbms/orcl11107/orcl11107/trace/orcl11107_s000_1386.trc.
Sun May 19 20:15:26 2013
ORA-00060: Deadlock detected. More info in file /opt/oracle/admin/diag/rdbms/orcl11107/orcl11107/trace/orcl11107_s009_6543.trc.
Sun May 19 20:15:27 2013
ORA-00060: Deadlock detected. More info in file /opt/oracle/admin/diag/rdbms/orcl11107/orcl11107/trace/orcl11107_s001_3077.trc.

Причина блокировок известна — попытка одновременного выполнения нескольких транзакций на одной таблице в режиме parallel dml (alter session enable parallel dml => V$SESSION.PDML_ENABLED=’YES’, далее составляющие транзакцию 2 последовательные непараллельные операции DELETE, INSERT /*+ APPEND*/ на непартиционированной таблице TAB1) — и относится к вопросам разработки и архитектуры приложения. Интересны детали отображения и обработки Oracle блокировок типа TM Lock Requesting Mode X (6) (SX X SX X)

Кроме необходимости преобразования / эскалации блокировки TM SX -> X при переходе от DELETE к direct path insert, первый трейс не показывает ничего неожиданного:
(more…)

21.06.2012

ORA-01089 при запросах через dblink к Active Data Guard 11.2.0.3

Filed under: Active Data Guard,error,Oracle,remote — Игорь Усольцев @ 00:14
Tags: , ,

В конфигурации Read Only Standby (2-node RAC 11.2.0.3) with Redo Apply (такой кластерный Active Data Guard) после остановки инстанса #1 (на котором выполняется накат логов) командой shutdown abort наблюдаются следующие интересные вещи:

1) Остающий рабочим инстанс #2 закрывает доступ к файлам бд – автоматически переходя в состояние mounted:

Reconfiguration started (old inc 48, new inc 50)
 List of instances:
 2 (myinst: 2)
 ...
Reconfiguration complete
Recovery session aborted due to instance crash
Close the database due to aborted recovery session
SMON: disabling tx recovery
All dispatchers and shared servers shutdown
CLOSE: killing server sessions.
CLOSE: all sessions shutdown successfully.
SMON: disabling tx recovery
SMON: disabling cache recovery

, и не возвращается в состояние READ ONLY в автоматическом режиме после рестарта инстанса #1 — что само по себе не совсем укладывается в концепцию Unbreakable, но, по крайней мере, подробно отражено в alert.log

2) после ручного возвращения инстанса #2 в состояние READ ONLY:

SQL> alter database open read only;

Database altered.

вне зависимости от состояния инстанса #1 и статуса процесса MRP0 (REDO APPLY) на инстансе #1, запросы через db link к инстансу #2 завершаются ошибкой ORA-01089 с длииинным – в нескольких минут — таймаутом: (more…)

12.02.2012

Проблема при создании AWR снапшотов в Oracle 11g

Как известно, начиная с Oracle 11g, для избежания длительного блокирования ресурсов и/или создания избыточной нагрузки на систему как только создание AWR снапшота занимает больше 15 минут процессы M00X (MMON slaves) самоуничтожаются и MMON приостанавливает генерацию снимков AWR на 23 часа, в отличие от 10g, в которой процессы создания снимков выполнялись без ограничений по времени

В этом месте возникает практический вопрос: как восстановить генерацию AWR снапшотов? Например, если после обновления на 11.2 ситуация повторяется изо дня в день и AWR снимки не генерируются?

При возникновении проблемы Oracle пишет след.отладочную информацию (more…)

30.01.2012

ORA-14452 при попытке DDL на временной таблице

Filed under: commonplace,Блокировки,Oracle — Игорь Усольцев @ 15:45
Tags: ,
SQL> drop table SOME_GTT_TABLE;

drop table SOME_GTT_TABLE
ORA-14452: attempt to create, alter or drop an index on temporary table already in use

SQL> with locked_obj as
2   (select o.object_id
3      from dba_objects o
4     where o.owner = sys_context('userenv','CURRENT_SCHEMA')
5       AND o.object_name = 'SOME_GTT_TABLE')
6  select i.host_name,
7         case
8           when s.inst_id = sys_context('userenv', 'instance') and
9                s.sid = sys_context('userenv', 'sid')
10           then 'My own session'
11           else 'Alter system kill session ''' || s.SID || ',' || s.SERIAL# ||
12            ''';'
13         end as KILL_SESSION,
14         l.type
15    from gv$lock l, locked_obj, gv$session s, gv$instance i
16   WHERE l.id1 = locked_obj.object_id
17     AND s.sid = l.sid
18     AND s.inst_id = l.inst_id
19     AND s.inst_id = i.inst_id
20  /

HOST_NAME       KILL_SESSION                           TYPE
--------------- -------------------------------------- ----
host1f.prod.ru  My own session                         TO
host1f.prod.ru  Alter system kill session '453,1309';  TO
host2f.prod.ru  Alter system kill session '458,2337';  TO

SQL> select * from v$lock_type where type = 'TO';

TYPE  NAME         ID1_TAG   ID2_TAG  IS_USER DESCRIPTION
----- ------------ --------- -------- ------- ----------------------------------------------------
TO    Temp Object  object #  1        NO      Synchronizes DDL and DML operations on a temp object

19.12.2011

Антибаг: Ora-00918 после обновления на 11g

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

При обновлении Oracle 10.2.0.4 -> 11gR2 неожиданно сталкиваемся с интересной ошибкой:

11.2.0.3@SQL> select group_id
2    from (select user_mode.group_id
3            from USERS_LIST U
4           inner join user_state
5              on user_state.user_id = U.user_id
6           inner join user_mode
7              on user_mode.mode_id = user_state.mode_id
8           where USER_STATUS_ID = 1
9             and USER_ID = 87960018
10           order by user_mode.group_id desc)
11   where rownum < 2
12  /
and USER_ID = 87960018
*
ERROR at line 9:
ORA-00918: column ambiguously defined

— ошибка вполне справедливая — столбец USER_ID действительно присутствует в двух таблицах, соединяемых в запросе с использованием ANSI варианта INNER JOIN.

Но в версии 10.2 тот же запрос безошибочно выполняется!

(more…)

Следующая страница →

Блог на WordPress.com.