[转帖]DM 达梦数据库 记录超长 错误解决方法

dm,数据库,记录,超长,错误,解决,方法 · 浏览次数 : 0

小编点评

**问题分析:** 在达梦数据库中进行数据库 Insert 时,遇到以下错误: ```sql java.sql.SQLException: Record length exceed maximum size 上是程序的返回,如果是在数据库中操作,则直接返回:记录超长 ``` **解决方案:** **1. 重新建库** * 将页大小改大至达梦数据库的实际页大小。 * 创建新实例,并将数据迁移过来。 **2. 修改表存储属性** * 使用 `ALTER TABLE` 语句打开问题表,并将 `enable using long row` 开启超长记录。 * 修改列类型,将报错列的类型修改成 `Text`。 **3. 修改列存储属性** * 使用 `ALTER TABLE` 语句打开问题表,并将 `enable using long row` 开启超长记录。 * 在使用 `ALTER TABLE` 语句修改列存储属性之前,确保索引存在。

正文

 

2022-08-24 09:423551原创DM 达梦

1 问题说明与分析

在达梦数据库中进行数据库Insert时可能会遇到如下错误:

java.sql.SQLException: Record length exceed maximum size

上面是程序的返回,如果是在数据库中操作,则直接返回:

记录超长

这里的原因其实也很简单,就是数据不能插入到block中了。数据最后都是被存储到数据页上的,而数据页的大小是在数据库实例初始化时设定的,默认是8K,去掉文件头部、事务槽等空间后,实际保存一条数据的空间在4K左右,如果数据超过这个阙值就会报错‘记录超长’。

这里的限制于和页大小有关,一条记录的长度除大字段类型(clob、blob)以外不能超过页大小的一半, 执行以下语句看看页大小:

 

select page();

 

以varchar2类型为例,最大的长度如下表:

2 解决方法

跟进以上的分析说明,这里有3中解决方法:

 

2.1 重新建库,把页大小改大

达梦数据库的页大小只能在实例创建的时候才能制定,所以如果要修改page大小,那么需要新建实例,并把数据迁移过来。
另外还有一点需要需要,达梦数据库默认是8k的block size,但是实际生产推荐使用32k的block size,据说是达梦对32k的page 做了相关的优化。

相关操作参考我之前的博客:

DM7 达梦数据库 通过dminit 创建 并 注册 数据库实例
https://www.cndba.cn/dave/article/3580

2.2 把报错的表的“启用超长记录”打开

因为生产环境重建实例有时候并不现实,所以可以对单表的解决。 即直接修改问题表的存储结构,将表的【启用超长记录】打开, 打开后,一条记录的页的存储空间就不会受限制。但是需要注意的是长字符串的字段上若存在索引,插入或更新时索引依然可能会报错‘记录超长’或者在创建索引的时候都可能会报错‘记录超长’。

 

使用SQL修改表存储属性:

alter table table_name enable using long row ;

在DMManager中修改:

2.3 修改列类型

直接将报错列的类型修改成Text。

与[转帖]DM 达梦数据库 记录超长 错误解决方法相似的内容:

[转帖]DM 达梦数据库 记录超长 错误解决方法

2022-08-24 09:423551原创DM 达梦 本文链接:https://www.cndba.cn/dave/article/108596 1 问题说明与分析 在达梦数据库中进行数据库Insert时可能会遇到如下错误: java.sql.SQLException: Record length

[转帖]DM 达梦数据库 临时表空间 管理说明

2020-12-01 21:3516090原创DM 达梦 本文链接:https://www.cndba.cn/dave/article/4315 在之前的2篇博客中我们了解了达梦数据库表空间的基本操作,如下: DM7 达梦数据库 表空间 管理 说明https://www.cndba.cn/dave/

[转帖]DM 达梦数据库 忘记 SYSDBA 密码 解决方法

2022-08-04 22:2318321原创DM 达梦 本文链接:https://www.cndba.cn/dave/article/108578 1 背景说明 在其他的关系型数据库中,都有OS认证,所以我们并不担心忘记超级管理员密码的问题。 在达梦数据库中,因为安全的原因,默认并没有启用本地OS

[转帖]DM8 达梦数据库 查看数据库版本号 方法

2020-09-28 17:24183572原创DM 达梦 本文链接:https://www.cndba.cn/dave/article/4260 在DM7 中,查询数据库版本号的方法和Oracle 一样,通过v$version 视图可以查询。 [dmdba@www.cndba.cn ~]$ dis

[转帖]达梦数据库 DM8 中 注册服务 说明

2019-10-29 19:3830480原创DM 达梦 本文链接:https://www.cndba.cn/dave/article/3753 达梦数据库 DM8 中 注册服务 说明 在之前的博客我们了解了DM7中的服务注册,如下: DM7 达梦数据库 通过dminit 创建 并 注册 数据库实例

[转帖]测试工具 sysbench (Centos 7.x) for DM数据库

1、简单介绍 sysbench是一个开源,模块化的多线程性能测试工具,可以用来进行硬件环境性能测试,也可进行数据库的性能测试。但是由于需要支持DM测试,所以我们一般使用源码进行编译。 2、运行方法 sysbench通过运行lua脚本进行数据库测试。而每次测试都分为prepare、run、cleanu

[转帖]测试工具 sysbench (Centos 7.x) for DM数据库

1、简单介绍 sysbench是一个开源,模块化的多线程性能测试工具,可以用来进行硬件环境性能测试,也可进行数据库的性能测试。但是由于需要支持DM测试,所以我们一般使用源码进行编译。 2、运行方法 sysbench通过运行lua脚本进行数据库测试。而每次测试都分为prepare、run、cleanu

[转帖]tidb之旅——tidb架构选择

https://zhuanlan.zhihu.com/p/641650168 前言 从4月份开始利用tidb改造了我们公司bi系统。这个过程中,我感觉到了tidb的强大。也打算记录一下整个改造过程。我打算从4个方面来记录这个改造过程。tidb架构选择,dm工具的使用——这两个部分还是tidb6.5.

[转帖] date命令详解

https://www.cnblogs.com/qmfsun/p/4598650.html date "+今天是%Y-%d-%m,现在是%H:%M:%S" 1. 显示时间date命令可以按照指定格式显示日期,只键入date则以默认格式显示当前时间。如下: 如果需要以指定的格式显示日期,可以使用“+”

[转帖]

Linux ubuntu20.04 网络配置(图文教程) 因为我是刚装好的最小系统,所以很多东西都没有,在开始配置之前需要做下准备 环境准备 系统:ubuntu20.04网卡:双网卡 网卡一:供连接互联网使用网卡二:供连接内网使用(看情况,如果一张网卡足够,没必要做第二张网卡) 工具: net-to