Oracle events что это
Список ошибок Oracle, включая номера событий (Oracle events) на Unix/Linux платформах можно найти в файле $ORACLE_HOME/rdbms/mesg/oraus.msg.
218105.1 Introduction to ORACLE Diagnostic EVENTS
Diagnostic Events in 10g and 11g [VIDEO] [ID 1402625.1]
How To List All The Named Events Set For A Database (Doc ID 436036.1) — Oracle Internal Events, both named event (eg: ERRORSTACK) as numeric events (eg 10046) can be set at the session level. This document outlines how DataBase Administrators can verify which events have been set in a specific session or in the entire system
Event Reference описание недостаточно документированных событий от Julian Dyke
Описание события Oracle 11g с использованием функции sqlerrm
sqlplus preliminary connection — соединение с бд без создания сессии/пользовательского процесса для ashdump, diagnostic dump, etc
Список событий, установленных для текущей сессии:
Трейс выполнения запроса / SQL trace/ 10046 event
«стандартный» Oracle SQL Trace, в зависимости от уровня может включать значения связанных переменных (binds) и информацию по статистике событий ожиданий (waits). «Уровни трейса (EVENT) 10046:
1 — стандартный уровень SQL_TRACE (Default)
4 — уровень 1 + трейс значений связанных переменных (binds)
8 — уровень 1 + трейс событий ожидания (waits)…
12 = 4+8 уровень 1 + трейсы значений связанных переменных (binds) и событий ожидания (waits)«
начиная с Oracle 11 список базовых уровней дополнен статистикой плана выполнения plan_stat — Christian Antognini. Event 10046 – Full List of Levels
Level | Description | sql_trace |
---|---|---|
0 | The debugging event is disabled. | |
1 | The debugging event is enabled. For each processed database call, the following information is given: SQL statement, response time, service time, number of processed rows, number of logical reads, number of physical reads and writes, execution plan, and little additional information. Up to 10.2 an execution plan is written to the trace file only when the cursor it is associated with is closed. The execution statistics associated to it are values aggregated over all executions. As of 11.1 an execution plan is written to the trace file only after the first execution of every cursor. The execution statistics associated to it are the ones of the first execution only. | waits=FALSE, binds=FALSE, plan_stat=’first_execution’ |
4 | As in level 1, with additional information about bind variables. Mainly, the data type, its precision, and the value used for each execution. | waits=FALSE, binds=TRUE, plan_stat=’first_execution’ |
8 | As in level 1, plus detailed information about wait time. For each wait experienced during the processing, the following information is given: the name of the wait event, the duration, and a few additional parameters identifying the resource that has been waited for. | waits=TRUE, binds=FALSE, plan_stat=’first_execution’ |
16 | As in level 1, plus the execution plans information is written to the trace file for each execution. Available as of 11.1 only. | waits=FALSE, binds=FALSE, plan_stat=’all_executions’ |
32 | As in level 1, but without the execution plans information. Available as of 11.1 only. | waits=FALSE, binds=FALSE, plan_stat=never’ |
64 | As in level 1, plus the execution plans information might be written for executions following the first one. The condition is that, since the last write of execution plans information, a particular cursor consumed at least one additional minute of DB time. This level is interesting in two cases. First, when the information about the first execution is not enough for analysing a specific issue. Second, when the overhead of writing the information about every execution (level 16) is too high. Generally available as of 11.2.0.2 only. | waits=FALSE, binds=FALSE, plan_stat=’adaptive’ — not available yet |
Включить/выключить стандартные трейс в текущей сессии
или с указанием уровня трейса
Включить/выключить трейс в любой сессии, используя пакет DBMS_SUPPORT:
То же с использованием утилиты ORADEBUG:
— определить/установить сессию по orapid
или по ospid
включить / проверить состояние / выключить трейс:
Включить/выключить трейс на уровне системы:
или с использованием параметра системы:
Выключить все события для всех инстансов бд:
с Oracle 10.2 можно определить наличие и уровень SQL_TRACE для сессии по значениям SQL_TRACE, SQL_TRACE_WAITS, SQL_TRACE_BINDS в V$SESSION
с Oracle 10g можно включить SQL трейс на уровне SERVICE [ MODULE [ ACTION ] ], устанавливаемых пакетом DBMS_APPLICATION_INFO, с помощью DBMS_MONITOR.SERV_MOD_ACT_TRACE_ENABLE или по CLIENT_ID с помощью DBMS_MONITOR.CLIENT_ID_TRACE_ENABLE:
Интерпретация результатов трейса 10046:
На примере трассировке с уровнем 12 (LEVEL 12 = binds + waits) операции вставки массива строк (array insert, реализуемый с использованием FORALL кляузы в PL/SQL или host arrays) Oracle сразу после записи о разборе (PARSING IN CURSOR) запишет в файл только первый набор значений связанных переменных (первый элемент вставляемого массива строк):
далее — типичные ожидания (в случае array insert основные дисковые чтения приходятся на блоки индексов):
и, собственно, выполнение курсора:
trcsess
штатная утилита консолидации нескольких трейс-файлов, например, при параллельном выполнении, на основе:
В консолидированном файле записи сгруппированы по курсорам, но могут нарушать хронологический порядок
tkprof
32951.1 Tkprof Interpretation: стандартно поставляемая с Oracle утилита tkprof для обработки и анализа содержимого трейс файлов
Из обработанного tkprof трейса:
Обработанный трейс Array insert из предыдущего примера выглядит так:
По крайней мере, начиная с версии 11g, tkprof пишет статистику плана выполнения (row source statistics):
TRCANLZR
224270.1 TRCANLZR «…reads a raw SQL Trace generated by standard SQL Trace or by EVENT 10046 (Level 4, 8 or 12), and generates a comprehensive HTML report with performance related details: time summary, call summary (parse, execute, fetch), identification of top SQL, row source plan, explain plan, CBO statistics, wait events, values of bind variables, I/O summary per schema object, latches, hot blocks, etc.» . Инструмент реализован в виде схемы БД, считывает трейс файл 10046 и генертрует подробный отчёт в формате HTML. Во время обработки данные загружаются в global temporary table и доступны из SQL, например, для создания на основе активности сессии тестового повторного сценария (Oracle session activity Replay)
Использование DBMS_SQLTUNE.SELECT_SQL_TRACE
events sql_trace
Начиная с Oracle 11g появилась возможность устанавливать SQL trace на уровнях отдельных запросов, процессов — см.описание в блоге Miladin Modrakovich:
например для конкретного SQL_ID на уровне системы:
SQL> alter session set events ‘sql_trace [sql: &sql_id] crash’; — особый вариант использования события, использовать только с одобрения поддержки Oracle
Трейс вызовов Oracle kernel functions на уровне ОС/Linux
10053 event / 10132 event
Трассировка действий оптимизатора (Cost-Based Optimizer) по выбору плана выполнения запроса, включая используемые параметры, статистику объектов (изпользуемых таблиц и индексов), использование правил,…
Событие 10132 — облегчённый вариант предыдущего события(?), без математики
В конце трейсов в случае применения в запросе подсказок можно найти отчёт об использовании подсказок (used=0/1 — неиспользована/использована):
— fix control доступен, начиная с 12.1.0.2.160419 (Apr 2016) PSU
Timing is only written out to trace if CPU or Elapsed time exceed a threshold based on the value of the fix control.
This threshold is 10^N microseconds where N is the value of the fix control and can be between 0 and 7 with default 6.
Value 0 means disabled. The min (1) is 10 microseconds, the default (6) is 1 sec and the max (7) is 10 sec.
Optimizer Trace
, формат версии 12c:
Начиная с Oracle 11.2 можно получить трейс оптимизатора для запроса, находящегося в shared pool (v$sql), без повторного выполнения запроса:
При выполнениии процедуры dbms_sqldiag.dump_trace для формирования трейса будет выполнен повторный разбор запроса, в текст которого добавляется соответствующий комментарий:
, т.е. указание в качестве параметра процедуры p_child_number не позволяет получать трейс формирования конкретного дочернего курсора — Параметр CHILD NUMBER в процедуре DBMS_SQLDIAG.DUMP_TRACE по крайней мере в 11.2
Для трассировки разбора определённого запроса по SQL_ID, например, вызываемого из PL/SQL, или изменяющего план выполнения под влиянием Cardinality Feedback или рекурсивного запроса при удалённом выполнении, удобно выставлять трейс таким образом — How do I capture a 10053 trace for a SQL statement called in a PL/SQL package:
*) начиная с Oracle 11.1.0.6 при установленном параметре trace_enabled=false файлы любых трейсов оптимизатора (вкл. 10053 event) могут не генерироваться — Bug 7304656: TRACE_ENABLED=FALSE DISABLES EVENT 10053 TRACE IN 11G, при этом файлы обычного SQL_TRACE (10046 event) генерируются без проблем
та же проблема в 11.2.0.*
SQL Plan Directive (SPD) trace
Кроме того, что использование SPD отражается в трейсах 10053 и DBMS_SQLDIAG.DUMP_TRACE(p_component=>’Optimizer’), в стеке Optimizer 12c появилось отдельное событие для трассировки на уровне сессии:
, или на уровне системы, например, для конкретного SQL_ID:
SPD статус EXISTS в трейсе имеет положительную окраску, остальные NOCTX, NODIR — негативную
SQL PLAN MANAGEMENT trace
или на уровне сессии:
cursortrace event
событие для анализа причин повторного неиспользования курсоров , упоминается в «296377.1 Handling and resolving unshared cursors/large version_counts«
&hashvalue — значение hash_value курсора из обзора v$sql — тесты события описаны в блоге Tanya Hardy — Cursortrace event
drop_segments event
Событие для удаления временных сегментов, которые по каким-либо причинам не были удалены SMON. На практике бывает необходимо для очистки временных сегментов, оставшихся от прерванной операции создания индекса, например. Наличие таких «неочищенных» SMON’ом сегментов затрудняет создание новых объектов в ТС.
The fix for this issue provides a method for the user to manually free
up temp space from local instance’s cache. Each invocation of the command
will free up a maximum of (100 extents, 0.1% of cached free space).
The syntax is
ALTER SESSION SET events ‘immediate trace name drop_segments level tablespace_number+1’;
…
The performance benefit of using temp tablespace comes from
caching the free space information in the SGA. It avoids making very
expensive disk allocations. By issuing the command, subsequent space
allocations will happen from the disk. So the command should only be used
when the cost of stealing space (and its performance impact on throughput)
significantly outweighs the cost of space allocation from disk.
10949 event
Начиная с Oracle 11g, позволяет отключить автоматический выбор механизма многоблочного чтения между [обычным] чтением данных через buffer cache SGA (ожидания db file scattered read) и чтением блоков через PGA — serial direct path read (ожидания direct path read), отключая direct path read:
trace name treedump
Выводит внутреннюю структуру индекса по id объекта
10231 event
позволяет на уровне сессии пропускать битые блоки (corrupted blocks), выдающие ORA-01578, ORA-08103 при сканировании таблиц. Удобно для переноса уцелевших данных (в случае отсутствия бэкапа) — EVENT: 10231 «skip corrupted blocks on _table_scans_» [ID 21205.1]
установить режим пропуска «плохих» блоков (skip corrupted blocks) на уровне объекта бд:
event 43905
heapdump / memory heaps dump
Level | Description |
1 | PGA summary |
2 | SGA summary |
4 | UGA summary |
8 | Callheap (Current) |
16 | Callheap (User) |
32 | Large pool |
64 | Streams pool |
128 | Java pool |
1025 | PGA with contents |
2050 | SGA with contents |
4100 | UGA with contents |
8200 | Callheap with contents (Current) |
16400 | Callheap with contents (User) |
32800 | Large pool with contents |
65600 | Streams pool with contents |
131200 | Java pool with contents |
heapdump_addr
SQL> alter system set events ‘4031 heapdump(536870914) library_cache(74)’;
library_cache_object
library_cache dump
ALTER SESSION SET EVENTS ‘immediate trace name library_cache level &level’;
or
ORADEBUG DUMP LIBRARY_CACHE &level
Level is a bitmap:
1 statistics
2 hash table bucket statistics
4 library cache contents
8 library cache contents including dependencies
16 library cache contents including dependencies and children
32 heap contents
alter session set events ‘immediate trace name library_cache level 90’;—.
_px_trace
Трейс паралельного выполнения, как запускать и что и как нужно читать описано в Tracing Parallel Execution with _px_trace. Part I [ID 444164.1]:
SQL> alter session set «_px_trace»=[[Verbosity,]area],[[Verbosity,]area]. [time];
high
medium
low
scheduling — ( equivalent to some of event 10384 and some of 10390)
execution — (equivalent to some of event 10390)
granule — (equivalent to some of event 10390 and some of 10391)
messaging — (equivalent to event 10392 and event 10393)
buffer — (equivalent to event 10399)
compilation — ( no equivalent event)
all — all of the above
none — none of the above.
events 10384
Предназначен для выполнения запроса с использованием параллельного плана выполнения в непараллельном (serial) режиме — одним процессом без использования PX slave процессов. Может быть полезен для получения консолидированной статистики / трейса выполнения запроса
dbms_space_admin.segment_dump(&tablespace_name, &relative_fno, &header_block)
дамп блоков заголовка сегмента и bitmap-карты в USER_DUMP_DEST
dump of datafile block[s]
How to dump a block within ASM [ID 280636.1] — дамп блоков бд по имени файла, по 1 блоку:
по номерам файлов бд, и по диапазонам блоков:
Формат дампа листового блока индекса (index leaf block) — Richard Foote: Index Block Dump
dump of datafile headers
dump of logfile
header или содержимое redo log
dump of controlfile
events 1652
может быть полезно для трассировки условий возникновения ORA-1652: unable to extend temp segment by 16 in tablespace TEMP
events 10704
events 10104
детали выполнения операций HASH JOIN
уровни 1-10, к более подробному
events 10730
трассировка предикатов, добавляемых политиками VPD | RLS | FGAC, в Tracing VPD Predicates описан для диагностики ошибок типа ORA-28113: policy predicate has error
в трейс-файле — описание RLS view, в который преобразуется запрос к таблице/синониму:
10513 event
в редких случаях рекомендуется для временного отключения SMON transaction recovery — автоматического восстановления незавершённых транзакций:
обязательное последующее включение:
ORADEBUG утилита
ORADEBUG — UNDOCUMENTED ORACLE UTILITY — подробное описание некоторых возможностей от Miladin Modrakovic’а
_swrf_test_action
трассировка процессов MMON:
и snapshot flush trace (M00x процессов):
Могут быть полезны, в частности, для выявления проблем с генерацией AWR снапшотов — Troubleshooting: AWR Snapshot Collection issues [ID 1301503.1]
ashdump
запись данных Active Session History системы (v$active_session_history) в файл
10 => кол-во минут истории для дампа
event 16000
event 604
Для поиска причин ORA-16000 ORA-604 на Read Only Standby / Active Data Guard db:
event 10442
CURSORTRACE event
CURSORDUMP event
Трассировка информации о причинах повторного неиспользования курсоров
10237 event
Тестовое событие, позволяет прервать выполнение запроса в другой сессии
10157 event
событие, позволяющее блокировать использование операции INLIST ITERATOR с индексным доступом; в документах MOS рекомендуется устанавливать на уровне системы, ввиду нестабильности, см., например, Конкатенация против INLIST ITERATOR
10119 event
событие отключения NOSORT опции для операции SORT GROUP BY:
пример использования на стандартной схеме SCOTT:
Alexander Anokhin. Dynamic tracing of Oracle logical I/O
10128 event
Трассировка Partition Pruning, впрочем, достаточно бесполезная
10507 event
10505 event
Включает сохранение рез-тов Dynamic Sampling в требующих создания таблицах бд KKEDSAMP_TABLE, KKEDSAMP_COLUMN, KKEDSAMP_INDEX — Mikhail Velikikh. Event 10505:
10979 event
Трассировка PL/SQL
Классическая трассировка с помощью events 10928, 10938, 10940 и параметра _PLSQL_DUMP_BUFFER_EVENTS — PL/SQL Tracing Features Available with PL/SQL 2.3.4 in Oracle 7.3.4 (Doc ID 52481.1)
С использованием пакета DBMS_TRACE и таблицы PLSQL_TRACE_EVENTS (@?/rdbms/admin/tracetab.sql) — How to Use DBMS_TRACE (Doc ID 104239.1)
28131 event
«RLS can be enabled in the Standard Edition of the Oracle Server with special
event codes in the initialization file…»
trace[nsmtio]
кроме того, полезная диагностика причин неприменения direct path read для NON-EXADATA систем:
Frits Hoogland. The full table scan direct path read decision for version 12.2
sqlmon_dump
GV$SQL_MONITOR Queries and SQLMON Generation Very Slow after Upgrade to 19c (Doc ID 2792268.1):
«…flush the high number of sqlmon entries by doing this from the CDB$ROOT; it will clear all existing sql monitor entries.
alter system set events ‘immediate sqlmon_dump(level=23)’;«
modified_parameters
Как найти название трейс файла процесса Oracle?
Для собственной сессии:
Несколько способов для любого (включая системные) процесса — из блога Laurent Schneider
Oracle Cloud Infrastructure Events enables you to create automation based on the state changes of resources throughout your tenancy. Use Events to allow your development teams to automatically respond when a resource changes its state.
Here are some examples of how you might use Events :
- Send a notification to a DevOps team when a database backup completes.
- Convert files of one format to another when files are uploaded to an Object Storage bucket.
Events Concepts
The following concepts are essential to working with Events .
EVENTS An automatic notification of a state change as reported by an event-emitting Oracle Cloud Infrastructure resource. For example, an database resource emits a backup.begin event when a backup begins. EVENT TYPES A distinction between the different types of events. For more information, see Services that Produce Events. RULES A JSON object you create to subscribe to an event type and trigger an action should that event occur. For example, a rule might specify that backup.end event types from databases trigger the Notifications service to send an email to a particular DevOps engineer. For more information, see Matching Events with Filters. ACTIONS Rules must also specify an action to trigger when the filter finds a matching event. Actions are responses you define for event matches. You set up select Oracle Cloud Infrastructure services that the Events service has established as actions. The resources for these services act as destinations for matching events. When the filter in the rule finds a match, the Events service delivers the matching event to one or more of the destinations you identified in the rule. The destination service that receives the event then processes the event in whatever manner you defined. This delivery provides the automation in your environment. You can only deliver events to certain Oracle Cloud Infrastructure services with a rule. Use the following services to create actions:
Region Availability
Events is currently available in all regions of the commercial realm. See the Oracle Cloud Infrastructure Government Cloud section for information about availability in Government Cloud regions.
3. Что же делать в случае незалоггированных ошибок
Естественно, может случиться так, что существующая система логгирования не регистрирует какие-то неординарные ошибки, или даже ее совсем нет в базе. Тут могут быть полезны триггеры ` after servererror on database/schema `. Простой минимальный пример.
К сожалению, для полноценного и срочного решения неординарных проблем, ни системы логгирования, ни таких триггеров, может быть недостаточно, и тут на помощь приходит вся мощь самой встроенной системы событий Oracle.
Например, недавно Nenad Noveljic расследовал проблему c " TNS-12599: TNS:cryptographic checksum mismatch " для чего ему нужно было получить callstack:
К счастью, помимо использованного у него в статье "ERRORSTACK", есть еще большой список "ACTIONS", включающий в себя и "CALLSTACK":
В этой команде 12599 - это номер события(event), callstack - инструктирует сделать дамп call стека, level 2 - указывает вывести еще и аргументы функций, lifetime 1 - только один раз.
Более подробно об этом у Tanel Poder с примерами:
Мало того, как сам Танел и посоветовал, можно еще воспользоваться и "trace()" для форматированного вывода shortstack():
Так что этим же мы можем воспользоваться этим для вывода callstack:
Или в более новом формате:
Как вы видите, здесь я еще добавил фильтр на количество срабатываний: после первого выполнения и только 1 раз.
Покажу на примере "ORA-01476: divisor is equal to zero":
Здесь kg_event - это Kernel Generic event, 1476 - ORA-1476. После этого запускаем в своей сессии:
И в трейсфайле получаем:
Или, например, недавно я посоветовал использовать alter system set events 'trace[sql_mon.*] [SQL: . ] disk=high,memory=high,get_time=highres'; для выяснения причин, почему конкретный запрос не мониторится/сохраняется real-time SQL монитором (RTSM - Real Time SQL Monitor).
Получилось несколько сумбурно, в связи с недостатком времени, но на этом, пожалуй, закончу. Будут рад вопросам - задавайте, и я постараюсь их раскрыть отдельно.
Если ваши заказчики, внешние или внутренние, еще ни разу не требовали от вас, чтобы вы обеспечили некий определенный способ инициации BPM-процесса, будьте уверены — этот момент не за горами. Вас могут попросить, например, чтобы процесс запускался неким триггером, вроде получения электронного письма, или запроса внешней системы, или событием расписания.
В данной статье я продемонстрирую как можно реализовать данный подход с помощью технологий Oracle. Для этого нам понадобится развернуть среду разработки текущего релиза 12c на своей машине. Отмечу, что с появлением данного релиза это сделать достаточно просто. С помощью одного лишь мастера установки вы сможете развернуть среду разработки, БД и сервер с инфраструктурой необходимой для работы BPM. По следующей ссылке вы можете скачать сам установочный пакет и подробную инструкцию для развертывания среды.
- транслятор события,
- слушатель события
Для начала реализуем процесс-подписчик на событие. Откроем JDeveloper и создадим BPM приложение (выберите из галереи шаблон «BPM Application»): в качестве имени приложения укажите «Samples», в качестве имени проекта — «PubSubPr» (в дальнейшем мы будем использовать этот тестовый пример и в других статьях посвященных Oracle BPM). Следующим шагом нам необходимо определить наше событие:
1. Правой кнопкой мыши щелкнем по проекту «PubSubPr», выберем опцию «New» и из галереи выберем шаблон Event Definition (Service Components);
2. В открывшемся окне «Мастера» в качестве имени укажем «SampleEvent»;
3. С помощью зеленого плюса добавим схему данных нашего события, назовем её QuoteRequestEvent, в качестве схемы данных выберем тип QuoteRequest, доступной из xsd схемы Quote общедоступного примера Sales Quote Demo:
4. Создадим простой интерактивный процесс без задачи для человека, с одной единственной ролью «Manager»:
5. Создадим переменную процесса quoteRequest с типом QuoteRequest:
6. Изменим тип старта процесса на Signal:
7. Укажем ранее созданное событие, которое будет инициировать данный процесс:
8. После чего необходимо создать маппинг данных из полученного события в переменную процесса quoteRequest:
Теперь приступим к созданию BPEL процесс создающий событие:
1. Откроем файл с составной (композитной) диаграммой — composite.xml, содержащий наш BPMN процесс:
2. Переместим на неё BPEL-компоненту, в открывшемся «Мастере» присвоим наименование QuoteRequestEventService и выставим значения согласно иллюстрации приведенной ниже:
3. Перенесем активность invoke на процесс и в качестве Interaction Type укажем как Event, в качестве события укажем ранее созданное событие QuoteRequestEvent, в качестве переменной укажем RaiseQuoteRequestEvent_InputVariable она же фактически будет являться переменной нашего процесса:
4. Для того чтобы была возможность инициализировать наше событие с входными данными, поставим перед активностью с событием активность типа Assign, создадим соответствующий маппинг данных:
Для того чтобы протестировать созданное приложение запустим сервер приложений Weblogic внутри самого JDeveloper:
Более подробную информацию об интегрированном в JDeveloper сервере приложений Weblogic вы можете получить по следующей ссылке.
После запуска сервера разверем наше приложение на запущенном сервере, с помощью созданного по-умолчанию деплоймент дескриптора:
Для демонстрации работы нашего приложения нам понадобится Enterprise Manager, который доступен нам по ссылке localhost:7101/em, откроем развернутое приложение — PubSubPr и выберем для тестирования web-сервис quoterequesteventservice_client_ep:
Authentication and Authorization
Each service in Oracle Cloud Infrastructure integrates with IAM for authentication and authorization, for all interfaces (the Console , SDK or CLI, and REST API).
An administrator in your organization needs to set up groups , compartments , and policies that control which users can access which services, which resources, and the type of access. For example, the policies control who can create new users, create and manage the cloud network, launch instances, create buckets, download objects, etc. For more information, see Getting Started with Policies. For specific details about writing policies for each of the different services, see Policy Reference.
If you’re a regular user (not an administrator) who needs to use the Oracle Cloud Infrastructure resources that your company owns, contact your administrator to set up a user ID for you. The administrator can confirm which compartment or compartments you should be using.
Administrators: You must write IAM policy that authorize users to work with rules. For more information, see Events and IAM Policies.
Ways to Access Oracle Cloud Infrastructure
You can access Oracle Cloud Infrastructure using the Console (a browser-based interface) or the REST API . Instructions for the Console and API are included in topics throughout this guide. For a list of available SDKs, see Software Development Kits and Command Line Interface.
To access the Console , you must use a supported browser. To go to the Console sign-in page, open the navigation menu at the top of this page and click Infrastructure Console . You are prompted to enter your cloud tenant, your user name, and your password.
Service Gateway and Events
The Events service also supports private access from Oracle Cloud Infrastructure resources in a VCN through a service gateway . A service gateway allows connectivity to the Events public endpoints from private IP addresses in private subnets. For example, you can manage rules over the Oracle Cloud Infrastructure backbone instead of over the internet. You can optionally use IAM policies to control which VCNs or ranges of IP addresses can access Events . See Access to Oracle Services: Service Gateway for details.
Oracle diagnostic events - это очень мощное средство, но, к сожалению, слабо документированное, поэтому я решил перечислить и свести воедино несколько неизвестных или малоизвестных способов его использования.
Современный синтаксис и несколько простых примеров приведены в oradebug doc event. Я их здесь приводить не буду и начну сразу с примеров.
kg_event[errno] - это Kernel Generic event из библиотеки Generic, инструктирующее сработать на ошибку с номером errno;
- это один из фильтров , инструктирующий пропустить X срабатываний данного event и выполниться Y раз;
shortstack() - это функция из ACTIONS , возвращающая call stack в кратком виде;
errorstack(level) - это функция из ACTIONS, выводящая в трейс-файл расширенную информацию (level: 0 - только errorstack, 1 - errorstack + call stack, 2 - как level=1 + processtate, 3 - как level=2 + context area). Еще более расширенную информацию можно получить с помощью PROCESSSTATE или SYSTEMSTATE. Если нужен только call stack можно воспользоваться CALLSTACK(level) - при level>1 запишет и аргументы.
trace[component] - это основной диагностический event, позволяющий указать компоненты, внутри которых надо срабатывать. В данном случае, я указал срабатывать внутри всех дочерних функций в SQL_Compiler и SQL_Execution. Например, RDBMS.SQL_Compiler.SQL_Optimizer.SQL_Transform.* указало бы срабатывать только в функциях трансформации запросов.
SQL[SQL: sqlid ] - это единственный SCOPE в библиотеке RDBMS, позволяющий отфильтровать все события, связанные с указанными запросами, включая события его рекурсивных запросов(например, если это sql_id PL/SQL вызова, то будут оттрассированы все запросы внутри него, или для запроса - все его внутренние запросы во время парсинга и оптимизации, внутренних запросов PL/SQL функций и тд.);
- это фильтр, позволяющий указать процессы для которых данный event будет включен.
controlc_signal - это ACTION, вызывающий ошибку "ORA-01013: user requested cancel of current operation", т.е. сессия запустившая этот запрос получит эту ошибку, как будто она сама прервала выполнение запроса.
Конкретно, данным примером я воспользовался, когда в ходе нагрузочного тестирования большого веб-приложения на hibernate, были обнаружены очень плохие фактически ненужные запросы и нужно было помочь разработчикам быстро найти откуда в их коде они выполняются.
sql_trace - это старый добрый event 10046, а целиком команда предписывает при каждом событии инструментированным этим event 10046, вывести функцию, его вызвавшую(evfunc) и sqlid запроса (ACTION sqlid).
включаем event сначала выполняем запрос с настройками по умолчанию, а затем с _rowsource_statistics_sampfreq=1 Разница в трейсе заметна
Как видите, при "_rowsource_statistics_sampfreq" =1 инструментировано намного больше событий: 26 против 12! Подробнее тут.
wait_event[name] - event, срабатывающий по имени событий ожидания (wait events), имена и их параметры вы можете посмотреть в v$event_name:
select wait_class,name,parameter1,parameter2,parameter3 ,display_name from v$event_name
evargX() - это функции из ACTION, возвращающие аргументы event-check события, где 1-й аргумент это elapsed time(ms), 2-4 - p1-p3, 5-й - имя ожидания. Соответствующие функции имеет и kg_event: errargX.
Или еще пример, когда вам надо узнать какие сессионные переменные были изменены. Допустим, кто-то забыл указать nls-параметры в to_number, on conversion error не указан, и какие-то сессии периодически получают ORA-01722: invalid number:
Хотя нет никакой вьюхи для получения параметров чужой сессии, не входящих в v$ses_optimizer_env, мы можем легко их получить с помощью MODIFIED_PARAMETERS():
И благодаря тому, что сейчас есть удобные v$diag_alert_ext - для доступа к alert.log, v$diag_trace_file_contents - для доступа к трейс-файлам, мы можем все получить простым запросом:
Update: В телеграм канале RuOUG спросили:
В качестве примера, у нас используется код расширения статистики оптимизатора, периодически падающий с ошибкой ORA-06550 PL/SQL compile error, т.е. этот код вызывает сам оптимизатор Oracle. Возможно ли в Oracle diagnostic events одновременно задать kg_event и sql_id, чтобы в alert.log появились ошибки ORA-06550 и имена соответствующих trace файлов, например так: alter system set events 'kg_event[6550] [sql: 7ujay4u33g337] errorstack(3) ';
И я вспомнил, что хотел описать и еще один крайне полезный ACTION - incident(). Пример:
сгенерируем ошибку включим трейс и увидим, что инцидент-файл сформировался
Этот пост навеян статьями Часть 1. Логирование событий в Oracle PL/SQL и Часть 2. Идентификация событий происходящих в Oracle PL/SQL. В первую очередь, как специалисту по performance tuning и troubleshooting, хотелось бы прокомментировать некоторые нюансы.
1. Уровни детализации логгирования
Из самой внутренней системы ошибок Оракл можно было позаимствовать использование UTL_LMS.FORMAT_MESSAGE. Кстати, сами ошибки(и events) можно посмотреть с помощью sys.standard.sqlerrm(N):
Кроме того, я, конечно, понимаю, что не все ошибки можно предусмотреть, но все-таки считаю, что их надо добавлять в exception handler после того как они уже были отловлены. Это будет полезно как минимум при последующих изменениях логики и будет проще видеть нестандартные или непредусмотренные ранее ситуации.
How Events Works
Oracle Cloud Infrastructure services emit events, which are structured messages that indicate changes in resources. Events (the messages, not the service) follow the CloudEvents industry standard format hosted by the Cloud Native Computing Foundation (CNCF). This standard allows for interoperability between various cloud providers or on-premises systems and cloud providers. An event could be a create, read, update, or delete (CRUD) operation, a resource lifecycle state change, or a system event impacting a resource. For example, an event can be emitted when a backup completes or fails, or a file in an Object Storage bucket is added, updated, or deleted.
Services emit events for resources or data. For example, Object Storage emits events for buckets and objects. Services emit different types of events for resources, which are distinguished as event types. Buckets and objects have event types of create, update, and delete, for example. Event types are the changes that produce events by a given resource. For a list of services that produce events and the event types that those services track, see Services that Produce Events.
You work with events by creating rules. Rules include a filter you define to specify events produced by the resources in your tenancy. The filter is flexible:
- You can define filters that match only certain events or all events.
- You can define filters based on the way resources are tagged or the presence of specific values in attributes from the event itself.
Rules must also specify an action to trigger when the filter finds a matching event. Actions are responses you define for event matches. You set up select Oracle Cloud Infrastructure services that the Events service has established as actions (more on these select services follows). The resources for these services act as destinations for matching events. When the filter in the rule finds a match, the Events service delivers the matching event to one or more of the destinations you identified in the rule. The destination service that receives the event then processes the event in whatever manner you defined. This delivery provides the automation in your environment.
You can only deliver events to certain Oracle Cloud Infrastructure services with a rule. Use the following services to create actions:
Limits on Events Resources
The Events service has a limitation of 50 rules per tenancy.
See Service Limits for a list of applicable limits and instructions for requesting a limit increase. To set compartment-specific limits on a resource or resource family, administrators can use compartment quotas.
Читайте также: