查看用户对某个表的操作记录


一、相关表讲解(存储相关SQL语句)

1、V$SQLAREA,V$SQL

存储SQL语句的前1000个Bytes和一些相关的统计信息

字段                               类型                             含义

SQL_TEXT                    VARCHAR2(1000)      SQL语句的前1000个Bytes

SQL_FULLTEXT            CLOB                          SQL语句的所有字符

SQL_ID                          VARCHAR2(13)          SQL_ID

FIRST_LOAD_TIME      VARCHAR2(19)           SQL存入时间

COMMAND_TYPE         NUMBER                     命令类型

ADDRESS                      RAW(8)                        地址

HASH_VALUE               NUMBER                      哈希值

2、V$SQLTEXT

字段                               类型                             含义

ADDRESS                      RAW(8)                        地址

HASH_VALUE               NUMBER                      哈希值

SQL_ID                         VARCHAR2(13)          SQL_ID

COMMAND_TYPE        NUMBER                    命令类型

SQL_TEXT                    VARCHAR2(64)          包含一块SQL语句的字段

PIECE                           NUMBER                    某SQL语句的第几块

二、查询

1、查找某表的操作记录

SELECT * FROM V$SQLAREA WHERE SQL_TEXT LIKE '%SQLAREA%';
//查找表V$SQLAREA的操作记录

2、找到某条操作记录的SQL_ID

SELECT B.* FROM V$SQLAREA A,V$SQLTEXT B WHERE A.SQL_ID=B.SQL_ID AND A.SQL_ID='177cuh91c9kuq'
//V$SQLTEXT查询出来的是完整的SQL操作语句,但是是分段显示,一行一段,用piece标记

可以通过listagg函数将其连接成一条完整的SQL操作语句

select listagg(SQL_TEXT,'') within group (order by piece) from (SELECT B.PIECE,B.SQL_TEXT FROM V$SQLAREA A,V$SQLTEXT B WHERE A.SQL_ID=B.SQL_ID AND A.SQL_ID='177cuh91c9kuq')