Есть ли инструмент для отслеживания SQL, выполняемых в Oracle - PullRequest
2 голосов
/ 18 февраля 2011

Существует ли инструмент (который уже поставляется с Oracle) для отслеживания выполненных SQL-запросов?В DB2 есть так называемый «монитор событий», который я использую для отслеживания обновленных таблиц.Есть ли в Oracle аналогичный инструмент?

Я планирую

  • включить трассировку
  • зайти на сайт (который использует БД) и изменить запись
  • отключить трассировку
  • см. Выходной файл и запись, какая таблица была обновлена.

Есть таблица, которую я ищу, которая должна быть обновлена ​​при изменении записи.Я не знаю, как называется таблица (и есть много таблиц), и поэтому мне нужно отследить выполненный SQL, чтобы выяснить.

Я пытался:

  ALTER SESSION SET sql_trace = true;
  -- go on website and change an entry
  ALTER SESSION SET sql_trace = false;

  tkprof the_trace_file.trc file.out EXPLAIN=system/manager SYS=no

Однако при выполнении указанных выше шагов SQL не были записаны.

Существует ли инструмент, предоставляемый Oracle?(Я хотел бы избежать загрузки внешнего программного обеспечения)

Ответы [ 5 ]

4 голосов
/ 18 февраля 2011

Есть таблица, которую я ищу, должно быть обновлено, когда запись изменилось. Я не знаю как зовут таблицы есть (а есть много таблицы), и поэтому мне нужно отследить SQL выполняется, чтобы выяснить.

Я думаю, что вы используете здесь слово "след" в другом значении, чем то, что обычно подразумевается в мире Oracle.

В основном вы нажимаете какую-то кнопку в приложении, и, посмотрев, какие SQL-запросы выполняются, вы хотите найти таблицу, на которую ссылался этот код? Я правильно понял?
В этом случае вы можете взглянуть на v $ sql и взглянуть на столбцы SQL_TEXT и SQL_FULLTEXT.

2 голосов
/ 18 февраля 2011

Основная причина, по которой вы ничего не получили в файле трассировки, заключается в том, что вы ничего не сделали в сеансе, где была включена трассировка.

Если бы вы сделали:

alter system set sql_trace = true;
-- fiddle around with the website
alter system set sql_trace = false;

Вы получили бы один или несколько файлов трассировки, по одному на каждый сеанс, который был активен, пока вы возились с сайтом.

Проблема заключается в том, что если на веб-сайте используется пул подключений, ваша пользовательская активность может распространяться на несколько подключений и может смешиваться с другой одновременной пользовательской активностью.

2 голосов
/ 18 февраля 2011

Команды ALTER SESSION работают на уровне сеанса (т. Е. Ваше текущее соединение). Веб-сайт будет использовать другой сеанс (возможно, из пула соединений). Вы можете включить трассировку для всех сеансов, используя ALTER SYSTEM SET sql_trace = true;

1 голос
/ 19 февраля 2011

Я считаю Enterprise Manager наиболее полезным инструментом для этого. Как уже было отмечено, вы должны изменить сеанс, который использует веб-сайт, а не свой собственный. Если вы установите ограничение пула соединений на 1 соединение, вы можете легко найти сеанс в менеджере предприятия, а затем включить трассировку. Обычно находка, отображаемая в верхних запросах в менеджере предприятия, сообщает мне, какие запросы занимают слишком много времени без необходимости что-либо отслеживать.

1 голос
/ 18 февраля 2011

Может быть, Oracle Audit поможет вам.

Вот хорошее объяснение: http://www.oracle -base.com / Articles / 10g / Auditing_10gR2.php

Вынеобходимо включить аудит, установив параметр AUDIT_TRAIL.

То есть на уровне сервера.Вы можете проводить аудит на уровне клиента с помощью стороннего средства трассировки sql для OCI:

http://sourceforge.net/projects/ocimonitor/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...