如何记录在oracle表上执行的所有oracle select语句

如何记录在oracle表上执行的所有oracle select语句,oracle,oracleforms,Oracle,Oracleforms,我想记录在特定oracle表上执行的所有oracle select语句 和pc ip地址,windows用户名,pc名称 SELECT SYS_CONTEXT ('USERENV', 'IP_ADDRESS'), SYS_CONTEXT ('USERENV', 'HOST'), SYS_CONTEXT ('userenv', 'OS_USER') FROM DUAL; 换句话说,我需要知道谁和什么时候读了一张表 我搜索并发现此查询将返回pc ip地址,windo

我想记录在特定oracle表上执行的所有oracle select语句 和
pc ip地址
windows用户名
pc名称

SELECT SYS_CONTEXT ('USERENV', 'IP_ADDRESS'),
       SYS_CONTEXT ('USERENV', 'HOST'),
       SYS_CONTEXT ('userenv', 'OS_USER')
  FROM DUAL;
换句话说,我需要知道谁和什么时候读了一张表

我搜索并发现此查询将返回
pc ip地址
windows用户名
pc名称

SELECT SYS_CONTEXT ('USERENV', 'IP_ADDRESS'),
       SYS_CONTEXT ('USERENV', 'HOST'),
       SYS_CONTEXT ('userenv', 'OS_USER')
  FROM DUAL;
但我想知道,当电脑上没有数据库时,这会返回正确的信息吗

既然无法在select上启动触发器,那么如何处理该情况


我正在使用oracle forms 6i应用程序,如果也有可能的解决方案

您可以对单个SQL DML/DDL语句使用数据库审核

例如:

SQL> conn sys as sysdba
SQL> alter system set audit_trail=DB,EXTENDED scope=spfile;
重新启动数据库

我有一个名为
T1
的表,我希望针对它触发audit
SELECT
语句

SQL> audit select on t1 by access;

Audit succeeded.

SQL> select * from t1;

no rows selected
审计信息可以从
用户审计跟踪
视图中获得

SQL> select OS_USERNAME,USERNAME, USERHOST, SQL_TEXT, ACTION_NAME from dba_audit_trail where obj_name='T1';

OS_USERNAME     USERNAME    USERHOST        SQL_TEXT            ACTION_NAME
------------    ---------   ------------    -----------------   ------------
oracle           JAY        myserver.js     select * from t1    SELECT

这将适用于oracle9i,但它不会向我显示sql\u文本是他们的任何解决方法?您可以按照我的更新建议投影
ACTION\u NAME
列,它只告诉我使用了哪个DML/DDL,而不是完整的语句。