Да, @ lad2025 прав, я бы использовал AUDIT
, чтобы узнать, кто обращается к таблицам.
Чтобы включить его, просто используйте:
AUDIT SELECT ON scott.emp BY ACCESS;
AUDIT SELECT ON scott.dept BY ACCESS;
ВыЗатем можно увидеть, какие таблицы проверяются с помощью запроса:
SELECT *
FROM DBA_OBJ_AUDIT_OPTS
WHERE owner='SCOTT';
OWNER OBJECT_NAME OBJECT_TYPE SEL
SCOTT DEPT TABLE A/A
SCOT EMP TABLE A/A
Если кто-то выбирает одну из проверенных таблиц, она отображается в журнале аудита:
SELECT * FROM scott.emp;
SELECT os_username, username, obj_name, action_name, timestamp
FROM DBA_AUDIT_TRAIL
WHERE timestamp BETWEEN SYSDATE-7 AND SYSDATE
AND owner = 'SCOTT'
AND action=3
ORDER BY timestamp DESC;
OS_USERNAME USERNAME OBJ_NAME ACTION NAME TIMESTAMP
xxxx yyy EMP SELECT 2018-05-30 08:01:07
Чтобы снова отключить ее, используйте:
NOAUDIT ALL ON scott.emp;
SELECT * FROM DBA_OBJ_AUDIT_OPTS WHERE OWNER='SCOTT';
OWNER OBJECT_NAME OBJECT_TYPE SEL
SCOTT DEPT TABLE A/A
Будьте осторожны, хотя.Одна строка добавляется в контрольный журнал для каждого SELECT, поэтому внимательно наблюдайте за ним, он может очень быстро генерировать много данных.