暂无图片
业务过程中有sql语句执行出现了主键冲突,然后就没有进行insert,想查找这条Sql语句
我来答
分享
晨光
2020-11-17
业务过程中有sql语句执行出现了主键冲突,然后就没有进行insert,想查找这条Sql语句

业务进行过程中有sql语句执行出现了主键冲突,然后就没有进行insert操作,怎么查找出具体是哪条Sql语句

我来答
添加附件
收藏
分享
问题补充
3条回答
默认
最新
肖杰

根据你的描述我能想到两种情况:
一是高并发环境下主键字段相同的多条记录同时插入,比如A会话插入一个值(未提交),B会话随后也插入同样的值,这样会产生lock mode 4的enq: TX - row lock contention,这种情况去查dba_hist_active_sess_history视图里面这个等待事件对应的sql即可。

二是主键值本身已经存在表中了,这种情况直接应用程序日志就会报0001错误,直接看日志就能查到了

暂无图片 评论
暂无图片 有用 0
晨光

谢谢肖老师一直帮我答疑解惑^_^

暂无图片 评论
暂无图片 有用 0
文成

一般这种问题在数据库层面事后是比较难排查的,如果是绑定变量插入的,还需要去查询 sqlbind 相关视图,
应用层一般都是日志的,可以从应用层查看。当然,也可以建立触发器记录这些报错sql和值

暂无图片 评论
暂无图片 有用 0
回答交流
提交
问题信息
请登录之后查看
邀请回答
暂无人订阅该标签,敬请期待~~
暂无图片墨值悬赏