查看用户对某个表的操作记录
一、相关表讲解(存储相关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')