Как найти последние 10 оракулов по имени пользователя? - PullRequest
10 голосов
/ 21 марта 2011

Не уверен, если это возможно. Я на 10г. Конечный результат будет выглядеть так:

Username      | Date/Time            | sqltext 
jdoe          | 3/21/11 10:32:27     | select sum(total) from sales where in_date > '08-JAN-11' 
jdoe          | 3/21/11 10:32:21     | delete from products_old 
jdoe          | 3/21/11 10:32:18     | select item, description from products where item = 'blah' 
jdoe          | 3/21/11 10:32:06     | select count(item) from products 
jdoe          | 3/21/11 10:31:44     | describe products

Похоже, что v $ sql хранит почти (?) Все когда-либо отправленные sql запросы, но что мне добавить к этому, чтобы получить имя пользователя и дату?

Ответы [ 2 ]

6 голосов
/ 21 марта 2011

Если у вас есть корпоративная версия и пакет производительности и настройки (в противном случае запрос таблиц AWR нарушает вашу лицензию), представление V$ACTIVE_SESSION_HISTORY будет наиболее близким к вам.Это будет фиксировать каждую секунду, что выполнял каждый активный сеанс.Если у вас есть пользователь, который выполняет много операторов SQL в секунду, или ваши операторы SQL достаточно быстры, чтобы они не были активны за определенной второй границей, однако, не каждый запрос будет перехвачен.Если вы просто пытаетесь получить общую выборку из последних 10 вещей, которые были выполнены конкретным пользователем (с уклоном в перехват длинных запросов), AWR должно быть достаточно.Но если вы пытаетесь сделать что-то вроде отслеживания действий пользователя в его сеансе, AWR не подойдет.

Если вы хотите захватить абсолютно все, что делает пользователь, вам нужно будет отслеживать сеанс,Это приведет к тому, что на сервере будет сгенерирован довольно объемный файл трассировки, который можно обобщить с помощью утилиты tkprof.Но для этого необходимо включить трассировку для конкретного сеанса до того, как будет выполнен интересующий вас SQL - это не то, что можно сделать задним числом.

Если вас интересуют только изменения, внесенные в сеансе, вы можете использоватьLogMiner для просмотра журналов повторов, чтобы увидеть, что делал пользователь.Это можно сделать задним числом, но поскольку операторы SELECT не генерируют REDO, они не будут записываться в журналы повторов и будут невидимы для LogMiner.

1 голос
/ 15 сентября 2011

Если вы используете JDBC, вы всегда можете использовать библиотеку оболочки Log4jdbc .Он регистрирует всю активность jdbc в - как вы уже догадались - log4j.

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

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