Oracle mechanics

30.01.2012

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

Filed under: commonplace,Блокировки,Oracle — Igor Usoltsev @ 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

28.01.2012

Пример применения Result Cache на стороне сервера

Тема неновая, относится к «бородатым» новым фичам Oracle 11g, однако, технология хорошо работающая и, что важно, позволяющая при определённых условиях, существенно экономить ресурсы сервера RDBMS

Далее привожу результаты успешного практического применения кэша результатов запроса для ресурсоёмкого частовыполняемого (т.е. выполняющегося чаще, чем обновляются данные) запроса, оптимизировать который другим методом было бы объективно непросто – встречаются запросы, которые просто обязаны много читать :) (далее…)

21.12.2011

ORA-00600 [ktbdchk1: bad dscn] – как найти повреждённые индексы

Filed under: Backup and Recovery,bugs,database,Oracle — Igor Usoltsev @ 00:04
Tags: , , ,

Пример практического проявления Bug 8895202 – ORA-1555 / ORA-600 [ktbdchk1: bad dscn] in Physical Standby after switch-over [ID 8895202.8] и действий, которые могут помочь в разрешении возникающих проблем.

Проблема (неоднократно наблюдалась после switch-over Physical Standby database to the Primary database role): в блоках индексов itl (Interested Transaction List) commit SCN оказывается больше чем block SCN

Практические симптомы:

  • в 11.1.0.7 – ORA-00600 [ktbdchk1: bad dscn] при попытке изменения повреждённых индексных блоков (при операциях INSERT/UPDATE)
  • в 11.2.0.2 – к предыдущей ошибке добавляется ORA-1555 при выполнении запросов, в плане которых используется индекс с «битыми» блоками

Сообщение об ошибке в alert.log в последнем случае выглядит весьма примечательно (Query Duration=0 sec или несколько секунд):

ORA-01555 caused by SQL statement below (SQL ID: 06mwy7ua78adg, Query Duration=0 sec, SCN: 0x0786.62a03def)

Баг зафиксирован и описан для версий 11.1.0.7 и далее, полное избавление намечено сделать в версии 12.1 :)

В описании можно найти порядок «лечения», остаётся найти и обезвредить (например, с помощью ALTER INDEX REBUILD [ONLINE PARALLEL N]) индексы, затронутые проблемой

(далее…)

19.12.2011

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

Filed under: bugs,commonplace,Oracle — Igor Usoltsev @ 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 тот же запрос безошибочно выполняется!

(далее…)

05.12.2011

sqlplus preliminary connection – как соединиться с бд, если CONNECT AS SYSDBA не возможен

Начиная с Oracle 10.2 доступно и докуметировано sqlplus preliminary connection специально для случаев, когда прочие методы соединения недоступны – How To Connect Using A Sqlplus Preliminary Connection [ID 986640.1]:

$ sqlplus -prelim / as sysdba

или так:

$ sqlplus /nolog
set _prelim on
connect / as sysdba

При этом традиционно стартует клиентский процесс, но сессия не создаётся, доступ к структурам SGA – ограниченный, можно запустить oradebug hanganalyze | dump systemstate – что, собственно и требуется в таких случаях

Кроме того, опция preliminary connection – клиентская и, по словам Tanel Poder – How to log on even when SYSDBA can’t do so?, sqlplus версии 10.2+ может быть использован при соединении со «старыми» версиями – Oracle 9i, например, локально или удалённо:

$ sqlplus -prelim sys/manager@orcl112 as sysdba

SQL*Plus: Release 10.2.0.4.0 - Production on Mon Dec 5 01:26:28 2011

Copyright (c) 1982, 2007, Oracle.  All Rights Reserved.

SQL> select sysdate from dual;
select sysdate from dual
*
ERROR at line 1:
ORA-01012: not logged on

SQL> oradebug hanganalyze 3
Statement processed.

15.11.2011

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

Filed under: bugs,CBO,Oracle — Igor Usoltsev @ 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], [], [], [], [], [], [], []

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

14.11.2011

Элементы технологий Bind Aware Cursor Sharing / Cardinality Feedback

English version

Комментарии к демонстрации на осенней конференции RUOUG

Вступление

Поводом к изучению новых возможностей Oracle 11g стала простая практическая проблема – запрос с определённым набором связанных переменных выполнялся неприемлемо долго. При этом тот же запрос с текстовыми подстановками вместо связанных переменных выполнялся быстро с использованием другого, более подходящего плана выполнения.

Ситуация показалась мне интересной: для «текстового» запроса Oracle смог выбрать «быстрый» план выполнения, а для запроса с использованием связанных переменных , несмотря на известные новые технологии Adaptive/Extended Cursor Sharing, по какой-то причине продолжал использовать «старый» и очевидно неэффективный план выполнения: (далее…)

03.11.2011

Oracle 11g: иерархический профилировщик PL/SQL

Filed under: commonplace,Oracle,PL/SQL — Igor Usoltsev @ 23:27
Tags:

Пункт диагностического меню Forms PL/SQL profiling в OEBS 12 (Oracle 11g) использует пакет DBMS_HPROF – относительно новый (для меня) иерархический профилировщик с отличным описанием в документации - Using the PL/SQL Hierarchical Profiler: примеры использования и анализа данных, формат трейс файла, описание используемых обозначений функций с разделением по пространствам имён (namespace: SQL, PL/SQL) и т.д.

Запускается просто: (далее…)

30.10.2011

Подсказка parallel

Filed under: commonplace,hints,Oracle — Igor Usoltsev @ 19:42
Tags:

Иногда оптимизатор Oracle может трактовать подсказки в запросах шире, чем описывает документация

Например, хинт PARALLEL, формально требующий указания таблицы при использовании в качестве подсказки на уровне объекта бд в версиях Oracle 10-11.1:

/*+ PARALLEL( [@query_block] tablespec [ integer_degree_of_parallelism | DEFAULT ] ) */

, либо, начиная с Oracle 11.2, получивший дополнительно возможность действовать на уровне целого запроса без указания наименований таблиц:

/*+ PARALLEL[ ( DEFAULT | AUTO| MANUAL | integer_degree_of_parallelism ) ] */

- может прекрасно «работать» с указанием имени обзора (view) – при этом параллельность выполнения отлично отражается на времени выполнения :)

10.2.0.4@SQL> select--+ parallel(v 8)
 ...
 9 from SOME_USER_VIEW v,
 ...
 36 /

Elapsed: 00:00:17.83

А вот без указания объектов в подсказке (в этом случае) – запрос выполняется непараллельно и медленно – в точном соответствии с документацией ;)

10.2.0.4@SQL> select--+ parallel
 ...
 9 from SOME_USER_VIEW v,
 ... 36 /

Elapsed: 00:26:44.37

29.10.2011

Oracle 11g: автоматическое управление памятью (ASMM) и serial direct read

Ничем (или недостаточно) ограниченный механизм Automatic Shared Memory Management (ASMM), динамически меняя размеры пулов SGA, может заставить Oracle  переключаться между режимами direct path read и кэшированного чтения (через buffer cache SGA), что, в свою очередь, может неожиданно, но вполне заметно влиять на время выполнения типовых запросов

И, хотя в документе High ‘direct path read’ waits in 11g [ID 793845.1]  описывается чудесное автоматическое переключение между этими режимами, в зависимости от динамически изменяющегося размера buffer cache:

When ASMM increases the buffer cache due to increased demand, 11g might not again do serial direct path read scans for these same large tables

- в действительности, это только пожелание или план работ на будущее – по крайней мере в версии 11.1.0.7.2 :)

Далее – небольшой практический пример

(далее…)

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

Тема: Rubric. Блог на WordPress.com.

Follow

Get every new post delivered to your Inbox.