0、说明
本文主要结合之前一次oracle迁移达梦的项目,将碰到的问题以及一系列踩过的坑列举出来供大家参考,数据库版本是达梦7。(本文中涉及到的部分对象名已用sch1,tab1等方式替换)
1、整体情况
迁移过程中失败任务数低于5%,大部分对象和数据都能够保证正常迁移。其中对于出错的任务,主要有导表和导函数包两部分。其中主要棘手的在与迁移函数包等对象时的问题。
https://www.cndba.cn/foucus/article/4142
2、迁移错误详解
2.1、通用问题
说明:对于直接使用DTS迁移失败的包,最好从源端获取完整的定义,重新核查报错原因 —— 避免编译通过后,报错 xxx 对象未在 xxx 包中定义!(包头和包体不匹配:包头定义了三个函数,在包体中,可能只有两个函数)https://www.cndba.cn/foucus/article/4142
2.1.1、关键词问题
a、关键词问题的处理方式
i、在包中手工改写,如,原先有变量名字为dateDiff,手动改写为“dateDiff”——用双引号屏蔽关键字。
ii、在客户端的配置文件(dm_svc.conf)中,配置对应关键字,迁移包时,不做改动,让驱动自动为我们做上述i中的事情。如下图即为配置屏蔽 TRACE和ROWS两个关键字:
达梦中的关键字可以在达梦SQL使用手册中查询,也可以使用下面SQL查询:
select * from V$RESERVED_WORDS where RESERVED='Y';
2.1.2、中文符号的问题
a、达梦的PLSQL中,不支持中文标点、异常空白符。(即不是空格、/r、/n的其他的空白符、不支持全角符号 —— 当成字符串处理的除外)
b、该空白符通过客户端工具,调整编辑器为显示空白字符,可以分别异常空白符
所有正常的空格,均会显示为:虚点;如果是没有虚点的空白符,即为异常的空白符(常见于从邮件中、网页、QQ聊天框等中,直接复制出来的SQL)
2.2、表迁移问题
2.2.1、标度大于精度
/* 任务失败: 创建表"sch1"."tab1" */
/* 第8 行附近出现错误:
标度大于精度 */
/* 相关SQL语句: */
CREATE TABLE "sch1"."tab1"
(
"REGION_NAME" VARCHAR2(20) NULL,
"RATE" NUMBER(3,4) NULL,
"SCORE" VARCHAR2(20) NULL,
"CHECK_MONTH" VARCHAR2(20) NULL,
"INSERT_TIME" TIMESTAMP(0) NULL
);
解决方式:
达梦里面精度