CN113127453B - Oracle数据跨数据库迁移的方法、装置、设备和存储介质 - Google Patents
Oracle数据跨数据库迁移的方法、装置、设备和存储介质 Download PDFInfo
- Publication number
- CN113127453B CN113127453B CN202110646906.0A CN202110646906A CN113127453B CN 113127453 B CN113127453 B CN 113127453B CN 202110646906 A CN202110646906 A CN 202110646906A CN 113127453 B CN113127453 B CN 113127453B
- Authority
- CN
- China
- Prior art keywords
- data
- field
- assignment
- list
- migrated
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/21—Design, administration or maintenance of databases
- G06F16/214—Database migration support
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2365—Ensuring data consistency and integrity
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请涉及大数据技术领域,揭示了Oracle数据跨数据库迁移的方法,包括:获取待迁移数据在源数据表中的表结构信息,表结构信息包括字段类型;根据待迁移数据的字段类型动态拼接查询语句;根据查询语句获取待迁移数据中各字段分别对应的赋值;将待迁移数据中各字段分别对应的赋值,按照各字段在待迁移数据中的排列次序,形成数据列表;将数据列表通过插入语句依次插入至目标数据表中,目标数据表的长度大于或等于源数据表的长度,目标数据表和源数据表分别处于两个数据库中。通过中间状态的数据列表协助数据迁移,保持数据中各字段的排列次序以及数据赋值的完整性,并通过识别字段类型,调用对应的数据转换指令,确保Oracle数据在跨数据库迁移前后相同。
Description
技术领域
本申请涉及大数据技术领域,特别是涉及到Oracle数据跨数据库迁移的方法、装置、设备和存储介质。
背景技术
Oracle数据库是以分布式数据库为核心的产品,是使用最为广泛的数据库系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为 一个关系数据库,它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。
在项目开发过程中,经常遇到如下两个问题:一是测试环境中的测试数据异常,开发排查数据非常耗时,而且经常因为日志信息不够完整而排查不出异常原因,也无法通过快速且精准地迁移数据的方法,将数据快速拷贝到开发库排查异常问题;二是测试人员想从一种测试环境拷贝数据到另一个测试环境时,没有快速且精准地迁移Oracle数据的方法,不能满足测试需求。
发明内容
本申请的主要目的为提供Oracle数据跨数据库迁移的方法,旨在解决现不能快速且精准地迁移Oracle数据的技术问题。
本申请提出一种Oracle数据跨数据库迁移的方法,包括:
获取待迁移数据在源数据表中的表结构信息,其中,所述表结构信息包括字段类型;
根据所述待迁移数据的字段类型动态拼接查询语句,其中,所述字段类型包括非字符串数据,所述查询语句通过拼接所述非字符串数据的转换指令,以及所述非字符串数据对应的指定字段名称得到;
根据所述查询语句获取所述待迁移数据中各字段分别对应的赋值;
将所述待迁移数据中各字段分别对应的赋值,按照各字段在所述待迁移数据中的排列次序,形成数据列表;
将所述数据列表通过插入语句依次插入至目标数据表中,其中,所述目标数据表的长度大于或等于所述源数据表的长度,所述目标数据表和所述源数据表分别处于两个数据库中。
优选地,所述根据所述查询语句获取所述待迁移数据中各字段分别对应的赋值的步骤之后,包括:
判断所述非字符串数据是否包括预设长度字段;
若是,则调用Oracle数据库中的取值函数;
通过所述取值函数获取所述预设长度字段对应的第一赋值;
将所述第一赋值,按照字段名称一一对应替换根据所述查询语句获取到的所述预设长度字段的赋值。
优选地,所述将所述待迁移数据中各字段分别对应的赋值,按照各字段在所述待迁移数据中的排列次序,形成数据列表的步骤,包括:
将所述待迁移数据中各字段的字段名称按照所述源数据表中的字段排序,依次填充到第一列表中,其中,所述第一列表为存储字段名的中间态缓存列表;
通过所述查询语句从所述源数据表中分别获取所述待迁移数据中各字段的赋值;
将所述待迁移数据中各字段的赋值,按照各字段的字段名称在所述源数据表中的排序,依次填充到第二列表中,其中,所述第二列表为存储字段的赋值的中间态缓存列表,所述第一列表中的字段名和所述第二列表中的字段的赋值一一对应;
将所述第一列表和第二列表组装成所述数据列表。
优选地,所述将所述数据列表通过插入语句依次插入至目标数据表中的步骤之前,包括:
从所述数据列表中获取待插入数据对应的字段名,以及各字段名分别对应的赋值;
将所述待插入数据对应的字段名拼接入插入指令中,形成第一插入指令;
判断所述待插入数据对应的字段名对应的字段类型是否为需要转换的指定字段类型;
若是,将所述指定字段类型对应的赋值通过所述指定字段类型对应的转换函数进行转换,得到转换赋值;
将所述转换赋值拼接入所述第一插入指令中,形成所述插入语句。
优选地,所述将所述转换赋值拼接入所述第一插入指令中,形成所述插入语句的步骤,包括:
判断所述转换赋值对应的字段类型是否为预设长度字段;
若是,则获取所述预设长度字段对应的赋值变量;
将所述赋值变量的变量名称与所述预设长度字段对应的赋值拼接后,拼接入所述第一插入指令中,形成所述插入语句。
优选地,所述将所述赋值变量的变量名称与所述预设长度字段对应的赋值拼接后,拼接入所述第一插入指令中,形成所述插入语句的步骤之后,包括:
获取所述数据列表中的预设长度字段的字段名;
将预设长度字段的字段名添加至声明函数中,对所述数据列表中的预设长度字段进行声明。
本申请还提供了一种Oracle数据跨数据库迁移的装置,包括:
第一获取模块,用于获取待迁移数据在源数据表中的表结构信息,其中,所述表结构信息包括字段类型;
拼接模块,用于根据所述待迁移数据的字段类型动态拼接查询语句,其中,所述字段类型包括非字符串数据,所述查询语句通过拼接所述非字符串数据的转换指令,以及所述非字符串数据对应的指定字段名称得到;
第二获取模块,用于根据所述查询语句获取所述待迁移数据中各字段分别对应的赋值;
第一形成模块,用于将所述待迁移数据中各字段分别对应的赋值,按照各字段在所述待迁移数据中的排列次序,形成数据列表;
插入模块,用于将所述数据列表通过插入语句依次插入至目标数据表中,其中,所述目标数据表的长度大于或等于所述源数据表的长度,所述目标数据表和所述源数据表分别处于两个数据库中。
本申请还提供了一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现上述方法的步骤。
本申请还提供了一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述的方法的步骤。
本申请通过中间状态的数据列表协助数据迁移,以确保在保持数据中各字段在源数据表中的排列次序,同时满足数据赋值的完整性,并通过识别字段类型,并将字段类型对应的数据转换指令动态拼接在查询语句和插入语句中,确保Oracle数据在跨数据库迁移前后数据完全相同,达到快速且精准地迁移数据的方法,满足测试需求。
附图说明
图1 本申请一实施例的Oracle数据跨数据库迁移的方法流程示意图;
图2 本申请一实施例的Oracle数据跨数据库迁移的装置结构示意图;
图3 本申请一实施例的计算机设备内部结构示意图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
参照图1,本申请一实施例的Oracle数据跨数据库迁移的方法,包括:
S1:获取待迁移数据在源数据表中的表结构信息,其中,所述表结构信息包括字段类型;
S2:根据所述待迁移数据的字段类型动态拼接查询语句,其中,所述字段类型包括非字符串数据,所述查询语句通过拼接所述非字符串数据的转换指令,以及所述非字符串数据对应的指定字段名称得到;
S3:根据所述查询语句获取所述待迁移数据中各字段分别对应的赋值;
S4:将所述待迁移数据中各字段分别对应的赋值,按照各字段在所述待迁移数据中的排列次序,形成数据列表;
S5:将所述数据列表通过插入语句依次插入至目标数据表中,其中,所述目标数据表的长度大于或等于所述源数据表的长度,所述目标数据表和所述源数据表分别处于两个数据库中。
步骤S1中,通过查询Oracle数据库的all_tab_columns,获取源数据表的表结构信息,表结构信息包括:字段名、字段类型、字段赋值等。字段类型包括但不限于DATE、TIMESTAMP、CLOB\BLOB等,其中DATE表示时间字段,TIMESTAMP表示时间戳字段,CLOB\BLOB表示大长度字段。待迁移数据为Oracle数据库中的全量数据,或Oracle数据库中某个表格的全量数据,或Oracle数据库中某个表格中对应某个任务场景的部分数据。
步骤S2中,在从源数据表中获取待迁移数据时,通过查询语句select sql获取数据,查询语句中至少包括需要导出数据的字段名,但对于不同的字段类型,查询语句中包括的参量不同,因为不同的字段类型对应的数据类型不同,比如数据类型为字符串或非字符串类型。对于非字符串类型需要将非字符串类型转换成字符串类型,才能从Oracle数据库的源数据表中获取到相应的数据,所以查询语句中拼接了数据转换指令,根据当前待取值的字段的数据类型选择合适的转换指令进行动态拼接,以确保查询语句可精准获取各字段对应的数据。
步骤S4中,将从源数据表中获取的数据暂时转存于中间状态的数据列表中,以确保在保持数据中各字段在源数据表中的排列次序,同时满足数据赋值的完整性。数据列表通过组合存放字段名的列表,以及对应存放各字段名对应赋值的另一列表得到,即数据列表中的元素为多条数据,每条数据为由字段名和字段名对应的赋值组成的键值对,实现数据在迁移过程中的额有序、精准的对应关系。
步骤S5中,插入语句中也拼接了数据转换对应的转换指令,以便将中间状态的数据列表中数据,转换成Oracle数据库中的数据类型,以便保证顺利将数据插入Oracle数据库中的目标数据表,实现Oracle数据跨数据库迁移,且能在迁移过程中确保源数据表和目标数据表的精准对应性,确保迁移的数据准确无误。
本申请通过中间状态的数据列表中,以确保在保持数据中各字段在源数据表中的排列次序,同时满足数据赋值的完整性,并通过识别字段类型,并将字段类型对应的数据转换指令动态拼接在查询语句和插入语句中,确保Oracle数据在跨数据库迁移前后数据完全相同,达到快速且精准地迁移数据的方法,满足测试需求。
进一步地,所述根据所述待迁移数据的字段类型动态拼接查询语句的步骤S2,包括:
S21:判断所述待迁移数据的字段类型是否为非字符串数据;
S22:若是,获取转换所述非字符串数据的转换指令,以及所述非字符串数据对应的指定字段名称;
S23:将所述转换指令和所述指定字段名称拼接到查询指令中,得到所述查询语句。
步骤S21中的非字符串数据包括含有文本符号的时间字段如DATE,以及时间戳字段如TIMESTAMP等。
步骤S22中,针对非字符串数据需要对其数据类型进行转换后才能准确地获取到赋值数据,并转存到中间状态的数据表中。针对不同的非字符串数据,对应的转换指令也不同。举例地,针对时间字段DATE需要通过to_char(字段名称,‘YYYY-MM-DD’)的转换指令将非字符串数据转换成字符串string数据;而对于时间戳字段TIMESTAMP需要通过to_char(字段名称,‘yyyy-MM-dd HH24:mi:ss’)的转换指令将非字符串数据转换成字符串string数据。
步骤S23中,通过将上述转换指令to_char(字段名称,‘YYYY-MM-DD’)、to_char(字段名称,‘yyyy-MM-dd HH24:mi:ss’)等作为查询语句的组成部分,与查询指令select一并形成查询语句,这样从源数据表中查询到的数据就是string数据,可直接插入至中间状态的数据表中进行缓存,为下一步插入新的数据表格做好准备。
进一步地,所述根据所述查询语句获取所述待迁移数据中各字段分别对应的赋值的步骤S3之后,包括:
S31:判断所述非字符串数据是否包括预设长度字段;
S32:若是,则调用Oracle数据库中的取值函数;
S33:通过所述取值函数获取所述预设长度字段对应的第一赋值;
S34:将所述第一赋值,按照字段名称一一对应替换根据所述查询语句获取到的所述预设长度字段的赋值。
本申请实施例中有些非字符串数据为预设长度字段,比如字段类型为CLOB\BLOB的数据。步骤S31中可通过识别字段类型是否为CLOB\BLOB,若是则确定为预设长度字段,即If字段类型==‘CLOB’or字段类型==‘BLOB’。对于预设长度字段的赋值长度一般多达上千个字符,通过上述查询语句获取的数据长度无法满足要求,只能获取其中的部分数据,不能获取到完整数据。
步骤S32中的Oracle数据库中的取值函数为cx_Oracle自带的read()函数,可获取到CLOB\BLOB的完整赋值数据。
步骤S34通过定位预设长度字段在源数据表中对应的排布次序和CLOB\BLOB的数据具体对应的字段名称,实现一一对应替换根据查询语句获取到的预设长度字段的赋值。
进一步地,所述将所述待迁移数据中各字段分别对应的赋值,按照各字段在所述待迁移数据中的排列次序,形成数据列表的步骤S4,包括:
S41:将所述待迁移数据中各字段的字段名称按照所述源数据表中的字段排序,依次填充到第一列表中,其中,所述第一列表为存储字段名的中间态缓存列表;
S42:通过所述查询语句从所述源数据表中分别获取所述待迁移数据中各字段的赋值;
S43:将所述待迁移数据中各字段的赋值,按照各字段的字段名称在所述源数据表中的排序,依次填充到第二列表中;
S44:将所述第一列表和第二列表组装成所述数据列表。
本申请实施例的步骤S41和步骤S43中,通过将查询语句从源数据表中查出来的结果,按照源数据表中的字段顺序存放在列表中缓存,字段名按顺序加入到一个列表中,各字段的赋值也按字段名顺序一一对应加入到另一个列表中,以确保字段名和字段的赋值一一精准对应,以确保数据转移过程中的准确性。比如:“成绩”字段的字段赋值是90,“学生名字”字段的字段赋值为“张三”,如果上述两个字段的对应发生错位,即对应不精准则导致数据迁移插入目标数据表时,会把“学生名字”字段的字段赋值误认为是“成绩”字段的赋值,导致数据错误。
步骤S44中,通过将上述两个列表作为数据列表中的元素,实现将第一列表和第二列表组装成数据列表。如第一列表为list1,第二列表为list2,数据列表为list。即通过“for循环list1 append元素,外层再for循环list append list1”,这样list就是元素为第一列表的列表了,同样的方式将list2作为元素组合入数据列表list中。
进一步地,所述将所述数据列表通过插入语句依次插入至目标数据表中的步骤S5之前,包括:
S51:从所述数据列表中获取待插入数据对应的字段名,以及各字段名分别对应的赋值;
S52:将所述待插入数据对应的字段名拼接入插入指令中,形成第一插入指令;
S53:判断所述待插入数据对应的字段名对应的字段类型是否为需要转换的指定字段类型;
S54:若是,将所述指定字段类型对应的赋值通过所述指定字段类型对应的转换函数进行转换,得到转换赋值;
S55:将所述转换赋值拼接入所述第一插入指令中,形成所述插入语句。
步骤S52中的插入指令为insert into ,然后通过将字段名和字段名依次拼接入插入指令中,形成插入语句。比如为insert into table_name (按顺序依次拼接的字段名),values(按顺序依次拼接的数据列表list中的各个元素)。
步骤S52中,通过识别字段类型判断是否为需要转换的指定字段类型,比如DATE和TIMESTAMP。若为上述两种,则需要在对应values后面的值通过转换函数进行转换。如字段类型为DATE,需通过转换函数to_date转换为('值','YYYY-MM-DD');如字段类型为TIMESTAMP,需通过转换函数to_date转换为('值','yyyy-MM-dd HH24:mi:ss')。本申请通过将转换赋值或转换赋值的转换过程作为插入语句的组成部分,以便在插入过程中实现满足目标数据表的数据格式要求,以确保数据转移中数据的准确性,以及成功插入另一Oracle数据库中的目标数据表中。
本申请以目标数据表和源数据表同为Oracle数据库中的表格,具体说明两个Oracle数据库垮库数据转移的过程。本申请其他实施例可通过更换具体的转换函数,实现Oracle数据库向其他类型数据库中转移数据的操作。
进一步地,所述将所述转换赋值拼接入所述第一插入指令中,形成所述插入语句的步骤S55,包括:
S551:判断所述转换赋值对应的字段类型是否为预设长度字段;
S552:若是,则获取所述预设长度字段对应的赋值变量;
S553:将所述赋值变量的变量名称与所述预设长度字段对应的赋值拼接后,拼接入所述第一插入指令中,形成所述插入语句。
本实施例中在拼接插入语句时,也需要对字段类型为CLOB\BLOB的进行单独处理,需要获取CLOB\BLOB的赋值给某个变量的变量名称,将变量名称与预设长度字段CLOB\BLOB对应的赋值拼接后,与插入指令一并拼接,形成适用于CLOB\BLOB的插入语句,以字典形式传入参数名和大长度值的键值对,以确保数据的完整性。对于其他无需转换的字段赋值,通过加上单引号的方式拼接成插入语句。拼接过程如下:插入指令后衔接变量名称与预设长度字段CLOB\BLOB对应的赋值,然后再衔接其他字段名和对应的字段赋值。
进一步地,将所述赋值变量的变量名称与所述预设长度字段对应的赋值拼接后,拼接入所述第一插入指令中,形成所述插入语句的步骤S553之后,包括:
S554:获取所述数据列表中的预设长度字段的字段名;
S555:将预设长度字段的字段名添加至声明函数中,对所述数据列表中的预设长度字段进行声明。
本申请实施例在执行插入语句前,需先针对数据列表中的CLOB\BLOB字段进行声明,声明其为oracle.CLOB或oracle.BLOB,然后在执行插入语句时会以字典形式传入CLOB\BLOB字段的参数名和键值对。CLOB_temp是字典形式,通过cursor.set input sizes(**CLOB_temp)设置字典形式的长度尺寸。声明函数为CLOB_temp = {},通过CLOB_temp[“字段名”] = oracle.CLOB,实现对CLOB字段的声明,以确保在转移CLOB字段的赋值时不丢失数据。
参照图2,本申请一实施例的Oracle数据跨数据库迁移的装置,包括:
第一获取模块1,用于获取待迁移数据在源数据表中的表结构信息,其中,所述表结构信息包括字段类型;
拼接模块2,用于根据所述待迁移数据的字段类型动态拼接查询语句,其中,所述字段类型包括非字符串数据,所述查询语句通过拼接所述非字符串数据的转换指令,以及所述非字符串数据对应的指定字段名称得到;
第二获取模块3,用于根据所述查询语句获取所述待迁移数据中各字段分别对应的赋值;
第一形成模块4,用于将所述待迁移数据中各字段分别对应的赋值,按照各字段在所述待迁移数据中的排列次序,形成数据列表;
插入模块5,用于将所述数据列表通过插入语句依次插入至目标数据表中,其中,所述目标数据表的长度大于或等于所述源数据表的长度,所述目标数据表和所述源数据表分别处于两个数据库中。
本申请实施例的相关解释,适用方法对应部分的解释,不赘述。
进一步地,拼接模块2,包括:
第一判断单元,用于判断所述待迁移数据的字段类型是否为非字符串数据;
第一获取单元,用于若为非字符串数据,获取转换所述非字符串数据的转换指令,以及所述非字符串数据对应的指定字段名称;
拼接单元,用于将所述转换指令和所述指定字段名称拼接到查询指令中,得到所述查询语句。
进一步地,Oracle数据跨数据库迁移的装置,包括:
第一判断模块,用于判断所述非字符串数据是否包括预设长度字段;
调用模块,用于若包括预设长度字段,则调用Oracle数据库中的取值函数;
第三获取模块,用于通过所述取值函数获取所述预设长度字段对应的第一赋值;
赋值模块,用于将所述第一赋值,按照字段名称一一对应替换根据所述查询语句获取到的所述预设长度字段的赋值。
进一步地,第一形成模块4,包括:
第一填充单元,用于将所述待迁移数据中各字段的字段名称按照所述源数据表中的字段排序,依次填充到第一列表中,其中,所述第一列表为存储字段名的中间态缓存列表;
第二获取单元,用于通过所述查询语句从所述源数据表中分别获取所述待迁移数据中各字段的赋值;
第二填充单元,用于将所述待迁移数据中各字段的赋值,按照各字段的字段名称在所述源数据表中的排序,依次填充到第二列表中;
组装单元,用于将所述第一列表和第二列表组装成所述数据列表。
进一步地,Oracle数据跨数据库迁移的装置,包括:
第四获取模块,用于从所述数据列表中获取待插入数据对应的字段名,以及各字段名分别对应的赋值;
第二形成模块,用于将所述待插入数据对应的字段名拼接入插入指令中,形成第一插入指令;
第二判断模块,用于判断所述待插入数据对应的字段名对应的字段类型是否为需要转换的指定字段类型;
转换模块,用于若为需要转换的指定字段类型,将所述指定字段类型对应的赋值通过所述指定字段类型对应的转换函数进行转换,得到转换赋值;
第三形成模块,用于将所述转换赋值拼接入所述第一插入指令中,形成所述插入语句。
进一步地,第三形成模块,包括:
第二判断单元,用于判断所述转换赋值对应的字段类型是否为预设长度字段;
第三获取单元,用于若是,则获取所述预设长度字段对应的赋值变量;
形成单元,用于将所述赋值变量的变量名称与所述预设长度字段对应的赋值拼接后,拼接入所述第一插入指令中,形成所述插入语句。
进一步地,第三形成模块,包括:
第四获取单元,用于获取所述数据列表中的预设长度字段的字段名;
声明单元,用于将预设长度字段的字段名添加至声明函数中,对所述数据列表中的预设长度字段进行声明。
参照图3,本申请实施例中还提供一种计算机设备,该计算机设备可以是服务器,其内部结构可以如图3所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设计的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储Oracle数据跨数据库迁移的过程需要的所有数据。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现Oracle数据跨数据库迁移的方法。
上述处理器执行上述Oracle数据跨数据库迁移的方法,包括:获取待迁移数据在源数据表中的表结构信息,其中,所述表结构信息包括字段类型;根据所述待迁移数据的字段类型动态拼接查询语句,其中,所述字段类型包括非字符串数据,所述查询语句通过拼接所述非字符串数据的转换指令,以及所述非字符串数据对应的指定字段名称得到;根据所述查询语句获取所述待迁移数据中各字段分别对应的赋值;将所述待迁移数据中各字段分别对应的赋值,按照各字段在所述待迁移数据中的排列次序,形成数据列表;将所述数据列表通过插入语句依次插入至目标数据表中,其中,所述目标数据表的长度大于或等于所述源数据表的长度,所述目标数据表和所述源数据表分别处于两个数据库中。
上述计算机设备,通过中间状态的数据列表协助数据迁移,以确保在保持数据中各字段在源数据表中的排列次序,同时满足数据赋值的完整性,并通过识别字段类型,并将字段类型对应的数据转换指令动态拼接在查询语句和插入语句中,确保Oracle数据在跨数据库迁移前后数据完全相同,达到快速且精准地迁移数据的方法,满足测试需求。
在一个实施例中,上述处理器根据所述查询语句获取所述待迁移数据中各字段分别对应的赋值的步骤之后,包括:判断所述非字符串数据是否包括预设长度字段;若是,则调用Oracle数据库中的取值函数;通过所述取值函数获取所述预设长度字段对应的第一赋值;将所述第一赋值,按照字段名称一一对应替换根据所述查询语句获取到的所述预设长度字段的赋值。
在一个实施例中,上述处理器将所述待迁移数据中各字段分别对应的赋值,按照各字段在所述待迁移数据中的排列次序,形成数据列表的步骤,包括:将所述待迁移数据中各字段的字段名称按照所述源数据表中的字段排序,依次填充到第一列表中,其中,所述第一列表为存储字段名的中间态缓存列表;通过所述查询语句从所述源数据表中分别获取所述待迁移数据中各字段的赋值;将所述待迁移数据中各字段的赋值,按照各字段的字段名称在所述源数据表中的排序,依次填充到第二列表中,其中,所述第二列表为存储字段的赋值的中间态缓存列表,所述第一列表中的字段名和所述第二列表中的字段的赋值一一对应;将所述第一列表和第二列表组装成所述数据列表。
在一个实施例中,上述处理器将所述数据列表通过插入语句依次插入至目标数据表中的步骤之前,包括:从所述数据列表中获取待插入数据对应的字段名,以及各字段名分别对应的赋值;将所述待插入数据对应的字段名拼接入插入指令中,形成第一插入指令;判断所述待插入数据对应的字段名对应的字段类型是否为需要转换的指定字段类型;若是,将所述指定字段类型对应的赋值通过所述指定字段类型对应的转换函数进行转换,得到转换赋值;将所述转换赋值拼接入所述第一插入指令中,形成所述插入语句。
在一个实施例中,上述处理器将所述转换赋值拼接入所述第一插入指令中,形成所述插入语句的步骤,包括:判断所述转换赋值对应的字段类型是否为预设长度字段;若是,则获取所述预设长度字段对应的赋值变量;将所述赋值变量的变量名称与所述预设长度字段对应的赋值拼接后,拼接入所述第一插入指令中,形成所述插入语句。
在一个实施例中,上述处理器将所述赋值变量的变量名称与所述预设长度字段对应的赋值拼接后,拼接入所述第一插入指令中,形成所述插入语句的步骤之后,包括:获取所述数据列表中的预设长度字段的字段名;将预设长度字段的字段名添加至声明函数中,对所述数据列表中的预设长度字段进行声明。
本领域技术人员可以理解,图3中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定。
本申请一实施例还提供一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现Oracle数据跨数据库迁移的方法,包括:获取待迁移数据在源数据表中的表结构信息,其中,所述表结构信息包括字段类型;根据所述待迁移数据的字段类型动态拼接查询语句,其中,所述字段类型包括非字符串数据,所述查询语句通过拼接所述非字符串数据的转换指令,以及所述非字符串数据对应的指定字段名称得到;根据所述查询语句获取所述待迁移数据中各字段分别对应的赋值;将所述待迁移数据中各字段分别对应的赋值,按照各字段在所述待迁移数据中的排列次序,形成数据列表;将所述数据列表通过插入语句依次插入至目标数据表中,其中,所述目标数据表的长度大于或等于所述源数据表的长度,所述目标数据表和所述源数据表分别处于两个数据库中。
上述计算机可读存储介质,通过中间状态的数据列表协助数据迁移,以确保在保持数据中各字段在源数据表中的排列次序,同时满足数据赋值的完整性,并通过识别字段类型,并将字段类型对应的数据转换指令动态拼接在查询语句和插入语句中,确保Oracle数据在跨数据库迁移前后数据完全相同,达到快速且精准地迁移数据的方法,满足测试需求。
在一个实施例中,上述处理器根据所述查询语句获取所述待迁移数据中各字段分别对应的赋值的步骤之后,包括:判断所述非字符串数据是否包括预设长度字段;若是,则调用Oracle数据库中的取值函数;通过所述取值函数获取所述预设长度字段对应的第一赋值;将所述第一赋值,按照字段名称一一对应替换根据所述查询语句获取到的所述预设长度字段的赋值。
在一个实施例中,上述处理器将所述待迁移数据中各字段分别对应的赋值,按照各字段在所述待迁移数据中的排列次序,形成数据列表的步骤,包括:将所述待迁移数据中各字段的字段名称按照所述源数据表中的字段排序,依次填充到第一列表中,其中,所述第一列表为存储字段名的中间态缓存列表;通过所述查询语句从所述源数据表中分别获取所述待迁移数据中各字段的赋值;将所述待迁移数据中各字段的赋值,按照各字段的字段名称在所述源数据表中的排序,依次填充到第二列表中,其中,所述第二列表为存储字段的赋值的中间态缓存列表,所述第一列表中的字段名和所述第二列表中的字段的赋值一一对应;将所述第一列表和第二列表组装成所述数据列表。
在一个实施例中,上述处理器将所述数据列表通过插入语句依次插入至目标数据表中的步骤之前,包括:从所述数据列表中获取待插入数据对应的字段名,以及各字段名分别对应的赋值;将所述待插入数据对应的字段名拼接入插入指令中,形成第一插入指令;判断所述待插入数据对应的字段名对应的字段类型是否为需要转换的指定字段类型;若是,将所述指定字段类型对应的赋值通过所述指定字段类型对应的转换函数进行转换,得到转换赋值;将所述转换赋值拼接入所述第一插入指令中,形成所述插入语句。
在一个实施例中,上述处理器将所述转换赋值拼接入所述第一插入指令中,形成所述插入语句的步骤,包括:判断所述转换赋值对应的字段类型是否为预设长度字段;若是,则获取所述预设长度字段对应的赋值变量;将所述赋值变量的变量名称与所述预设长度字段对应的赋值拼接后,拼接入所述第一插入指令中,形成所述插入语句。
在一个实施例中,上述处理器将所述赋值变量的变量名称与所述预设长度字段对应的赋值拼接后,拼接入所述第一插入指令中,形成所述插入语句的步骤之后,包括:获取所述数据列表中的预设长度字段的字段名;将预设长度字段的字段名添加至声明函数中,对所述数据列表中的预设长度字段进行声明。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,上述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的和实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可以包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双速据率SDRAM(SSRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRAM)、存储器总线(Rambus)直接RAM(RDRAM)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
需要说明的是,在本文中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、装置、物品或者方法不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、装置、物品或者方法所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括该要素的过程、装置、物品或者方法中还存在另外的相同要素。
以上所述仅为本申请的优选实施例,并非因此限制本申请的专利范围,凡是利用本申请说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本申请的专利保护范围内。
Claims (8)
1.一种Oracle数据跨数据库迁移的方法,其特征在于,包括:
获取待迁移数据在源数据表中的表结构信息,其中,所述表结构信息包括字段类型;
根据所述待迁移数据的字段类型动态拼接查询语句,其中,所述字段类型包括非字符串数据,所述查询语句通过拼接所述非字符串数据的转换指令,以及所述非字符串数据对应的指定字段名称得到;
根据所述查询语句获取所述待迁移数据中各字段分别对应的赋值;
将所述待迁移数据中各字段分别对应的赋值,按照各字段在所述待迁移数据中的排列次序,形成数据列表;
将所述数据列表通过插入语句依次插入至目标数据表中,其中,所述目标数据表的长度大于或等于所述源数据表的长度,所述目标数据表和所述源数据表分别处于两个数据库中;
所述将所述数据列表通过插入语句依次插入至目标数据表中的步骤之前,包括:
从所述数据列表中获取待插入数据对应的字段名,以及各字段名分别对应的赋值;
将所述待插入数据对应的字段名拼接入插入指令中,形成第一插入指令;
判断所述待插入数据对应的字段名对应的字段类型是否为需要转换的指定字段类型;
若是,将所述指定字段类型对应的赋值通过所述指定字段类型对应的转换函数进行转换,得到转换赋值;
将所述转换赋值拼接入所述第一插入指令中,形成所述插入语句;
所述将所述转换赋值拼接入所述第一插入指令中,形成所述插入语句的步骤,包括:
判断所述转换赋值对应的字段类型是否为预设长度字段;
若是,则获取所述预设长度字段对应的赋值变量;
将所述赋值变量的变量名称与所述预设长度字段对应的赋值拼接后,拼接入所述第一插入指令中,形成所述插入语句。
2.根据权利要求1所述的Oracle数据跨数据库迁移的方法,其特征在于,所述根据所述查询语句获取所述待迁移数据中各字段分别对应的赋值的步骤之后,包括:
判断所述非字符串数据是否包括预设长度字段;
若是,则调用Oracle数据库中的取值函数;
通过所述取值函数获取所述预设长度字段对应的第一赋值;
将所述第一赋值,按照字段名称一一对应替换根据所述查询语句获取到的所述预设长度字段的赋值。
3.根据权利要求2所述的Oracle数据跨数据库迁移的方法,其特征在于,所述将所述待迁移数据中各字段分别对应的赋值,按照各字段在所述待迁移数据中的排列次序,形成数据列表的步骤,包括:
将所述待迁移数据中各字段的字段名称按照所述源数据表中的字段排序,依次填充到第一列表中,其中,所述第一列表为存储字段名的中间态缓存列表;
通过所述查询语句从所述源数据表中分别获取所述待迁移数据中各字段的赋值;
将所述待迁移数据中各字段的赋值,按照各字段的字段名称在所述源数据表中的排序,依次填充到第二列表中,其中,所述第二列表为存储字段的赋值的中间态缓存列表,所述第一列表中的字段名和所述第二列表中的字段的赋值一一对应;
将所述第一列表和第二列表组装成所述数据列表。
4.根据权利要求1所述的Oracle数据跨数据库迁移的方法,其特征在于,所述将所述赋值变量的变量名称与所述预设长度字段对应的赋值拼接后,拼接入所述第一插入指令中,形成所述插入语句的步骤之后,包括:
获取所述数据列表中的预设长度字段的字段名;
将所述预设长度字段的字段名添加至声明函数中,对所述数据列表中的预设长度字段进行声明。
5.一种Oracle数据跨数据库迁移的装置,其特征在于,包括:
第一获取模块,用于获取待迁移数据在源数据表中的表结构信息,其中,所述表结构信息包括字段类型;
拼接模块,用于根据所述待迁移数据的字段类型动态拼接查询语句,其中,所述字段类型包括非字符串数据,所述查询语句通过拼接所述非字符串数据的转换指令,以及所述非字符串数据对应的指定字段名称得到;
第二获取模块,用于根据所述查询语句获取所述待迁移数据中各字段分别对应的赋值;
第一形成模块,用于将所述待迁移数据中各字段分别对应的赋值,按照各字段在所述待迁移数据中的排列次序,形成数据列表;
插入模块,用于将所述数据列表通过插入语句依次插入至目标数据表中,其中,所述目标数据表的长度大于或等于所述源数据表的长度,所述目标数据表和所述源数据表分别处于两个数据库中;
所述Oracle数据跨数据库迁移的装置还包括:
第四获取模块,用于从所述数据列表中获取待插入数据对应的字段名,以及各字段名分别对应的赋值;
第二形成模块,用于将所述待插入数据对应的字段名拼接入插入指令中,形成第一插入指令;
第二判断模块,用于判断所述待插入数据对应的字段名对应的字段类型是否为需要转换的指定字段类型;
转换模块,用于若为需要转换的指定字段类型,将所述指定字段类型对应的赋值通过所述指定字段类型对应的转换函数进行转换,得到转换赋值;
第三形成模块,用于将所述转换赋值拼接入所述第一插入指令中,形成所述插入语句;
所述第三形成模块,包括:
第二判断单元,用于判断所述转换赋值对应的字段类型是否为预设长度字段;
第三获取单元,用于若是,则获取所述预设长度字段对应的赋值变量;
形成单元,用于将所述赋值变量的变量名称与所述预设长度字段对应的赋值拼接后,拼接入所述第一插入指令中,形成所述插入语句。
6.根据权利要求5所述的Oracle数据跨数据库迁移的装置,其特征在于,包括:
第一判断模块,用于判断所述非字符串数据是否包括预设长度字段;
调用模块,用于若包括预设长度字段,则调用Oracle数据库中的取值函数;
第三获取模块,用于通过所述取值函数获取所述预设长度字段对应的第一赋值;
赋值模块,用于将所述第一赋值,按照字段名称一一对应替换根据所述查询语句获取到的所述预设长度字段的赋值。
7.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至4中任一项所述方法的步骤。
8.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至4中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110646906.0A CN113127453B (zh) | 2021-06-10 | 2021-06-10 | Oracle数据跨数据库迁移的方法、装置、设备和存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110646906.0A CN113127453B (zh) | 2021-06-10 | 2021-06-10 | Oracle数据跨数据库迁移的方法、装置、设备和存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113127453A CN113127453A (zh) | 2021-07-16 |
CN113127453B true CN113127453B (zh) | 2021-09-14 |
Family
ID=76783245
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110646906.0A Active CN113127453B (zh) | 2021-06-10 | 2021-06-10 | Oracle数据跨数据库迁移的方法、装置、设备和存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113127453B (zh) |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9977798B2 (en) * | 2015-07-20 | 2018-05-22 | International Business Machines Corporation | Data migration and table manipulation in a database management system |
CN105930493A (zh) * | 2016-05-04 | 2016-09-07 | 北京思特奇信息技术股份有限公司 | 一种不同数据库间数据同步的方法和系统 |
CN107545044A (zh) * | 2017-08-15 | 2018-01-05 | 北京微影时代科技有限公司 | 一种数据表建立方法、电子设备及存储介质 |
CN111367975B (zh) * | 2018-12-25 | 2023-11-03 | 中国移动通信集团浙江有限公司 | 一种多协议数据转换处理方法及装置 |
-
2021
- 2021-06-10 CN CN202110646906.0A patent/CN113127453B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN113127453A (zh) | 2021-07-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108874644B (zh) | 数据监控方法、装置、计算机设备及存储介质 | |
US7904488B2 (en) | Time stamp methods for unified plant model | |
US20030120678A1 (en) | Prototyping model for components of a software program | |
US9305096B2 (en) | Uniform resource identifier template manipulation | |
CN111563051B (zh) | 基于爬虫的数据核验方法、装置、计算机设备及存储介质 | |
CN106844307B (zh) | 一种基于标记实现Excel转Word的系统及方法 | |
WO2022227314A1 (zh) | 动态同步测试方法、装置、设备及存储介质 | |
CN112286934A (zh) | 数据库表导入方法、装置、设备及介质 | |
CN109325042B (zh) | 处理模版获取方法、表格处理方法、装置、设备及介质 | |
CN111581076A (zh) | 系统代码的测试方法、装置、计算机设备和存储介质 | |
CN109308258A (zh) | 测试数据的构造方法、装置、计算机设备和存储介质 | |
CN114595158A (zh) | 基于人工智能的测试用例生成方法、装置、设备及介质 | |
CN113127453B (zh) | Oracle数据跨数据库迁移的方法、装置、设备和存储介质 | |
CN113505078B (zh) | 配置文件更新方法、装置、设备及存储介质 | |
CN112541739B (zh) | 问答意图分类模型的测试方法、装置、设备及介质 | |
CN111984659B (zh) | 数据更新方法、装置、计算机设备和存储介质 | |
US7299218B2 (en) | System and method for multiple-threaded access to a database | |
CN111831687A (zh) | 数据查询的优化方法、装置、计算机设备和存储介质 | |
CN114968346A (zh) | Ddl脚本的字段注释检测方法、装置、设备及存储介质 | |
CN112817931B (zh) | 一种增量版本文件的生成方法及装置 | |
CN113486267B (zh) | 应用入口页面的解析方法、装置、设备及存储介质 | |
CN108829969A (zh) | 一种基于电路布局验证的新旧电路网表比对方法与系统 | |
CN110162461B (zh) | 数据同步验证方法、装置和计算机设备 | |
CN114610973A (zh) | 信息的搜索匹配方法、装置、计算机设备及存储介质 | |
CN114048367A (zh) | 元数据信息查询方法、装置、设备及存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |