• 查询数据库字符集大小写敏感等初始化信息
  • 用户登录disql报错[-70070]初始化SSL环境失败
  • 用户登录数据库时,报错[-2148]提示标记不匹配
  • 修改备份作业时,提示锁超时
  • mysql迁移DM常见几种报错
  • 非法 IDENTITY 列类型
  • 约束表达式无效
  • 列长度超出定义[-6169]
  • 因关键字屏蔽导致报错[-2007]语法分析出错


查询数据库字符集大小写敏感等初始化信息

方法一:

打开DM管理工具,选择管理服务器-查看系统概览

达梦数据库 docker 设置字符集无效 达梦数据库更改字符集_初始化


达梦数据库 docker 设置字符集无效 达梦数据库更改字符集_初始化_02


方法二:进入实例的目录,查看初始化日志/dminit***.log

说明:

页大小 page size:32768/1024=32K

簇大小 extent size: 16

大小写是否敏感(1=敏感 0=不敏感) string case sensitive: 1

字符集(0=GB18030,1=UTF-8,2=EUC-KR) charset: 1

VARCHAR类型长度是否以字符为单位(1=是 0=否) length in char: 0

达梦数据库 docker 设置字符集无效 达梦数据库更改字符集_初始化_03


达梦数据库 docker 设置字符集无效 达梦数据库更改字符集_DM_04


方法三:登录disql查询,或直接在DM管理工具查询

查询页大小:
SELECT SF_GET_PAGE_SIZE();  /* 32768/1024=32KB */ 
select cast(PAGE()/1024 as varchar);
查询簇大小:
select SF_GET_EXTENT_SIZE();  
查询字符集:
SELECT SF_GET_UNICODE_FLAG();
select unicode();
select (case SF_GET_UNICODE_FLAG() when '0' then 'GBK18030' when '1' then 'UTF-8' when '2' then 'EUC-KR' end);
查询大小写是否敏感:
SELECT SF_GET_CASE_SENSITIVE_FLAG(); 
select CONCAT( '大小写',(case SF_GET_CASE_SENSITIVE_FLAG() when '1' then '敏感' when '0' then '不敏感' end));

用户登录disql报错[-70070]初始化SSL环境失败

达梦数据库 docker 设置字符集无效 达梦数据库更改字符集_数据库_05


先查询数据库版本,如图,可见其为安全版

达梦数据库 docker 设置字符集无效 达梦数据库更改字符集_DM_06


这是因为安全版数据库中默认开启了SSL加密。

可将ENABLE_ENCRYPT参数的值设置为0,数据库执行以下语句

sp_set_para_value(2,‘ENABLE_ENCRYPT’,0);将其关闭,或在 dm.ini 配置文件里面直接修改。

执行完后重启数据库才能生效。

用户登录数据库时,报错[-2148]提示标记不匹配

达梦数据库 docker 设置字符集无效 达梦数据库更改字符集_数据库_07


原因是企业版初始化实例是priv_flag=0

登录数据库SYSSSO用户,修改应用策略。策略特权,将读权限,完全,向上写,向下写,交叉写都勾选上点击确定即可。

然后重新登录SYSDBA。

达梦数据库 docker 设置字符集无效 达梦数据库更改字符集_DM_08


达梦数据库 docker 设置字符集无效 达梦数据库更改字符集_数据库_09

修改备份作业时,提示锁超时

达梦数据库 docker 设置字符集无效 达梦数据库更改字符集_DM_10


查询数据库表的锁的情况:select * from v达梦数据库 docker 设置字符集无效 达梦数据库更改字符集_DM_11sessions;

使用系统过程sp_close_session(sess_id)干掉对应的会话即可。

mysql迁移DM常见几种报错

非法 IDENTITY 列类型

达梦数据库 docker 设置字符集无效 达梦数据库更改字符集_DM_12


达梦数据库 docker 设置字符集无效 达梦数据库更改字符集_数据库_13


如上图将自增列类型DECIMAL(20,0)修改为bigint。达梦数据库中IDENTITY自增列类型只能是 int 或者是 bigint 。

约束表达式无效

达梦数据库 docker 设置字符集无效 达梦数据库更改字符集_初始化_14


从mysql迁移到DM时报错约束表达式无效,点开错误详情不难发现,语句内default 设置默认值current_timestamp()带了单引号,只需要去掉单引号手动执行即可。

列长度超出定义[-6169]

达梦数据库 docker 设置字符集无效 达梦数据库更改字符集_数据库_15


这个是因为mysql字符串类型默认以字符单位且大小写不敏感;而达梦字符串类型默认以字节为单位且大小写敏感。

所以在使用DTS迁移工具时,设置表映射关系调整列精度将其扩大。

达梦数据库 docker 设置字符集无效 达梦数据库更改字符集_DM_16

因关键字屏蔽导致报错[-2007]语法分析出错

场景:数据库执行修改用户资源限制语句时,提示语法分析出错,经过分析语法并无问题。

达梦数据库 docker 设置字符集无效 达梦数据库更改字符集_初始化_17


数据库中配置dm.ini 文件中参数EXCLUDE_RESERVED_WORDS设置了屏蔽关键字limit。

执行语句:select * from v$dm_ini where para_name=‘EXCLUDE_RESERVED_WORDS’;可查看值。

达梦数据库 docker 设置字符集无效 达梦数据库更改字符集_数据库_18


可修改参数EXCLUDE_RESERVED_WORDS的值,删除limit,

方法一:直接在配置文件dm.ini 内修改

方法二:数据库执行SF_SET_SYSTEM_PARA_VALUE(‘EXCLUDE_RESERVED_WORDS’,’’,1,2);删除全部。

说明:若只需要删除limit,可以执行语句SF_SET_SYSTEM_PARA_VALUE(‘EXCLUDE_RESERVED_WORDS’,‘DOMAIN,verify,reference,offset,TYPE’,1,2);保留其他关键字

方法三:在控制台工具内修改参数值

因为此参数是静态参数,重启数据库服务后生效。