• 0
  • 0
分享
  • 测试开发新技能:Oracle到高斯数据库的无缝迁移——软件测试圈
  • 彩霞红红 2024-05-17 11:22:33 字数 2997 阅读 1265 收藏 0

  Oracle适配迁移高斯数据库简介

  在数据库系统切换背景下,使用关系型的Oracle数据库的系统可选择替换为华为的高斯数据库。高斯数据库属于分布式、多模型数据库,基于PostgreSQL开源数据库且遵循了SQL相关标准开发的数据库,具备高性能、高可靠性、高扩展性。相比而言,两者数据库在数据存储、内核结构、数据类型、系统函数功能等方面及部分SQL语法均存在一定的差异性。这些差异存在客观造成数据库对象创建、存储过程编译、SQL解析执行等环节一定差异,无法完全兼容。

  Oracle迁移高斯数据库流程及工具

  1.迁移工具

  UGO:异构数据库结构迁移。是数据对象迁移工具,该功能主要有,移前数据库对象兼容性评估、迁移过程中SQL语法转换配置、以及数据库对象迁移同步、迁移后数据库对象验证。该工具可将源数据库的DDL、DML、DCL和业务程序中封装的数据库SQL一键自动转换为GasussDB的SQL语法,提高转化率、最大化降低数据库迁移成本。该工具主要通过预迁移评估、结构迁移两大核心功能,实现主流商用数据库到GaussDB的自动化搬迁。

  DRS:数据实时迁移服务。在UGO完成数据库对象迁移后,可使用该工具实现存量、增量数据迁移。

  2.迁移工具

  使用Oracle的数据库系统可采取三部分进行迁移:结构迁移、数据迁移、应用迁移。如下图1所示。

1-1.png

  结构迁移:使用UGO评估数据库并获取转换后的异构数据库表结构。

  数据迁移:通过华为云管理页面使用数据复制服务DRS进行全量数据迁移并进行完整性校验。

  应用迁移:定位DAO层业务代码,使用异构数据库结构迁移平台UGO进行语法转换,根据转换结果调整语法。

  Oracle迁移高斯库双向同步方案

  Oracle库迁移高斯库大概有三种方式:一次性全量切换,确保gauss同步至oracle;oracle与gauss双向同步;应用测双写改造。这里简介一下DRS双向同步方案。

  数据迁移方案在保证源库与目标库数据一致、安全性的前提下,可以考虑采用“全量铺底、增量同步、双向同步、阶段迁移”迁移策略,实现Oracle到高斯数据库的稳步切换。迁移方案图如下图所示:

1-2.png

  全量铺底:在初次Oracle同步至高斯库数据,可以基于全量在线迁移方式,将当前Oracle库数据全量同步至高斯库。在线迁移过程中,服务可能会产生短暂中断或者不中断,对使用方无感知,可以满足系统实时性要求;

  增量同步:增量同步可使用源库与目标库在操作某一方的数据后保持同步;

  双向同步:增量同步即可支持Oracle到gauss,也可支持gauss到oracle的同步;

  阶段迁移:若系统级别高,表量上千,可以考虑上图中分批次的迁移方式,以解耦后的每个微服务进行迁移。先迁移影响小的微服务,待稳定运行之后,再迁移其余微服务。

  数据一致性校验

  数据全量同步后,需要进行数据一致性校验,该环节可以使用DRS提供的“一致性比对”功能操作,一方面可以对源库与目标库选中的表的表层级字段做校验,另一方面可以对源库与目标库的表内容进行对比。总之,全量迁移+增量同步、反向增量同步等操作均需要数据一致性校验。

  Oracle迁移高斯数据库经验总结

  Oracle数据库涉及表、索引、序列、视图、存储过程、触发器等结构迁移。迁移过程中由于个别结构不能兼容GaussDB数据库,需要在迁移前做进一步处理。此外,数据同步遇到的特殊问题进行了解决。

  结构迁移问题处理

  1.触发器问题

  Oracle数据库下使用的触发器不能兼容GaussDB库,因此迁移前需要进行改造,不能一次性完全迁移。

  a.触发器中long类型可修改为bigint、number或numeric;所有的表结构名和字段名均需大写。

  b.高斯库下不支持updating函数,因此,Oracle触发器用到updating函数的需要进行统一改造。

  2.序列问题

  a.序列通常用法是替换Oracle没有自增主键而用。但Gauss的序列cache是session端的,因此会导致sequence不连续。比如cache是100,连接池中A连接拿到1-100,连接池B拿到101-200,但连接池A的没用完,连接池B用完了sequence。等连接池A再次使用sequence的时候,会先将没用完的继续使用,但是sequence已经是200了,结果反而出现了<100的sequence出现。建议sequence改为1。

  b. oracle序列最大支持9999999999999999999;而高斯最大序列值为9223372036854775807

  例如:

  CREATE SEQUENCE [TABLE_NAME] MINVALUE 1 MAXVALUE 9223372036854775807 INCREMENT BY 1 START WITH 275974021 CACHE 1 NO CYCLE

  3.存储过程

  Oracle下的存储过程在高斯环境已完全不适用,需要将逻辑上卷到应用层面。

  4.无主键表

  结构迁移时,针对无主键表的迁移,建议增加主键之后再迁移。如果直接迁移,可能在数据同步层面存在一定的风险,需要进行一致性验证。

  5.内置函数

  Oracle有的内置函数在高斯库不存在,通过DRS同步之后,会默认给高斯库schema为“dsc_ora_ext”下创建一个同功能函数。

  如:oracle下有内置函数sys_guid(); 同步之后会变为dsc_fn_sys_guid()。

  数据同步问题处理

  1.BigDecimal格式问题

  问题描述:Oracle下表结构中的数值类型字段默认显示当前精度,而Gauss库下默认展示表结构数值类型字段的原始精度(涉及到精度自动以0补全)。

  解决方法:系统级层面通过更改配置来校正

  Set behavior_compat_options = “hide_tailing_zero”

  2.Encoding ‘UTF-8’无法转换

  问题描述:Oracle库中有的表存在空串情况,Oracle中可以通过char(0)或字节的方式写入字符\u0000,但Gauss系列无法写入字符\u0000,导致oracle2Gauss出现异常。

  解决方法:DRS运维端增加如下配置:

  全量:sync.datamove.replicator.standardizeStringType=true

  增量:sync.increment.replicator.standardizeStringType=true

  3.Java heap space问题

  问题描述:一次性全量同步的数据涉及到数据量大的情况,DRS同步过程中,报错service DATAMOVE failed, cause by: java heap space;

  解决方法:运维管理端增加如下配置:

  sync.tungstenEnv.OPS_FULL_INCRE_MAX=10240

  sync.datamove.replicator.fetchSize=100

  常用sql语句

1-3.png


作者:强晓鹏    

来源:http://www.51testing.com/html/45/n-7800845.html

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 软件测试其实就是对程序进行一些操作,来发现程序所存在的缺陷,衡量软件的质量,并对其是否能满足设计要求进行评估的过程。软件测试方法分类基于直觉和经验的方法Ad-hoc测试方法:强调测试人员根据自己的经验,不受测试用例的约束,放开思想,灵活地进行测试。ALAC测试方法:Act like a customer,像客户那样做,对常用的功能进行测试;错误推测法:有经验的测试人员根据自己的工作经验和直觉测出程序可能存在的错误,从而有针对性地进行测试。基于输入域的测试方法等价类划分法边界值分析法基于组合及其优化的方法判定表法因果图法pair-wise方法正交试验法基于逻辑覆盖的方法语句覆盖判定覆盖条件覆盖判...
            0 0 1146
            分享
          •   特斯拉董事会主席罗宾-登霍尔姆(Robyn Denholm)呼吁公司股东批准埃隆-马斯克560 亿美元的巨额薪酬方案,否则这位亿万富翁首席执行官就有可能离职。6 月 13 日,特斯拉股东将决定马斯克薪酬方案的命运,该方案估计价值高达 560 亿美元。  这将是股东们第二次就首席执行官的薪酬进行投票,今年早些时候,特拉华州一名法官以审批程序存在"严重缺陷"为由,宣布第一次投票无效。现在,该公司正在全力说服股东第二次批准该提案。  登霍尔姆在提交给美国证券交易委员会的致股东信中写道:"埃隆不是一个典型的高管,特斯拉也不是一家典型的公司。因此,公司对主要高管进行补偿...
            0 0 588
            分享
          • 1、软件测试的流程是什么?分析:每当HR问一个问题的时候我们都可以用1~2s的时间去想HR想要从这个问题中获取什么信息,这点搞清楚之后再去回答就很好回答了。如果有工作经验,直接按照公司流程回答即可,如果是刚转行或者刚实习,那按标准回答即可,文中回答仅供参考;回答: 项目经理或者PD把项目需求文档提前下发给相关的研发人员,研发人员抽出一定的时间记录文档内需求不明确或者遗漏的点为后面的评审做准备;在需求评审会议上,各研发人员提出自己的疑问并解决,需求评审最终通过之后会出一份最终的需求规格说明书;(需求评审阶段)需求规格说明书评审通过后,开发经理开始编写开发计划,测试经理开始编写测试计划,计划评审通...
            9 10 1957
            分享
          •   前言  新手在做写代码的时候容易卡壳,尤其当接触的函数以及其他知识比较多的时候,经常会看完需求之后不知道自己该用什么方法来实现它,实现的逻辑可能你有,但怎么该用什么函数给忘了,这其实就是知识的储备不够,你记不住哪个函数有什么作用,自然一头雾水。  这几天我专门整理了Python常用的一些函数,从最基础的输入输出函数到正则等12个板块的,总共100多个常用函数,方便小伙伴们进行快速地记忆,每天快速过一遍,用的时候再加深一下,慢慢地你就会摆脱写代码卡壳的状况。  虽说自学编程的时候我们强调更多的东西是理解和实际去敲代码,但有些东西你是要必须牢记的,否则你写代码将寸步难行。老手当然已经烂记于心,...
            0 0 1010
            分享
          •   最近收到很多问题:诸如,女生适合做软件测试吗?软件测试靠谱吗?35岁转行到软件测试可以吗?大专学历做软件测试有人要吗?25岁转行到软件测试可以吗?等等。  大田说说自己的心里话:  1、做软件测试与性别没多大关系;  2、大专学历或以下,建议先提升学历,可以看到现在招聘市场都需要本科以上学历;  3、转行的,之前没做过软件测试的,最好先了解软件测试到底是做什么的,需要哪些必备技能,学完要多久,不让自己后悔;  4、不能说软件测试靠谱不靠谱,个人认为既然有开发必定有测试,当然,也不排除个别公司让开发也做测试工作。任何工作做好了都具备很强的不可替代性,所以别问软件测试靠不靠谱,问问自己靠不靠谱...
            0 0 644
            分享
      • 51testing软件测试圈微信