Имеется какая-то программа. Она хранит данные в Oracle. Нет информации о структуре таблиц и связи между ними. В программе проводят какие-то действия и надо отследить - в какие таблицы записываются данные.
Пришлось активировать аудит в Oracle.
1. Включаем аудит
Для этого смотрим параметры audit_trail и audit_sys_operations.
SQL> SHOW PARAMETERS audit_trail;
NAME TYPE VALUE
------------------------------------ ----------- ----------------------------
audit_trail string NONE
Эти параметры по умолчанию выключены. Включение аудита осуществляем присвоением параметру audit_trail значение DB.
SQL> ALTER SYSTEM SET audit_trail=db SCOPE=SPFILE;
System altered.
Теперь необходимо перезагрузить инстанию Oracle.
SQL> shutdown immediate;
SQL> startup;
После перезагрузки убеждаемся, что этот параметр включён.
SQL> SHOW PARAMETERS audit_trail;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
audit_trail string DB
Значение правильно. Теперь приступаем к настройке аудита.
2. Настройка аудита
Настройка аудита заключается во включении/выключении протоколирования выполняемых операций.
Нам нужно включить аудит на конкретного пользователя:
SQL> AUDIT insert table, update table, delete table BY user1;
Audit succeeded.
Проверим список команд для пользователей:
SQL> SELECT user_name, audit_option FROM dba_stmt_audit_opts;
USER_NAME AUDIT_OPTION
------------------------------ ----------------------------------------
TEST INSERT TABLE
TEST UPDATE TABLE
TEST DELETE TABLE
Кроме того можно включить аудит на какую-то таблицу
SQL> AUDIT select, insert, update, delete ON schema1.table1;
Audit succeeded.
Список команд для объектов можно посмотреть в таблице dba_obj_audit_opts.
Выключение аудита выполняется командой NOAUDIT.
SQL> NOAUDIT select, insert, update, delete ON schema1.table1;
Noaudit succeeded.
Конечно есть и другие возможности аудита, на для наших целей достаточно его включение для конкретного пользователя. После настройки аудита проделываем в программе нужные действия и, по завершению, проводим анализ аудита.
3. Анализ аудита
Данные аудита просматриваются в таблицах DBA_AUDIT_%. Так как нас интересуют таблицы, в которых изменяются данные, мы обращаемся к таблице dba_audit_object
SQL> select distinct owner,obj_name from dba_audit_object;
OWNER OBJ_NAME
------------------------------ ----------------------------------
SCHEMA1 TABLE1
SCHEMA1 TABLE2
Этот запрос покажет к каким таблицам обращался пользователь.
К сожалению самих текстов запросов мы не получим. Для этих целей используется детальный аудит FGA.