达梦数据库常见问题

达梦数据库常见问题总结

维护问题

问题一:查询时候报,回滚记录版本太旧,无法获取用户记录

检查UNDO_RETENTION 大小是否合适,可以做适当调整

问题二:启动数据库提示浮点数例外:如图
在这里插入图片描述

redo日志损坏,更换redo日志,重新启动数据库

问题三:datediff函数语法问题:如下案例

select “db_foreign_affairs”.“passport”.expire_date, if (DATEDIFF(dd,expire_date,NOW())<0,1,0) as is_expired from “db_foreign_affairs”.“passport”

在这里插入图片描述

达梦中DATEDIFF语法为DATEDIFF(datepart,date1,date2),示例如下:

  SELECT DATEDIFF(**QQ**, '2003-06-01', DATE '2002-01-01');

查询结果为:-5

问题四:函数NOW语法问题

**示例:**select “db_foreign_affairs”.“passport”.expire_date, if (DATEDIFF(dd,expire_date,NOW())<0,1,0) as is_expired from “db_foreign_affairs”.“passport”

**错误示例:**select “db_foreign_affairs”.“passport”.expire_date, if (DATEDIFF(dd,expire_date,NOW)<0,1,0) as is_expired from “db_foreign_affairs”.“passport”

问题五:PHP连接达梦中问题,如下图:
在这里插入图片描述

需要找一个32位的安装包,从32位的安装包里找到这个文件

问题六:数据库执行DEMP导出文件时,数据库会异常宕机

  1. 抓gbk堆栈信息
  2. 可能是索引的问题
  3. 可能是存储硬件损坏导致demp导出文件宕机

问题七:触发器中引用无效的伪记录名,如下图:
在这里插入图片描述

是因为我们的触发器逻辑不对,预期,我们是希望建立一个 for each row的触发器,但是我们在触发器的定义中,却写成了 for each statment 了,如下是没有问题的示例:

  create or replace trigger trig_a before insert on test
  for each row
  begin
  delete test where v1=:new.v1;
  proc_a(:new.v1);
  end;

问题八:Oracle中raw类型在DM中可以用哪种类型代替

Oracle中raw类型在DM7中可以使用varbinary代替

问题九:无效的链接名

该问题是因为使用到了dblink,检查dblink是否存在。

问题十:许可证违规或产品已过期:license violation detected,or product has expired在这里插入图片描述

查看数据库安装目录下的bin下的dm.key文件是否过期,如果过期替换key文件

问题十一:不是group by 表达式

	select id,name from name group by id;
	
	提示不是group by表达式,在select中存在的字段,必须包含在group by 语句中
	
	改造sql:
		select id,name from name group by id,name;

或者修改兼容参数COMPATIBLE_MODE=4

迁移问题

问题一:达梦迁移提示列超度超出定义

mysql:
(1) 是否已字符为单位
(2)字符集是UTF8还是GBK,UTF8一个汉字3个字节,GBK一个汉字两个字节
(3)迁移工具中调整列映射长度,重新迁移
Oracle:
(1)可能是数据类型存在问题,nvarchar2达梦没有这个数据类型,迁移到达梦数据库中会转换为varchar(2)类型

nvarchar和varchar的区别:
varchar(2)可以输入两个字符或者一个汉字
nvarchar(2)可以输入两个字母或者两个汉字

可以初始化时开启lenth_in_char参数

问题二:迁移报错,存在连接断开或者数据异常关闭

检查源端和目的端的数据库服务是否正常运行,检查网络波动问题,都没有问题,多次重新迁移出错问题
更换连接的驱动,重新进行迁移

问题三:触发器和存储过程的问题

(1)FOR语法错误检查是否有NEW IS NEW OLD IS OLD如果有将OLD IS OLD 放在NEW IS NEW前面语法为OLD IS OLD NEW IS NEW

(2)非法的基类名rowid,检查兼容参数是否开启,检查是否报错地方是否是关键字,如果是关键字rowid替换为number

(3)无效的变量名,检查初始化数据库大小写敏感问题,源库为大小写敏感,迁移至大小写不敏感的库,触发器和存储过程中的小写变量需要加引号

问题四:执行存储过程或触发器报错,提示DDL语句无法执行

DDL_TV_TRIGGER                  = 1

问题五:迁移数据完成后,中文乱码问题

(1)检查字符集是否一样
(2)mysql5.5以上的版本,如果用自带5.1版本驱动的需要自己指定驱动包,重新迁移

问题六: 编译触发器或者存储过程时,无效的表或视图名

(1)检查是否存在这个对象
(2)如果存在检查权限
(3)如果是根据同义词调用,检查同义词是否生效,如果没有生效,可以不通过同义词调用

问题七:默认值问题

(1)datatime类型默认值不支持汉字
		不支持13-13月-13
		支持13-13-13
(2)timstamp类型默认值最小为1970-01-01 13:00:00
		不支持 0000-00-00 00:00:00

问题八: 迁移报错:错误号:0错误消息:流结果集
com.mysql.jdbc.RowDataDynamic@12ca8ce9仍然是活动的。当任何流结果集在给定连接上打开并使用时,不得发出任何语句。在尝试更多查询之前,确保已经对任何活动流结果集调用了.close(),如下图:

在这里插入图片描述

(1)mysql5.5以上的数据库,需要指定驱动包,如果还提示如上这个问题,替换新的驱动包尝试。

问题九:金仓迁移至达梦是,报错获取列信息失败

(1)迁移工具问题,在dts迁移工具中,迁移完成后,发现列信息获取失败,重新迁移出错对象,在迁移完成界面后退两部,重新迁移数据。		

问题十:mysql迁移达梦数据库,数据迁移时提示列长度超出定义,但是varchar类型已经设置为8000,不能增加

(1) 开启单表超长定义
(2) 替换问题列的类型,替换为大字段类型,(TEXT,CLOB)等

问题十一:mysql迁移达梦数据库,TIMESTAMP类型的列提示无效的默认值“CURRENT_TIMESTAMP”

(1)检查建表语句默认值引用的函数是否使用引号引用,如果使用函数将不生效,所以导致无效的默认值。

常见问题

问题一:安装达梦数据库时,报错类找不到

在这里插入图片描述

检查上传安装包的MD5值或者SHA256值,是否可提供的值一样,如果不一样就是在上传的过程中造成安装包数据丢失。所以会出现这个问题。

问题二:使用DMRMAN工具还原达梦数据库时,提示“Fail to read write data file”读取数据文件失败。

1. 需要还原的备份集目录属组修改为dmdba,使用dmdba用户还原

问题三:用户登录失败次数过多,导致用户被锁定。

1. 登录数据库的管理员SYSSSO用户,进行解锁。
  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值