注册
达梦数据库-错误码-[-6506]-分析处理
专栏/技术分享/ 文章详情 /

达梦数据库-错误码-[-6506]-分析处理

Live 2024/07/26 614 2 0
摘要

问题现象

执行数据更新语句报错如下。

image20240719134659314.png

问题分析

只读事务是一种只能访问数据,不能修改(插入、删除、更新)数据的事务。

出现这个问题的场景有以下几种:

  1. 在一些业务场景中,将用户设置为只读用户限制用户写入。这是因为只读用户因为其权限限制,只能执行只读事务,从而保护了数据的完整性和安全性。

    --使用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); --试图在只读事务中修改数据
  2. 在同一套 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) 设置,允许会话读写操作。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服