执行数据更新语句报错如下。
只读事务是一种只能访问数据,不能修改(插入、删除、更新)数据的事务。
出现这个问题的场景有以下几种:
在一些业务场景中,将用户设置为只读用户限制用户写入。这是因为只读用户因为其权限限制,只能执行只读事务,从而保护了数据的完整性和安全性。
--使用SYSDBA登录
create user user1 identified by "1234567890" ;
alter user user1 read only;
CREATE TABLE user1.USERS(ID INT,NAME VARCHAR,HIREDATE DATE) ;
--使用user1登录
insert into users values(1,'lxm',sysdate);
--试图在只读事务中修改数据
在同一套 spring 框架的应用从 oracle 迁移到达梦单机库时,应用修改数据时报错:nested exception is dm.jdbc.driver.DMException: 试图在只读事务中修改数据。这是由于 Spring 框架层在对应的数据修改业务上设置了 setReadOnly(true),而达梦与 oracle 在接口层对设置 setReadOnly(true) 的表现并不相同,dm8 jdbc 会直接将该会话设置为只读会话,而 oracle 10g 以后的 jdbc 驱动会直接忽略该设置,继续允许执行修改操作的 sql,导致出现报错。
使用 dm8 jdbc 驱动在连接串中设置 compatibleMode=oracle 可以兼容 oracle ,会忽略 setReadOnly(true) 设置,允许会话读写操作。
文章
阅读量
获赞