注册
Oracle11g迁移到DM8的不兼容问题处理
培训园地/ 文章详情 /

Oracle11g迁移到DM8的不兼容问题处理

Lucay丶 2022/11/15 2524 3 0

由于Oracle数据库高昂的license费用、维护成本、数据安全隐患等等问题,国内数据库市场也涌现了一批性能优越的国产数据库产品,如武汉达梦、南大通用、人大金仓等,达梦数据库管理系统融合了分布式、弹性计算与云计算的优势,可满足用户多种需求,让用户能更加专注于业务发展,在2020年国产数据库市场排名第一,并连续多年蝉联首位。

本文旨在于梳理处从oracle11G数据库迁移至DM8数据库得结构与数据,以及有源码的Java应用程序中不兼容得部分,供有需要人士参考,响应国家IOE号召得同时少走弯路

一、JAVA程序在DM8中运行报错

报错提示:

cn.com.crc.iti.sqlparser.exception.SqlParserException:
dm.jdbc.driver.DMException: line 1, column 126, nearby [name] has error:
Syntax error

原始语句:

CREATE OR REPLACE FUNCTION CRVOTE.run ( methodName varchar2, params varchar2, encoding varchar2 )
    RETURN varchar2 AS LANGUAGE java NAME 
'Shell.run(java.lang.String,java.lang.String,java.lang.String) return java.lang.String';

解决方案:如在迁移过程中识别到包含java应用,则从源库配置中获取jar包,手动上传到达梦路径

二、系统权限&对象权限

oracle11g与DM8中得权限定义有所不同,会导致迁移至DM后造成权限放大或者缩小等问题,因此在迁移前需要解决权限对应问题
例如:oracle11g中包含权限“CREATE ANY JOB”,达梦数据库中为“ADMIN JOB

三、授权方案

问题:由于数据库中有执行依赖、授权等相关影响会导致部分对象在迁移时报错
原因:达梦授权方案,用户对象中包含其他用户对象,因授权步骤在最后一步,所以无权限
解决思路:执行过程中,如果提示无权限,则提前对无权限的对象进行赋权

四、DBLINK异常

问题:创建DB_LINK的DDL语句,词法解析异常

syntax error, error in :'D BY VALUES ':1'
USING 'EDBDBZB'', expect null, actual VALUES, pos 76, line 3, column 39, token  

原因:达梦的DBLINK有一些约束
1、数据库连接目前只支持 DM、Oracle 或 ODBC。
2、DM-DM 的同构数据库链接不支持 MPP 环境,DM 与异构数据库的数据库链接支持
3、增删改不支持 INTO 语句。
4、不支持使用游标进行增删改操作。
5、不支持操作远程表的复合类型列。
6、DBLINK 理论上不支持 LOB 类型列的操作,但支持简单的增删改使用lob语句

五、同名对象

问题:oracle中存在同一模式下不同对象重名,但是在达梦数据库中同一模式下不允许重名
如:在oracle中创建一个物化视图,会自动创建一个同名得表,迁移至达梦时会报错有重名对象
解决思路:在迁移前梳理出所有重名对象,自动进行替换(重名率较高得对象有表、索引、视图等)

六、创建时间显示

问题:数据库对象迁移到达梦数据库,对象创建时间与系统时间不符
如:角色迁移时间(电脑显示的时间)2022-05-09 09:54
达梦数据库显示的创建时间:2022-05-09 01:51:23.557566
解决思路:连接池建立会话的时区未设置,增加参数:localTimezone=480

七、stronge规则不同

   创建表时DDL包含STORAGE信息,Oracle和达梦数据库STORAGE规则不同,导致报错对于         普通表和索引,DM8 提供了以下的存储参数:
  1. 初始簇数目 INITIAL:指建立表时分配的簇个数,必须为整数,最小值为 1,最大值为 256,缺省为 1;
  2. 下次分配簇数目 NEXT:指当表空间不够时,从数据文件中分配的簇个数,必须为整数, 最 小值为 1,最大值为 256,缺省为 1;
  3. 最小保留簇数目 MINEXTENTS:当删除表中的记录后,如果表使用的簇数目小于这个值, 就不再释放表空间,必须为整数,最小值为 1,最大值为 256,缺省为 1;
  4. 填充比例 FILLFACTOR:指定插入数据时数据页的充满程度,取值范围从 0 到100。默认 值为 0,等价于 100,表示全满填充,未充满的空间可供页内的数据更新时使用。插入数 据 时填充比例的值越低,可由新数据使用的空间就越多;更新数据时填充比例的值越大, 更新导致出现的页分裂的几率越大;
  5. 表空间名:在指定的表空间上建表或索引,表空间必须已存在,默认为用户缺省的表空 间。数据文件使用的簇大小,即每次分配新的段空间时连续的页数,只能是 16 页或 32 页 或64 页,缺省使用 16 页。数据文件使用的页大小,可以为 4K、8K、16K 或 32K,选择 的页大小越大,则 DM 支持的元组长度也越大,但同时空间利用率可能下降缺省使用 8K。

八、自定义类型

问题:修改TYPE时使用ADD ATTRIBUTE添加属性报错
原因:目前达梦暂不支持修改TYPE时使用ADD ATTRIBUTE添加属性

     ALTER TYPE "ABC"."TEST_OBJECT" 
     ADD ATTRIBUTE(INFO  TEST_OBJECT_2) CASCADE

九、索引

问题:达梦创建索引时报错
原因:目前达梦暂不支持PARAMETERS配置参数还包含自定义lexer词法解析器

      CREATE INDEX "ABC"."D_CTX" ON "ABC"."D_VERSIONS" ("TEST_INDEX") 
      INDEXTYPE IS "CTXSYS"."CONTEXT"  PARAMETERS ('
      memory 26214400
      datastore SCH.test_articles_datastore
      filter ctxsys.null_filter
      lexer SCH.test_articles_lexer language column article_language
      section group SCH.test_article_sections
      stoplist SCH.test_articles_stoplist
      wordlist SCH.test_articles_wordlist')
      PARALLEL 2

十、用户

问题:oracle中创建用户ID,迁移至达梦后重新生成了用户ID
原因:暂未找到解决办法

十一、数据迁移

问题:从oracle11G中迁移数据后进行对比发现部分数据对应不上
原因:在一步步查找原因中,感谢达梦支持同事耐心解答相关疑问

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服