CN107122360B - 数据迁移系统和方法 - Google Patents
数据迁移系统和方法 Download PDFInfo
- Publication number
- CN107122360B CN107122360B CN201610102817.9A CN201610102817A CN107122360B CN 107122360 B CN107122360 B CN 107122360B CN 201610102817 A CN201610102817 A CN 201610102817A CN 107122360 B CN107122360 B CN 107122360B
- Authority
- CN
- China
- Prior art keywords
- data
- database
- migration
- module
- full
- 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/23—Updating
- G06F16/2365—Ensuring data consistency and integrity
-
- 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
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5083—Techniques for rebalancing the load in a distributed system
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Security & Cryptography (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请公开了一种数据迁移系统和方法,提供了一种支持同构及异构数据库之间通用的数据迁移系统,能够在停机和非停机状态下进行全量迁移的完整的数据迁移系统;提供了全量迁移之后进行的全量校验功能,使用户及时发现迁移过程中的不一致性问题;提供了在非停机状态下的增量迁移和增量校验功能,使新增数据得到及时同步,并且对增量进行实时校验,及时发现增量数据的不一致性问题。
Description
技术领域
本申请属于互联网技术领域,具体地说,涉及一种数据迁移系统和方法。
背景技术
目前典型的数据迁移系统是通过全量迁移或者增量迁移完成数据迁移。例如Oracle的GoldenGate,GoldenGate是一种基于日志的结构化数据复制软件,它通过解析源数据库在线日志或归档日志获得数据的增量变化,再将这些变化应用到目标数据库,从而实现源数据库与目标数据库同步。GoldenGate 可以在异构的IT基础结构(包括几乎所有常用操作系统平台和数据库平台) 之间实现大量数据亚秒一级的实时复制,从而在可以在应急系统、在线报表、实时数据仓库供应、交易跟踪、数据同步、集中/分发、容灾等多个场景下应用。GoldenGate的数据集成技术实施主要包括三个进程(数据抽取进程、传输进程和应用进程)。
利用数据抽取进程在源数据库读取在线日志或归档日志,然后进行解析,只提取其中数据的变化如增、删、改操作,并将相关信息转换为自定义的中间格式存放在队列文件中,再利用传输进程将队列文件通过TCP/IP传送到目标数据库。数据抽取进程在每次读完日志中的数据变化并在数据传送到目标系统后,会写检查点,记录当前完成抽取的日志的位置,检查点的存在可以使数据抽取进程在中止并恢复后可从检查点位置继续复制日志。目标数据库接收数据变化并缓存到队列中,队列为一系列临时存储数据变化的文件,等待应用进程读取数据。应用进程从队列中读取数据变化并创建对应的 SQL语句,通过数据库的本地接口执行,提交到数据库成功后更新自己的检查点,记录已经完成复制的位置。
还有一些类似的数据库,如微软的SQL Server Migration Assistant(简称SSMA)是由微软发布的帮助客户更容易地从Oracle/Sybase/MySQL/Access 迁移到SQLServer以及SQL Azure的一个工具集。
微软的SQL Server Migration Assistant不是一种通用的数据迁移系统,而Oracle的GoldenGate也只有增量迁移,而没有全量迁移。
发明内容
有鉴于此,本申请所要解决的技术问题是提供了一种数据迁移系统和方法,以解决现有技术中缺少支持各种同构和异构数据库之间进行全量迁移的通用的数据迁移系统的技术问题。
为了解决上述技术问题,本申请公开了一种数据迁移系统,包括:入口 (Portal)模块,应用程序编程接口(API)模块,分布式调度模块,全量迁移模块,增量迁移模块,全量校验模块,增量校验模块,结构迁移模块和迁移评估模块;
所述入口模块用于提供管理迁移任务的入口,接收由客户端创建的迁移任务和指定的第一数据库、第二数据库和所述第一数据库的待迁移数据,所述迁移任务包括全量迁移、增量迁移、全量校验、增量校验、结构迁移和迁移评估等迁移类型中的一种或多种;
所述应用程序编程接口模块用于向所述客户端提供服务接口,以根据所述迁移任务中的迁移类型调用对应的全量迁移模块,增量迁移模块,全量校验模块,增量校验模块,结构迁移模块和迁移评估模块中的一个或多个;
所述分布式调度模块用于监控各迁移任务的执行状态,并根据各个设备的当前负载对迁移任务进行调度,以实现各个设备的负载均衡;
所述全量迁移模块,用于将所述待迁移数据从所述第一数据库迁移到所述第二数据库,当所述第一数据库与第二数据库异构时,通过预设的中间格式将所述待迁移数据的数据类型转换为所述第二数据库的数据类型,按照转换后的数据类型将所述待迁移数据写入所述第二数据库;
所述全量校验模块,用于当所述全量迁移模块完成数据迁移时,针对所述全量迁移模块所迁移的所述待迁移数据判断所述第一数据库与第二数据库的数据是否一致,并将不一致的数据保存在预设列表;当所述预设列表内存在不一致的数据时,每隔预设时长对所述不一致的数据进行重复校验,在经过预设次数的重复校验之后所述不一致的数据仍然存在时,将所述不一致的数据记录在迁移报告内;
所述增量迁移模块,用于以所述全量迁移开始时的第一时刻为基准,将所述待迁移数据在所述第一时刻之后产生变化的数据迁移到所述第二数据库,当所述第一数据库与第二数据库异构时,通过预设的中间格式将所述产生变化的数据的数据类型转换为所述第二数据库的数据类型,按照转换后的数据类型将所述产生变化的数据写入所述第二数据库;
所述增量校验模块;用于当所述增量迁移模块所迁移的在所述第一时刻之后产生变化的数据已赶上所述待迁移数据当前的数据变化时,实时的针对所述第一时刻之后产生变化的数据判断所述第一数据库和第二数据库的数据是否一致,并将不一致的数据记录在预设列表;当所述预设列表存在所述不一致的数据时,每隔预设时长对所述不一致的数据进行重复校验,在经过预设次数的重复校验之后所述不一致的数据仍然存在时,将所述不一致的数据记录在迁移报告内;
所述结构迁移模块,用于在所述全量迁移模块进行数据迁移之前,将所述待迁移数据所使用的库表列和对象迁移到所述第二数据库,当所述第一数据库与第二数据库异构时,通过预设的类型映射关系确定所述库表列和对象在所述第二数据库中的类型,在所述第二数据库创建与所述类型相对应的库表列和对象;
所述迁移评估模块,用于根据所述第一数据库和第二数据库输出评估报告,其中,所述评估报告包括所述第一数据库的空间占用信息,库表列和对象信息,执行的SQL以及处理性能信息,所述评估报告还包括所述第二数据库的不兼容特性信息以及改造成本信息;其中,所述迁移评估模块进一步包括第一迁移评估单元和第二迁移评估单元,所述第一迁移评估单元用于用于所述全量迁移模块对所述待迁移数据的进行迁移之前;所述第二迁移评估单元用于所述结构迁移模块对所述待迁移数据所使用的库表列和对象进行迁移之前。
其中,所述分布式调度模块通过统计数据迁移系统内各个设备上执行的单元化的数量及内存占用率来进行迁移任务的调度,以实现各个设备之间负载均衡。
其中,所述全量迁移模块或所述增量迁移模块在向所述第二数据库写入数据时,记录已写入数据的位点信息,用于断点续传。
其中,所述全量迁移模块进一步用于,当全量迁移任务中的第一数据库与第二数据库同构时,将待迁移数据按照库表列的当前结构进行迁移。
其中,所述全量迁移模块进一步用于,当全量迁移任务中的第一数据库与第二数据库异构时,对于异构数据库之间的数据迁移,根据预设的中间格式来完成异构数据库之间数据类型的转换。
其中,所述全量迁移模块进一步用于,在全量迁移过程中,若遇到第一数据库的库名、表名、列名与第二数据库的库名、表名、列名不一致的情况,则依据预设的库表列的映射规则进行映射,将库表列的数据写入到第二数据库对应的库表列。
其中,所述全量校验模块进一步用于,在第一数据库与第二数据库异构时,读取第一数据库中的待迁移数据并转换为预设的中间格式,通过所述中间格式转换为第二数据库的类型,再与第二数据库中相应的数据进行比对。
其中,所述增量迁移模块进一步用于,利用所述第一数据库的日志,或者利用所述第一数据库的触发器所保存的操作记录来获取在所述第一时刻之后产生变化的数据。
其中,所述增量校验模块进一步用于:通过解析第一数据库的日志数据或者解析第一数据库的触发器的操作记录获取增量迁移的数据。
为了解决上述技术问题,本申请还公开了一种数据迁移方法,包括:接收由客户端创建的迁移任务和指定的第一数据库、第二数据库和所述第一数据库的待迁移数据,其中,所述迁移任务包括全量迁移、增量迁移、结构迁移、全量校验、增量校验、迁移评估,所述第一数据库处于开机状态;
调用迁移评估模块根据所述第一数据库和第二数据库输出评估报告,其中,所述评估报告包括所述第一数据库的空间占用信息,库表列和对象信息,执行的SQL以及处理性能信息,所述评估报告还包括所述第二数据库的不兼容特性信息以及改造成本信息;其中,所述迁移评估模块进一步包括第一迁移评估单元和第二迁移评估单元,所述第一迁移评估单元用于用于全量迁移模块对所述待迁移数据的进行迁移之前;所述第二迁移评估单元用于结构迁移模块对所述待迁移数据所使用的库表列和对象进行迁移之前;
调用结构迁移模块将所述待迁移数据所使用的库表列和对象迁移到所述第二数据库,当所述第一数据库与第二数据库异构时,通过预设的类型映射关系确定所述库表列和对象在所述第二数据库中的类型,在所述第二数据库创建与所述类型相对应的库表列和对象;
调用全量迁移模块将所述待迁移数据从所述第一数据库迁移到所述第二数据库,当所述第一数据库与第二数据库异构时,通过预设的中间格式将所述待迁移数据的数据类型转换为所述第二数据库的数据类型,按照转换后的数据类型将所述待迁移数据写入所述第二数据库;
在将所述待迁移数据从所述第一数据库迁移到所述第二数据库之后,调用全量校验模块对所述迁移后的数据进行校验,以判断所述第一数据库与第二数据库的相应数据是否一致,并将不一致的数据记录在预设列表;当所述预设列表内存在不一致的数据时,每隔预设时长对所述不一致的数据进行重复校验,在经过预设次数的重复校验之后所述不一致的数据仍然存在时,将所述不一致的数据记录在迁移报告内;
调用增量迁移模块,以所述全量迁移开始时的第一时刻为基准,将所述待迁移数据在所述第一时刻之后产生变化的数据迁移到所述第二数据库,当所述第一数据库与第二数据库异构时,通过预设的中间格式将所述产生变化的数据的数据类型转换为所述第二数据库的数据类型,按照转换后的数据类型将所述产生变化的数据写入所述第二数据库;
当所述增量迁移模块所迁移的在所述第一时刻之后产生变化的数据已赶上所述待迁移数据当前的数据变化时,调用增量校验模块实时的针对所述第一时刻之后产生变化的数据判断所述第一数据库和第二数据库的数据是否一致并且针对所述迁移任务所迁移的数据判断所述第一数据库与第二数据库的数据是否一致,将不一致的数据记录在预设列表;当所述预设列表存在所述不一致的数据时,每隔预设时长对所述不一致的数据进行重复校验,在经过预设次数的重复校验所述不一致的数据仍然存在时,将所述不一致的数据记录在迁移报告内。
其中,调用所述全量迁移模块或所述增量迁移模块,将所述待迁移数据从所述第一数据库迁移到所述第二数据库时,进一步包括:记录已写入数据的位点信息,用于断点续传。
其中,调用所述全量迁移模块,将所述待迁移数据写入所述第二数据库,进一步包括,当全量迁移任务中的第一数据库与第二数据库同构时,将待迁移数据按照库表列的当前结构进行迁移。
其中,调用全量迁移模块将所述待迁移数据从所述第一数据库迁移到所述第二数据库,进一步包括,
当全量迁移任务中的第一数据库与第二数据库异构时,对于异构数据库之间的数据迁移,根据预设的中间格式来完成异构数据库之间数据类型的转换。
其中,调用全量迁移模块将所述待迁移数据从所述第一数据库迁移到所述第二数据库,进一步包括,在全量迁移过程中,若遇到第一数据库的库名、表名、列名与第二数据库的库名、表名、列名不一致的情况,则依据预设的库表列的映射规则进行映射,将库表列的数据写入到第二数据库对应的库表列。
其中,调用全量校验模块对所述迁移后的数据进行校验,进一步包括,
在第一数据库与第二数据库异构时,读取第一数据库中的待迁移数据并转换为预设的中间格式,通过所述中间格式转换为第二数据库的类型,再与第二数据库中相应的数据进行比对。
其中,调用增量迁移模块,具体包括,利用所述第一数据库的日志,或者利用所述第一数据库的触发器所保存的操作记录来获取在所述第一时刻之后产生变化的数据。
其中,调用增量校验模块,具体包括:通过解析第一数据库的日志数据或者解析第一数据库的触发器的操作记录获取增量迁移的数据。
其中,所述方法还包括:当所述客户端对所述第一数据库的写操作已被切换到所述第二数据库时,以所述客户端向所述第二数据库首次写入数据时的第二时刻为基准,将所述第二数据库在所述第二时刻之后产生变化的数据迁移到所述第一数据库;
当所迁移的在所述第二时刻之后产生变化的数据已赶上所述第二数据库当前的数据变化时,实时的针对在所述第二时刻之后产生变化的数据判断所述第一数据库和第二数据库的数据是否一致,将不一致的数据记录在预设列表。
其中,所述方法还包括:在所述客户端针对所述第二数据库的访问出现异常时,将所述客户端针对所述第二数据库的写操作切换回所述第一数据库。
与现有技术相比,本申请可以获得包括以下技术效果:
1)提供了一种支持同构及异构数据库之间通用的数据迁移系统,能够在停机和非停机状态下进行全量迁移的完整的数据迁移系统;
2)提供了在全量迁移之前的结构迁移功能,当需要迁移的数据量较大时,可以节省大量的时间和人力。
3)提供了全量迁移之后进行的全量校验功能,使用户及时发现迁移过程中的不一致性问题。
4)提供了在非停机状态下的增量迁移和增量校验功能,使新增数据得到及时同步,并且对增量进行实时校验,及时发现增量数据的不一致性问题。
5)数据迁移系统还具有分布式调度功能,能够提升大数据量的数据迁移的处理效率;
6)在非停机状态下进行数据迁移时,通过数据回流实现数据库之间的数据同步,使运行的业务可以随时切换。
当然,实施本申请的任一产品必不一定需要同时达到以上所述的所有技术效果。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1是本申请实施例提供的一种数据迁移系统的架构示意图;
图1a是全量迁移模块131独立存在时的架构示意图;
图1b是全量迁移模块131和结构迁移模块135组合存在时的架构示意图;
图1c是全量迁移模块131和迁移评估模块136组合存在时的架构示意图;
图1d是全量迁移模块131和结构迁移模块135和迁移评估模块136组合存在时的架构示意图;
图1e是全量迁移模块131和结构迁移模块135和全量校验模块133组合存在时的架构示意图;
图1f是全量迁移模块131和迁移评估模块136和全量校验模块133组合存在时的架构示意图;
图1g是全量迁移模块131和全量校验模块133组合存在时的架构示意图;
图1h是全量迁移模块131和结构迁移模块和迁移评估模块136和全量校验模块133组合存在时的架构示意图;
图1i是全量迁移模块131和增量迁移模块132组合存在时的架构示意图;
图1j是全量迁移模块131和结构迁移模块135和增量迁移模块132组合存在时的架构示意图;
图1k是全量迁移模块131和迁移评估模块136和增量迁移模块132组合存在时的架构示意图;
图1l是全量迁移模块131和结构迁移模块135和增量迁移模块132和迁移评估模块136组合存在时的架构示意图;
图1m是全量迁移模块131和结构迁移模块135和增量迁移模块132和全量校验模块133组合存在时的架构示意图;
图1n是全量迁移模块131和迁移评估模块136和增量迁移模块132和全量校验模块133组合存在时的架构示意图;
图1o是全量迁移模块131和全量校验模块133和增量迁移模块132组合存在时的架构示意图;
图1p是全量迁移模块131和结构迁移模块135和迁移评估模块136和全量校验模块133和增量迁移模块132组合存在时的架构示意图;
图1q是全量迁移模块131和增量迁移模块132组合存在时的架构示意图和增校验模块134组合存在时的架构示意图;
图1r是全量迁移模块131和结构迁移模块135和增量迁移模块132和增校验模块134组合存在时的架构示意图;
图1s是全量迁移模块131和迁移评估模块136和增量迁移模块132和增校验模块134组合存在时的架构示意图;
图1t是全量迁移模块131和结构迁移模块135和增量迁移模块132和迁移评估模块136和增校验模块134组合存在时的架构示意图;
图1u是全量迁移模块131和结构迁移模块135和增量迁移模块132和全量校验模块133和增校验模块134组合存在时的架构示意图;
图1v是全量迁移模块131和迁移评估模块136和增量迁移模块132和全量校验模块133和增校验模块134组合存在时的架构示意图;
图1w是全量迁移模块131和全量校验模块133和增量迁移模块132和增校验模块134组合存在时的架构示意图;
图1x是全量迁移模块131和结构迁移模块135和迁移评估模块136和全量校验模块133和增量迁移模块132和增校验模块134组合存在时的架构示意图;
图2是本申请实施例分布式调度模块针对迁移任务提供的状态机的状态变化示意图;
图3是本申请实施例通过中间格式完成异构数据库之间类型转换的示意图;
图4是本申请实施例提供的一种数据迁移方法的流程示意图;
图5是本申请实施例提供的一种数据迁移方法的流程示意图;
图6是本申请实施例提供的一种数据迁移方法的流程示意图;
图7a是本申请实施例提供的一种数据迁移方法的流程示意图;
图7b是本申请实施例提供的一种数据迁移方法的流程示意图;
图8a是本申请实施例提供的一种数据迁移方法的流程示意图;
图8b是本申请实施例提供的一种数据迁移方法的流程示意图;
图9是本申请实施例提供的一种数据迁移方法的流程示意图;
图10是本申请实施例提供的一种数据迁移方法的流程示意图;
图11是本申请实施例提供的一种数据迁移方法的流程示意图。
具体实施方式
以下将配合附图及实施例来详细说明本申请的实施方式,藉此对本申请如何应用技术手段来解决技术问题并达成技术功效的实现过程能充分理解并据以实施。
本申请实施例提出了一种数据迁移系统,提供全量迁移、增量迁移、全量校验、增量校验、迁移评估和结构迁移等类型的迁移服务。利用该数据迁移系统,同构或者异构数据库之间都可以完成数据迁移,并且对全量迁移的数据进行全量校验,对增量迁移的数据进行增量校验。在数据迁移开始之前还可以进行迁移评估和结构迁移,以分析迁移的可行性和提高数据迁移的效率。无论在源数据库运行的业务允许停机还是不允许停机的情况下,都可以利用该数据迁移系统将业务数据从源数据库迁移到目标数据库,在源数据库不允许停机的情况下,可以实现源数据库与目标数据库之间的数据同步,从而使针对业务数据的访问可以随时进行切换。
图1是本申请实施例提供的一种数据迁移系统的架构示意图,包括入口 (Portal)模块10,应用程序编程接口(Application Programming Interface, API)模块11,分布式调度模块12,全量迁移模块131,增量迁移模块132,全量校验模块133,增量校验模块134,结构迁移模块135和迁移评估模块 136。
入口模块10提供管理迁移任务的入口,通过该入口模块10客户端可完成迁移任务的创建、启动、管理、进度查询等配置。
入口模块10可通过开源的入口(Portal)软件来实现,例如Liferay Portal,支持异步JavaScript和XML(Asynchronous Javascript And XML,AJAX) 和Java规范要求(JavaSpecification Request,JSR)286标准,创建数据迁移系统的管理控制台应用程序,在客户端展示该管理控制台应用程序的交互界面。用户可以在交互界面中创建迁移任务并指定源数据库、目标数据库和源数据库中的待迁移数据。
在进入数据迁移系统的管理控制台之前,还需要在云服务控制台创建目标服务器中的第二数据库,数据迁移系统可以自动在目标服务器中创建第二数据库,自动创建的第二数据库的名称与源服务器的第一数据库的名称相同,如果用户想要第二数据库的名称与第一数据库不同,也可以自定义第二数据库的名称。然后,创建源服务器和目标服务器的所使用的账号,以确保本次迁移任务具有源服务器的读取权限和目标服务器的写入权限。其中,源服务器和目标服务器也可以是分别运行在两个服务器上的实例。
进入数据迁移系统的管理控制台,开始创建迁移任务,首先为创建的迁移任务设置任务名称,例如,任务名称为“abc_北京到杭州”、“bcd_本地到青岛”等等。
任务名称设置完成后,开始填写源服务器和目标服务器的连接信息,包括源服务器的实例类型,例如,“有公网IP的自建数据库”;源服务器的第一数据库类型,例如,Oracle、Mysql等;源服务器的主机名称或IP地址以及端口号,例如201.165.1.112:3308;源服务器的账号和密码,该账号需要具有针对源服务器的数据读取权限;目标服务器的实例类型,例如,关系型数据库服务(Relational Database Service,RDS)实例;目标服务器的RDS 实例标识,例如“rds2afnbt”;目标服务器的账号和密码,该账号需要具有针对目标服务器的数据写入权限。
源服务器和目标服务器的连接信息填写完毕之后,选择迁移类型和待迁移数据。在交互界面中,提供全量迁移、增量迁移、全量校验、增量校验、结构迁移、迁移评估等迁移类型的选项供用户选择,迁移类型可以默认为全量迁移,并根据用户需要添加其他的迁移类型。待迁移数据可以选择一个或多个数据库集合(Schema),也可以是某个集合内部的一个或多个表,例如,待迁移数据可以设置为数据库集合“amptest1”,或者是数据库集合“amptest1”中的一个表“a00_full_type_table_m1b1”。如果用户想要目标服务器中创建的第二数据库的名称与选择的待迁移数据的名称不一致,需要在此时配置库名映射关系,例如,将选中的待迁移数据“amptest1”的名称映射配置为“liuy_amptest1”。
上述配置完成后,在数据迁移系统的管理控制台启动迁移任务,在界面中可以看到该迁移任务的当前执行的迁移类型和进度,例如,结构迁移已完成80%,全量迁移已完成100%。
客户端向入口模块10发起超文本传输协议(HyperText Transfer Protocol,Http)请求,入口模块10接收并解析出由客户端创建的迁移任务,根据迁移任务调用数据迁移系统的开放式API。
应用程序编程接口模块11用于向客户端提供可调用的迁移类型的接口,以根据所述迁移任务中的迁移类型调用对应的全量迁移模块131,增量迁移模块132,全量校验模块133,增量校验模块134,结构迁移模块135和迁移评估模块136中的一个或多个。
可通过Http或者基于安全套接层的超文本传输协议(Hyper Text TransferProtocol over Secure Socket Layer,Https)向API模块11发送调用请求。支持Http Get方法发送请求,每个请求需要制定要执行的操作,即Action参数,例如,创建数据库、全量迁移、增量迁移等等。
分布式调度模块12用于监控各迁移任务的执行状态,并根据各个设备的当前负载对迁移任务进行调度,以实现各个设备的负载均衡。
分布式调度模块12提供状态机来对每个迁移任务的运行状态进行监控,状态机的运行示意图如图2所示,状态机共包括七种状态,分别是:初始化 (init),运行(running),已赶上(catch),已暂停(paused),已停止(finished),已失败(failed),已成功(successful)。以上七种状态的转换过程如图2 所示,其中,时间(time)代表增量迁移过程的延续时长(例如15分钟),当增量迁移的持续时长小于该预设时间时说明已赶上当前的数据变化,达到已赶上(catch)状态;暂停(pause)代表客户端选择暂停任务;杀死(kill) 代表该任务被杀死;异常(unusual)代表捕获到异常情况,例如,目标服务器实例被锁定,导致输入的账号的数据写入权限被回收。如果配置的迁移任务中包括全量迁移而不包括增量迁移,则在全量迁移任务结束时从运行状态变化为已成功状态;如果配置的迁移任务包括全量迁移和增量迁移,则在增量迁移任务结束时从运行状态变化为已成功状态。
分布式调度模块12可通过统计数据迁移系统内各个设备上执行的单元化的数量及内存占用率来进行迁移任务的调度,以实现各个设备之间负载均衡。
全量迁移模块131用于将待迁移数据从第一数据库迁移到第二数据库。如果在第一数据库处于停机状态时进行全量迁移,则将第一数据库当前保存待迁移数据迁移至第二数据库;如果第一数据库未停机,则以全量迁移任务开始执行时的第一时刻为基准,将在第一时刻保存的待迁移数据迁移到第二数据库。
第一数据库与第二数据库同构是指两个数据库的表的结构相同,第一数据库与第二数据库异构是指两个数据库的表的结构不同。
当全量迁移任务中的第一数据库与第二数据库同构时,将待迁移数据按照库表列的当前结构进行迁移。当全量迁移任务中的第一数据库与第二数据库异构时,对于异构数据库之间的数据迁移,根据预设的中间格式来完成异构数据库之间数据类型的转换。。如图3所示,将第一数据库的数据类型转换为中间格式,再从该中间格式转换为第二数据库的数据类型。这样处理的优势在于,不需要对每种类型的数据库的分别开发出针对其他类型的数据库的转换方法。例如,图3所示的七种数据库,如果为这七种数据库分别开发针对其他类型的数据库的转换方法,共需要四十二种转换方法;而采用这种通过中间格式进行转换的方式,针对七种数据库分别开发一种读取方法,将七种数据库的数据读取为中间格式,再针对七种数据库分别开发一种写入方法,将已读取为中间格式的数据写入到不同的数据库。这样,需要开发十四种转换方法即可实现七种数据库之间的类型转换,提高了开发效率,使不同类型的数据库之间的数据类型转换更加容易实现。
上述预设的中间格式包括Java语言的字符串(String)数组和字节(Byte) 数组。其中,在从第一数据库读取数据时,将第一数据库的二进制数据类型转换为字节数组的形式进行保存,将其他数据类型都转换为字符串数组的形式进行保存。在向第二数据库写入数据时,再将字符串数组和字节数组保存的数据转换为与被写入的列相对应的类型。
例如,以从Oracle向Mysql的数据迁移为例,读取Oracle数据时,将 Oracle的二进制大对象(Binary Large Object,blob)类型、binary_float和 binary_double等二进制浮点类型的数据转换为Java的字节(byte)数组进行保存,将Oracle的varchar2、nvarchar2等其他类型的数据转换为Java的字符串(string)数组的形式进行保存,从而将Oracle数据库中的待迁移数据保存为中间格式。将中间格式的待迁移数据写入Mysql时,将blob类型对应的字节数组转换为Mysql的longblob类型,将binary_float类型对应的字节数组转换为Mysql的decimal类型,将binary_double的数据类型转换为Mysql 的double类型,而varchar2类型对应的字符串数组转换为Mysql的varchar 类型,nvarchar2类型对应的字符串数组转换为Mysql的national varchar类型,其他类型对应的字符串数组也相应的转换为在Mysql数据库中对应的类型并写入Mysql数据库。
如图3所示,通过该中间格式可实现Mysql、Oracle、SQLServer、高性能分布式数据库系统OceanBase、对象——关系型数据库管理系统 PostgreSQL、开放结构化数据服务OTS、分布式面向列的关系型数据库管理系统Hbase SQLServer等七种数据库的类型转换,提高了开发效率。
其中,在全量迁移模块131配置一个白名单,客户端选择全量迁移做为迁移类型时,如果指定了第一数据库中需要迁移的表,则将指定的表的名称添加到这个白名单;如果需要将第一数据库整体进行迁移,则这个白名单为空。在全量迁移开始时,根据该白名单确定需要迁移的表或者对第一数据库整体进行迁移。
而在一个实施例中,可以在进行迁移之前,对需要迁移的表进行切分,该切分可通过现有的表切分算法实现,将需要迁移的表切分成多个子任务分别异步处理,以提高全量迁移的效率。例如,可以使用水平切分、垂直切分或者散列切分算法实现对表的切分;其中,水平切分根据某些条件将数据放到两个或多个独立的表中,即按记录进行切分,不同的记录可以分开保存,每个子表的列数相同,切分后可以降低在查询时需要读取的数据和索引的页数,同时也降低了索引的层数,加快了查询速度;垂直切分把主键和一些列放到一个表,然后把主键和另外的一些列放到另一个表中,将原始表分成多个只包含较少列的表,使得行数据变小,一个数据块(Block)就能存放更多的数据,在查询时就会减少I/O次数;散列切分采用散列(Hash)算法把数据分散到各个分表中,这样I/O更加均衡。
在全量迁移过程中,如果遇到第一数据库的库名、表名、列名与第二数据库的库名、表名、列名不一致的情况,会依据预设的库表列的映射规则进行映射,将库表列的数据写入到在第二数据库对应的库表列。在迁移任务开始之前,在选择待迁移数据时,可以对库名不一致情况进行设置,在此不再重复说明。而对于表名和列名不一致的情况,也同样需要预设表名和列名的映射规则。例如:
而在一个实施例中,可以在每次向第二数据库写入数据之后,记录已写入的待迁移数据的存储位置信息,以用于断点续传。
“mapperList=db_1;table_1;*=db_1;table_2;*|db_1;table_2;usename=db_1;t able_2;uname”。其中“|”用于分隔两个映射规则,db_1;table_1;*=db_1;table_2;*表示数据库db_1的表table_1映射为table_2也就是表的名称有变化。 db_1;table_2;usename=db_1;table_2;uname表示数据库db_1的表table_2的字段username映射为table_2的列为uname,即列名称也相应的有变化。
而在一个实施例中,可以在每次向第二数据库写入数据之后,记录已写入的待迁移数据的位点信息,以用于断点续传。例如,在目标服务器中创建一个表increment_trx,表increment_trx是目标服务器中创建的位点表,主要用于记录全量迁移的位点,解决任务异常重启后的断点续传问题。
结构迁移模块135,用于在全量迁移模块131进行数据迁移之前,将待迁移数据所使用的库表列和对象迁移到第二数据库,当第一数据库与第二数据库异构时,通过预设的类型映射关系确定所述库表列和对象在第二数据库中的类型,在第二数据库创建与所述类型相对应的库表列和对象。
当需要进行全量迁移的数据非常多时,全量迁移的过程会较为缓慢,耗费过多时间和人力,例如要对几百个数据库的几千张表的数据进行迁移时,以上问题就会愈发明显。因此,在创建较大数据量的迁移任务时,可以由用户在迁移类型中选择结构迁移,也可以由数据迁移系统在判断出迁移任务所配置的待迁移数据的数据量超过预设门限时,自动在全量迁移之前进行结构迁移。
例如,源服务器中的第一数据库为Oracle数据库,目标服务器中的第二数据库为Mysql数据库,并指定Oracle数据库中表名为"dbtest"."tabletest"的表做为待迁移数据,该表的结构中包括如下各列:
("C_ID"NUMBER(20,0),
"C_NUM_1"NUMBER,
"C_NUM_2"NUMBER(38,0),
"C_NUM_3"NUMBER(20,3),
"C_FLOAT_1"BINARY_FLOAT,
"C_FLOAT_2"BINARY_DOUBLE,
"C_DATE_1"DATE,
"C_DATE_2"TIMESTAMP(6),
"C_DATE_3"TIMESTAMP(6),
"C_DATE_4"TIMESTAMP(6)WITH TIME ZONE,
"C_DATE_5"TIMESTAMP(6)WITH LOCAL TIME ZONE,
"C_STRING_1"CHAR(40 CHAR),
"C_STRING_2"CHAR(40 BYTE),
"C_STRING_3"NCHAR(40),
"C_STRING_4"VARCHAR2(40 BYTE),
"C_STRING_5"VARCHAR2(40 CHAR),
"C_STRING_6"NVARCHAR2(40),
"C_STRING_7"CLOB,
"C_STRING_8"NCLOB,
"C_STRING_9"LONG,
"C_BLOB_1"BLOB,
"C_BLOB_2"RAW(200)
)。
如果用户选择迁移类型时选择了结构迁移,那么结构迁移模块135首先在Mysql数据库中创建相应的表,如果用户没有预设表名的映射,则在Mysql 数据库中创建具有相同名称的表`dbtest.`tabletest`。创建的表`dbtest.`tabletest` 也具备相应的列,创建该表的代码如下:
CREATE TABLE`dbtest.`tabletest`(
`C_ID`DECIMAL(20,0)NOT NULL,
`C_NUM_1`BIGINT NOT NULL,
`C_NUM_2`DECIMAL(38,0)NOT NULL,
`C_NUM_3`DECIMAL(20,3)NOT NULL,
`C_FLOAT_1`DECIMAL(65,8),
`C_FLOAT_2`DOUBLE,
`C_DATE_1`DATETIME,
`C_DATE_2`DATETIME,
`C_DATE_3`DATETIME,
`C_DATE_4`DATETIME,
`C_DATE_5`DATETIME,
`C_STRING_1`CHAR(40),
`C_STRING_2`CHAR(40),
`C_STRING_3`VARCHAR(40),
`C_STRING_4`VARCHAR(40),
`C_STRING_5`VARCHAR(40),
`C_STRING_6`VARCHAR(40),
`C_STRING_7`LONGTEXT,
`C_STRING_8`LONGTEXT,
`C_STRING_9`LONG,
`C_BLOB_1`LONGBLOB,
`C_BLOB_2`VARBINARY(200)
)engine=INNODB charset=UTF8 COLLATE UTF8_bin;
从而在Mysql数据库中创建相应的表`dbtest.`tabletest`,该表与Oracle数据库的表"dbtest"."tabletest"具有对应的列,从而在实际数据进行迁移之前将待迁移的表"dbtest"."tabletest"的结构率先迁移到了Mysql数据库。在迁移的过程中,根据“从Oracle到Mysql”的类型映射关系完成对每个列的类型转换,比如上例中Oracle的列“C_ID”类型为Number,在Mysql数据库创建的表内,相应的列“C_ID”类型为Decimal,其他列亦进行相应的转换,在此不一一列举。
用户创建迁移任务,在选择待迁移数据时除了可以设置库名的映射关系,还可以设置表名和列名的映射关系。当选择了第一数据库中的表做为待迁移数据时,可以预设该表在第二数据库中的表名。在设置该表在第二数据库中的表名的界面中,展示该表内部所有的列,用户可以设置每个列在第二数据库的表中的列名。
例如,用户选中了第一数据库中的表CHINESE_KEY_TABLE做为待迁移数据,选中该表后可以打开一个编辑页面,设置该表在第二数据库中对应的表的名称CHINESE_KEY_TABLE_TEST;在该界面中,同时展示待迁移的表CHINESE_KEY_TABLE中各个列:C、ID、K、PAD等列,并且用户可以对各个列的列名重新进行编辑,例如将各列的列名修改为C_TEST、 ID_TEST、K_TEST、PAD_TEST。
迁移评估模块136,用于在全量迁移模块131对待迁移数据的进行迁移之前,或者在结构迁移模块135对待迁移数据所使用的库表列和对象进行迁移之前,根据第一数据库和第二数据库输出评估报告,其中,评估报告包括所述第一数据库的空间占用信息,库表列和对象信息,执行的SQL以及处理性能信息,评估报告还包括第二数据库的不兼容特性信息以及改造成本信息。
例如,从Oracle数据库选中数据库集合amptest1和amptest2做为待迁移数据,迁移到Mysql数据库对应的数据库集合liuy_amptest1和liuy_amptest2。那么在开始全量迁移或者结构迁移之前,输出评估报告,评估报告内容包括: Oracle数据库当前空间占用500GB,可用空间1.5TB,包括200个库,5000 张表和每张表的平均列数为35,支持SQL标准的where条件,目前内存占用25%;本次迁移amptest1和amptest2两个库,共有55张表,每张表的平均列数为30,目标Mysql数据库liuy_amptest1和liuy_amptest2不支持Oracle 中的bfile、interval year to month、interval day to second这几种数据类型,迁移时如果amptest1和amptest2的表中含有这三种类型,会导致结构迁移失败,请根据业务需求,将这三种类型对应的数据预先写入liuy_amptest1和 liuy_amptest2,改造时间大约需要24小时。
全量校验模块133,用于当全量迁移模块131完成数据迁移时,针对全量迁移模块131所迁移的待迁移数据判断第一数据库与第二数据库的数据是否一致,并将不一致的数据保存在预设列表;当预设列表内存在不一致的数据时,每隔预设时长对不一致的数据进行重复校验,在经过预设次数的重复校验之后不一致的数据仍然存在时,将不一致的数据记录在迁移评估报告内。
全量校验模块133同样会根据全量迁移模块131的白名单确定需要进行全量校验的表,当将整个数据库集合进行全量迁移时,白名单为空,则对整个数据库集合内的数据进行校验。而在第一数据库与第二数据库异构时,同样需要先读取待迁移数据并转换为预设的中间格式,通过该中间格式转换为第二数据库的类型,再与第二数据库中相应的数据进行比对。
在第一数据库处于停机和非停机状态下,完成全量迁移后都可以继续进行全量校验。而在非停机状态下,是以全量迁移开始时的第一时刻为基准进行数据迁移的,在全量迁移的过程中,可能有新的写操作修改了待迁移数据,使写入第二数据库的数据与修改之后的待迁移数据不一致。
例如,Oracle数据库中表"dbtest"."tabletest"的数据全量迁移到Mysql的表`dbtest.`tabletest`后,对应的列"C_DATE_1"与`C_DATE_1`的日期值不一致,可能是在迁移过程中时间发生了变化,那么将对应的列"C_DATE_1"与 `C_DATE_1`记录在预设列表中,每隔预设时长(例如3秒)进行一次重复校验,如果经过预设次数(例如,20次)的重复校验不一致的数据仍然存在,则记录在迁移报告内。该迁移报告内表记录从表"dbtest"."tabletest"到表 `dbtest.`tabletest`全量迁移已完成,但存在不一致的数据:对应的列"C_DATE_1"与`C_DATE_1`。
增量迁移模块132,用于以全量迁移开始时的第一时刻为基准,将待迁移数据在第一时刻之后产生变化的数据迁移到第二数据库,当第一数据库与第二数据库异构时,通过预设的中间格式将产生变化的数据的数据类型转换为第二数据库的数据类型,按照转换后的数据类型将产生变化的数据写入第二数据库。
增量迁移在全量迁移结束时开始进行,可以通过解析日志数据或者解析触发器的操作记录实现,下面分别进行说明。
通过解析日志数据实现时,增量迁移模块132读取第一数据库的日志,例如,当第一数据库为Mysql时读取二进制日志(binlog),为Oracle时读取(重做日志)redolog。
将读取到的日志内容进行解析并转换成预设的中间格式(Java语言的字节数组和字符串数组)并写入队列(Queue),读取队列中的中间格式的数据。通过白名单确定需要读取的数据,该白名单即为全量迁移时创建的白名单。比如,白名单包括表"dbtest"."tabletest",则从Oracle的重做日志中过滤出针对这个表的数据,完成类型转换等操作后写入Mysql的表 `dbtest.`tabletest`。在从队列读取数据并写入到第二数据库的过程中,可以通过多线程的并发操作来完成,以提高增量迁移效率。通过解析日志数据的方式实现的增量迁移支持事务性的写入,所谓事务性,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全地不执行。事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源。一个逻辑工作单元要成为事务,必须满足所谓的ACID(原子性、一致性、隔离性和持久性)属性。事务是数据库运行中的一个逻辑工作单位,由数据库管理系统(Database Management System,DBMS)中的事务管理子系统负责事务的处理。也就是说,客户端在第一数据库以一下事务提交写入到第一数据库中的数据,增量迁移时也是以一个事务写入到第二数据库。这对于不能接受数据中间状态的应用至关重要,例如转账汇款,网络购物时货物的库存信息等,用户在客户端转账操作未完成或者购物流程未结束时,虽然表中的有些数据已发生变化,但不会进行增量迁移,直到转账或者购物操作结束后对所有已变化的数据进行增量迁移。
通过触发器实现时,增量迁移模块132通过第一数据库的触发器功能记录第一时刻之后数据操作语言(Data Manipulation Language,DML)的操作并写入到增量表中;读取增量表中的信息并反查第一数据库中的相应数据,将查询到的数据转换为预设的中间格式(Java语言的字节数组和字符串数组) 并写入到队列中;从队列中读取并通过类型转换处理后写入到第二数据库。其中,增量表保存的是主键信息,不是原始数据,因此需要根据主键信息反查获得原始数据。例如,全量迁移开始后,客户端写Oracle数据库的表 "dbtest"."tabletest",触发器在增量表中记录主键信息id=1,增量迁移开始后,读取到增量表主键信息id=1时反查到对应的写入数据
"C_STRING_1"=fh2aje。
增量校验模块134,用于当增量迁移模块132所迁移的在第一时刻之后产生变化的数据已赶上待迁移数据当前的数据变化时,实时的针对第一时刻之后产生变化的数据判断第一数据库和第二数据库的数据是否一致,并将不一致的数据记录在预设列表;当预设列表存在不一致的数据时,每隔预设时长对不一致的数据进行重复校验,在经过预设次数的重复校验之后不一致的数据仍然存在时,将不一致的数据记录在迁移报告内。
例如,对Oracle数据库的表"dbtest"."tabletest"进行数据迁移,全量迁移开始时的第一时刻之后,针对表"dbtest"."tabletest"当前又出现了四次写操作,那么增量迁移将这四次写操作的写入数据迁移到Mysql的表`dbtest.`tabletest` 时,达到所述的“已赶上(Catch)”状态,也可以称为“追平”状态。此时,开始对增量迁移的数据进行增量校验。
增量校验也相应的可以通过解析日志数据的方式或者触发器的方式来实现。
通过解析日志数据的方式实现时,首先读取第一数据库的日志数据并解析,并通过白名单过滤出增量迁移所涉及的库或表所对应的数据。查询到相应的库或表在第一时刻之后产生数据变化的列;根据库表列的映射关系,查询到第二数据库对应的库表列;将在第一时刻之后产生变化的数据经过类型转换与第二数据库对应的数据进行对比,如果不一致就写入预设列表。
例如,白名单包括Oracle数据库的表"dbtest"."tabletest",从Oracle数据库重做日志中读取针对表"dbtest"."tabletest"的数据,并查询到在第一时刻之后共有四次写入操作,包括针对列"C_STRING_1"两次,针对列"C_ID"一次,针对列"C_DATE_1"一次。读取表"dbtest"."tabletest"中的列 "C_STRING_1"、"C_ID"和"C_DATE_1"的当前数据。根据库表列的映射关系,查询Mysql数据库的表`dbtest.`tabletest`中的列`C_STRING_1`、`C_ID` 和`C_DATE_1`的当前数据。将列"C_STRING_1"、"C_ID" 和"C_DATE_1"的当前数据经过类型转换后,与列`C_STRING_1`、`C_ID` 和`C_DATE_1`的当前数据进行比较,将不一致的记录在预设列表。
通过触发器的方式实现时,首先读取第一数据库增量表中的信息,根据增量表记录的主键信息反查第一数据库中相应的实际数据,再根据白名单过滤出属于进行了增量迁移的表的实际数据,将第一数据库中的实际数据经过库表列映射和类型转换与从第二数据库的相应数据进行对比,如果不一致就写入预设的数据列表。
例如,增量表中包括主键id=1至20,反查到的数据中与白名单中的 Oracle数据库的表"dbtest"."tabletest"有关的有四个,包括针对列 "C_STRING_1"的有两个,针对列"C_ID"的有一个,针对列"C_DATE_1"的有一个。根据库表列的映射关系,读取Mysql数据库的表`dbtest.`tabletest`中的列`C_STRING_1`、`C_ID`和`C_DATE_1`的当前数据。将反查到的Oracle 数据库的表"dbtest"."tabletest"的列"C_STRING_1"、"C_ID"和"C_DATE_1"的数据进行类型转换,与表`dbtest.`tabletest`中的列`C_STRING_1`、`C_ID` 和`C_DATE_1`的当前数据比较,将不一致的写入预设列表。
增量校验对于不一致的数据会进行多次的复检。由于向第二数据库写入数据的过程有可能会出现延迟,因此增量校验模块134对预设列表记录的不一致的数据每隔预设时长(例如3秒)进行一次重复校验,如果经过预设次数(例如20次)的重复校验不一致的数据仍然存在,则记录在迁移报告内。该迁移报告内表记录从表"dbtest"."tabletest"到表`dbtest.`tabletest`全量迁移和增量迁移已完成,但存在不一致的数据,例如,对应的列"C_DATE_1"与 `C_DATE_1`。
需要说明的是,本申请实施例中,所述全量迁移模块131,所述增量迁移模块132,所述全量校验模块133,所述增量校验模块134,所述结构迁移模块135以及所述迁移评估模块136中,部分模块独立工作能够实现特定的功能,与此同时,可以根据用户的选择进行多个模块之间的组合,从而形成具有不同功能的系统。例如,所述全量迁移模块131作为独立模块时可以实现多线程地对多个库多个外表进进行分布式数据迁移;所述全量迁移模块131与所述迁移评估模块136进行组合时,可以在进行全量迁移之前进一步对第一数据库和第二数据库进行评估,从而获得源数据库和目的数据库的基本情况,对全量迁移实现一个预估;所述全量迁移模块131还可与所述结构迁移模块135进行组合,当所述第一数据库与第二数据库异构时,且数据迁移量较大时,预先进行结构迁移可以提高数据全量迁移的效率,节省时间。
所述全量校验模块133是依附于所述全量迁移模块131而存在的,可以在数据进行全量迁移之后进行源库和目的库数据一致性的校验。上述几种情况是所述全量校验模块133分别与所述结构迁移模块135、所述迁移评估模块136、所述全量校验模块133的组合功能说明,所述全量校验模块133还可以同时与所述迁移评估模块136、所述全量校验模块133、所述结构迁移模块135中任意两个或所有三个模块进行组合,共得到八种可选的组合方式。这八种组合方式分别如图1a~图1h所示.
其中,1a是全量迁移模块131独立存在时的架构示意图;图1b是全量迁移模块131和结构迁移模块135组合存在时的架构示意图;图1c是全量迁移模块131和迁移评估模块136组合存在时的架构示意图;图1d是全量迁移模块131和结构迁移模块135和迁移评估模块136组合存在时的架构示意图;图1e是全量迁移模块131和结构迁移模块135和全量校验模块133 组合存在时的架构示意图;图1f是全量迁移模块131和迁移评估模块136 和全量校验模块133组合存在时的架构示意图;图1g是全量迁移模块131 和全量校验模块133组合存在时的架构示意图;图1h是全量迁移模块131 和结构迁移模块和迁移评估模块136和全量校验模块133组合存在时的架构示意图;
上述各模块组合使用时,各模块功能如图1对应的实施例中所述,此处不再赘述。
另外,本申请实施例的所述增量迁移模块132也是依附于所述全量迁移模块131而存在的,增量迁移通常在全量迁移完成之后操作。结合上述全量迁移模块131的实现方式,应当理解所述增量迁移模块132在实现其位于数据迁移系统中的功能时,有以下几种实现方式:所述增量迁移模块132与所述全量迁移模块131组合、所述增量迁移模块132与所述全量迁移模块131 与所述全量校验模块133组合、所述增量迁移模块132与所述全量迁移模块131与所述增校验模块134组合、所述增量迁移模块132与所述全量迁移模块131与所述增校验模块134与所述全量校验模块133组合,其中,上述四种组合方式中,每种组合方式又可以与所述结构迁移模块135或所述迁移评估模块136中的其中一个模块或所有两个模块进行组合,共得到十六种可选的组合方式。如图1i~图1x所示:
图1i是全量迁移模块131和增量迁移模块132组合存在时的架构示意图;图1j是全量迁移模块131和结构迁移模块135和增量迁移模块132组合存在时的架构示意图;图1k是全量迁移模块131和迁移评估模块136和增量迁移模块132组合存在时的架构示意图;图1l是全量迁移模块131和结构迁移模块135和增量迁移模块132和迁移评估模块136组合存在时的架构示意图;图1m是全量迁移模块131和结构迁移模块135和增量迁移模块132 和全量校验模块133组合存在时的架构示意图;图1n是全量迁移模块131 和迁移评估模块136和增量迁移模块132和全量校验模块133组合存在时的架构示意图;图1o是全量迁移模块131和全量校验模块133和增量迁移模块132组合存在时的架构示意图;图1p是全量迁移模块131和结构迁移模块135和迁移评估模块136和全量校验模块133和增量迁移模块132组合存在时的架构示意图;图1q是全量迁移模块131和增量迁移模块132组合存在时的架构示意图和增校验模块134组合存在时的架构示意图;图1r是全量迁移模块131和结构迁移模块135和增量迁移模块132和增校验模块134组合存在时的架构示意图;图1s是全量迁移模块131和迁移评估模块136和增量迁移模块132和增校验模块134组合存在时的架构示意图;图1t是全量迁移模块131和结构迁移模块135和增量迁移模块132和迁移评估模块136和增校验模块134组合存在时的架构示意图;图1u是全量迁移模块131和结构迁移模块135和增量迁移模块132和全量校验模块133和增校验模块134 组合存在时的架构示意图;图1v是全量迁移模块131和迁移评估模块136 和增量迁移模块132和全量校验模块133和增校验模块134组合存在时的架构示意图;图1w是全量迁移模块131和全量校验模块133和增量迁移模块 132和增校验模块134组合存在时的架构示意图;图1x是全量迁移模块131 和结构迁移模块135和迁移评估模块136和全量校验模块133和增量迁移模块132和增校验模块134组合存在时的架构示意图;上述各模块组合使用时,各模块功能如图1对应的实施例中所述,此处不再赘述。
本申请实施例提供的数据迁移系统,能够提供全量迁移、增量迁移、全量校验、增量校验、迁移评估和结构迁移等类型的迁移服务,并且由用户根据需求选择上述迁移类型。提供了一种支持同构及异构数据库之间通用的数据迁移系统,能够在停机和非停机状态下进行全量迁移的完整的数据迁移系统;提供了在全量迁移之前的结构迁移功能,当需要迁移的数据量较大时,可以节省大量的时间和人力。提供了全量迁移之后进行的全量校验功能,使用户及时发现迁移过程中的不一致性问题。提供了在非停机状态下的增量迁移和增量校验功能,使新增数据得到及时同步,并且对增量进行实时校验,及时发现增量数据的不一致性问题。数据迁移系统还具有分布式调度功能,能够提升大数据量的数据迁移的处理效率。
采用本申请提供的数据迁移系统,在源数据库运行的业务允许停机的情况下,可以进行全量迁移;进一步的,在全量迁移之后进行全量校验;进一步的,根据实际情况在全量迁移之前进行迁移评估和结构迁移。以将Oracle 数据库中的数据库集合amptest1迁移到Mysql数据库的liuy_amptest1为例,过程如图4所示,包括以下步骤。
在步骤S210中,接收到创建的迁移任务,从amptest1迁移到 liuy_amptest1,迁移类型包括迁移评估、结构迁移、全量迁移和全量校验,其中Oracle的库amptest1处于停机状态。
在步骤S220中,对本次迁移任务进行评估,输出评估报告。
其中,所述评估报告包括amptest1的空间占用信息,库表列和对象信息,执行的SQL以及处理性能信息,评估报告还包括liuy_amptest1的不兼容特性信息以及改造成本信息。
在步骤S230中,接收到继续执行本次迁移任务的指令时,将amptest1 中的表创建到liuy_amptest1,并且通过类型映射关系为每张表创建相应的列。
可选的,步骤S230进一步包括S231,在步骤S231中,根据预先配置的白名单确定amptest1中要迁移的表;其中,所述白名单为用户指定的需要迁移的表的名单,如果指定了Oracle数据库中需要迁移的表,则将指定的表的名称添加到这个白名单;如果需要将第一数据库整体进行迁移,则这个白名单为空。
可选的,步骤S230进一步包括S232,若是根据所述白名单确定了需要迁移的表,则在步骤S232中,对需要迁移的表进行切分。
本步骤并不限制具体的切分算法,可以是水平切分、垂直切分、散列切分算法等算法的任意一种。通过切分算法,将需要迁移的表切分成多个子任务分别异步处理,以提高全量迁移的效率。
在步骤S240中,将amptest1中的全部数据迁移到liuy_amptest1中对应的表和列。可选的,本实施例的数据迁移过程还包括步骤S241,在步骤S241 中,每次向liuy_amptest1中写入数据之后,记录待迁移数据的存储位置信息,用以断点续传。
可选的,本实施例的数据迁移过程还包括步骤S242:每次向 liuy_amptest1中写入数据之后,记录待迁移数据的位点信息,用以断点续传。
具体的,可以在目标服务器Mysql中创建一个位点表increment_trx,用于记录全量迁移的位点。若书服务器异常重启,则位点表可以有效解决任务异常重启后的断点续传问题。
在步骤S250中,对amptest1与liuy_amptest1中对应表和列数据进行比对。
本步骤中所述比对的过程用以判断由源数据库迁移至目的数据库的数据知否一致,若是存在不一致的数据,则将不一致的数据保存在预设的列表中。其中,当预设列表内存在不一致的数据时,每隔预设时长对所述不一致的数据进行重复校验,在经过预设次数的重复校验之后不一致的数据仍然存在时,将不一致的数据记录在迁移评估报告内,从而能够及时发现全量迁移中的数据不一致问题,实现了数据迁移的实时校验,进一步保障了数据迁移的准确性。
具体地,根据所述预先配置的白名单确定需要进行全量校验的表,当将整个数据库集合进行全量迁移时,白名单为空,则对整个数据库集合内的数据进行校验。特别地,当在第一数据库与第二数据库异构时,需要先读取待迁移数据并转换为预设的中间格式,通过该中间格式转换为第二数据库的类型,再与第二数据库中相应的数据进行比对。例如,本实施例中的Oracle数据库中与Mysql数据库为异构数据库,则需首先读取Oracle数据库中的待迁移数据并将其转化为预设的中间格式,再转化为Mysql数据库的对应的数据类型,再与Mysql数据库中相应的数据进行比对,从而实现数据全量迁移的实时校验。
结合图5,在一种可选的实施方式中,本申请实施例的全量迁移过程进一步可由如下步骤实现:
在步骤S501中,根据预先配置的白名单确定需要迁移的表或者判断是否对第一数据库整体进行迁移。
在步骤S502中,对需要迁移的表进行切分得到多个子任务。
本步骤将大数量表切分成多个子任务进行处理,而对于每个子任务,分布式调度模块会进行相应的调度,以实现负载均衡,同时提高数据迁移的效率。
在步骤S503中,每个所述子任务读取调度系统分配的第一库数据进行处理。
在步骤S504中,当第一数据库与第二数据库异构时,将读取到的第一库数据转化为预设的中间格式。
在步骤S505中,通过预设的类型映射关系确定第一数据库的库表列和待迁移对象在第二数据库中的类型。
在步骤S506中,在第二数据库创建与所述库表列类型相对应的库表列和对象。
在步骤S507中,将待迁移的数据从第一数据库迁移至第二数据库。
在步骤S508中,每次向第二数据库中写入数据之后,记录待迁移数据的位点信息,用以断点续传。采用本申请提供的数据迁移系统,在源数据库运行的业务不允许停机的情况下,可以进行全量迁移和增量迁移;进一步的,在全量迁移之后进行全量校验,在增量迁移之后进行增量校验;进一步的,根据实际情况在全量迁移之前进行迁移评估和结构迁移。仍然以将Oracle数据库中的数据库集合amptest1迁移到Mysql数据库的liuy_amptest1为例,过程如图6所示,包括以下步骤。
在步骤S601中,接收到创建的迁移任务,从amptest1迁移到 liuy_amptest1,迁移类型包括迁移评估、结构迁移、全量迁移、全量校验、增量迁移和增量校验,其中Oracle的库amptest1处于非停机状态。
在步骤S602中,对本次迁移任务进行评估,输出评估报告。
在步骤S603中,接收到继续执行本次迁移任务的指令时,将amptest1 中表创建到liuy_amptest1,并且通过类型映射关系为每张表创建相应的列。
在步骤S604中,将amptest1中的全部数据迁移到liuy_amptest1中对应的表和列。
在步骤S605中,对amptest1与liuy_amptest1中对应表和列数据进行比对。
在步骤S606中,将在全量迁移开始之后amptest1中发生变化的数据迁移到liuy_amptest1相对应的表和列。
在步骤S607中,当增量迁移达到“已赶上”状态时,实时的将amptest1 与liuy_amptest1中进行了增量迁移的数据进行比对。
在步骤S608中,针对amptest1的访问被切换至liuy_amptest1。
在步骤S609中,从切换之后首次向liuy_amptest1写入数据的第二时刻开始,启动反向增量迁移,将liuy_amptest1中发生变化的数据迁移到amptest1 相对应的表和列。
在步骤S610中,当从第二时刻开始的反向增量迁移达到“已赶上”状态时,实时的将amptest1与liuy_amptest1中进行了反向增量迁移的数据进行比对。
在步骤S611中,当liuy_amptest1的出现异常时,将针对liuy_amptest1 的访问切换回amptest1。
本实施例中,在数据库不停机的状态下完成全量迁移和增量迁移,并实时的对迁移后的数据进行全量校验和增量校验,以实时验证数据迁移后的一致性。进行数据迁移的原因通常包括第一数据库的存储量过大,需要迁移部分数据至第二数据库,或者,第一数据库中部分数据访问量过多,影响了其他数据的正常访问,需要将访问量过多的数据迁移到第二数据库。因此,验证出迁移后的数据完全一致时,便可以将客户端针对待迁移数据的访问从第一数据库切换到第二数据库。
而在切换之后,由于应用程序在运行中出现程序错误(BUG)或者第二数据库处理能力出现问题,有可能会出现需要将访问再切换回第一数据库的情形。为了使待迁移数据在两个数据库中能够实时的保持一致。因此,待迁移数据在第二数据库的变化也要实时的以反向增量迁移方式回流到第一数据库,并以增量校验的方式对回流的数据进行实时校验,上述数据迁移还可以进一步包括以下步骤。
例如,写操作被切换到liuy_amptest1之后,首次写操作修改了表“a00_full_type_table_m1b1”内的列“id_type”的数据,则该写操作的时刻即为第二时刻。此时开始从liuy_amptest1向amptest1的反向增量迁移。
在第二时刻之后的25秒,共四次修改了表“a00_full_type_table_m1b1”内的数据,当这四次被修改的数据全部被迁移到amptest1时,开始实施的针对上述反向增量迁移的增量校验,以验证当前amptest1和liuy_amptest1的数据是否保持一致。
当liuy_amptest1出现异常时,由于已进行了反向增量迁移,可以实时的将写操作等访问再切换回amptest1。
本实施例提供的不停机的数据迁移方法,在两个数据库之间进行实时的增量迁移和增量校验,使两个数据库保持一致,针对对应数据的访问可以在两个数据库之间实时切换。
具体地,结合图7a和7b,在一种可选的实施方式中,本申请实施例中,基于日志方式的增量迁移过程进一步可由如下步骤实现:
在步骤S701中:读取并解析第一数据库的日志获得增量数据。
通常,增量迁移会预先创建增量任务的解析路径,例如,本发明实施例可以使用topic store来标识一个数据解析通道。
第一数据库即源库的日志记录的是增量数据,通过解析第一数据库的日志即可获得源库数据增加的数据。
在步骤S702中:通过白名单确定增量数据中需要迁移的表。
增量前移在全量迁移结束后进行,当从topic store获取到增量数据后,先通过白名单对增量数据进行过滤,从而得到待迁移的表。其中,所述白名单与全量迁移时预先配置的白名单相同,由客户端指定。
在步骤S703中:将待迁移的数据转换成预设的中间格式并写入队列 Queue。
在步骤S704中,从队列Queue中多线程地读取中间格式的数据读取数据并进行库列表的映射。
在步骤S705中,将待迁移的数据写入第二数据库,并记录待迁移数据的位点信息,用以断点续传。
进一步地,数据表的主键值有更新(update)或删除操作时(delete),在步骤S706中,根据第一数据库的更新结果,将数据写入过程进一步拆分为写入和删除。
例如,当第一数据库中的某一数据表的主键值由1变至2,则相应的,第二数据库中,与第一数据库主键值为1的数据表存在映射关系的表相应的进行删除操作(delete),与此同时,相应地第二数据库中与第一数据库主键值为2的数据表存在映射关系的表进行数据的写入操作。当然,上述说明仅供举例,并不对本申请实施例构成限制。
结合图 8a 和图 8b ,在一种可选的实施方式中,本申请实施例中,基于触发器方式的增量迁移过程进一步可由如下步骤实现:
在步骤S801中,首先创建增量表和触发器(trigger)。
在步骤S802中,读取第一数据库增量表中的信息,根据增量表记录的主键信息反查第一数据库中相应的原始数据。
在步骤S803中,根据白名单过滤出增量迁移的表的实际数据。
在步骤S804中,将待迁移的数据转换成预设的中间格式并进行库列表的映射。
在步骤S805中,将待迁移的数据写入第二数据库,并记录已经处理到的增量的位点信息,用以断点续传。
其中,需要说明的是,增量表中保存的只是主键信息而非原始数据,因此将待迁移的数据写入第二数据库之前,需根据获取的增量表中的信息反查源库,即第一数据库,从而获取待迁移的原始数据,并将所述原始数据写入第二数据库。
进一步地,若第一数据库中,数据表的主键值有更新(update)或删除操作时(delete),在步骤S806中,根据第一数据库的更新结果,将数据写入过程进一步拆分为写入和删除。
采用本申请提供的数据迁移系统,在增量迁移之后进行全量校验,具体地,全量校验的实现过程如图9所示,包括如下步骤:
在步骤S901中,读取第一数据库的表信息,并根据预先配置的白名单得到需校验的表信息;
在步骤S902中,读取第一数据库中的数据,并将读取到的数据转化为预设的中间格式并进行库表映射;
在步骤S903中,根据所述库表映射,在第二数据库中查询由第一数据库迁移而来的数据;
其中,需要说明的是,步骤S902和步骤S903是并行的步骤,本申请实施例并不对其顺序进行限制。
在步骤S904中,将步骤S902和步骤S903中得到的数据根据库表映射关系进行对比,若结果一致,则执行步骤S905,否则执行步骤S906。
在步骤S905中,结束校验过程。
在步骤S906中,将不一致的数据保存在预设列表。
当预设列表内存在不一致的数据时,每隔预设时长对不一致的数据进行重复校验,在经过预设次数的重复校验之后不一致的数据仍然存在时,将不一致的数据记录在迁移评估报告内。
采用本申请提供的数据迁移系统,在增量迁移之后进行增量校验。其中,基于日志的增量校验的实现过程如图10所示,包括如下步骤:
在步骤S1001中,读取第一数据库的日志并对所述日志的内容进行解析;
在步骤S1002中,根据所述解析的结果对第一数据库进行查询,得到第一数据中待迁移的增量数据。
在步骤S1003中,对第一数据库中查询到的增量数据进行白名单的过滤获得增迁移所涉及的库表以及数据并转化为预设的中间格式。
在步骤S1004中,进行库表映射并根据所述库表映射的结果查询第二数据库中增迁移所涉及的库表以及数据。
在步骤S1005中,根据库表映射关系,将步骤S1003和步骤S1004中获取到的增量前移所涉及到的库表或数据进行对比,若一致,则执行步骤 S1006,若为否,则执行步骤S1007。
在步骤S1006中,保存增量校验的位点信息。
在步骤S1007中,将不一致的数据保存在预设列表,并跳转至步骤 S1006。
具体的,本申请实施例中,基于触发器的增量校验实现过程如图11所示,包括如下步骤:
在步骤S1101中,读取第一数据库的增量表;
在步骤S1102中,根据所述增量表对第一数据库进行查询,得到第一数据中增迁移所涉及的库表以及数据。
在步骤S1103中,对第一数据库中查询到的增量数据进行白名单的过滤、并转化为预设的中间格式。
在步骤S1104中,进行库表映射并根据所述库表映射的结果查询第二数据库中增迁移所涉及的库表以及数据。
在步骤S1105中,根据库表映射关系,将步骤S1103和步骤S1104中获取到的数据进行对比,若一致,则执行步骤S1106,若为否,则执行步骤S1107。
在步骤S1106中,保存增量校验的位点信息。
在步骤S1107中,将不一致的数据保存在预设列表,并跳转至步骤 S1106。
本实施例中,通过全量校验和增量校验,可以及时发现数据迁移过程中出现的数据不一致的问题,尤其对于核心应用的数据,保证了其迁移数据的完整性及安全性。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/ 输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器 (RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存 (PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括非暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
如在说明书及权利要求当中使用了某些词汇来指称特定组件。本领域技术人员应可理解,硬件制造商可能会用不同名词来称呼同一个组件。本说明书及权利要求并不以名称的差异来作为区分组件的方式,而是以组件在功能上的差异来作为区分的准则。如在通篇说明书及权利要求当中所提及的“包含”为一开放式用语,故应解释成“包含但不限定于”。“大致”是指在可接收的误差范围内,本领域技术人员能够在一定误差范围内解决所述技术问题,基本达到所述技术效果。此外,“耦接”一词在此包含任何直接及间接的电性耦接手段。因此,若文中描述一第一装置耦接于一第二装置,则代表所述第一装置可直接电性耦接于所述第二装置,或通过其他装置或耦接手段间接地电性耦接至所述第二装置。说明书后续描述为实施本申请的较佳实施方式,然所述描述乃以说明本申请的一般原则为目的,并非用以限定本申请的范围。本申请的保护范围当视所附权利要求所界定者为准。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的商品或者系统不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种商品或者系统所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的商品或者系统中还存在另外的相同要素。
上述说明示出并描述了本申请的若干优选实施例,但如前所述,应当理解本申请并非局限于本文所披露的形式,不应看作是对其他实施例的排除,而可用于各种其他组合、修改和环境,并能够在本文所述发明构想范围内,通过上述教导或相关领域的技术或知识进行改动。而本领域人员所进行的改动和变化不脱离本申请的精神和范围,则都应在本申请所附权利要求的保护范围内。
Claims (20)
1.一种数据迁移系统,其特征在于,包括:入口模块,应用程序编程接口模块,全量迁移模块,增量迁移模块,全量校验模块,增量校验模块,结构迁移模块以及迁移评估模块;
所述入口模块用于提供管理迁移任务的入口,接收由客户端创建的迁移任务、指定的第一数据库、指定的第二数据库和所述第一数据库中的待迁移数据,所述迁移任务包括全量迁移、增量迁移、全量校验、增量校验、结构迁移和迁移评估中的一种或多种迁移类型;
所述应用程序编程接口模块用于向所述客户端提供服务接口,以根据所述迁移任务中的迁移类型调用对应的全量迁移模块,增量迁移模块,全量校验模块,增量校验模块,结构迁移模块中的一个或多个模块;
所述全量迁移模块,用于将所述待迁移数据从所述第一数据库迁移到所述第二数据库,其中,当所述第一数据库与所述第二数据库同构时,将所述待迁移数据按照库表列的当前结构进行迁移,当所述第一数据库与所述第二数据库异构时,根据预设的中间格式完成所述第一数据库与所述第二数据库之间数据类型的转换;
所述全量校验模块,用于当所述全量迁移模块完成数据迁移时,针对所述全量迁移模块所迁移的所述待迁移数据判断所述第一数据库与所述第二数据库中的数据是否一致,并将不一致的数据记录在迁移报告内;
所述增量迁移模块,用于以所述全量迁移模块开始数据迁移时的第一时刻为基准,将所述待迁移数据在所述第一时刻之后产生变化的数据迁移到所述第二数据库;
所述增量校验模块,用于当所述增量迁移模块所迁移的在所述第一时刻之后产生变化的数据已赶上所述待迁移数据当前的数据变化时,针对所述第一时刻之后产生变化的数据判断所述第一数据库和所述第二数据库中的数据是否一致,并将不一致的数据记录在迁移报告内;
所述结构迁移模块,用于在所述全量迁移模块进行数据迁移之前,将所述待迁移数据所使用的库表列和对象迁移到所述第二数据库,其中,当所述第一数据库与所述第二数据库异构时,通过预设的类型映射关系确定所述库表列和对象在所述第二数据库中的类型,在所述第二数据库创建与所述类型相对应的库表列和对象;
所述迁移评估模块,用于根据所述第一数据库和所述第二数据库输出评估报告,其中,所述评估报告包括所述第一数据库的空间占用信息,库表列和对象信息,执行的SQL以及处理性能信息,所述评估报告还包括所述第二数据库的不兼容特性信息以及改造成本信息。
2.如权利要求1所述的数据迁移系统,其特征在于,所述系统进一步包括:分布式调度模块;
所述分布式调度模块,用于监控所述迁移任务的执行状态,并根据参与所述迁移任务的模块的当前负载对所述迁移任务进行调度。
3.如权利要求2所述的数据迁移系统,其特征在于,所述分布式调度模块,用于通过统计数据迁移系统内参与执行所述迁移任务的模块上执行的单元化的数量及内存占用率来进行所述迁移任务的调度。
4.如权利要求1所述的数据迁移系统,其特征在于,
所述全量迁移模块或所述增量迁移模块,用于在向所述第二数据库写入数据时,记录已写入数据的位点信息,用于断点续传。
5.如权利要求1所述的数据迁移系统,其特征在于,所述全量迁移模块进一步用于,
在全量迁移的过程中,若所述第一数据库的库名、表名、列名与所述第二数据库的库名、表名、列名不一致,则依据预设的库表列的映射规则进行映射,将所述第一数据库的库表列的数据写入到所述第二数据库对应的库表列。
6.如权利要求1所述的数据迁移系统,其特征在于,所述全量校验模块具体用于将不一致的数据保存在预设列表中,并在所述预设列表内存在不一致的数据时,每隔预设时长对所述不一致的数据进行重复校验,在经过预设次数的重复校验之后所述不一致的数据仍然存在时,将所述不一致的数据记录在迁移报告内。
7.如权利要求6所述的数据迁移系统,其特征在于,所述全量校验模块进一步用于,
在所述第一数据库与所述第二数据库异构时,读取所述第一数据库中的待迁移数据并将所述待迁移数据转换为预设的中间格式;通过所述中间格式将所述待迁移数据转换为所述第二数据库的类型;将所述第二数据库的类型的待迁移数据与所述第二数据库中相应的数据进行比对。
8.如权利要求1所述的数据迁移系统,其特征在于,所述增量迁移模块进一步用于,
利用所述第一数据库的日志,获取在所述第一时刻之后产生变化的数据;
或者,利用所述第一数据库的触发器所保存的操作记录,获取在所述第一时刻之后产生变化的数据。
9.如权利要求8所述的数据迁移系统,其特征在于,所述增量校验模块进一步用于:
通过解析所述第一数据库的日志数据,获取增量迁移的数据;
或者,通过所述第一数据库的触发器的操作记录获取增量迁移的数据。
10.如权利要求1所述的数据迁移系统,其特征在于,所述增量校验模块,具体用于将不一致的数据保存在预设列表中,并在所述预设列表存在所述不一致的数据时,每隔预设时长对所述不一致的数据进行重复校验,在经过预设次数的重复校验之后所述不一致的数据仍然存在时,将所述不一致的数据记录在迁移报告内。
11.一种数据迁移方法,其特征在于,包括:
接收由客户端创建的迁移任务、指定的第一数据库、指定的第二数据库和所述第一数据库中的待迁移数据,所述迁移任务包括全量迁移、增量迁移、结构迁移、全量校验、增量校验和迁移评估中的一种或多种迁移类型,所述第一数据库处于开机状态;
调用迁移评估模块根据所述第一数据库和所述第二数据库输出评估报告,其中,所述评估报告包括所述第一数据库的空间占用信息,库表列和对象信息,执行的SQL以及处理性能信息,所述评估报告还包括所述第二数据库的不兼容特性信息以及改造成本信息;
调用结构迁移模块在全量迁移模块进行数据迁移之前,将所述待迁移数据所使用的库表列和对象迁移到所述第二数据库,其中,当所述第一数据库与所述第二数据库异构时,通过预设的类型映射关系确定所述库表列和对象在所述第二数据库中的类型,在所述第二数据库创建与所述类型相对应的库表列和对象;
调用所述全量迁移模块将所述待迁移数据从所述第一数据库迁移到所述第二数据库,其中,在所述第一数据库与所述第二数据库同构时,将所述待迁移数据按照库表列的当前结构进行迁移,当所述第一数据库与所述第二数据库异构时,根据预设的中间格式完成所述第一数据库与所述第二数据库之间数据类型的转换;
在将所述待迁移数据从所述第一数据库迁移到所述第二数据库之后,调用全量校验模块对迁移后的数据进行校验,以判断所述第一数据库与第二数据库中的相应数据是否一致,并将不一致的数据记录在迁移报告内;
调用增量迁移模块,以所述全量迁移模块开始数据迁移时的第一时刻为基准,将所述待迁移数据在所述第一时刻之后产生变化的数据迁移到所述第二数据库;
当所述增量迁移模块所迁移的在所述第一时刻之后产生变化的数据已赶上所述待迁移数据当前的数据变化时,调用增量校验模块针对所述第一时刻之后产生变化的数据判断所述第一数据库和第二数据库的数据是否一致,并且针对所述迁移任务所迁移的数据判断所述第一数据库与第二数据库的数据是否一致,将不一致的数据记录迁移报告内。
12.如权利要求11所述的数据迁移方法,其特征在于,进一步包括:
在调用所述全量迁移模块或所述增量迁移模块,将所述待迁移数据从所述第一数据库迁移到所述第二数据库时,记录已写入数据的位点信息,用于断点续传。
13.如权利要求11所述的数据迁移方法,其特征在于,调用全量迁移模块将所述待迁移数据从所述第一数据库迁移到所述第二数据库,进一步包括,
在执行所述全量迁移的过程中,若所述第一数据库的库名、表名、列名与所述第二数据库的库名、表名、列名不一致,则依据预设的库表列的映射规则进行映射,将所述第一数据库的库表列的数据写入到所述第二数据库对应的库表列。
14.如权利要求11所述的数据迁移方法,其特征在于,调用全量校验模块对所述迁移后的数据进行校验,进一步包括,
在所述第一数据库与所述第二数据库异构时,读取所述第一数据库中的待迁移数据并将所述待迁移数据转换为预设的中间格式;
通过所述中间格式将所述待迁移数据转换为所述第二数据库的类型;
将所述第二数据库的类型的待迁移数据与所述第二数据库中相应的数据进行比对。
15.如权利要求11所述的数据迁移方法,其特征在于,调用所述全量校验模块对将不一致的数据记录在迁移报告内,进一步包括,
将不一致的数据记录记录在预设列表;在所述预设列表内存在不一致的数据时,每隔预设时长对所述不一致的数据进行重复校验,在经过预设次数的重复校验之后所述不一致的数据仍然存在时,将所述不一致的数据记录在迁移报告内。
16.如权利要求11所述的数据迁移方法,其特征在于,所述方法还包括:
在调用所述增量迁移模块将所述待迁移数据在所述第一时刻之后产生变化的数据迁移到所述第二数据库之前,利用所述第一数据库的日志,获取在所述第一时刻之后产生变化的数据;或者,利用所述第一数据库的触发器所保存的操作记录获取在所述第一时刻之后产生变化的数据。
17.如权利要求11所述的数据迁移方法,其特征在于,所述方法还包括:
在调用增量校验模块针对所述第一时刻之后产生变化的数据判断所述第一数据库和第二数据库的数据是否一致之前,通过解析第一数据库的日志数据或者解析第一数据库的触发器的操作记录获取所述增量迁移对应的数据。
18.如权利要求11所述的数据迁移方法,调用所述增量校验模块将不一致的数据记录迁移报告内包括:
将不一致的数据记录在预设列表;当所述预设列表存在所述不一致的数据时,每隔预设时长对所述不一致的数据进行重复校验,在经过预设次数的重复校验所述不一致的数据仍然存在时,将所述不一致的数据记录在迁移报告内。
19.如权利要求11所述的数据迁移方法,其特征在于,所述方法还包括:
当所述客户端对所述第一数据库的写操作已被切换到所述第二数据库时,以所述客户端向所述第二数据库首次写入数据时的第二时刻为基准,将所述第二数据库在所述第二时刻之后产生变化的数据迁移到所述第一数据库;
当所迁移的在所述第二时刻之后产生变化的数据已赶上所述第二数据库当前的数据变化时,针对在所述第二时刻之后产生变化的数据判断所述第一数据库和所述第二数据库中的数据是否一致,并将不一致的数据记录在预设列表中。
20.如权利要求19所述的数据迁移方法,其特征在于,所述方法还包括:
在所述客户端针对所述第二数据库的访问出现异常时,将所述客户端针对所述第二数据库的写操作切换回所述第一数据库。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610102817.9A CN107122360B (zh) | 2016-02-24 | 2016-02-24 | 数据迁移系统和方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610102817.9A CN107122360B (zh) | 2016-02-24 | 2016-02-24 | 数据迁移系统和方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN107122360A CN107122360A (zh) | 2017-09-01 |
CN107122360B true CN107122360B (zh) | 2021-06-15 |
Family
ID=59717616
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610102817.9A Active CN107122360B (zh) | 2016-02-24 | 2016-02-24 | 数据迁移系统和方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN107122360B (zh) |
Families Citing this family (30)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107679200A (zh) * | 2017-10-11 | 2018-02-09 | 郑州云海信息技术有限公司 | 一种在线数据迁移方法及装置 |
CN108255966A (zh) * | 2017-12-25 | 2018-07-06 | 太极计算机股份有限公司 | 一种数据迁移方法及存储介质 |
CN108304473B (zh) * | 2017-12-28 | 2020-09-04 | 石化盈科信息技术有限责任公司 | 数据源之间的数据传输方法和系统 |
CN110019140B (zh) * | 2017-12-29 | 2021-07-16 | 华为技术有限公司 | 数据迁移方法、装置、设备以及计算机可读存储介质 |
CN108460108A (zh) * | 2018-02-07 | 2018-08-28 | 广州和辰信息科技有限公司 | 一种数据库数据整理迁移方法、系统以及存储介质 |
CN108647270A (zh) * | 2018-04-28 | 2018-10-12 | 尚谷科技(天津)有限公司 | 一种基于容错时间日志的数据迁移的方法 |
CN109033124A (zh) * | 2018-05-31 | 2018-12-18 | 阿里巴巴集团控股有限公司 | 一种数据迁移的方法及装置 |
CN110196880B (zh) * | 2018-06-08 | 2023-05-12 | 腾讯科技(深圳)有限公司 | 异构数据库数据同步方法和装置、存储介质及电子装置 |
CN110597891B (zh) * | 2018-06-12 | 2022-06-21 | 武汉斗鱼网络科技有限公司 | MySQL聚合为PostgreSQL数据库的设备、系统、方法、存储介质 |
CN110795496B (zh) * | 2018-08-02 | 2023-05-30 | 阿里巴巴集团控股有限公司 | 数据同步方法、装置及系统 |
CN109284293B (zh) * | 2018-10-08 | 2020-08-28 | 湖南工学院 | 用于水务公司营业收费系统升级的数据迁移方法 |
CN111475483B (zh) * | 2019-01-24 | 2023-05-05 | 阿里巴巴集团控股有限公司 | 数据库迁移方法、装置及计算设备 |
CN110008200B (zh) * | 2019-04-04 | 2021-04-13 | 杭州数梦工场科技有限公司 | 一种数据库的数据迁移方法、装置及设备 |
CN110413595B (zh) * | 2019-06-28 | 2022-07-12 | 万翼科技有限公司 | 一种应用于分布式数据库的数据迁移方法和相关装置 |
CN111125054A (zh) * | 2019-11-21 | 2020-05-08 | 青岛聚好联科技有限公司 | 一种社区数据迁移的方法及装置 |
CN111984621B (zh) * | 2020-07-17 | 2022-08-30 | 新华三大数据技术有限公司 | 一种异构数据库迁移方法、装置及存储介质 |
CN112131177A (zh) * | 2020-08-14 | 2020-12-25 | 中信银行股份有限公司 | 数据迁移方法及装置、存储介质、电子设备 |
CN112286905A (zh) * | 2020-10-15 | 2021-01-29 | 北京沃东天骏信息技术有限公司 | 数据迁移方法及装置、存储介质、电子设备 |
CN112256674A (zh) * | 2020-10-30 | 2021-01-22 | 中国建设银行股份有限公司 | 一种数据迁移方法、装置、电子设备和存储介质 |
CN113515573B (zh) * | 2021-05-08 | 2023-01-17 | 上海英方软件股份有限公司 | 一种oracle数据库一对多协商复制断点的方法及系统 |
CN113157670B (zh) * | 2021-05-10 | 2024-02-09 | 中国工商银行股份有限公司 | 数据库的数据迁移方法及系统 |
CN113052543B (zh) * | 2021-05-31 | 2022-05-03 | 广州宸祺出行科技有限公司 | 一种区域订单和司机热力的统计储存方法、装置及应用 |
CN113409015B (zh) * | 2021-06-21 | 2024-08-23 | 浙江省能源集团有限公司 | 一种erp系统及其在双数据中心的双活部署的使用方法 |
CN113448948A (zh) * | 2021-07-12 | 2021-09-28 | 中国银行股份有限公司 | 数据迁移方法及装置 |
CN113590588A (zh) * | 2021-07-30 | 2021-11-02 | 广州新丝路信息科技有限公司 | 一种异构数据库增量数据实时迁移方法和相关设备 |
CN114416288A (zh) * | 2021-12-28 | 2022-04-29 | 深信服科技股份有限公司 | 一种数据传输方法、装置、设备及介质 |
CN115934681A (zh) * | 2022-12-24 | 2023-04-07 | 北京新数科技有限公司 | 一种异构关系数据库快速迁移方法及装置 |
CN117076431B (zh) * | 2023-10-13 | 2024-03-12 | 云筑信息科技(成都)有限公司 | 一种用于系统升级数据迁移的方法 |
CN117610970B (zh) * | 2024-01-04 | 2024-04-02 | 成都开元精创信息技术有限公司 | 一种数据迁移工作的智能评估方法及系统 |
CN118193499A (zh) * | 2024-04-12 | 2024-06-14 | 上海中汇亿达金融信息技术有限公司 | 用于异构数据库全量迁移的装置、方法及系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080243864A1 (en) * | 2007-03-28 | 2008-10-02 | Ciena Corporation | Methods and systems for a network element database migration service |
CN102752372A (zh) * | 2012-06-18 | 2012-10-24 | 天津神舟通用数据技术有限公司 | 一种基于文件的数据库同步方法 |
CN103793424A (zh) * | 2012-10-31 | 2014-05-14 | 阿里巴巴集团控股有限公司 | 数据库数据迁移方法及系统 |
CN104899295A (zh) * | 2015-06-09 | 2015-09-09 | 苏州国云数据科技有限公司 | 一种异构数据源数据关联分析方法 |
-
2016
- 2016-02-24 CN CN201610102817.9A patent/CN107122360B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080243864A1 (en) * | 2007-03-28 | 2008-10-02 | Ciena Corporation | Methods and systems for a network element database migration service |
CN102752372A (zh) * | 2012-06-18 | 2012-10-24 | 天津神舟通用数据技术有限公司 | 一种基于文件的数据库同步方法 |
CN103793424A (zh) * | 2012-10-31 | 2014-05-14 | 阿里巴巴集团控股有限公司 | 数据库数据迁移方法及系统 |
CN104899295A (zh) * | 2015-06-09 | 2015-09-09 | 苏州国云数据科技有限公司 | 一种异构数据源数据关联分析方法 |
Also Published As
Publication number | Publication date |
---|---|
CN107122360A (zh) | 2017-09-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN107122360B (zh) | 数据迁移系统和方法 | |
CN107122355B (zh) | 数据迁移系统和方法 | |
CN107122361B (zh) | 数据迁移系统和方法 | |
US11068501B2 (en) | Single phase transaction commits for distributed database transactions | |
Chandra | BASE analysis of NoSQL database | |
US10671642B2 (en) | Copying data changes to a target database | |
CN107844388B (zh) | 从备份系统流式恢复数据库 | |
US8489676B1 (en) | Technique for implementing seamless shortcuts in sharepoint | |
US11249943B2 (en) | Scalable enterprise content management | |
EP2746965B1 (en) | Systems and methods for in-memory database processing | |
US10838934B2 (en) | Modifying archive data without table changes | |
CN110209653B (zh) | HBase数据迁移方法及迁移装置 | |
CN105164673A (zh) | 跨数据库和文件系统的查询一体化 | |
US9128962B2 (en) | View based table replacement for applications | |
US11321374B2 (en) | External storage of unstructured database objects | |
EP2595069B1 (en) | Replication server | |
TWI571754B (zh) | 用來進行檔案同步控制之方法與裝置 | |
Antony et al. | Professional Hadoop | |
Edara et al. | Vortex: A Stream-oriented Storage Engine For Big Data Analytics | |
JP6680897B2 (ja) | 計算機システム及び分析ソースデータ管理方法 | |
Singh | NoSQL: A new horizon in big data | |
CN116719482B (zh) | 数据迁移方法、装置和存储介质及电子设备 | |
US20230014029A1 (en) | Local indexing for metadata repository objects | |
US12079174B2 (en) | Data retrieval from archived data storage | |
US20230126702A1 (en) | Transport of master data dependent customizations |
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 |