数据迁移 订阅
数据迁移(又称分级存储管理,hierarchical storage management,hsm)是一种将离线存储与在线存储融合的技术。它将高速、高容量的非在线存储设备作为磁盘设备的下一级设备,然后将磁盘中常用的 数据按指定的策略自动迁移到磁带库(简称带库)等二级大容量存储设备上。当需要使用这些数据时,分级存储系统会自动将这些数据从下一级存储设备调回到上一 级磁盘上。对于用户来说,上述数据迁移操作完全是透明的,只是在访问磁盘的速度上略有怠慢,而在逻辑磁盘的容量上明显感觉大大提高了。数据迁移是将很少使用或不用的文件移到辅助存储系统(如磁带或光盘)的存档过程。这些文件通常是需在未来任何时间可进行方便访问的图像文档或历史信息。迁移工作与备份策略相结合,并且仍要求定期备份。还包括电脑数据迁移,迁移旧电脑(旧系统)中的数据、应用程序、个性化设置等到新电脑(新系统),在系统升级后很有必要。 展开全文
数据迁移(又称分级存储管理,hierarchical storage management,hsm)是一种将离线存储与在线存储融合的技术。它将高速、高容量的非在线存储设备作为磁盘设备的下一级设备,然后将磁盘中常用的 数据按指定的策略自动迁移到磁带库(简称带库)等二级大容量存储设备上。当需要使用这些数据时,分级存储系统会自动将这些数据从下一级存储设备调回到上一 级磁盘上。对于用户来说,上述数据迁移操作完全是透明的,只是在访问磁盘的速度上略有怠慢,而在逻辑磁盘的容量上明显感觉大大提高了。数据迁移是将很少使用或不用的文件移到辅助存储系统(如磁带或光盘)的存档过程。这些文件通常是需在未来任何时间可进行方便访问的图像文档或历史信息。迁移工作与备份策略相结合,并且仍要求定期备份。还包括电脑数据迁移,迁移旧电脑(旧系统)中的数据、应用程序、个性化设置等到新电脑(新系统),在系统升级后很有必要。
信息
外文名
Data Migration
别    称
分级存储管理
中文名
数据迁移
数据迁移数据迁移的技术准备
数据迁移的实现可以分为3个阶段:数据迁移前的准备、数据迁移的实施和数据迁移后的校验。由于数据迁移的特点,大量的工作都需要在准备阶段完成,充分而周到的准备工作是完成数据迁移的主要基础。具体而言,要进行待迁移数据源的详细说明(包括数据的存储方式、数据量、数据的时间跨度);建立新旧系统数据库的数据字典;对旧系统的历史数据进行质量分析,新旧系统数据结构的差异分析;新旧系统代码数据的差异分析;建立新老系统数据库表的映射关系,对无法映射字段的处理方法;开发、部属ETL工具,编写数据转换的测试计划和校验程序;制定数据转换的应急措施。其中,数据迁移的实施是实现数据迁移的3个阶段中最重要的环节。它要求制定数据转换的详细实施步骤流程;准备数据迁移环境;业务上的准备,结束未处理完的业务事项,或将其告一段落;对数据迁移涉及的技术都得到测试;最后实施数据迁移。数据迁移后的校验是对迁移工作的检查,数据校验的结果是判断新系统能否正式启用的重要依据。可以通过质量检查工具或编写检查程序进行数据校验,通过试运行新系统的功能模块,特别是查询、报表功能,检查数据的准确性。数据转换与迁移通常包括多项工作:旧系统数据字典整理、旧系统数据质量分析、新系统数据字典整理、新旧系统数据差异分析、建立新旧系统数据之问的映射关系、开发部署数据转换与迁移程序、制定数据转换与迁移过程中的应急方案、实施旧系统数据到新系统的转换与迁移工作、检查转换与迁移后数据的完整性与正确性。数据转换与迁移的过程大致可以分为抽取、转换、装载三个步骤。数据抽取、转换是根据新旧系统数据库的映射关系进行的,而数据差异分析是建立映射关系的前提,这其中还包括对代码数据的差异分析。转换步骤一般还要包含数据清洗的过程,数据清洗主要是针对源数据库中,对出现二义性、重复、不完整、违反业务或逻辑规则等问题的数据进行相应的清洗操作;在清洗之前需要进行数据质量分析,以找出存在问题的数据,否则数据清洗将无从谈起。数据装载是通过装载工具或自行编写的SQL程序将抽取、转换后的结果数据加载到目标数据库中。 [1]  对数据的检查包括以下6个方面。(1)数据格式检查。检查数据的格式是否一致和可用,目标数据要求为number型。(2)数据长度检查。检查数据的有效长度,对于char类型的字段转换到varchar类型中,需要特别关注。(3)区间范围检查。检查数据是否包含在定义的最大值和最小值的区间中。例如年龄为300或录入日期为4000—1—1显然有问题。(4)空值、默认值检查。检查新旧系统定义的空值、默认值是否相同,不同数据库系统对空值的定义可能不同,需要特别关注。(5)完整性检查。检查数据的关联完整性。如记录引用的代码值是否存在,特别需要注意的是有些系统在使用一段时间后,为了提高效率而去掉了外键约束。(6)一致性检查。检查逻辑上是否存在违反一致性的数据,特别是存在分别提交操作的系统。
收起全文
精华内容
下载资源
问答
  • 数据迁移
    千次阅读
    2022-01-25 20:02:15

    在某些情况下运行的harbor占用的磁盘过大或安装的默认位置磁盘过小,导致磁盘空间不足,需要将数据迁移到空间足够的磁盘上。

    Harbor的安装可参考:https://blog.csdn.net/u011943534/article/details/110918562

    数据迁移步骤如下:

    1、关闭harbor服务

    docker-compose down -v
    

    2、迁移数据

    从harbor.yml种找到data_volume的配置,数据拷贝至迁移的目标目录
    cp -r <原来的路径> <新路径>
    例如:
    cp -r /data /home/harbordata/
    

    3、修改Harbor配置文件harbor.yml

    	# 编辑 harbor.yml 文件
    	vim harbor.yml
    
    	# 修改 data_volume 的挂载目录(修改前,请记录原始的地址,后面迁移数据需要用到)
    	# The default data volume
    	data_volume: /home/harbordata/data
    
    	# 修改日志文件目录(可选)
    	# The directory on your host that store log
    	location: /home/harborlogs
    

    4、启动Harbor服务

    	./prepare
    	docker-compose up -d
    

    5、删除原来的数据文件

    	rm -rf <原来的数据文件路径>
    	例如:
    	rm -rf /data
    
    更多相关内容
  • 由于大数据里面涉及到非关系型数据库如hive、kudu、hbase等的数据迁移,目前涉及到的迁移工具都没有支持hive数据库的事务表的迁移,如果hive库里面存在大量的事务表的时候,目前的工具都是不支持的,例如华为的CDM,...
  • 数据迁移方案模板 篇一软件系统数据迁移计划模板 附件十三 数据迁移计划 数据迁移的重要事件和里程碑日期 数据迁移前的备份要求 数据迁移测试结果清单 转换工作进度表 提示 ( 1)用 Microsoft Project 制作进度表 ...
  • mysql数据迁移到postgresql最简单的方式,亲测可以成功迁移
  • 本文档用于手把手教0基础的小白通过使用oracle数据泵技术来实现数据迁移。该文档非常详细,如果看了文档你还不会,记得叫人打我,一定要叫人来打我。如果对你有作用,请记得点个关注,谢谢
  • 目前的办公自动化产品(以下简称OA)中,即将或已经面对的大量客户,存在将原Domino版本系统向JAVA版本系统升级的需求,势必包括Domino系统内数据向JAVA版本系统中的数据迁移的要求。数据迁移中,由于Domino系统使用...
  • 本套课程介绍了一些常见的Oracle数据迁移场景,数据迁移在实际工作中经常会遇到,课程中介绍了跨系统跨版本数据迁移方法、TTS、TDB、FTE、单机到RAC-ASM等迁移方法,通过本套课程的学习,能够根据业务场景选择合适的...
  • 本表数据迁移

    2016-10-29 16:55:48
    数据迁移 表中的数据量在几亿以下
  • Oracle数据迁移技巧和优化思路.pdf
  • 云数据库管理与数据迁移,云数据库管理与数据迁移,云数据库管理与数据迁移,云数据库管理与数据迁移,云数据库管理与数据迁移,云数据库管理与数据迁移
  • AIX数据迁移.txt

    2019-08-12 14:56:48
    AIX数据迁移
  • “结束了吗?” “不用再每天工作到凌晨两点了吗?” “不用再一遍遍核对数据了吗?” “不用再研究难读的mapping rule了吗?” “是在做梦,还是已经醒了?” ...如果你没有做过数据迁移项目,很容

    “结束了吗?”

    “不用再每天工作到凌晨两点了吗?”

    “不用再一遍遍核对数据了吗?”

    “不用再研究难读的mapping rule了吗?”

    “是在做梦,还是已经醒了?”

    睁开眼,此时是下午两点。昨夜结束了为期一年的数据迁移工作。历经多次上线上,数亿条数据从老系统进入新系统,开启了新生。

    回首数据迁移的整个过程,可以说是无比痛苦。当然,随之也获取了宝贵经验。

    据说每个程序员都会至少参与一次数据迁移工作。如果想在轮到你的那一次痛苦少一点,我们不妨继续看下去。

    为什么数据迁移项目难做

    如果你没有做过数据迁移项目,很容易低估数据迁移的难度。

    “不就是把数据从一个DB转移到另外一个DB吗?select + insert 搞定!“ 如果抱着这个想法开始做数据迁移,保证你和团队很快就会掉入深渊。

    现在让我们掀开数据迁移 “简单” 的外衣,把一个个阻挡迁移成功的小恶魔揪出来看看。

    新老两套系统的DB设计全部熟悉吗?

    “你熟悉新系统的DB设计吗?”

    “当然!核心业务逻辑我都参与了开发!这就是我亲儿子!”

    “那你了解老系统的数据库设计吗?”

    “肯定不了解啊!咱们同事应该没人了解!”

    ”那迁移规则怎么写?“

    ”这个……让BA想办法“

    “BA可能连新系统的数据库都不熟悉……”

    “……”

    不同数据库的数据如何对接?

    “你了解MySql吗?“

    ”废话,咱们正在开发的系统不就用Mysql吗?“

    ”那你了解xxxx吗“

    “这是什么新的技术吗?”

    “这是诞生于上世纪70年代的数据库,要被新系统替代掉的老系统就是使用这个数据库”

    “What?”

    数据量、性能

    “你知道要迁移的数据量吗?”

    “据说有几个T!”

    “上线当晚全部搞定吗?”

    “是的,业务要求3小时以内搞定。”

    “……”

    错误数据如何处理?

    “你看,好多数据导入失败了”

    “看错误信息,大多数是迁移的校验太严格了。”

    “要不校验放松点?”

    “那新系统刚上线,就有大量脏数据啊!”

    “要不就不迁移这些数据了?”

    “业务人员会同意吗?”

    “那就让业务人员把数据改正确!”

    “但是好多数据通过界面没法改啊!”

    “那你说怎么办……”

    “先吃饭吧,回头再说……”

    业务部门过高的预期

    “项目启动会上业务经理要求数据100%导入成功!”

    “这不可能啊!”

    “业务说数据就是公司的财富,不能因为换系统造成公司资产损失!”

    “这么说倒也没毛病。”

    “没毛病?那今年你的KPI就是确保数据迁移100%正确率!”

    “……你直接说今年不给我发奖金得了!”

    数据迁移已经开始开发,但新系统开发还没完成

    “下周数据迁移项目就要正式开始了!”

    “嗯?新系统业务需求不是还有4个月才开发完吗?业务逻辑都不确定,怎么开发迁移程序?”

    “等业务需求开发完再动工,明年这时候都不一定能上完线啊……”

    “但业务变了,确定好的迁移规则也要跟着变……另外如何做到不遗漏新的业务场景?”

    “哎,走一步算一步吧,且行且珍惜…”

    “What?”

    要开发的,远不只数据迁移程序

    “加了俩月班,终于快把迁移程序开发完了!下周我请两天假出去旅旅游。”

    “嗯……确实迁移的逻辑部分快开发完了。但现在只能通过调API执行迁移任务,那么多任务很容易乱套”

    “明白了,我再写个API把有依赖的任务串一下!”

    “但还是好多API要调用,要不你再写个页面吧,通过按钮触发!”

    “没问题!”

    “还得开发统计成功率的工具,咱不能一直手动统计成功率啊!玩 Excel 的都用上 Python了!”

    “行,应该也不复杂!好歹咱们也是专业人士!”

    “还有客户要的错误日志分析报告,我们需要分类统计、分析,提供错误数据,每次都要手动统计半天。你也写个程序来搞吧!”

    “这个稍微复杂点,不过也还好!”

    “还有每次测试想重新跑数据,删除上一次导入的数据也挺麻烦,要不你也想想办法?”

    “……”

    “我知道任务有点多,但也都是必须的……”

    “喂?老婆,把下礼拜去马尔代夫的机票退了吧!我可能要去封闭开发……”

    迁移工具和技术学习成本高,加资源困难

    “经理,最近进度有些吃紧,迁移规则变化了好多,QA还提了好多bug。”

    “要不我调几个开发过来支援三周?”

    “项目用的这些工具和技术,很难快速找到合适的开发。没经验的开发光熟悉就得两周,还剩一周够干啥的……”

    “那你说怎么办?”

    “只能我再加加班了,回头调休吧”

    “行,这个项目做完,估计你可以调休一个月!”

    “想想还有点期待呢!”

    做好数据迁移,就这些事

    看完上面数据迁移过程中的各种问题,是不是觉得很头疼?其实这些问题都有解决的方案。根据经验,我提炼了如下几件数据迁移项目要关注的事情。

    Mapping rule(迁移规则) 管理

    Mapping rule是数据迁移的需求。写好 Mapping rule 需要既熟悉新系统,又熟悉老系统。并且要熟悉数据库设计。一个人能同时做到新老系统都熟悉几乎不可能。一般来说需要新老系统各出一位熟悉系统的成员,一起讨论 Mapping rule。

    这里我建议参与Mapping rule讨论和制定是开发同学。因为这个人不仅需要熟悉业务,还需要熟悉数据如何存储。

    Mapping rule 还需要明确迁移的数据范围。哪些业务数据需要迁移,迁移多久的数据都需要明确。

    Mapping rule 制定完成后,要和业务部门澄清确认。并且告知成功率不可能100%,尽量降低业务的预期。

    对 Mapping rule 的变更要格外小心,尤其在开发的收尾阶段,原因如下:

    1. 为了让几条报错数据能够进入新系统而改了 Mapping rule,有可能导致更多数据进不来。
    2. Mapping rule的修改很可能影响系统的性能。

    如果mapping rule是错误的,必须要改,那么一定注意上面的两个问题。千万不要仅仅关注 mapping rule 变化的实现。

    工具、技术培训

    数据迁移一般会使用 ETL 工具,当然也可能自己开发程序。迁移程序的关注点在如何高效快速的处理数据,这和业务开发关注点完全不同。因此采用的技术栈也区别很大。由于数据迁移所使用的工具和技术在业务开发中较少使用,所以需要提前投入时间学习。并且需要制定长期的学习计划,项目开始后也要保持团队的学习和技术交流。

    注意留存学习和分享的资料。未来有新人加入时,能够直接拿来学习。加速融入。否则新人上项目会很困难。

    程序设计

    架构师需要先设计好整体的代码框架,定义好开发规范和流程,并写好样例代码。这样可以确保开发集中进项目时能够尽快产出。程序设计要考虑如下事项:

    1. 迁移任务的记录、解耦以及依赖管理
    2. log 设计。需要包含任务名称,错误数据业务主键子段等关键信息。总之需要方便统计和定位错误。
    3. 通过模版化,让开发只关注业务逻辑。从而降低mapping rule实现的复杂度。
    4. 能够方便调节并发数等性能相关参数。
    5. 成功率统计程序设计
    6. 错误日志分析程序设计
    7. 其他辅助工具
    8. 如何兼容业务系统的新变更

    重点说一下最后一点,很多时候在迁移程序开发阶段,业务系统还未开发结束。如果解决业务逻辑的改动和表变更改动对数据迁移的影响是个难题。首先业务逻辑的改动我们可以通过调业务API完成数据迁移的方式来屏蔽掉。由于不是表对表转换后直接sql写入,而是通过业务的api写入。那么当API输入有变化时,迁移程序就会报错。此外如果逻辑有调整,数据自然也会按照最新的逻辑进入的数据库。

    对于新的字段和新的表,我们可以通过工具对比现有mapping rule的表和字段,识别出变化点,再分析是否需要增加mapping rule来迁移这些数据。

    一定要在开发高峰到来前做好程序设计和框架代码开发。否则会让开发团队陷入泥沼。

    性能调优

    大数量级的数据迁移,肯定会有性能的问题。数据迁移时,新老系统都不可用。因此,业务部门肯定希望数据迁移时间越短越好。这对性能是极大的挑战。关于性能优化,我有如下建议:

    1. 一定要有APM工具。还要有虚机、DB等资源的监控工具。有了工具才能将性能状况透明出来。性能瓶颈在哪里一目了然,否则就是胡乱抓药。
    2. 性能要全局考虑,不要只考虑过程某个单点的性能。很多时候,都是相互制约的。
    3. 减少网络IO的次数,每次请求可以传输更多数据。但并不是越多越好,需要找到性能的平衡点。
    4. 数据量太大的话,可以分几个批次迁移,分批上线。
    5. 变化不大的非交易数据可以提前上线。甚至交易数据也可以考虑提前上线,真正上线时再做增量迁移。
    6. 在高并发的迁移过程中,任何关于性能的参数调整都可能有想不到的影响。要不断试验,不能想当然。

    成功率及错误分析报告

    没有数据迁移经验的团队很可能在项目初期遗漏掉这两部分的开发工作。数据迁移的核心关注点是迁移没错,但是业务最关心的是成功率。

    这两种报告要提前设计好。迁移程序的设计和开发要考虑报表的需求来记录任务成功率和日志。否则等到程序开发完再去思考报告程序的开发,很可能会对原有迁移程序的逻辑作变更。

    这两份报告要和业务部门澄清,确定错误数据如何处理。错误数据处理一般分为如下三类:

    1. 数据问题,业务可以改数据。让业务自行修改。
    2. 数据问题,业务不能直接修改。可以通知业务自行备份数据。
    3. Mapping rule未考虑的场景。修改Mapping rule来适配这些数据。

    除了这两个报告,迁移过程中涉及到的一些小工具会很多,比如数据清理,环境状态检查工具等等。对这些工具的开发工作量要有预期。

    上线演练

    上线前如果有条件,一定要使用真实环境和数据进行演练。时间和执行步骤也尽量和上线计划一致。

    上线演练的时间不能过早。过早会造成演练的数据和上线时差异过大,减弱了演练的效果。但演练的时间也不能过晚,否则发现问题没有时间解决。我的经验是上线时间往前推两周。

    由于演练的时间点已经比较接近上线时间,除非发现严重 bug 才做修改。小问题宁可带着上线,以后再修数,也不要去改代码修复。因为你不知道是否会引入更为严重的问题。

    上线失败方案

    虽然你经历的上线可能从来没有失败过,但不要以为这一次也一定会成功。如果出现问题,是全部回滚还是部分回滚,都要提前计划好。先上线后面再补历史数据是一种方案。直接终止上线,再次开启老系统也是一种方案。不管什么方案,都需要提前和业务沟通好。因为上线期间的时间十分宝贵。一定避免临时定方案,这会造成决策困难,甚至无人拍板。

    上线

    经过数轮测试和演练,终于迎来了上线时刻,关于上线我有如下建议:

    1. 分配好资源。如果晚上上线,不要全部开发都来支持通宵上线。留有人手第二天做线上支持。
    2. 根据上线计划,一步步小心执行,确保每个操作至少两个同事 pair 完成。
    3. 每一步操作完成都要做相应的检查。
    4. 上线前需要预测可能出现的异常及处理方案。如果出现预料之外的错误也不要惊慌,冷静思考解决方案。

    线上支持

    我向你保证,迁移进来的数据一定会有各种各样的问题。一般来说修复数据有如下几种方式:

    1. SQL修复

      修复问题数据涉及的表,在同一个DB中,逻辑不复杂的情况。可以采用直接写SQL来修复

    2. 存储过程修复

      修复问题数据涉及的表,在同一个DB中,逻辑比较复杂的情况。可以写存储过程修复。优点是不用发布程序。缺点是不好调试和维护。

    3. 程序修复

      修复问题数据需要跨DB时,需要写程序来修复。这种场景也是最复杂的。

    无论采用哪种方式,都需要经过充分的测试。数据修复是很危险的操作,一旦程序有问题,可能会把没问题的数据改坏。此外还要测试修复程序的性能,对执行时长要有预估。

    另外生产环境执行修复前一定要做数据的备份。

    总结

    数据迁移从来都是一件困难的事情,一定要做好规划,把问题想在前面。如果团队有做过数据迁移的成员最好。即使没有,解决了本文所提到的这些问题,你的数据迁移工作也会轻松很多!

    展开全文
  • 这是一个电子银行数据迁移方案,我这个方案内容丰富,欢迎大家下载阅读,希望对你们有帮助。
  • nosql实验五-HBase数据迁移与数据备份&恢复
  • oracle数据迁移

    2017-10-25 17:14:23
    oracle数据迁移文档,快速迁移的数据的好办法,一看就懂
  • Kettle 数据迁移

    千次阅读 2021-06-09 18:59:42
    Kettle 数据迁移 Kettle 中文名称叫水壶,该项目的主程序员希望把各种数据放到一个壶里,然后以一种指定的格式流出。 Kettle是用来做数据迁移的,也就是将一个数据库中的数据全部导入另一个数据库,说起来简单,...

    Kettle 中文名称叫水壶,该项目的主程序员希望把各种数据放到一个壶里,然后以一种指定的格式流出。

    Kettle是用来做数据迁移的,也就是将一个数据库中的数据全部导入另一个数据库,说起来简单,可是要是这两个数据库的表中的字段完全不同那怎么办呢,总不能简单的复制粘贴吧,所以就需要将表的字段名称甚至字段内容都进行一次转换,才可以解决问题。在这里关于Kettle的安装就不做说明了,主要是说说我的用法,也算是一个新手使用教程吧。

    打开软件后,首先,我们先新建一个转换,ctrl+s进行保存,输入一个文件名,同时,第一次保存该文件时,文件名也会直接成为该转换的名称,然后选择一个自己能找到的地址就行了。

    这时我们看左边,有两个页签可以切换,分别是主对象树和核心对象,主对象树就是当前的转换。核心对象相当于一个工具栏,里面有各种各样的工具。我主要用到的有:输入-表输入,转换-值映射,转换-字段选择,转换-增加常量,脚本-java代码,输出-表输出。

    我们把所有上述的一个个小模块都给拖到主面板上,如图:

    img

    然后从第一个开始,首先单击第一个模块表输入,如图:

    img

    选择第四个带箭头的图标,然后会发现有个灰色的箭头随着你的鼠标移动,这时将鼠标移动到第二个模块值映射上,会发现箭头变蓝这时单击第二个模块值映射,会发现表输入和值映射之间多了一个蓝色箭头,有事需要选择主输出步骤。通过这种方式将所有模块串联。如图:

    img

    上图就代表了一个完整的表的数据交换,这时我们需要在左侧栏,点击主对象树,然后右击DB连接,选择新建,然后填入你的数据库连接信息,并测试,成功连接后点确认即可新建连接,如图:

    这时,我们的准备工作基本已经就绪了,可以进行基本的数据迁移了,首先操作的是表输入,顾名思义,表输入代表的就是数据的来源,双击表输入,选择数据库连接,然后写上你要取数据的sql,然后点击预览,可以查看你查找到的数据,这时必须查看数据格式,因为部分字段,如:disabled,数据库中存的是0或1,但通过Kettle查找出来的数据中,disabled为Y或N。

     

    img

    一般来说,能够预览到数据说明你的sql是对的,也就可以进行下一步了。然后我们来操作下一步:值映射,值映射就是将某些值改成另一种值,比如将Y和N映射为1和0。双击值映射,首先选择使用的字段名,然后填上原值和目标值,点击确定即可。如图:

     

    img

     

    之后就是最重要的一步了:字段选择,由于数据迁移时,必定很多字段存在差异,那么如何将两张表中的字段一一对应呢,这是就可以通过字段选择将字段的名称修改成我们想要的。首先,双击字段选择,切换到第三个页签:元数据。然后点击右边的获取改变的字段,然后Kettle会将你sql中查询出来的字段一一列出,在改名成那列填上你现表中的字段,类型填上对应的类型,需要注意的是Integer代表Long,Number代表Double,同时,类型也可以不填,但不建议。填完后选择确定。如图:

     

    img

    这时,你会发现可能你现在的表中有很多字段是原表中没有的,但这些字段又是不可或缺,不能为空的,那么就需要用到增加常量这个模块了,可以填上名称,类型,长度,值(默认值),然后点击确定。如图:

     

    img

    在完成上部分操作后,基本字段是都可以对上了,但是,有些字段需要需要一些逻辑的处理,不能直接将取出来的值直接存入现表中,比如我自己的项目,我们的需求是将原来网站上的数据放到我们正在运维的新网站上,所以迁移过来的时候,现表已经存在数据,id就存在重复的现象,我们就把迁移过来的数据id直接改为负值,同时关联的id也要改为负值,这样就可以解决id重复,数据无法迁移的问题,同时关联关系也不会丢掉。这时候就需要用到java代码这个模块了,这里有个问题,Kettle自带的java代码模块不会自动导入jar包,所以建议先在MyEclipse中写好代码,然后复制过来,同时需要把导入的jar包复制过来。当然,导入的jar包必须在Kettle的文件夹下的lib文件夹中存在。在写代码的时候,可以在左侧栏中的input fields中双击getValue,这就是取值;在左侧栏中的output fields中双击setValue,这就是赋值。在写代码时,可以点击右下方的测试类来进行测试java代码。所以,java代码模块可以用来进行逻辑的处理,如图:

     

    img

    经过以上的步骤,我们的数据应该已经全部修改成新表格式的数据了,那么就可以进行最后一步表输出了,双击表输出,首先选择数据库连接,然后在目标表中写上要导出的那张表,注意不要勾选裁剪表,它会将表中原有数据删掉,然后点击数据库字段页签,如果需要字段有冗余,需要选择指定数据库字段,然后点击右方获取字段按钮,这时需要小心排查,需要将现表中没有的字段给删掉,右击,删除选中行就可以了。编辑完后确定,如图:

     

    img

    然后在主界面点击上方的运行按钮运行这个转换,运行成功如图:

    img

    若是没有错误出现,则代表转换运行成功。这时就可以去查看数据库中的数据有没有问题了,有问题可以再进行迭代调试。若是有错误出现,可以查看下方的执行结果中的日志页签,这里有比较详细的错误,可以协助你的调试。

    以上操作基本可以满足数据迁移的全部需求了,多练练就行,接下来讲个拓展,有时候我们在执行完所有的转换操作后,还是无法满足需求,比如需要在数据转换之后进行一个sql来格式化某个字段。

    第一种方法就是在执行完转换后,直接使用Navicat执行一个sql,可以满足需求,但需要额外的操作,其实Kettle也可以满足我们的这个需求,Kettle在核心对象的脚本中有一个执行sql脚本。但是,如果你直接拖到表输出的后一步,你的想法是执行完表输出后执行sql,但Kettle的机制是只要有sql是优先执行的,所以其实是在你插如数据之前执行了这段sql的。

    那么,应该怎么做呢,那就要涉及到作业的概念了。作业是什么呢,简单理解就是很多个转换在一起,从上往下顺序执行,这不就可以解决我们的问题了么,首先我们先新建两个转换,一个是正常的数据迁移,第二个就放一个执行sql脚本的模块就可以了,写上你再数据迁移之后需要运行的sql。如图:

     

    img

     

    然后点击左上角文件,新建一个作业,我们只需要在核心对象中找到通用-START和通用-转换,然后拖一个START和两个转换到主面板,然后双击转换,第一个转换选择正常的数据迁移,第二个转换选择就一个执行sql脚本的转换,如图:

    img

     

    然后我们就可以运行这个作业了,运行成功后,即可实现先进行数据迁移,在执行sql的操作,如图:

    img

    以上操作就是我使用Kettle进行老数据迁移的心得,基本满足我的使用需求,希望也可以帮到大家。

     

     

    展开全文
  • 数据迁移方案

    千次阅读 2021-11-10 14:54:39
    双写迁移 简单来说,就是在线上系统里面,之前所有写库的地方,增删改操作,除了对老库增删改,都加上对新库的增删改,这就是所谓的双写,同时写俩库,老库和新库。  然后系统部署之后,新库数据差太远,用之前...

     一、数据迁移背景

    问题场景:

    现在有一个未分库分表的系统,未来要分库分表,如何设计才可以让系统从未分库分表动态切换到分库分表上?

    1.1 停机迁移方案

    我先给你说一个最 low 的方案,就是很简单,大家伙儿凌晨 12 点开始运维,网站或者 app 挂个公告,说 0 点到早上 6 点进行运维,无法访问。

    接着到 0 点停机,系统停掉,没有流量写入了,此时老的单库单表数据库静止了。然后你之前得写好一个导数的一次性工具,此时直接跑起来,

    然后将单库单表的数据哗哗哗读出来,写到分库分表里面去

    导数完了之后,就 ok 了,修改系统的数据库连接配置啥的,包括可能代码和 SQL 也许有修改,那你就用最新的代码,然后直接启动连到新的分库分表上去。

    验证一下,ok了,完美,大家伸个懒腰,看看看凌晨 4 点钟的北京夜景,打个滴滴回家吧。

    但是这个方案比较 low,谁都能干,我们来看看高大上一点的方案。

    1.2 双写迁移方案 

    简单来说,就是在线上系统里面,之前所有写库的地方,增删改操作,除了对老库增删改,都加上对新库的增删改,这就是所谓的双写,同时写俩库,老库和新库

    然后系统部署之后,新库数据差太远,用之前说的导数工具,跑起来读老库数据写新库,写的时候要根据 gmt_modified 这类字段判断这条数据最后修改的时间,

    除非是读出来的数据在新库里没有,或者是比新库的数据新才会写。简单来说,就是不允许用老数据覆盖新数据

    导完一轮之后,有可能数据还是存在不一致,那么就程序自动做一轮校验,比对新老库每个表的每条数据,接着如果有不一样的,就针对那些不一样的,从老库读数据再次写。

    反复循环,直到两个库每个表的数据都完全一致为止。

    接着当数据完全一致了,就 ok 了,基于仅仅使用分库分表的最新代码,重新部署一次,不就仅仅基于分库分表在操作了么,还没有几个小时的停机时间,很稳。

    所以现在基本玩儿数据迁移之类的,都是这么干的。

    二、数据迁移扩展

    项目初始,是单库,分了2个表 就可以满足业务数据需求。

    随着时间推移,多年后,数据越来越多,当前的数据库设计已经不能满足当前设计。

    于是,需要如上图一样,进行分库再分表。

     2.1 同步双写方案

     如上图所示

    1. 应用还是保持从旧库中读写数据

    2. 编写个应用,通过canal将增量数据通过新的分库分表规则也同时写入新库

    3. 同时 编写个旧数据的迁移的工具,通过新的分库分表规则写入新库。

    4. 旧数据迁移完成后,验证新旧库中数据是否一致,一致后,既可切换位新库。

    三、具体的迁移方案

    双写方案,也是一个高可用的平滑迁移方案,这个方案主要分为四个步骤。

    数据迁移前,上游业务应用通过旧的服务访问旧的数据

    3.1 步骤一

    双写,写旧库,同时写新库

    服务进行升级,对“旧库上的数据修改”(这里的修改,为数据的insert, delete, update),在新库上进行相同的修改操作,这就是所谓的“双写”

    主要修改操作包括:

    (1)旧库与新库的同时insert;

    (2)旧库与新库的同时delete;

    (3)旧库与新库的同时update;

    由于新库中此时是没有数据的,所以双写旧库与新库中的affect rows可能不一样,不过这完全不影响业务功能,只要不切库,依然是旧库提供业务服务

    这个服务升级风险较小:

    (1)写接口是少数接口,改动点较少;

    (2)新库的写操作执行成功与否,对业务功能没有任何影响

    3.2 步骤二

    数据迁移工具

    研发一个数据迁移工具,进行数据迁移。这个数据迁移工具,把旧库中的数据转移到新库中来。

    这个小工具的风险较小:

    1. 整个过程依然是旧库对线上提供服务;

    2. 小工具的复杂度较低;

    3. 任何时间发现问题,都可以把新库中的数据干掉重来;

    4. 可以限速慢慢迁移,技术同学没有时间压力;

    数据迁移完成之后,就能够切到新库提供服务了么?

    答案是肯定的,因为前置步骤进行了双写,所以理论上数据迁移完之后,新库与旧库的数据应该完全一致。

    由于迁移数据的过程中,旧库新库双写操作在同时进行,怎么证明数据迁移完成之后数据就完全一致了呢?

     

    如上图所示:

    1. 左侧是旧库中的数据,右侧是新库中的数据;

    2. 按照primary key从min到max的顺序,分段,限速进行数据的迁移,假设已经迁移到now这个数据段,

    数据迁移过程中的修改操作分别讨论:

    1. 假设迁移过程中进行了一个双insert操作,旧库新库都插入了数据,数据一致性没有被破坏

    2. 假设迁移过程中进行了一个双delete操作,这又分为两种情况

    情况一:假设这delete的数据属于[min,now]范围,即已经完成迁移,则旧库新库都删除了数据,数据一致性没有被破坏;

    情况二:假设这delete的数据属于[now,max]范围,即未完成迁移,则旧库中删除操作的affect rows为1,新库中删除操作的affect rows为0,

    但是数据迁移工具在后续数据迁移中,并不会将这条旧库中被删除的数据迁移到新库中,所以数据一致性仍没有被破坏;

    3. 假设迁移过程中进行了一个双update操作,可以认为update操作是一个delete加一个insert操作的复合操作,所以数据仍然是一致的。

    除非,在一种非常极限的情况下:

    1. 数据迁移工具刚好从旧库中将某一条数据X取出;

    2. 在X插入到新库中之前,旧库与新库中刚好对X进行了双delete操作;

    3. 数据迁移工具再将X插入到新库中;

    这样,会出现新库比旧库多出一条数据X。

    但无论如何,为了保证数据的一致性,切库之前,还是需要进行数据校验的

    3.3 步骤三

    数据校验工具

    在数据迁移完成之后,需要使用数据校验的小工具,将旧库和新库中的数据进行比对,完全一致则符合预期,如果出现步骤二中的极限不一致情况,则以旧库中的数据为准

    这个小工具的风险依旧很小:

    1. 整个过程依然是旧库对线上提供服务;

    2. 小工具的复杂度较低;

    3. 任何时间发现问题,大不了从步骤二开始重来;

    4. 可以限速慢慢比对数据,技术同学没有时间压力;

     3.4 步骤四

    切到新库

    数据完全一致之后,将流量切到新库,完成平滑数据迁移

    至此,升级完毕,整个过程能够持续对线上提供服务,不影响服务的可用性。

    3.5 总结

    双写方案,四个步骤:

    1. 服务进行升级,记录“对旧库上的数据修改”进行新库的双写;

    2. 研发一个数据迁移小工具,进行数据迁移;

    3. 研发一个数据比对小工具,校验数据一致性;

    4. 流量切到新库,完成平滑迁移;

    数据迁移方案同步双写方案数据迁移

    展开全文
  • 用友NC56、57到NC63数据迁移工具V1.0操作手册,用友NC56、57到NC63数据迁移工具V1.0操作手册
  • oracle数据迁移项目实施方案 项目实施经典案例 擦考价值大
  • 相对应的金融科技也在不断的更新和迭代,每次有新的软件系统出炉的时候,就是老的软件系统命运终结的开始,老的项目当然不会束手就擒,它也会做最后的挣扎,当你从它身上迁移用户或者商户的时候,它会给你带来很多...
  • Nexus数据迁移

    千次阅读 2022-04-21 17:17:50
    环境信息 操作系统 Nexus版本 端口 旧服务器 ... Nexus主要由两部分文件组成,安装目录和数据目录,nexus迁移只需要将两个目录从旧服务器复制到新服务器即
  • 文章目录先从缓存击穿说起MySQL数据同步Canal工作原理搭建本地Canal中间件进行数据迁移 先从缓存击穿说起 所谓缓存击穿,就是热点数据在缓存中没有数据,大量用户请求直接打在数据库上,这是一种非常危险的情况,...
  • Minio数据迁移

    千次阅读 2022-01-23 14:15:54
    文章目录项目背景迁移方案什么是[Rclone](https://rclone.org/)...,用来存储文件,由于数据量较大,需要先写一个迁移方案,并验证是否可行,记录一下使用过的方案 迁移方案 使用Minio自带的mc工具 未采用原因:传输
  • 数据迁移测试总结

    千次阅读 2022-02-15 13:00:37
    数据迁移测试总结
  • 1、新旧redis集群迁移 2、支持redis集群的存量和增量数据迁移 3、支持redis集群数据的离线迁移
  • MYSQL 到MYSQL 分表数据迁移

    千次阅读 2022-03-28 16:52:30
    MYSQL 到MYSQL分表 数据迁移,不停机迁移
  • 而在分布式应用场景中,数据迁移是一个比较常见的问题。关于Kafka集群数据如何迁移,今天叶秋学长将为大家详细介绍。跨集群迁移数据的本质是,Kafka启动了消费者读取源集群数据,并将消费后的数据写入到目标集群,在...
  • ElasticSearch 数据迁移方案

    千次阅读 2022-03-12 17:04:17
    }, “tagline”: “You Know, for Search” } ElasticSearch 数据迁移方案 ElasticSearch 数据迁移方式 有以下三种方式可以更新索引结构映射和设置 更新索引结构设置 因为自定义字段的key是未知的,无法显示的设置在...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 469,743
精华内容 187,897
关键字:

数据迁移