注册

试图在只读事务中修改数据

晴天 2021/10/26 2755 9 已解决

为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。
【DM版本】:v8
【操作系统】:windows 10
【CPU】:amd 4800u
【问题描述】*:业务需求现需要将oracle迁移到达梦数据库,但迁移后发现执行增删改会报 试图在只读事务中修改数据 问题.
image.png
项目基于springboot2.3+spring data jpa,事务配置没有问题原来在oracle运行过.
经过多次测试发现,只要在添加操作前先进行一次查询,由于查询的事务为readOnly=true,就造成数据库中的事务变成只读事务.
select * from v$trx
image.png
这是一开始没有任何操作的默认的事务 都是readOnly=false
标记
标记
image.png
这是经过一次查询之后 一个事务变成了readOnly=true
标记
标记
那这样的话 由于数据库未知机制的问题 下次进行添加操作还是用的这一条事务 然后就会报错 只读事务, 即使我代码中已经强制声明了开启事务还是没用
image.png
这是进行添加操作时debug事务提交 图中显示事务为readOnly=false

image.png
这是数据库事务表中的记录 能看到和刚才查询用的同一个会话还是只读

ps1 项目代码是没问题的 原来在oracle上跑了很长时间 切到达梦就成这样了
ps2 @Transactional(readOnly = false) 没用 这种方法就不用说了,因为只要有查询,那么数据库中显示的事务就是只读的,代码中设置非只读没用,除非把所有事务都设置成非只读 包括查询操作,但是这样就太操蛋了.

有没有达梦的技术专家来解释下为什么这个事务变成只读后再也变不回来,这算不算数据库的bug 还是说是我项目的配置忽略了哪一点

回答 0
暂无回答
扫一扫
联系客服