v$logmnr_contents中特殊delete语句解惑
2020-08-01 16:26 潇湘隐者 阅读(944) 评论(0) 编辑 收藏 举报疑惑:在v$logmnr_contents中,SQL_REDO为DELETE语句,但是SQL_UNDO为null是什么情况呢?
其实这种情况是因为SQL插入失败,数据库内部回滚了这条记录。比较特殊的一种情况,如果以前没有注意过这些细节信息,还真有点懵。这里模拟构造了一个案例,演示一下这种情况:
SQL> INSERT INTO SCOTT.EMP
2 VALUES(7934,'MILLER','CLERK','7782' , SYSDATE, 1200, NULL,10);
INSERT INTO SCOTT.EMP
*
ERROR at line 1:
ORA-00001: unique constraint (SCOTT.PK_EMP) violated
然后我们使用LogMiner去挖掘redo log,就会发现redo log里面生成了两条记录,一条INSERT、一条DELETE记录。
SQL> execute dbms_logmnr.add_logfile('/u01/oradata/gsp/redo03.log', dbms_logmnr.new);
PL/SQL procedure successfully completed.
SQL> execute dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);
PL/SQL procedure successfully completed.
SQL> create table scott.log_miner_output
2 as
3 select * from v$logmnr_contents where table_name='EMP' ;
Table created.
SQL> execute dbms_logmnr.end_logmnr();
PL/SQL procedure successfully completed.
所以对于这种情况: ROLLBACK字段值为1表示回滚, OPERATION为DELETE, SQL_REDO为DELETE语句, SQL_UNDO为NULL值。有时候,我们可能这样去挖掘分析(加上查询条件OPERATION='DELETE',如下所示),没有加上ROLLBACK字段,这样在不了解、熟悉的情况下,可能会以为它是一个客户端发出的一个DELETE语句,实质上是一个INSERT语句回滚操作。
CREATE TABLE SCOTT.LOG_MINER_OUTPUT
AS
SELECT SQL_REDO,SQL_UNDO, USERNAME,SESSION_INFO FROM V$LOGMNR_CONTENTS WHERE TABLE_NAME='EMP' AND OPERATION='DELETE';
在AWR报告中,如果你看到一些指标(例如user rollbacks,transaction rollbacks,Rollback per transaction%)的值较大,而你又无法定位原因时,那么你可以用Logminer来帮你分析定位原因(root cause)。这个也算是Logminer的一个特殊用途!!

【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
2017-08-01 SQL Server中如何定位Row Lock锁定哪一行数据
2009-08-01 表驱动方法