如何使用常用的6种方式对数据进行转换(二)

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
简介:
如何使用常用的6种方式对数据进行转换(二)
 
实验目标:
1、 使用T-SQL语句对数据进行转换。
2、 使用备份和还原对数据进行转换。
3、 使用分离和附加对数据进行转换。
4、 使用复制对数据进行转换。(重点讲解)
5、 使用SSIS导入和导出向导对数据进行转换。
6、 使用SSIS包设计器对数据进行转换
 
 
实验步骤:
注意:下面所有的操作都将对以下表格进行更改
clip_image002
 
4、 使用复制对数据进行转换。
通过复制可以将数据的多个拷贝分发到公司中的各个服务器中。通过复制为多台服务器提供相同的数据,这样用户就可以在不同服务器中访问同样的信息,对以一个拥有大量用户的企业,复制可以分散用户访问服务器的负载,从而为每个用户提供更高质量的服务。
复制可以将数据和数据库对象从一个数据库复制和分发到另一个数据库,然后在数据库间进行同步,以维持一致性。使用复制,可以在局域网和广域网、拨号连接、无线连接和Internet上将数据分发到不同位置以及分发给远程或移动用户。
发布服务器拥有原始数据的拷贝,通过订阅,将数据送到分发服务器,并且由分发服务器传递给订阅服务器。
分发数据库存储复制状态数据和有关发布的信息,并且在某些情况下为从发布服务器向订阅服务器移动的数据起着排队的作用。在很多情况下,一个数据库服务器实例可以充当发布服务器和分发服务器两个角色。
订阅服务器拥有数据的拷贝,根据所选复制的类型,订阅服务器还可以将数据更改传递回发布服务器或者将数据重新发布到其他订阅服务器。
 
实验环境
在某一个公司里的mysql数据库中,有很多应用与销售信息记录表(mytable表)相关联,作为这家公司的数据库管理员,为了避免冲突,需要将mysql表复制到一个不同的SQL Server实例上,原实例中的表用于数据更新,副本则用于查询分析,并且需要时保持同步更新。
 
实施步骤:
1、 首先安装两台SQL,如果都在工作组环境下,就用混合模式进行验证,如果都在域环境下,就用windows域用户账户进行验证。本实验是在工作组环境下,为了简便起见都用SQL Server中的SA用户进行验证,实际中,最好不要这样去做。如何启用SA账户这里就不做过多介绍了。
首选连接到其中一台发布服务器上,然后选择“新建发布”就可以了,注意:发布服务器必须要开启SQL Server Agent服务。其次,服务器实例必须为本机计算机名称。
clip_image001
 
选择其中一个需要发布的数据库mysql。
clip_image003
 
发布类型:
快照复制—这是最容易进行设置的复制方式,快照复制只需要周期性地发送数据。当同步发生时,快照复制发送所有数据。不需要去监视数据的修改,但这样也可能引起数据流量的增加,如:当没有数据修改时也会发送所有的数据。
事务性复制—与快照复制不同,只要数据发生改变。事务性复制就将它们发送给订阅服务器。这样可以减少数据复制的流量。事务性复制通常从发布数据库对象和数据的快照开始,创建初始快照。当发生复制时,事务日志被发送到订阅服务器上,用以保证事务性的一致性。默认情况下,事务性发布的订阅服务器被视为只读,因为更改将不会传播回发布服务器。
合并复制—合并复制允许既可以在发布服务器上修改数据,也可以在订阅服务器上修改数据,当同步发生时,发布服务器的修改和订阅服务器的修改被合并在一起。在合并复制中,同一数据可能由发布服务器和多个订阅服务器进行了更新。因此在合并更新时可能会产生冲突,合并复制提供了多种处理冲突的方法。与事务复制相同,合并复制通常也是从发布数据库对象和数据的快照开始,当复制发生时,之后的更改被合并在一起。
为了满足实验背景需求,采用“事务性发布”。
clip_image005
 
选择需要发布的表,本实验选用mytable,注意,选择的表中必须要有主键才可以。
clip_image007
 
可以通过下面的“添加”菜单对需要表中的有效信息进行筛选,本实验就不筛选了。
clip_image009 clip_image011
 
指定连接发布服务器的账户,本实验由于在工作组中,所以选用SQL Server内置账户。
clip_image013 clip_image015
 
给该发布服务器命一个名称。
clip_image017 clip_image019
 
发布创建成功之后,会在本地发布子目录里显示出发布的数据库。
clip_image020
 
通过本机连接到另一台SQL Server数据库实例上,通过本地订阅,订阅发布的内容。也可以在另一他SQL Server数据库上做。
clip_image022
 
选择“发布的服务器”然后通过SA账号连接到发布服务器上。订阅自己需要的发布内容(在实际环境中可能有多个发布)。
clip_image024
 
在实际环境中发布服务器和分发服务器一般放在同一个SQL server中,就选择最上面那个就可以了。
clip_image026
 
添加订阅服务器到此列表中,并选择需要订阅的服务器,然后选择订阅服务器中的一个数据库就可以了。
clip_image028
 
与分发服务器的连接需用模拟进程账号,这样做不是很安全,如果是域环境就直接使用域用户账户就可以了,与订阅服务器的连接,使用订阅服务器上的SQL 账户,这里选用SA,实际中,决定不允许使用这个账户。
clip_image030 clip_image032 clip_image034 clip_image036 clip_image038
 
完成之后,可以在订阅服务器的mysql_dingyue数据库中看到刚才订阅的表。
clip_image040
 
为了测试方便,在发布服务器上修改数据库mysql中的表mytable,将小诺同志的工资加1000,看订阅服务器是否发生变化。
clip_image041
 
使用SQL语句查看订阅服务器数据库mysql_dingyue的表mytable看小诺的工资是否发生变化。
clip_image043
 
如果测试不成功,可以通过“查看同步状态”进行坚持数据库的状态。
clip_image045 clip_image047
 
5、 使用SSIS导入和导出向导对数据进行转换。
导入和导出向导提出了一种从源向目标复制数据的最简便的方法,可以在多种常用数据格式之间转换数据,还可以创建目标数据库和插入表。
可以向下列源中复制数据或从其中复制数据:SQL Server、文本文件、Access、Excel、其他OLE DB访问接口。
这些数据源即可用作源,又可用作目标。还可将ADO.NET访问接口用作源。指定源和目标后,便可选择要导入或导出的数据。可以根据源和目标类型,设置不同的向导选项。例如,如果在SQL Server数据库之间复制数据,则指定要从中复制数据的表,或提供用来选择数据的SQL 语句。
实验内容:
1、将SQL Server数据导出到Excel中
2、将Access数据导入到SQL Server中
实验步骤:
********将SQL Server数据导出到Excel中************
例如:将数据库mysel中的mytable中的Name和Salary>4000数据导出到一个名为mytable_excel中
clip_image049
 
数据源选择SQL Native Client 服务器名称选择本地服务器,并且使用Windows身份验证,也可以使用混合模式身份验证,数据库选择mysql
clip_image051
 
目标数据选择Microsoft Excel,并通过浏览指向需要导出到的那个excel表格。
clip_image053
 
由于不是全部导出,需要通过命令行对数据库中的表进行赛选。
clip_image055
 
输入语句select name,salary from myatable where salary >4000,意思就是将表mytable中name和salary>4000的数据导出来。写完语句之后,最好通过分析验证一下。然后再执行一下看看是否是你想要的结果,如果不是再返回上一步继续操作。
clip_image057
clip_image059
clip_image061
clip_image063
 
下面是导出的数据,完全符合标准。
clip_image065
 
*******************将Access中数据导入到SQL Server中***************************
例如:将Access数据库mytable_access中的数据导入到SQL Server数据库mysql中的test表中。
下面是源数据
clip_image067
clip_image069
 
源数据选择Microsoft Acces,并浏览到源数据文件即可。
clip_image071
 
目标数据选择SQL Native Client即可,数据库选择mysql
clip_image073
clip_image075
 
如果源数据和目标数据有差异,做一个列映射,在SQL Server中列名最好用英文字母表示。并先前在SQL Server数据库mysql中创建一张与Access数据库同名的表。导入之后,数据就导入到那张同名的表中。
clip_image077
clip_image079
clip_image081
 
6、 使用SSIS包设计器对数据进行转换(推荐使用)
使用SSIS设计器可以将先前做的导入和导出以及其它操作做成一个包的形式存放,需要导入或者导出数据时,只需要将包执行一次就可以了,而且转换速度是先前速度的7倍。
简单了解一下包的概念:包是一个集合,其中可包括连接、控制流、数据流、事件处理程序、变量和配置,可以使用SSIS工具将这些对象组合到包中。包是最重要的Integration services对象。
*******************将SQL Server数据导出到Excel中******************************
例如:将数据库mysql中的数据库mytable导出到一个名为newtest.xls中
打开开发工具SQL Server Business Interlligence Development Studio.lnk。,然后新建一个项目。
clip_image083
 
在解决方案资源管理中选择“数据源”,新建一个数据源,如果哦解决方案资源管理器未出现,单击菜单栏中的“视图”—》“解决方案资源管理器”
clip_image085
clip_image087
 
为mysql数据源建立连接管理器,在连接管理器窗口中,单击鼠标右键,选择“从数据源新建连接”。
clip_image089
clip_image091
 
建立数据流任务,在包设计窗口中单击“控制流”标签。在工具箱中选择“数据流任务”并拖动到包设计器窗口。然后单击“控制器”标签,选择“工具箱“中的””“数据流源”,然后选择“OLE DB源”,并拖动到包设计器窗口。
clip_image093
 
在包设计窗口中选择“OLE DB源”,单击鼠标右键,选择“编辑”,在弹出的对话框中指定下列表
clip_image095
 
然后,选择“工具箱”中的“数据流转换”,选择“派生列”并拖动到包设计窗口。在包设计窗口拖动“OLE DB源”的绿色连接到“派生列”。
然后在工具箱中选择“数据库目标里的“平面文件目标”并拖动到包设计窗口。在包设计窗口中拖动“派生列”的绿色连接到“平面文件目标”然后编辑,如下图所示:
clip_image097
 
在目标编辑器中选择“映射”并将mytable表中的列映射到ACCESS表中。
clip_image099
 
设置完成之后,可以先测试一下,然后保持。
clip_image101
 
保存的SSIS包在下面路径里,需要时,双击这个包就可以了
clip_image103
clip_image105
 
下面是SQL SERVER里的mysql里的表mytable转换成Access表的结果。
clip_image107
 
*******将Access中数据导入到SQL Server中*******
例如:将Access数据库mytable_access中的数据导入到SQL Server数据库mysql中的xiaonuo表中。
做法与上面基本相同。这里就不做过多演示了。
clip_image109
clip_image111
clip_image113


本文转自凌激冰51CTO博客,原文链接:http://blog.51cto.com/dreamfire/155126,如需转载请自行联系原作者
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
18天前
|
JSON Java 程序员
Java|如何用一个统一结构接收成员名称不固定的数据
本文介绍了一种 Java 中如何用一个统一结构接收成员名称不固定的数据的方法。
23 3
|
2月前
|
Python
字典是怎么创建的,支持的操作又是如何实现的?
字典是怎么创建的,支持的操作又是如何实现的?
60 8
|
4月前
|
存储 数据库 C++
"深入剖析Python元组(tuple):与列表的对比、特性解析及高效应用场景展示"
【8月更文挑战第9天】Python元组与列表虽均用于存储元素集合,但有本质差异。元组不可变,创建后无法修改,适合保护数据不被意外更改的场景,如作字典键或传递固定值。列表则可变,支持动态增删改,适用于需频繁调整的数据集。元组因不可变性而在性能上有优势,可用于快速查找。两者各有千秋,根据具体需求选择使用。例如,元组可用于表示坐标点或日期,而列表更适合管理用户列表或库存。
122 1
|
前端开发 程序员 C#
【C#】通过扩展对象的方式,对字符串等数据类型进行数据进一步处理
在本篇文章中,我们讲一起了解下对象扩展的使用 在实际项目开发中,对象扩展使用的场景还是挺多的,比如:需要对时间值进行再处理,或者字符串中的斜杠(/)转为反斜杠(\)
118 0
|
存储 程序员 C语言
如何进行C++动态转换
如何进行C++动态转换
如何进行C++动态转换
|
Java Maven Spring
蔡昊 - 如何高效而优雅的进行对象转换
简介 随着分层结构和DDD设计思想的普及,我们在后端开发过程中,会使用到VO/DO/DTO等等各种类型的模型对象,对象的转换工作也随着变得越来越多。而这种工作技术含量不高,却容易过多的出现在编码里,处理不当也会出现各种问题,那么如何更加高效而优雅的进行类型转换呢? 且花几分钟了解下笔者接下来要讲的一款Java代码生成器MapStruct——创建实现Java Bean之间转换的扩展映射器!
274 0
|
容器
实战小技巧19:Map转换的几种方式
在日常开发过程中,从一个Map转换为另外一个Map属于基本操作了,那么我们一般怎么去实现这种场景呢?有什么更简洁省事的方法么?
1400 0
|
数据可视化 Python 数据处理
如何使用deeptools处理BAM数据
如何使用deeptools处理BAM数据 总体介绍 deeptools是基于Python开发的一套工具,用于处理诸如RNA-seq, ChIP-seq, MNase-seq, ATAC-seq等高通量数据。
3451 0