System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术属于数据库迁移方法,具体涉及一种基于oracle对象依赖关系实现数据库迁移的方法、装置及可读存储介质。
技术介绍
1、在国产数据库替换的大背景下,越来越多的机构和企业开始考虑从oracle、mysql等国外数据库转向使用国产数据库。而华为自主研发的gaussdb数据库,因其分布式的特性,以及高性能、高可靠、高扩展性成为众多企业考虑替换的目标数据库。在替换数据库的过程中,首先需要将源库所有类型的对象结构语义一致地迁移到新库中,以oracle为例,通常包括的对象类型有表、索引、约束、序列、类型、视图、函数、存储过程、触发器等。
2、在一般的结构迁移中会按照类型、序列、表、视图、物化视图、索引、约束以及其他对象的顺序进行迁移。即放在第一优先级的是类型、序列,它们一般被表对象所依赖,会优先迁移确保表迁移的时候不会因为类型或者序列不存在而失败;第二优先级的是表对象,通常因为表对象会作为视图等其他对象的基对象(视图基于某个或某些对象创建,这些对象被称为基对象),所以也需要优先迁移。对于简单的场景,上述迁移方式可以保证大多数对象迁移成功,但是,实际的客户场景,业务都比较复杂,当同一类型的对象内部存在依赖关系,或者因为迁移时出现各种问题需要重复多次迁移时,往往因为顺序的不确定性,给迁移的结果带来了不确定性,造成某些对象迁移失败。
技术实现思路
1、为了克服现有数据库迁移方法存在的上述缺陷,本专利技术提出了一种新的基于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-
8.一种计算机可读存储介质,所述存储介质上存储有计算机程序,所述程序被处理器执行时实现权利要求1-6任一项所述的基于Oracle对象依赖关系实现数据库迁移的方法的步骤。
...【技术特征摘要】
1.一种基于oracle对象依赖关系实现数据库迁移的方法,其特征在于,所述方法包括:
2.根据权利要求1所述的基于oracle对象依赖关系实现数据库迁移的方法,其特征在于,步骤s2中所述获取迁移对象的依赖关系是通过查询oracle的系统视图来实现的。
3.根据权利要求1所述的基于oracle对象依赖关系实现数据库迁移的方法,其特征在于,步骤s2中根据依赖关系对迁移对象进行分组和排序,将具有依赖关系的迁移对象按照基对象在先、依赖对象在后的顺序分配在同一个线程内。
4.根据权利要求1所述的基于oracle对象依赖关系实现数据库迁移的方法,其特征在于,步骤s2中包括:
5.根...
【专利技术属性】
技术研发人员:高燕,钟晓锋,
申请(专利权)人:北京海量数据技术股份有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。