sql定位过程报错_使用10046事件跟踪sql定位错误一例

在尝试更新SCOTT.EMP表时遇到ORA-12096和ORA-00942错误。错误源于物化视图日志MLOG$_EMP被直接删除而非使用DROP MATERIALIZED VIEW LOG。通过10046事件跟踪定位问题,并通过执行DROP MATERIALIZED VIEW LOG ON EMP解决问题,成功更新表。
摘要由CSDN通过智能技术生成

修改一个表时,发生如下错误:

SQL> update emp set ename='adsf';

update emp set ename='adsf'

*

ERROR at line 1:

ORA-12096: error in materialized view log on "SCOTT"."EMP"

ORA-00942: table or view does not exist

这个提示看上去不太直观,好像是提示在物化视图日志不存在,查看一下该用户下的表:

SQL> select * from tab;

TNAME                          TABTYPE  CLUSTERID

------------------------------ ------- ----------

ASDF                           TABLE

BONUS                          TABLE

DEPT                           TABLE

EMP                            TABLE

EMPLOYEES                      TABLE

LOB_TEST                       TABLE

MLOG$_BONUS                    TABLE

MLOG$_SALGRADE                 TABLE

MLOG$_T1                       TABLE

MV_T                           TABLE

PLAN_TABLE                     TABLE

TNAME                          TABTYPE  CLUSTERID

------------------------------ ------- ----------

RUPD$_BONUS                    TABLE

RUPD$_DEPT                     TABLE

RUPD$_EMP                      TABLE

RUPD$_SALGRADE                 TABLE

RUPD$_T1                       TABLE

SALES_COMPOSITE                TABLE

SALES_HASH                     TABLE

SALES_RANGE                    TABLE

SALGRADE                       TABLE

T                              TABLE

T1                             TABLE

TNAME                          TABTYPE  CLUSTERID

------------------------------ ------- ----------

TTT                            TABLE

T_T                            TABLE

V_EMP                          VIEW

V_T                            TABLE

26 rows selected.

并没有物化视图日志表MLOG$_EMP,估计有可能是在删除物化视图日志表时,直接使用了drop table MLOG$_EMP,而没有使用DROP MATERIALIZED VIEW LOG ON EMP,这就导致oracle在更新emp表时,试图去更改物化视图日志表,但发现物化视图日志表已经被删除,于是报错。为了证明上述猜想,用10046事件进行trace,得到如下trace内容:

=====================

PARSING IN CURSOR #1 len=27 dep=0 uid=21 ct=6 lid=21 tim=1198342181468910 hv=4011695554 ad='58aec934'

update emp set ename='adsf'

END OF STMT

PARSE #1:c=10000,e=2463,p=0,cr=0,cu=0,mis=1,r=0,dep=0,og=4,tim=1198342181468899

BINDS #1:

=====================

PARSE ERROR #2:len=168 dep=1 uid=0 ct=2 lid=0 tim=1198342181470293 err=942INSERT /*+ IDX(0) */ INTO "SCOTT"."MLOG$_EMP" (dmltype$$,old_new$$,snaptime$$,change_vector$$) VALUES (:d,:o,to_date('4000-01-01:00:00:00','YYYY-MM-DD:HH24:MI:SS'),:c)EXEC #1:c=0,e=3846,p=0,cr=3,cu=4,mis=0,r=0,dep=0,og=4,tim=1198342181472888

ERROR #1:err=12096 tim=2451155094

WAIT #1: nam='log file sync' ela= 34783 p1=750 p2=0 p3=0

WAIT #1: nam='SQL*Net break/reset to client' ela= 19 p1=1650815232 p2=1 p3=0

WAIT #1: nam='SQL*Net break/reset to client' ela= 135 p1=1650815232 p2=0 p3=0

WAIT #1: nam='SQL*Net message to client' ela= 2 p1=1650815232 p2=1 p3=0

*** 2008-11-19 08:52:04.253

WAIT #1: nam='SQL*Net message from client' ela= 322645203 p1=1650815232 p2=1 p3=0

STAT #1 id=1 cnt=0 pid=0 pos=1 bj=0 p='UPDATE  (cr=0 r=0 w=0 time=0 us)'

=====================

可以看出,红色字体部分正是导致出错的sql。

执行DROP MATERIALIZED VIEW LOG ON EMP,再进行update。

SQL> drop MATERIALIZED VIEW LOG ON emp;

Materialized view log dropped.

SQL> update emp set ename='adsf';

17 rows updated.

更新成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值