MySQL迁移到达梦数据库DM过程问题记录

问题一

使用达梦自带的数据迁移工具(DTS),将MySQL数据库迁移至达梦数据库(以下简称DM),迁移过程报如下错误:

/* 任务失败: 创建表"bpdb"."HOOK_T" */ 
 /* 对象[UPDATE_TIME]DEFAULT约束表达式无效 */ 
 /* 相关SQL语句: */ 
CREATE TABLE "bpdb"."HOOK_T"
(
 "ID" BIGINT IDENTITY(1,1) NOT NULL,
 "DOMAIN" VARCHAR(300) NOT NULL,
 "APP_ID" VARCHAR(300) NOT NULL,
 "CONDITIONS" VARCHAR(600) NOT NULL,
 "CALL_BACK_URL" VARCHAR(600) NOT NULL,
 "CREATOR" VARCHAR(300) NOT NULL,
 "CREATE_TIME" TIMESTAMP(0) DEFAULT CURRENT_TIMESTAMP()
 NOT NULL,
 "UPDATE_TIME" TIMESTAMP(0) DEFAULT '0000-00-00 00:00:00'
 NOT NULL,
 "STATUS" INT NOT NULL
);

 /* 任务失败: 创建表"bpdb"."BIND_RELATIONSHIP_T" */ 
 /* 第13 行附近出现错误:
对象[EX_PLATFORM_FLAG]DEFAULT约束表达式无效 */ 
 /* 相关SQL语句: */ 
CREATE TABLE "bpdb"."BIND_RELATIONSHIP_T"
(
 "ID" BIGINT IDENTITY(40,1) NOT NULL,
 "USER_ID" BIGINT NOT NULL,
 "EX_PLATFORM_FLAG" VARCHAR(400) DEFAULT BLUEPRINT
 NULL,
 "EX_PLATFORM_NAME" VARCHAR(400) DEFAULT 测试平台
 NULL,
 "DOMAIN" VARCHAR(400) NOT NULL,
 "DOMAIN_NAME" VARCHAR(400) NOT NULL,
 "EX_USER_UNI_ID" VARCHAR(400) NOT NULL,
 "TYPE" VARCHAR(80) NULL
);

解决方法:

  1. DM默认不支持zeroDateTime这种设置,将’0000-00-00 00:00:00’改为’1900-01-01 00:00:00’
  2. DM建表语句不支持NULL可为空的语法,删除NULL,默认可为空;

问题二

       DM执行SQL语句必须指定schema,即schema.tablename,程序jdbc访问(比如使用Mybatis,比较悲剧)无法自动设置schema,会带来改造风险。
解决办法:
       DM中新建和应用系统对应的管理用户,如bp对应管理用户bpdb,DM会自动生成名为bpdb的模式,然后把数据对象(表、视图、存储过程等)创建到该模式下;使用bpdb登录DM,执行SQL可以不带schema。
程序中使用bpdb用户连接DM,jdbc连接配置示例如下:

#DM
#DM数据库驱动类型
jdbc.driver=dm.jdbc.driver.DmDriver
#DM数据库连接地址
jdbc.url=jdbc:dm://IP:5236/BPDB
#DM数据库用户名
jdbc.username=bpdb
#DM数据库密码
jdbc.password=dbpwd

 

参考资源链接:[达梦数据库迁移MYSQL程序信创环境下的适配与实战](https://wenku.youkuaiyun.com/doc/4a7jcgz2sd?utm_source=wenku_answer2doc_content) 在将MySQL数据库迁移到达数据库(DM)时,确保数据正确迁移和应用程序稳定运行的关键之一是处理好SQL语法和函数的兼容性问题。这里提供一些具体的技术细节和操作步骤,帮助你理解和解决这些不兼容问题。 首先,要了解达梦数据库MySQL在SQL语法上的差异,这包括连接语法的改变、函数的替换以及特殊语法的支持等。在迁移过程中,需要对原MySQL的SQL语句进行重构: 1. **连接语法调整**:MySQL中常见的`join...on`语法在达梦数据库中需要调整为`where`连接方式。例如,MySQL的`SELECT * FROM table1 JOIN table2 ON table1.id = table2.f_id;`在DM中需要改为`SELECT * FROM table1, table2 WHERE table1.id = table2.f_id;`。 2. **函数替换**:在DM中,由于没有直接对应的`UUID()`函数,你需要自定义一个函数或者使用`guid`和`newid`等函数来代替。例如,可以在DM中创建一个生成UUID的存储过程或函数。 3. **特定语法调整**:对于在MySQL中可用但在达梦数据库中不支持的语法,比如`format()`函数,需要使用`round()`或其他等效的DM函数来替代。同时,确保`GROUP BY`语句遵循标准SQL语法,以避免潜在问题。 4. **存储过程和视图调整**:由于存储过程DM中的语法与MySQL有所不同,需要重构存储过程的声明部分,调整事务处理,以及替换`MERGE INTO`语句等。 5. **数据类型处理**:特别是处理MySQL中的`text`类型数据时,需要根据达梦数据库的数据类型处理方式,进行适当的调整。 以上这些调整,除了依赖于对两种数据库特性的深入了解外,还需要在实践中不断尝试和测试。对于初学者或者经验不足的开发者来说,可以参考《达梦数据库迁移MYSQL程序信创环境下的适配与实战》这份资料。它详细解析了在国产化环境下,特别是使用达梦数据库进行MySQL数据库迁移时,如何进行数据源配置、SQL语法调整、存储过程调整以及特定功能处理等。 这份资料不仅涵盖了理论知识,还包括了大量的实例分析和操作指南,能够帮助你系统地理解和掌握迁移过程中遇到的常见问题和解决方案。通过学习这份资料,你将能够更好地进行数据库迁移和适配工作,确保项目的顺利进行。 参考资源链接:[达梦数据库迁移MYSQL程序信创环境下的适配与实战](https://wenku.youkuaiyun.com/doc/4a7jcgz2sd?utm_source=wenku_answer2doc_content)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值