暂无图片
update语句在v$session里查不到记录
我来答
分享
陈先生
2020-12-03
update语句在v$session里查不到记录

最近在编写一个触发器,记录别人修改表时update记录。
在虚拟机搭建的环境中测试脚本时,
发现update scott.dept这张表,在v$session查不到记录,不知道何解。

我来答
添加附件
收藏
分享
问题补充
2条回答
默认
最新
冯守东

vsession 是记录回话信息的,具体sql执行情况查看vsql

暂无图片 评论
暂无图片 有用 0
打赏 0
陈先生

1.创建一个表来存储操作日志

create table trig_sql(
LT DATE not null primary key,
SID NUMBER,
  SERIAL# NUMBER,
USERNAME VARCHAR2(30),
OSUSER VARCHAR2(64),
MACHINE VARCHAR2(32),
TERMINAL VARCHAR2(16),
PROGRAM VARCHAR2(64),
SQLTEXT VARCHAR2(2000),
STATUS VARCHAR2(30),
CLIENT_IP VARCHAR2(60),
);
2.创建索引(可能已经自动创建,如果已经创建则忽略此步骤)

create index idx_time on trig_sql (LT);
3.创建触发器
IN_FIRST_PAGE_OTHER:我们要监控的表

create or replace trigger pri_test
after insert or update or delete on IN_FIRST_PAGE_OTHER for each row
DECLARE
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
IF inserting THEN
INSERT INTO trig_sql
select sysdate,s.SID, s.SERIAL#, s.USERNAME, s.OSUSER,
s.MACHINE, s.TERMINAL, s.PROGRAM, q.sql_text line,
‘INSERT’,
sys_context(‘userenv’,‘ip_address’)
from vsqlq,vsql q, vsession s
where s.audsid=(select userenv(‘SESSIONID’) from dual)
and s.prev_sql_addr=q.address
AND s.PREV_HASH_VALUE = q.hash_value;
COMMIT;
ELSIF deleting then
INSERT INTO trig_sql
select sysdate,s.SID, s.SERIAL#, s.USERNAME, s.OSUSER,
s.MACHINE, s.TERMINAL, s.PROGRAM, q.sql_text line,
‘DELETE’,
sys_context(‘userenv’,‘ip_address’)
from vsqlq,vsql q, vsession s
where s.audsid=(select userenv(‘SESSIONID’) from dual)
and s.prev_sql_addr=q.address
AND s.PREV_HASH_VALUE = q.hash_value;
COMMIT;
ELSIF updating then
INSERT INTO trig_sql
select sysdate,s.SID, s.SERIAL#, s.USERNAME, s.OSUSER,
s.MACHINE, s.TERMINAL, s.PROGRAM, q.sql_text line,
‘UPDATE’,
sys_context(‘userenv’,‘ip_address’)
from vsqlq,vsql q, vsession s
where s.audsid=(select userenv(‘SESSIONID’) from dual)
and s.prev_sql_addr=q.address
AND s.PREV_HASH_VALUE = q.hash_value;
COMMIT;
END IF;
END;
4.测试时
update scott.dept set 表字段修改
发现vsql找得到语句,但是vsession没找到。
发现下面两个字段关联,查询不出来。
select *
from vsqlq,vsql q, vsession s
and s.prev_sql_addr=q.address
AND s.PREV_HASH_VALUE = q.hash_value

暂无图片 评论
暂无图片 有用 0
打赏 0
回答交流
Markdown


请输入正文
提交
相关推荐
Oracle 查询某条SQL产生的日志大小
回答 3
已采纳
可以用下面的存储过程试试:createorreplaceproceduredosql(psqlinvarchar2)as  lstartredonumber; &nbsp
ocm考试创建cdb和pdb可以使用dbca图形界面创建吗
回答 1
OCM考场考题具体细节信息,受限于OracleNDA保密协议要求,不太方便公开。12cOCM直考公开信息Oracle官网有介绍各场景分数线及主要考点。https://education.oracle.
v$session中并没有执行sql,但是该进程还是占用CPU100%
回答 1
看等待事件或者10046
请问下有有关ORACLE执行计划解读和性能优化的实验文档呀?
回答 2
来看看这个:《《OracleSQL调优之执行计划》罗海雄》《Oracle数据库SQL执行计划的取得和解析》PPT(附SQL文件).zip。绝对有帮助!
oracle expdp导出的时候 ,视图会保留吗?
回答 1
全库或者全schema导的话,全部导出
在RAC环境下还原oracle数据库是不是只需要在其中一个实例下还原?
回答 1
已采纳
是的,因为RAC架构,实例与是数据库是多对一关系。还原数据库就是还原各实例共享的数据文件、控制文件、spfile等
opengauss对MySQL、postgresql、oracle等的兼容性如何?
回答 3
已采纳
有部分兼容性方面的考虑,创建数据库时可以使用dbcompatibility参数来兼容部分MySQL、Oracle、PG的特性。兼容MySQL:将字符串转换成整数类型时,如果输入不合法会将输入转换为0而
怎么给非Oracle用户授权,让他可以连接数据库?
回答 1
已采纳
配置环境变量,把oracle的环境变量复制粘贴到新建用户下。
数据块损坏
回答 5
这个修复sql也是在本平台中找的,这个环境没有开启归档,dbv的检查也是如下提示:ORA01578:ORACLE数据块损坏(文件号12,块号116699)ORA01110:数据文件12:‘E:\ORA
下列对于UNDO表空间说法正确的是:
回答 1
已采纳
ABC