实用第一f智慧密集
BSBaSEIEieSI3l3BBI3SeSBI3BBEIISBBBI3BI9@SI36SaaBeEISeBBei3iaEIBBeBI3BaEIEII3SS@ieEl®
面向达梦数据库的应用系统移植研究与实现
马晓明,张新博
(北京亿米云海科技有限公司,北京100020)
摘要:介绍了从非国产数据库到国产达梦数据库进行应用移植与数据整体迁移的工具、方法以及涉及到的常见问题解决方案。对应用系统移植到国产软硬件系统环境的工作提供了参考和借鉴。
关键词:达梦数据库;MySQL数据库;SQL数据库;国产化系统移植
1概述
近年来,我国从计算机芯片到操作系统软件、数据库系统软件都加速了国产化进程。越来越多的政、企及事业单位需要把现有应用系统向国产化软硬件环境进行移植。
应用系统移植至国产化软硬件环境涉及到的方面非常广泛o例如,从X86体系的CPU到国产CPU的更换,
操作系统的更换,数据库系统的更换等,都是系统移植工作需要考虑的范围。仅专注于数据库系统层面,也就是数据库系统的国产化替换,对于应用系统的改造,以及数据迁移中的问题进行讨论。
2关于达梦数据库
达梦数据库管理系统是达梦公司推出的具有完全自主知识产权的高性能数据库管理系统,是目前可以商用的国产数据库系统软件之一。达梦数据库具有如下几个特点:
2.1跨平台
支持主流软硬件体系渊支持Windows、Linux、国产的中标麒麟、银河麒麟等操作系统),支持主流标准接口。兼容多种硬件体系,可运行于X86、X64、SPARC、POWER、ARM等硬件体系上。达梦数据库目前与多款国产操作系统、国产服务器进行了相互的兼容性认证。2.2高性能
达梦数据库支持列存储、数据压缩、物化视图等面向联机事务分析场景的优化选项;
通过表级行存储、列存储选项技术,在同一产品中提供对联机事务处理和联机分析处理业务场景的支持。
2.3高可用
可配置数据守护系统(主备),自动快速故障恢复,具有强大的容灾处理能力。
由于具备以上几个特点,达梦数据库在国内的电力、政务、公安等众多行业中均有应用的案例。目前,达梦数据库的最新版本是DM8o所介绍的内容基于此版本。
3库对库直接迁移
数据库的整体迁移,推荐使用迁移工具DM DTSo 该工具默认包含在达梦数据库产品中,它提供了主流大型数据库迁移到达梦、文件到达梦的相互迁移功能。根据官方文档,支持的主流大型数据库有Oracle、SQLServer、MySQL、DB2、PostgreSQL、Informix、King-base、Sybaseo对数据库中的模式、表、视图、序列、索引均可以迁移到达梦数据库中。
使用DM DTS时,首先要确保达梦数据库所在的服务器可以访问迁移源数据库o之后根据DM DTS的向导,即可自动进行迁移。大多情况下的迁移会顺利完成,但在迁移过程中也可能碰到会遇到一些特殊问题。以下,针对可能出现的问题以及解决方案进行了整理:3.1达梦数据库对于大小写敏感自学python太难了
从其他数据库迁移数据到达梦时,尤其是从Windows操作系统中的某些数据库进行迁移时,要特别注意大小写问题。否则,大小写问题可能会导致“无效的表名或视图名”的错误。
解决方案:如果实际工作中希望对大小写不敏感,可以在达梦中将“保持对象名大小写”勾消。
3.2迁移提示错误信息:“数据大小已超过可支持范围”
一般情况下,此问题的原因是由于实际数据超过了达梦数据库支持的大小范围。
解决方案:重点分析被迁移数据的数字类型字段(INT、BIGINT、NUMBER),到造成引起报错的字段后,观察数据可以考虑将字段改为BIGINT字段以规避错误。
另外需要特别注意的一点是含有中文字符的
VAR-
数据库与信息管理DATABASE&INFORMATION MANAGE"
CHAR对象。在Orcale、MySQL数据库中,无论英文、中文、标点符号,VARCHAR所指长度均以“字数”为准。例如,VARCHAR(50)在这些数据库中可以容纳50个中文字符。达梦数据库默认的计算长度为“字节数”,又因为中文占用多个字节,所以VARCHAR(50)在达梦中无法容纳50个中文字符。迁移时
可以考虑将长度扩大3倍。
3.3达梦数据库在创建新的数据库时默认的编码是GB18030而不是UTF-8
解决方案:注意根据实际情况设定字符编码。
3.4达梦数据库默认不支持zeroDateTime数据
虽然在MySQL中是允许的“0000-00-0000:00:00”这样的时间数据,但是在达梦中迁移会失败。
解决方案:事先对这种数据进行清理和修改。可以修改为“1900-01-0100:00:00”。
3.5表字段与达梦数据库关键字冲突
如果源库里面的表字段的名称正好是达梦数据的关键字,那么在达梦数据库里使用时,会报错遥例如, comment是达梦数据库的关键字,MySQL里有表的字段取了comment,那么迁移会失败。
解决方案:修改名称为非关键字。注意,修改字段名称后需要应用软件都做相应修改。
4使用SQL导入数据
达梦数据库支持标准的SQL语法,但在实际操作中,不同的数据库对于SQL有一些差异。因此,在使用源数据库中的SQL进行手工导入,或者程序批量执行的时候,可能遇到一些问题。常见的问题整理如下:4.1达梦里面精度必须大于等于标度
精度是指总长度,标度是小数位的长度,小数位不可能超过总体长度,但是某些数据库(如oracle)中并没该限制。
解决方案:例如NUMBER(3,4)这样的列声明在达梦中会报错,可以改成NUMBER(4,4)。
4.2不支持反单引号:”
在一般的MySQL工具中导出的SQL文件中会存在该符号。达梦数据库不支持SQL中的返单引号。
解决方案:删掉反单引号。
4.3创建表的时候,不支持在列的后面直接加comment 注释如何制作网站模板
解决方案:使用COMMENT ON IS代替,如:
COMMENT ON TABLE xxx IS xxx(表注释)
COMMENT ON COLUMN xxx IS xxx(列注释) 4.4不支持MySQL的auto_increment自增写法手机mysql安装配置教程
解决方案:使用identity代替。如:identity(1, 1),代表从1开始,每次增1。
4.5当有主键是自增时,不能直接插入数据
解决方案:先执行SET IDENTITY_INSERT表名ON,再执行insert。insert数据完成后,再执行SET I-DENTITY_INSERT表名OFF。
5应用系统代码改造
更换数据库系统软件,需要应用系统代码也需要做一定程度的修改。以下,通过在实际项目中的经验,对应用移植的代码修改部分进行了整理。实际移植的应用系统使用了Java语言进行开发,移植前的数据库为MySQL。
5.1更换JDBC
程序连接达梦数据库必须使用专有达梦的JDBC,在安装盘或者打包文件中都有,需要进行替换。如果采用Maven进行库管理的项目,需要将达梦JDBC的JAR 包放置到本地仓库中进行使用。
5.2hibernate方言驱动
程序中用到了hibernate,需要在配置文件里手动指定hibernate方言的驱动,否则启动会报错。
解决方法:在配置文件中修改配置,并替换驱动。
如:spring.jpa.properties.hibernate=dialect:org.hiber-nate.dialect.DmDialect
使用的hibernate驱动版本也需要手动下载添加,如:
<dependency>
<groupId>com.dameng</groupId>
<artifactld>DmDialect-for-hibernate5.3</arti-factld>
<version>8.1.0.157</version>
</dependency>
与JDBC的JAR包处理方法一样,放置到本地仓库中进行使用。
c++教材5.3达梦不支持MySQL默认时间函数
原有代码中如果使用了MySQL默认时间函数CUR-RENT_TIMESTAMP,在达梦里会报错。
解决方法:使用sysdate函数来代替CURRENT_TI MESTAMP。
5.4达梦数据库不支持LAST_INSERT_ID()
移植前的应用在MySQL里新增数据,需要返回刚
SreeaeBBHI*>SBSI3EIEIEIEIffiEBBI!IBBBeaeBI3BigBlslBBai3IIBBEISBHI3glBBIIIIIIBSSI3aBIIIglEISa3BEIQISB>E
实用第一f智慧密集
数组公式是怎样实现的新增数据的自增主键值的场景,会用到:
select LAST_INSERT_ID()
而达梦数据库不支持上述写法。
解决方法:在达梦数据库中创建序列,如:
CREATE SEQUENCE config_id_seq INCREMENT
BY1START WITH1
之后通过SELECT config_val as id from
dual获取最后的序列值。
5.5达梦数据库不支持某些mybatis字符串的拼接写法
mybatis里的"%"#"%"这种写法在达梦数据库
会报错。
解决方法:使用函数CONCAT('%',#,'%'),双引号
变成单引号。
5.6转换类、计算类函数的替换
部分MySQL中的转换函数、计算函数需要替换。
常见的替换函数如表1所示。
表1
MYSQL函数达梦替换函数
date_sub dateadd(datepart,n,date)
例子:’
数值中数值为select dateadd(month,-6,now()); select dateadd(month,2,now());
format datepart(datepart,date)
例子:
select datepart(year,'2018-12-1308:45:00];返回年:2018 select datepart(month,'2018-12-1308:45:00');返回月:12
substring_index substr(char[,m[,n]])
或者
substring(char[from m[for n]])
group_concat wm concat
例子:
select wm concat(id)as idstr from persion
convert(value,type)函数名称一致,但是参数顺序相反:convert(type,value)6结语
达梦数据库是国产化系统中一个比较常用的数据库产品,产品功能丰富,工具比较完备。在实际使用的场景中,与常见数据库的使用方法和使用习惯是一致的。
对于数据迁移的工作,根据实际项目经验,一般情况下直接使用其他种类数据库导出的SQL文件多少会遇到一些需要人工修改的地方。因此,除特殊情况外,建议使用达梦的迁移工具DM DTS直接通过库对库进行 迁移,可以在相当大程度上避免SQL差异所造成的修改。同时DM DTS迁移工具也提供了比较详细的日志,利于开发人员进行问题分析。
对于应用系统的移植,达梦数据库对标准SQL的兼容性较好,移植的工作量总体可控。虽然文中介绍了一些关于MySQL到达梦之间的差异性,但这些差异性很大程度上来源于MySQL的一些自有函数,对于大多数常见的增、删、改、查等SQL,达梦数据库的兼容性没有问题。因此,总体上看,应用系统的移植是比较便利的。
参考文献
[1]吴照林,戴剑伟.达梦数据库SQL指南.北京:电
子工业出版社,2016.
[2]朱明东,张胜.达梦数据库应用基础[Application
Foundation of Dameng Database].北京:国防工业
出版社,2019.
(上接第75页)
作难度大、信息实施不及时、管理欠缺等实际问题,采用GIS技术作为基础支持,实现巡查工作信息
化的高效管理;通过手机通信,实现巡检信息的实时上传。该系统实现电子巡查技术的便捷和实时化,提高巡查工作的效率,真正实现电子巡查智能化,具有广阔的应用前景。
参考文献
[1]铁菊红,彭辉.GPS手持机线路巡检管理系统设计
与实现[J].计算机应用与软件,2008,(11).[2]苏婕,王忠.基于NFC技术的巡更巡检管理系统的
设计与实现[J].计算机工程与设计,2015,(4).
⑶汪鹏.智能巡检管理系统的设计与实现[D].北京
邮电大学,2019.
[4]孙鹏,宋坤,徐刚,丁扬,张广飞.基于增强现实
技术的变电站巡检管理系统研究与应用[J].电气技术,2019,
(10).
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论