Hola,
Tambien tienes la opcion de activar la auditoria de Oracle, que te permite auditar, entre muchas otras cosas, las operaciones DML y DDL sobre las tablas, guardando la informacion en la tabla sys.aud$. Encontraras mucha mas informacion en la documentacion de Oracle, pero basicamente tienes comandos similares a este.
Código:
AUDIT SELECT TABLE, INSERT TABLE, DELETE TABLE
BY ACCESS
WHENEVER NOT SUCCESSFUL;
Que audite todos las sentencias SELECT, INSERT y DELETE sobre todas las tablas por todos los usuarios cuando no son satisfactorias.
Ahora, en caso que te decidas por el trigger, te comento, que el error de que la tabla o vista no existe, se debe a que, para poder acceder a una tabla desde un bloque de codigo almacenado, sea procedimiento, funcion, trigger, etc debes tener asignado el privilegio de acceso al objeto directamente, y
no a traves de un ROLE.
Esto es porque Oracle valida los permisos al momento de compilar, y no al momento de ejecutar y dado que los roles pueden cambiar, lo que se quiere evitar es que cuando se ejecute un bloque de codigo almacenado, se generen exepciones por falta de privilegios.
En conclusion, para poder hacer un select sobre la vista del diccionario dentro del trigger, debes
Código:
grant select on dba_tab_columns to user;
Saludos.