System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 一种基于Oracle对象依赖关系实现数据库迁移的方法及装置制造方法及图纸_技高网

一种基于Oracle对象依赖关系实现数据库迁移的方法及装置制造方法及图纸

技术编号:44261921 阅读:4 留言:0更新日期:2025-02-14 22:06
本发明专利技术涉及一种基于Oracle对象依赖关系实现数据库迁移的方法。本方法包括:选择迁移对象并进行对象语法转换;获取迁移对象的依赖关系,根据依赖关系对迁移对象进行分组和排序,根据分组进行并发迁移;全部迁移完成后,检查是否存在失败对象,若存在则对失败对象进行重试;重试完成后检查失败对象的数量是否与重试前相同,若失败对象的数量减少,则再次启动重试,若失败对象的数量与重试前相同,则结束迁移。本发明专利技术通过引入两种策略,在迁移前进行智能编排顺序,在迁移后进行重试补偿,解决了因顺序问题带来的不确定性,显著提高了数据库结构迁移的稳定性以及迁移的成功率,从而为Oracle数据库到GaussDB数据库的结构迁移提供了一种高效、可靠的解决方案。

【技术实现步骤摘要】

本专利技术属于数据库迁移方法,具体涉及一种基于oracle对象依赖关系实现数据库迁移的方法、装置及可读存储介质。


技术介绍

1、在国产数据库替换的大背景下,越来越多的机构和企业开始考虑从oracle、mysql等国外数据库转向使用国产数据库。而华为自主研发的gaussdb数据库,因其分布式的特性,以及高性能、高可靠、高扩展性成为众多企业考虑替换的目标数据库。在替换数据库的过程中,首先需要将源库所有类型的对象结构语义一致地迁移到新库中,以oracle为例,通常包括的对象类型有表、索引、约束、序列、类型、视图、函数、存储过程、触发器等。

2、在一般的结构迁移中会按照类型、序列、表、视图、物化视图、索引、约束以及其他对象的顺序进行迁移。即放在第一优先级的是类型、序列,它们一般被表对象所依赖,会优先迁移确保表迁移的时候不会因为类型或者序列不存在而失败;第二优先级的是表对象,通常因为表对象会作为视图等其他对象的基对象(视图基于某个或某些对象创建,这些对象被称为基对象),所以也需要优先迁移。对于简单的场景,上述迁移方式可以保证大多数对象迁移成功,但是,实际的客户场景,业务都比较复杂,当同一类型的对象内部存在依赖关系,或者因为迁移时出现各种问题需要重复多次迁移时,往往因为顺序的不确定性,给迁移的结果带来了不确定性,造成某些对象迁移失败。


技术实现思路

1、为了克服现有数据库迁移方法存在的上述缺陷,本专利技术提出了一种新的基于oracle对象依赖关系实现数据库迁移的方法。本专利技术方法能够根据oracle对象的依赖关系智能编排迁移顺序,从而消除因顺序问题带来的不确定性,达到所有数据库对象全部迁移成功的效果。

2、在本专利技术中,我们引入了两种策略,旨在保证所有数据库对象在被创建前其基对象都已被创建,且不会因为多次执行迁移任务,基对象迁移前的drop操作导致对象被级联删除(假设视图viewa基于viewb创建,因为第一次迁移时viewb已经被创建,第二次迁移如果迁移的顺序为先viewa后viewb,创建viewa时会因为viewb存在而正常迁移,但是迁移viewb时会将viewa级联删除掉)。

3、具体地,本专利技术提供了一种基于oracle对象依赖关系实现数据库迁移的方法,如图4所示,本方法包括下述步骤:

4、s1. 选择需要迁移的对象,进行对象语法转换;

5、s2. 获取迁移对象的依赖关系,根据依赖关系对迁移对象进行分组和排序,然后根据分组进行并发迁移;

6、s3. 全部迁移完成后,检查是否存在失败对象,若存在失败对象,对失败对象进行重试;

7、s4. 重试完成后检查失败对象的数量是否与重试前相同,若失败对象的数量减少,则再次启动重试,若失败对象的数量与重试前相同,则结束迁移。

8、进一步地,本专利技术基于oracle对象依赖关系实现数据库迁移的方法步骤s2中所述获取迁移对象的依赖关系是通过查询oracle的系统视图来实现的。

9、进一步地,本专利技术基于oracle对象依赖关系实现数据库迁移的方法步骤s2中根据依赖关系对迁移对象进行分组和排序,将具有依赖关系的迁移对象按照基对象(被依赖对象)在先、依赖对象在后的顺序分配在同一个线程内。

10、进一步地,本专利技术基于oracle对象依赖关系实现数据库迁移的方法步骤s2中包括:

11、s21. 检查待迁移对象是否存在依赖的基对象,若否则直接将其放入待迁移数组;

12、s22. 若待迁移对象存在依赖的基对象,则将其放入数组中,并检查数组中是否存在该基对象;

13、s23. 若数组中存在基对象,将该待迁移对象置于基对象之后,并标记该基对象的子对象数加1;若数组中不存在基对象,则将基对象从未处理的对象列表中删除并放置到数组中,并标记该基对象的子对象数加1;

14、s24. 根据预设的并发度进行并发迁移,如果基对象的子对象数不为0,则将其子对象放在同一线程中进行迁移。

15、进一步地,本专利技术基于oracle对象依赖关系实现数据库迁移的方法步骤s4中包括:

16、s41. 初始化上次失败对象数为0;

17、s42. 计算并记录本次失败对象数,若本次不存在失败对象,则直接结束迁移;

18、s43. 若本次存在失败对象,则检查本次失败对象数是否与上次失败对象数相同,若是则直接结束迁移,若否则重新迁移所有失败对象。

19、进一步地,本专利技术基于oracle对象依赖关系实现数据库迁移的方法通过使用java编程语言中的数据结构及线程池来实现。

20、另一方面,本专利技术还提供了一种基于oracle对象依赖关系实现数据库迁移的装置,本装置运行时实现上述的基于oracle对象依赖关系实现数据库迁移的方法的步骤。

21、另外,本专利技术还提供了一种计算机可读存储介质,所述存储介质上存储有计算机程序,所述程序被处理器执行时实现上述的基于oracle对象依赖关系实现数据库迁移的方法的步骤。

22、综上,本专利技术基于oracle对象依赖关系实现数据库迁移的方法通过引入两种策略,在迁移前进行智能编排顺序,在迁移后进行重试补偿,最大程度地保证了所有对象迁移的成功率。本专利技术很好地解决了因顺序问题带来的不确定性,显著提高了数据库结构迁移的稳定性以及迁移的成功率,从而为oracle数据库到gaussdb数据库的结构迁移提供了一种高效、可靠的解决方案。

本文档来自技高网...

【技术保护点】

1.一种基于Oracle对象依赖关系实现数据库迁移的方法,其特征在于,所述方法包括:

2.根据权利要求1所述的基于Oracle对象依赖关系实现数据库迁移的方法,其特征在于,步骤S2中所述获取迁移对象的依赖关系是通过查询Oracle的系统视图来实现的。

3.根据权利要求1所述的基于Oracle对象依赖关系实现数据库迁移的方法,其特征在于,步骤S2中根据依赖关系对迁移对象进行分组和排序,将具有依赖关系的迁移对象按照基对象在先、依赖对象在后的顺序分配在同一个线程内。

4.根据权利要求1所述的基于Oracle对象依赖关系实现数据库迁移的方法,其特征在于,步骤S2中包括:

5.根据权利要求1所述的基于Oracle对象依赖关系实现数据库迁移的方法,其特征在于,步骤S4中包括:

6.根据权利要求1所述的基于Oracle对象依赖关系实现数据库迁移的方法,其特征在于,所述方法通过使用Java编程语言中的数据结构及线程池来实现。

7.一种基于Oracle对象依赖关系实现数据库迁移的装置,其特征在于,所述装置运行时实现权利要求1-6任一项所述的基于Oracle对象依赖关系实现数据库迁移的方法的步骤。

8.一种计算机可读存储介质,所述存储介质上存储有计算机程序,所述程序被处理器执行时实现权利要求1-6任一项所述的基于Oracle对象依赖关系实现数据库迁移的方法的步骤。

...

【技术特征摘要】

1.一种基于oracle对象依赖关系实现数据库迁移的方法,其特征在于,所述方法包括:

2.根据权利要求1所述的基于oracle对象依赖关系实现数据库迁移的方法,其特征在于,步骤s2中所述获取迁移对象的依赖关系是通过查询oracle的系统视图来实现的。

3.根据权利要求1所述的基于oracle对象依赖关系实现数据库迁移的方法,其特征在于,步骤s2中根据依赖关系对迁移对象进行分组和排序,将具有依赖关系的迁移对象按照基对象在先、依赖对象在后的顺序分配在同一个线程内。

4.根据权利要求1所述的基于oracle对象依赖关系实现数据库迁移的方法,其特征在于,步骤s2中包括:

5.根...

【专利技术属性】
技术研发人员:高燕钟晓锋
申请(专利权)人:北京海量数据技术股份有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1