关于业务库从MySQL迁移到DM8的操作指南

本文详细描述了如何将MySQL数据库迁移到达梦DM8,包括使用达梦工具、Maven依赖配置、Nacos数据源切换、Mybatis中SQL语句的修改,以及处理从MySQL到DM8的类型转换和特定功能差异问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

升级前准备

jdbc:dm://10...15:5237
username: datashare
password: datashare123

把当前MySQL数据库下的数据库表以及数据迁移到DM8。通过达梦8自带的工具可以实现迁移(仅支持Win)

DM8管理工具下载:达梦官网

迁移数据参考博客:MySQL迁移数据到达梦8

注意:MySQL的DateTime类型到了DM8会自动转为Timestamp,要注意在同步的时候,配置表手动修改为DateTime

项目修改

  1. 新增Maven依赖
<!-- dm8驱动-->
<dependency>
    <groupId>com.dameng</groupId>
    <artifactId>DmJdbcDriver18</artifactId>
    <version>8.1.2.192</version>
</dependency>

<!-- dm8方言包,和驱动一个版本 -->
<dependency>
    <groupId>com.dameng</groupId>
    <artifactId>DmDialect-for-hibernate5.3</artifactId>
    <version>8.1.2.192</version>
</dependency>
  1. Nacos配置改成DM8数据源
primary: slave
slave:
  driver-class-name: dm.jdbc.driver.DmDriver
  url: jdbc:dm://10.***.***.15:5237?schema=ds_exchange
  username: datashare
  password: datashare123
  1. 在MybatisConfig类下新增Bean
@Bean
@ConditionalOnMissingBean
public DatabaseIdProvider getDatabaseIdProvider() {
    DatabaseIdProvider databaseIdProvider = new VendorDatabaseIdProvider();
    Properties p = new Properties();
    p.setProperty("DM DBMS", "dm");
    p.setProperty("MySQL", "mysql");
    databaseIdProvider.setProperties(p);
    return databaseIdProvider;
}
  1. Mapper.xml文件的SQL冗余两份,用databaseId隔离,后面上线如果遇到语法不兼容,可以直接修改在databaseId=dm的SQL

    例如:

    原来的:

   <select id="getDetailById" resultMap="syncJobWithFlowInfoMap">
        select j.id, j.owner_ids, j.owner_names, j.source_id, j.target_id, j.project_id, j.properties, j.xxl_job_info_id, j.remark, j.name, j.status, j.parent_id, j.ancestors, j.job_catalog_id, j.CREATE_TIME, j.MODIFY_TIME, j.CREATOR_ID, j.UPDATER_ID, f.name catalog_name
        from sync_job_info j left join sync_job_catalog f on f.id = j.job_catalog_id where j.delete_status=0 and j.id = #{id}
    </select>

​ 修改后:

<select id="getDetailById" resultMap="syncJobWithFlowInfoMap" databaseId="mysql">
    select j.id, j.owner_ids, j.owner_names, j.source_id, j.target_id, j.project_id, j.properties, j.xxl_job_info_id, j.remark, j.name, j.status, j.parent_id, j.ancestors, j.job_catalog_id, j.CREATE_TIME, j.MODIFY_TIME, j.CREATOR_ID, j.UPDATER_ID, f.name catalog_name
    from sync_job_info j left join sync_job_catalog f on f.id = j.job_catalog_id where j.delete_status=0 and j.id = #{id}
</select>

<select id="getDetailById" resultMap="syncJobWithFlowInfoMap" databaseId="dm">
    select j.id, j.owner_ids, j.owner_names, j.source_id, j.target_id, j.project_id, j.properties, j.xxl_job_info_id, j.remark, j.name, j.status, j.parent_id, j.ancestors, j.job_catalog_id, j.CREATE_TIME, j.MODIFY_TIME, j.CREATOR_ID, j.UPDATER_ID, f.name catalog_name
    from sync_job_info j left join sync_job_catalog f on f.id = j.job_catalog_id where j.delete_status=0 and j.id = #{id}
</select>

问题总结

序号问题原因解决方案备注
1生成id问题dm不支持UUID可使用sys_guid代替例如:sys_guid AS bill_Id
2求两个时间相差天数dm不支持DATEDIFF可使用BIGDATEDIFF代替例如:BIGDATEDIFF(DAY,admission_time,discharge_time)
3group by 关键字后面不能使用字段的别名直接使用字段本身
4group by 时 select 除了聚合字段和聚合参数,其他字段不允许查询默认标准select限制修改标准语法例如:select type,count(id) from t_1 group by type
5mysql中DATEDIFF和 dm中BIGDATEDIFF 参数位置位置相反示例:
mysql :select DATEDIFF(discharge_time,admission_time) from drg_idl_performance_basic;
dm:select BIGDATEDIFF(DAY,admission_time,discharge_time) from drg_idl_performance_basic
6表备份时,若表的主键是自增会报错自增字段不能插入自己值在复制表的创建sql语句中去掉“IDENTITY(1, 1)”,备份成功后再修改表主键为自增列
7STR_TO_DATE()不支持使用TO_DATE()代替实例:TO_DATE( rysj,‘YYYYMMDD’) ;不支持%Y%m%d 写法
8列长度超出定义达梦数据库一个汉字占2个长度,mysql为1个对于存储汉字的列,长度比mysql多定义一倍
9DATE_SUB( now( ), INTERVAL 1 DAY )dm中INTERVAL 1 DAY 需要给1加上‘1’才可以使用DATE_SUB( now( ), INTERVAL ‘1’ DAY )
10replace into 不支持使用 merge into 代替
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值