Янв 172011
 

Рассмотрим на примере ситуации: мы обнаружили, что в БД появились инвалидные объекты. Прежде чем бросаться компилировать их, можно посмотреть, в результате каких действий они развалились. Для начала определим момент, когда возникла проблема:

SELECT d.object_name, d.object_type, d.last_ddl_time
FROM dba_objects d
WHERE
	d.owner = 'CUBE' AND
	d.status = 'INVALID';

Тут нас заинтересует столбец last_ddl_time, в котором можно посмотреть время последней ddl-операции, в результате которой, скорее всего, объект и развалился. Пусть у нас там стоит значение 17.01.2011 13:43:58.

Теперь можно попробовать определить "виновника", чтобы узнать, что он сделал, и попробовать разобраться. Будем смотреть столбец ntimestamp# (столбец timestamp# начиная с 10-й весии объявлен устаревшим и не используется, подробнее можно почитать на металинке, Doc ID 427296.1):

SELECT * FROM sys.aud$ s
WHERE
	s.ntimestamp# BETWEEN
		TO_DATE('17.01.2011 13:40:00', 'dd.mm.yyyy hh24:mi:ss') AND
		TO_DATE('17.01.2011 13:50:00', 'dd.mm.yyyy hh24:mi:ss')
ORDER BY s.ntimestamp#;

Т.е. делаем запрос, который покажет действия пользователя в интервале "Ч" ± 5 минут.
Теперь по полю spare1 мы можем узнать osuser'а, что равнозначно имени при толково настроенной доменной аутентификации на рабочих местах. Теперь можно спросить пользователя, что именно он сделал и зачем. Также надо посмотреть поле sqltext, может быть полезно при "разборе полётов".

Описанный выше способ анализа записей аудита является универсальным, его можно применять в любых случаях, когда известен (хотя бы что-то одно): объект доступа, рабочее место, временной промежуток, имя пользователя или выполненное действие и надо узнать подробности.

 Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre lang="" line="" escaped="" cssfile="">

(обязательно)

(обязательно)