数据迁移_数据迁移工具 - CSDN
数据迁移 订阅
数据迁移(又称分级存储管理,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)一致性检查。检查逻辑上是否存在违反一致性的数据,特别是存在分别提交操作的系统。
收起全文
  • 数据库数据迁移方法

    千次阅读 2019-09-27 16:11:45
    1.从旧数据库中将数据迁移到全新的数据库 2.有两个数据库A和B,A中需迁移表的结构和B一样,A和B中都有各自的数据,现在要同步两个数据库 方法: 通过单表查询插入SQL语句 通过写数据库存储过程 通过写程序(...

    转载请注明:https://blog.csdn.net/a714530833/article/details/90199162

    本文使用的数据库:SQLSERVER

    场景:

    1.从旧数据库中将数据迁移到全新的数据库

    2.有两个数据库A和B,A中需迁移表的结构和B一样,A和B中都有各自的数据,现在要同步两个数据库

    方法:

    1. 通过单表查询插入SQL语句
    2. 通过写数据库存储过程
    3. 通过写程序(这里采用java语言),将数据查询出来后,插入新数据库

    注:主要介绍第一种方式,2和3简单介绍下思路,具体实现需后面再研究。1和2不一样的地方是,第二种方式存储过程实现的基本思路,是通过写语句,在迁移一条主表数据的时候,同时迁移其关联子表数据。而第一种方法,是一个表一个表的迁移,在有关联表的存在,所以要先迁移主表,后迁移子表。

    实现:

    一、通过单表查询插入SQL语句:

    两个语句:

    select * into TABLE_A from [192.168.0.110].reliability.dbo.TABLE_B where 条件1 nad 条件2

    该语句会将TABLE_B中满足条件的数据拷贝到TABLE_A(TABLE_A在原数据库中不能存在,是脚本自动生成的表),注意此方法只能将数据进行拷贝,表结构不会保留(字段一样,单主键,外键,字段属性设置等都会丢失,可以理解成将查询出来的数据,进行简单保存)

    set identity_insert TABLE_A ON /**如果表主键设置自增长且要主动设置指定值,需将此开关打开**/
    INSERT INTO [reliability].[dbo].TABLE_A 
    			([PKID],
    			[CCP_ID]
               ,[cum_yes])
     select		[PKID]
    		   ,[CCP_ID]
               ,[cum_yes]
     from [192.168.0.110].reliability.dbo.TABLE_B
     WHERE 条件
     set identity_insert TABLE_A OFF

    该方式需将要拷贝的表先在新数据库中生成(可用客户端拷贝旧表的表结构),且要拷贝的字段信息需都指明。如果主键没设置自增长,则set identity_insert TABLEL_A ON不要加。

    注:

    • 如果要迁移数据库在两个不同服务器上,则要在新数据库上配置链接服务器,将旧数据库配置到新数据库上,新数据库就能通过[IP].数据库名.dbo.表名的形式,访问到旧数据库的数据
    • 对于要同步新旧数据库数据(两个数据库都有各自的数据),会存在一个问题,待迁移主表主键为自增长,旧数据库待迁移数据的主键在新数据库中可能已经被占用。所以不能简单的直接将原本的主键拷贝过去。而且也不能令拷过去的数据主键自增长,因为这样其关联的子表就会不知道其关联的主表主键是多少。解决方式有几种思路:1.在新数据库中新增一个临时字段,记录旧表中的主键数据,子表迁移的时候根据该字段更新外键数据,最后在删除该字段(修改到表结构,有风险,自己评估)。2.通过写程序或存储过程的方式实现(较麻烦)。3.给待迁移的数据主键加上某个指定的值,令其主键大于现有最大值,保证其不会重复,然后子表迁移时,外键也加上该值。(需评估数据主键的范围是否满足)

    二、存储过程

    由于本人了解有限,并未深入学习存储过程,这边只简单介绍大体思路,具体实现还待验证。

    通过游标进行对旧数据库查询结果的遍历,并取出每次遍历中各字段的值。对每次遍历进行新数据库的插入。然后再根据主键,查询出关联子表,同理查询出子表数据进行插入(关联外键可在插入时直接更新)。子表操作完之后,再进行主表的下一轮循环。最后摧毁游标。(如果不是必要,建议不要采用存储过程,毕竟存储过程实现较难,且不易排查问题)

    三、通过java程序

    这里对于该方法,只介绍思路和新旧数据库的数据源切换方法。

    首先,在项目中配置读和写的数据源

    配置mapper映射(使用mybatis实现)

     

    自定义注解,用于读写数据源的切换:

    利用Spring AOP切面编程实现对自定义注解的解析

    通过重写determineCurrentLookupKey动态切换数据源(看不明白的请自行百度Spring动态切换数据源)。以上就是整个数据迁移项目的核心,剩下的就是一些mybatis的查询和插入语句,在这就不做过多的描述。

    转载请注明:https://blog.csdn.net/a714530833/article/details/90199162

    展开全文
  • 数据迁移实施方案

    万次阅读 2017-09-03 19:10:27
    最近经历了一场大型的数据迁移测试,因为以前对数据迁移测试研究甚少,所以对测试实施方案的制定非常的棘手,在网上也查询了很多,发现相关资料很少,并且大部分都是一些理论指导,没有讲到具体的如何去做的方法,...

    最近经历了一场大型的数据迁移测试,因为以前对数据迁移测试研究甚少,所以对测试实施方案的制定非常的棘手,在网上也查询了很多,发现相关资料很少,并且大部分都是一些理论指导,没有讲到具体的如何去做的方法,整个方案也不够全面,没有实际的实施指导价值。

    所以结合了这次自己经历的数据迁移测试实施以及前人的观点,写了这么一篇比较完善的,更具实施指导意义的测试方案,一方面是对这次经历的数据迁移测试的一个总结,另外一方面是想能有更多的朋友参与到这数据迁移测试的讨论中,能为后面可能经历的同学留下更好的参考资料,由于能力有限,文中肯定有很多纰漏,欢迎大家吐槽拍砖,哈哈!希望后面能把这篇文章完善的更好。

    下面进入正文


    前期准备工作

    数据迁移范围确定

    在做数据迁移测试前需要和开发部门确认好数据迁移范围,主要包含以下几点:

    基本数据迁移

    基本数据迁移就是从老库中把一些老表直接复制到新库的新表中,或是:

    1.拆表:老库的老表拆分到新库的其他几张新表中去,2.合表:老库中的几张老表的字段合并到新库的一张新表中去

    所以需要提前和开发部门确认好以下问题:

    要和和开发一起确认要迁移的是那几张表?弄清楚老库中的老表对应要迁移到新库中的哪几张表?

    迁移的表中,哪些数据字段需要迁移,哪些数据字段不需要迁移?

    老表要迁移的数据记录条数是多少?

    新老系统数据库表结构变化

    1.新增字段和老系统表完全不存在关系

    老表迁移到新表中,新表中有些必填字段在老表中没有的,需要和开发确认这些数据的填写规则(给什么默认值)

    2.新增字段是由老系统特定字段转换而来

    新系统中的一些字段可能是老系统中的一些字段通过一些规则转化而来的,所以需要和开发部门确认这些转换规则

    迁移范围统计方法

    基本数据迁移

    1.直接复制表


    2.非直接复制表(拆表&合表)


    新老系统数据库表结构变化

    1.新增字段和老系统表完全不存在关系


    2.新增字段是由老系统特定字段


    测试方案



    测试类型分以上几大块,下文会对每种类型的测试做详细的说明

    基本数据迁移测试

    要保证老系统到新系统的无缝切换,必须要保证数据的正确性,而将老系统中数据迁移到新系统,首先就要保证所迁移的数据量是一致的,

    只有在保证数据量一致的情况下,才能进行其他方面到测试,如果数据量都不一致,说明迁移方法或者脚本就是错误的,需要寻找原因。

    方法1:

    测试工具

    Navicat,文本比较工具(以 Beyond Compare为例)

    测试流程:


    迁移范围确定:

    开发部门统计好本次的数据迁移范围给到测试部门

    数据表导出:

    1.对于直接复制的表

    根据“迁移范围确定”中的库名、表名、条数,通过Navicat工具以txt格式,分别导出对应的迁移前的老表和迁移后的新表,

    如果不是全表的数据,可以通过SQL语句选择需要的条数

    以上文中的“表1”为例,

    导出老库old中的老表hxuser,保存到 hxuser老.txt 中

    以及新库new中的新表hxuser,保存到 hxuser新.txt 中


    2.对于非直接复制的表

    需要在Navicat中先用SQL语句查询到对应的迁移前的老表数据和迁移后的新表数据,然后再用txt格式导出

    以上文的“表(2)”为例

    1) 先用SQL查询迁移前的老表数据,并导出


    2) 再用SQL查询迁移后的新表数据,并导出


    3.新旧数据比对

    使用Beyond Compare比较老数据和新数据是否一致,一致则说明迁移正确,不一致则说明迁移中存在问题

    继续用上文的“表1”为例,比较上一个步骤导出的 “hxuser老.txt” 和“hxuser新.txt”

    如果数据一致,则在Beyond Compare中不会有数据差异


    如果数据不一致,则在Beyond Compare中能比较出差异数据,并且能直接能定位到差异数据所在,可以统计到新旧数据所有的差异点


    方法2:

    测试工具

    Navicat,文件MD5生成工具(以Hash为例)

    测试流程

    测试流程基本和方法1一致,只有在进行第三步“新旧数据比对”有区别,这里是使用Hash工具。

    使用Hash,为新老数据文本生成 MD5 值,并比较2个MD5值是否一致,一致则说明迁移正确,不一致则说明迁移中存在问题

    (MD5可以为任何文件(不管其大小、格式、数量)产生一个独一无二的md5“数字指纹”,如果任何人对文件做了任何改动,

    其MD5也就是对应的“数字指纹”都会发生变化,MD5只会对文件内容进行运算,并不对创建时间,文件名等进行比对)

    继续用上文的“表1”为例,分别用Hash为 “hxuser老.txt” 和“hxuser新.txt”生成MD5值


    可以看到如果数据一致的时候,MD5值是一致的


    当数据不一致时,MD5值也会不同

    方法3

    测试工具

    代码脚本(任何一种语言都可以,Python和Java优选)

    测试流程:

    这里可以开发自动化测试脚本,来完成整个测试,这里因为都是在做字段的比对动作,所以尽量开发可以复用的测试脚本

    几种方法比较:


    新老系统数据库表结构变化测试

    新增字段和老系统表完全不存在关系

    对于这种“新增字段和老系统表完全不存在关系”的测试,因为都是在新表中给新增字段一个固定的默认值,所以只需要根据开发提供的填写规则,检查该字段的所有值是否满足填写规则。

    测试工具:

    Navicat

    测试流程:


    以上文“表3”为例,这里需要检查agent库中表hxuser的status字段的所有值是否都为“1”

    其实只需要4步就能完成所有的测试

    1.范围及规则确定

    开发部门统计好所有新加字段填写规则给到测试部门

    2.计算新字段所有行数

    计算表hxuser的status字段对应的所有行数,可在Navicat运行SQL语句:

    SELECT COUNT(status) FROM hxuser



    3.计算新字段中满足规则的行数

    计算status字段中值为1的所有行数,可在Navicat运行SQL语句:

    SELECT COUNT(status) FROM hxuser WHERE status=1



    4.比较两次的行数

    比较以上2步计算的行数是否相同,如果相同则表示测试通过,如果不相同则表示新增字段中有不满足取值规则的行,

    可以通过其他的SQL语句来定位不满足取值规则的行

    新增字段是由老系统特定字段转换而来

    方法1

    测试工具:

    代码脚本(任何一种语言都可以,Python和Java优选)

    测试流程:


    以上文“表3”为例

    1.范围及规则确定:

    开发部门统计好所有转化字段以及转化规则给到测试部门

    2.测试脚本开发

    根据“范围及规则”,编写对应的测试脚本,以达到校验新老字段的所有值是否满足规定的转化规则

    3.实施测试

    运行测试脚本,检查是否测试通过,若未测试通过,可以做进一步的异常数据定位

    方法2

    如果没有条件使用测试脚本自动化测试时,可以使用人工的切片抽样测试

    测试工具:

    Navicat

    测试流程:


    1.数据切片抽样

    用Navicat筛选到需要校验的新老数据,假设需要校验的数据有n行,然后对n行进行分段切片抽样,

    影响分段的密度,分段后每一段抽取的数量的因素很多,需要综合考虑之后,确定一个最优值,可以主要参考以下2点因素:

    1) n的大小,如果n在100以内,我们甚至可以对n行全量抽取,如果n的值很大,则可以把n均分为若干段,然后在每段中随机抽取相同的数量的行数

    2) 实际工作中可以使用到的工时及人力资源,如果很充足的话,我们可以相对高密度的分段,每段大数量的抽取;

    如果很紧张的话,那我们只能相对低密度的分段,每段少数量的抽取。

    2.数据校验

    针对上一步抽样得到的数据,人工检验其是否满足转换规则

    几种方法比较


    业务逻辑测试

    “基本数据迁移测试”和“数据库表结构变化测试”做完以后,需要使用从老系统中迁移过来的数据,在业务系统中进行流程测试,功能测试确保迁移后到数据可用。

    在做功能测试时要注意以下2点:

    1.需要和开发部门确认新系统会用到老表数据的业务都有哪些,但是每一张表涉及的业务会非常的多,所以想百分百的覆盖所有业务是非常困难的,只能在有限的资源下统计相对全面的的业务范围,这些业务点也就组成了针对数据迁移的功能测试范围。

    2.上面这点也说到了,测试的“新系统会用到老表数据的业务”肯定是不全面的,所以最后一定要做一轮全系统的功能回归测试。

    注意点

    1.账号权限,在Navicat操作数据库时,对于线上数据实施迁移,一定需要提前申请到有线上数据库操作权限的账号

    2.上述各种测试方法的采用,一定要结合实际的资源情况,不要盲目追求全自动化测试,我们最终目的是要达到测试效果

    3.业务逻辑测试中不要去追求百分百的覆盖率,只需要在现有的资源下,尽可能的提高覆盖率



    作者:酷酷酱
    链接:http://www.jianshu.com/p/9f6253e6fcc3
    來源:简书
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


    文章转自:http://www.jianshu.com/p/9f6253e6fcc3?from=timeline

    展开全文
  • 数据迁移

    2019-08-16 19:24:23
    1、数据迁移分类: 平迁:不需要调整表结构的数据迁移,即为了性能扩展需要从一台服务器迁移到另外一台服务器上,用数据库的导出导入或备份恢复工具处理即可,当然也要考虑迁移后的一些序列字段的初始值。 拆表...

    1、数据迁移分类:

    • 平迁:不需要调整表结构的数据迁移,即为了性能扩展需要从一台服务器迁移到另外一台服务器上,用数据库的导出导入或备份恢复工具处理即可,当然也要考虑迁移后的一些序列字段的初始值。
    • 拆表迁移:数据迁移的过程中发生了拆表行为
      • 垂直拆表:例如:1、增加附件管理以统一管理文件、图片、音频和视频的url地址等信息导致的拆表行为,
      • 水平拆表:单表数据量达到千万级别时为了提高查询效率而将数据以一定的规律分散不同的表存储
    • 合表迁移:数据迁移的过程中发生了合表行为,将不同维度的描述信息表统一为标签表
    • 增表迁移:数据迁移的过程中发生了新增表行为,为满足业务需求而增加的业务表
    • 字段转换:数据迁移的过程中发生了新增字段是由老字段转换过来的行为,外键由id改为name
    • 新增字段:默认值或值的填写规则
    • 库表模型重构:表结构及表关系发生变化,即由以上多种类型的数据迁移混合而成。
      • 了解新老系统各自数据库的表间关系
      • 了解新老系统旧表和新表的对应关系
      • 了解新老系统的字段含义
      • 了解新老系统的旧字段和新字段的对应关系
    • 异构数据迁移,即从一个数据库平台迁移到另外一个数据库平台,用ETL工具或SQL均可实现,不过要注意业务逻辑的迁移,即存储过程、函数、触发器之类的

    2、系统分析:提高数据迁移的准确性和完整性,有利于分清主次数据(核心数据和非核心数据,一般越基础的数据越核心),有助于了解用户对历史数据的需求避免盲目地全部性的迁移,有助于确定工作量和工作进度。

    • 旧系统:理清功能模块,业务处理流程
    • 新系统:理清功能模块,业务处理流程

    3、旧系统数据的处理规则

    • 基础数据,通常这一类不会发生结构性变化容易迁移,但是会影响所有的相关业务数据,关注点为数据的主键和唯一键的方式。
    • 业务数据
      • 库表结构未变化:这一类数据处理起来会比较容易,一次性导入即可,后续采用增量数据导入。
      • 流程性:这一类数据只有在记录完全关闭后才能结束,需要进行增量导入和数据更新,同时还要进行相关查询界面的开发,以保证旧有数据能够在新系统中查询的到。
      • 库表结构重构,这一类数据的工作量是最重的,就需要仔细去研究新老业务系统的数据结构了。
        • 尽量通过甲方单位来收集齐全相关原系统的相关设计文档,这一点对数据分析很有帮助,通过人的感觉和对数据的观察来分析毕竟不太靠谱。
        • 在原系统上进行相关数据的观察,了解数据的变化和数据表数据的关系(对于比较难以理解的相关字段很有帮助)
        • 比较新老系统数据的差异,如果实在很不靠谱的话,建议按流程数据去处理。

    4、技术:数据迁移分为两个过程:导入和导出,平迁:数据量少的话选择navicat等客户端的导入导出方式,数据量多话选择mysql自带sql语句导入/导出,异构数据迁移:选择ETL工具(kittle等),库表模型重构:使用开发语言+sql控制

    • 导出:
      • 导出对于字段较少/字段内容较少的数据,通过客户端方式可以采用navicat等工具导出,我这里本次导出三个字段,都是11位数字以内的值,用navicat导出每分钟大约250万数据,
      • MySQL自带的导出语句:select into outfile语句;
      • 用MySQL自带导出/导入优点是速度极快,缺点是:只能导出文件是在服务器主机所在的本机地址,对于bi之类拿到不数据库主机权限的同事这个方式可能奢望了。
      • 不过好在对于字段/内容较少的报表第三方客户端工具导出速度也不算特别慢;
    • 导入:
      • 重点记录导入,导入主要是dba做数据迁移了,方式也分客户端和MySQL自带方式:
      • 这里极度推荐用MySQL导入方式load data infile语句,原因是我之前要迁移1.3亿数据,用navicat客户端导入数据要22小时,耗时太长且不确定太多,本身navicat等工具就会有假死风险的存在,
      • 所不建议超过1万以上的数据通过navicat导入;
      • 提高效率的方法:
        • 去除索引
        • 更改引擎:不同引擎load机制不一样,myisam更快,使用myisam可以调整session的参数扩大读取内存,导入前可以关闭唯一校验,导入后再打开。
        • 使用服务器本地读取
        • 查看服务器上mysql对cpu的占用率

    5、注意事项:

    • 先迁移基础数据表,再迁移业务表及业务关系表
    • 不管哪种类型迁移都要关注字段的类型、大小、是否非空和默认值规则
    • 对业务数据的分析最为关键,需要不断的尝试在新系统上不断的测试

    6、参考文档

    https://blog.csdn.net/qq_21108311/article/details/82559119 mysql亿级数据导入导出

    https://blog.csdn.net/qq_26334813/article/details/80503973 大批量数据如何快速的数据迁移

    https://www.cnblogs.com/wayne-ivan/p/3821649.html 关于数据迁移的方法、步骤和心得

    https://www.jianshu.com/p/9f6253e6fcc3?from=timeline

    7、附加:我的数据迁移计划(流程及技术):

    1. 根据数据迁移类型确定迁移计划
    2. 理解业务逻辑保证业务的完整性和一致性
    3. 确定迁移范围:涉及的表、字段以及记录的数据量
    4. 确定表及字段的对应关系,
    5. 技术选型
    6. 原始数据的保存
    7. 确定迁移流程
    8. 新老数据对比:数据量的一致性
    9. 测试

    展开全文
  • 数据迁移常用方法

    万次阅读 2018-08-24 15:21:13
    SQL SERVER几种数据迁移/导出导入的实践 SQLServer提供了多种数据导出导入的工具和方法,在此,分享我实践的经验(只涉及数据库与Excel、数据库与文本文件、数据库与数据库之间的导出导入)。 (一)数据库与Excel...

    SQL SERVER几种数据迁移/导出导入的实践

    SQLServer提供了多种数据导出导入的工具和方法,在此,分享我实践的经验(只涉及数据库与Excel、数据库与文本文件、数据库与数据库之间的导出导入)。

    (一)数据库与Excel

    方法1:

    使用数据库客户端(SSMS)的界面工具。右键选择要导出数据的数据库,选择“任务”——“导出数据”,下图1,按照向导一步一步操作即可。而导入则相反,导入时,SQLServer会默认创建一张新表,字段名也默认跟导入的Excel标题一样,并且会默认字段数据类型等。当然在可以在向导进行修改。需要注意的是如果标题不是英文而是中文,默认创建字段名也是中文,这将给后面数据更新操作带来麻烦,所以最好还是以有意义的英文字段名。把数据导入后,再通过执行语句,把数据插入/更新到业务表。

     figure-1:任务——导出数据

     

    方法2:

    从SQLServer2005开始,可以直接在SSMS上查询出来的结果复制,然后粘贴到Excel上,对于少量数据来说,是非常快速方便的,需要注意的是长数字可能会变成科学记数法的形式,提前在Excel上指定列的格式为文本即可。

    导入的话,ctrl + c 复制Excel上的数据,然后在选择相关表,编辑数据,把数据直接粘贴上去即可。但是不建议直接粘贴到业务表(如果表是空白没有数据,并且字段顺序对应,可以这样操作),而是建议先粘贴到一个新建的中间表中,然后再通过语句,把数据插入/更新到业务表。

    这种方法的导出导入,适合于少量的数据,如5000行以内的记录,大于5000行以上就不建议了,速度较慢,如果数据过大,还一定成功。

     

     

    (二)数据库与文本文件、数据库与数据库

    数据库之间的数据迁移或导出导入其实是比较方便的,比如备份数据库后,在新的机器上做恢复。但是需要注意的是SQL2008之前的版本的备份无法在SQL2012或以上版本上直接恢复的,而是通过中间的SQL2008做一个过渡,把旧版本的数据库恢复到SQL2008,然后做备份,最后在SQL2012上恢复。

    如果是新版本(下面以SQL2012为例)的备份文件恢复到旧版本(以SQL2008为例)上就比较麻烦了,一般是不支持新版本备份文件在旧版本中恢复的。只能通过编写脚本,把新版本的数据导入到旧版本中。

     

    方法1:

    首先推荐使用的是数据不落地的“链接服务器”。使用SQL2012的SSMS,同时连接到SQL2012和SQL2008的实例,通过编写脚本把SQL2012的数据导入到SQL2008中。两个实例的可以通过链接服务器来连接。以下是设置步骤。

    figure-2:新建链接服务器

     

    figure-3:链接服务器和数据源

     

    figure-4:认证

     

    figure-5:创建成功后,可以直接浏览链接服务器的目录,也可以使用语句查询了。

     

    也可以使用脚本来创建链接服务器。

    复制代码

    --创建链接服务器
    EXEC sp_addlinkedserver 
    @server='LINKED_SERVER_TEST2',--被访问的服务器别名
    @srvproduct='',
    @provider='SQLOLEDB',
    @datasrc='192.168.88.6,11433'--数据源
    GO
    
    --创建登录名和密码
    EXEC sys.sp_addlinkedsrvlogin
    @rmtsrvname = 'LINKED_SERVER_TEST2', -- 被访问的服务器别名
    @useself = 'false',
    @locallogin = NULL,
    @rmtuser = 'sa', -- 数据源登录名
    @rmtpassword = 'psd123456' -- 数据源登录密码
    GO
    
    --设置数据可以访问
    EXEC sys.sp_serveroption
    @server = 'LINKED_SERVER_TEST2', 
    @optname = 'data access',
    @optvalue = N'true'
    GO

    复制代码

    code-1:创建链接服务器的脚本

     

    创建成功后,可以直接查询数据。

    figure-6:查询链接服务器的数据

     

    通过视图sys.servers可以查询所有服务器及相关的属性。

    figure-7:查询所有链接服务器

     

    在SSMS上或运行以下脚本可以删除指定的链接服务器。

    --删除链接服务器及所有登录
    EXEC sys.sp_dropserver
     @server = 'LINKED_SERVER_TEST2',
     @droplogins = 'droplogins'
     GO

     code-2:删除链接服务器及所有登录

     

    详细请参考:https://technet.microsoft.com/zh-cn/library/ff772782%28v=sql.105%29.aspx

     

     

    方法2:

    如果两个实例不能连接,只能在SQL2012上导出数据,再到SQL2008上导入。SQLServer提供生成包含数据的脚本工具,下图2。在第三步的“高级”选项里有一项“Types of data to scripts”有三个选择:Data only,Schema and data,Schema only,分别是只生成数据、生成表(对象)和数据,表(对象)。还有生成脚本的版本“Script for Server Version”,下图3。其他选项,按实际需要选择。

     

     figure-8:任务——生成脚本

     

    figure-9:生成脚本的高级选项

     

    也可以使用存储过程生成包含数据的脚本。这里介绍一个别人已经做写好存储过程:sp_generate_inserts。运行之后,会按表每条记录生成一条insert的语句

     View Code

    code-3:sp_generate_inserts脚本源代码

     

    在我的实际使用中,只有两三个参数比较常用,分别是@table_name、@from和@owner,如果表的架构使用默认的dbo,则可以省略。以下是一个使用的例子:

    figure-10:使用sp_generate_inserts的一个例子

     

    其他参数的用法,这里就不一一解释了。我经常使用这个存储过程做一些简单而少量(如数万行记录以内)的数据导出导入,比前面介绍的方法方便快捷许多。但这个存储过程支持处理一般常用的数据类型,像XML这种类型则不支持。还有,如果生成的数据太多太大,SSMS返回数据会很慢,甚至SSMS会挂了,这时还是使用SSMS自带的导出脚本到文件稳妥些。如果使用生成的数据脚本文件很大,几百MB甚至上GB,在导入时,就不能直接使用SSMS直接打开来执行了。可以使用SQLCMD实用工具来在执行脚本。如下面的一个例子,在D盘下有一个脚本1.sql,内容为:

    USE AdventureWorks2008R2
    GO
    SELECT * FROM Person.CountryRegion;
    GO

    code-4:SQLMCD的测试脚本

     

    在运行下输入CMD,输入:

    sqlcmd -S localhost -d AdventureWorks2008R2 -i D:\1.sql

    code-5:SQLMCD的命令

     

    回车执行后如下图,SQLCMD的详细用法,请参考:https://msdn.microsoft.com/zh-cn/library/ms180944.aspx

    和 https://msdn.microsoft.com/zh-cn/library/ms162773%28v=sql.105%29.aspx

     

     figure-11:SQLCMD的测试例子

     

     

    方法3:

    使用BCP导出导入大容量数据

    原文地址:https://www.cnblogs.com/fishparadise/p/4592789.html

    展开全文
  • 【项目经验】数据迁移总结

    千次阅读 2018-09-06 10:50:08
    在产品迭代初期或者系统重构时期,业务模型的调整带来数据结构的变化,数据迁移不可避免。做好数据迁移需要考虑周全,且准备充分,做好预案,否则如果出现数据不一致问题,纠错成本高,同时核心业务数据的错误,会...
  • 本文将主要首先聊一聊数据库同步和迁移两个话题,之后将会围绕这 2 个话题介绍一下阿里云开源的基于 MongoDB 和 Redis 的数据同步&迁移工具 Mongo...
  • SyncNavigator是一款功能强大的数据库同步软件,适用于SQLSERVER, MySQL,具有自动/定时同步数据、无人值守、故障自动恢复、同构/异构数据库同步、断点续传和增量同步等功能,支持Windows xp以上所有操作系统,适用...
  • SyncNavigator是一款功能强大的数据库同步软件,适用于SQLSERVER, MySQL,具有自动/定时同步数据、无人值守、故障自动恢复、同构/异构数据库同步、断点续传和增量同步等功能,支持Windows xp以上所有操作系统,适用...
  • SyncNavigator是一款功能强大的数据库同步软件,适用于SQLSERVER, MySQL,具有自动/定时同步数据、无人值守、故障自动恢复、同构/异构数据库同步、断点续传和增量同步等功能,支持Windows xp以上所有操作系统,适用...
  • 在线数据迁移

    千次阅读 2018-06-19 16:43:41
     在线数据迁移,是指将正在提供线上服务的数据,从一个地方迁移到另一个地方,整个迁移过程中要求不停机,服务不受影响。根据数据所处层次,可以分为cache迁移和存储迁移;根据数据迁移前后的变化,又可以分为平移...
  • 以前的工作迁移过oracle到Informix、oracle和SQLSERVER、oracle到mysql。 在目前的公司又因为去o的关系,做了大量的迁移工作,栽了不少坑,所以和大家交流一下在迁移的过程中的一些实践。 因为成本预算等多方面的...
  • 数据迁移&数据同步

    千次阅读 2018-12-18 09:06:51
    文章目录历史数据迁移实时数据同步 由于老系统满足不了业务需求,因此需要开发新系统,并且使用新的语言和架构,老系统的数据库数据肯定是不能弃掉,需要平滑迁移。而且还由于老系统的开发人员不在和严重不足,无法...
  • 【专项测试】系统数据迁移

    万次阅读 2019-01-15 17:30:24
    新旧系统数据迁移 新旧系统数据迁移的实践与测试 新旧系统数据迁移  随着互联网这么多年的技术的发展,在现有发展的基础上,基本上2-3年的时间,业务的快速增长和技术的革新,原有的系统会不断被功能更强大的新...
  • 数据迁移测试实施方案

    千次阅读 2019-04-26 08:29:32
    前期准备工作数据迁移范围确定 在做数据迁移测试前需要和开发部门确认好数据迁移范围,主要包含以下几点: 基本数据迁移 基本数据迁移就是从老库中把一些老表直接复制到新库的新表中,或是: 1.拆表:老库的老表拆分...
  • 数据迁移,工作原理和技术支持数据导出、BI报表之类的相似,差异较大的地方是导入和导出数据量区别,一般报表数据量不会超过几百万,而做数据迁移,如果是互联网企业经常会涉及到千万级、亿级以上的数据量。...
  • laravel 数据迁移概念初识

    千次阅读 2018-08-15 11:11:39
    数据迁移的概念:   我先用大白话说一遍: 数据迁移不是将一个数据库库中的表转移到另一个表中.数据库迁移是通过对迁移文件的修改对数据库造成的影响,这种影响其实就是操作数据库。相当于咱们对数据库的增删该查....
  • 数据迁移思路以及注意点!

    千次阅读 2017-12-11 12:29:56
    因楼主公司前段时间因为业务及法律规定,所以系统进行了一次重大的迭代更新,所以遇到了比较棘手新老板版本重大修改的导致的数据迁移问题,所以就在迁移后做了一个总结,记录当时数据迁移的一些重要点! 主要的核心就是...
  • 数据迁移的几种方式 - MySQL数据库

    千次阅读 多人点赞 2020-07-07 17:11:42
    本文关键字:MySQL、数据库、数据迁移、导入、导出。开始和数据库玩耍以后,我们将一直与SQL和数据打交道。在日常的操作中,我们只需要对指定的数据库进行操作,执行增删改查,权限管理等。但有些时候由于项目的升级...
  • Linux下将系统盘数据迁移到数据盘

    千次阅读 2018-10-13 17:27:45
    Linux下将系统盘数据迁移到数据盘一、创建分区1、查看数据盘是否已经分区2、对数据盘进行分区3、格式化分区二、迁移数据三、挂载分区1、通知系统内核分区表的变化,不然内核不知道分区2、挂载分区3、设置开机自动...
  • 跨集群数据迁移 用户在腾讯云上自建的ES集群或者在其它云厂商购买的ES集群,如果要迁移至腾讯云ES,用户可以根据自己的业务需要选择适合自己的迁移方案。如果业务可以停服或者可以暂停写操作,可以参考离线迁移的四...
1 2 3 4 5 ... 20
收藏数 316,683
精华内容 126,673
关键字:

数据迁移