Чтобы узнать, кто внес изменения, вам необходимо включить аудит. Для этого требуется настройка, и у вас есть параметры (БД, ОС). Чтобы разрешить аудит на сервере, вы должны:
- Установить
audit_trail = true
- Запустить
$ORACLE_HOME/rdbms/admin/cataudit.sql script while connected as SYS
.
Простой пример:
SQL> create table t ( c1 number , c2 number )
2 ;
Table created.
SQL> audit insert,update,delete on t by access ;
Audit succeeded.
Вы также можете создать триггер для сохранения в таблице, кто внес изменения, применив свойства SYS_CONTEXT
Пример ниже приведен базовый c один, вы можете расширить свойства триггера, чтобы управлять обновлениями и удалениями.
SQL> create table t ( c1 number, c2 number ) ;
Table created.
SQL> create table t_audit ( who varchar2(40) , c1 number, c2 number ) ;
Table created.
SQL>
create or replace trigger trg_aud_t after update on t
for each row
declare
v_user varchar2(40);
begin
select sys_context('userenv','session_user') into v_user from dual;
insert into t_audit values ( v_user , :new.c1 , :new.c2 );
end;
/SQL> 2 3 4 5 6 7 8 9
Trigger created.
SQL> update t set c1=2 , c2=2 where c1=1 ;
1 row updated.
SQL> commit ;
Commit complete.
SQL> select * from t_audit ;
WHO C1 C2
---------------------------------------- ---------- ----------
SYS 2 2