История Запросов Oracle

У меня есть это приложение Java все еще общается с Oracle 11g через код JDBC. С этим сказал, Хотел проверить запросы, сделанные из этого приложения на истории Oracle, если это уже существует.

Ключевые элементы для просмотра:

  1. Полный запрос (со значениями параметров (parsed and not ?)), переданный через java.sql.PreparedStatement)
  2. Время запроса
  3. Используемая схема
  4. Пользователь инициировал запрос

ожидаемый результат:

  • SQL-запрос для запуска через SQL Developer (с правами SYSDBA или нет) с ключом все возвращенные ключевые элементы

Пытался использовать запрос ниже, но он не возвращает ключевые элементы, перечисленные выше:

select * from v$sql order by last_load_time desc

2 ответа

  1. Как уже указывали другие участники,V$SQL, V$SQL_BIND_CAPTUREи V$SQLAREAдолжен дать вам много информации выше запросов, запущенных приложением Java.

    Обратите внимание, что это может быть не полная хронологическая история. Предполагая, что приложение Java делает много запросов к базе данных, возможно, что не все запросы присутствуют в V$SQL (например, запросы, которые не смогли проанализировать, запросы, которые были использованы только один раз, которые больше не находятся в кэше и т.д. можно пропустить). Кроме того, если запрос выполняется дважды (с тем же или другим набором переменных привязки), вы найдете только последнюю запись выполнения в V$SQL

    Если ваша цель состоит в том, чтобы найти все запросы в идеальном хронологическом порядке (как своего рода исследование черного ящика Java-приложения), то я предлагаю вам включить трассировку конкретного сеанса (идентифицированного SID, SERIAL#in V$SESSION). Это даст информацию о нескольких фронтах, включая порядок запроса огня, переменные привязки, производительность запросов и т.д. Взгляните на эту ссылку для получения дополнительной информации. Существуют различные типы и уровень сбора информации, которые могут быть сделаны. Также, свои накладные расходы представления, пожалуйста учитывают этот фактор если вы планируете использовать его на любой производственной системе

  2. Запрос ниже должен возвращать информацию, которая вам нужна

        select vsql.sql_text, vses.SCHEMANAME, vsql.ELAPSED_TIME, vses.USERNAME
        from v$session vses join v$sql vsql
        on vses.sql_id=vsql.sql_id
        where contdition;