在实际项目环境中,有时会遇到需要将大量数据(这里所指百万级别以上的数据量)从一台服务器迁移到另外一台数据库服务器的情况。SQL Server有很多方式可以进行数据迁移:备份还原、导入/导出数据、生成脚本(包含数据)等,以下只针对“导入导出数据”方式来进行测试演示(其他方式自行查找官方文档说明)。

现有一个300W左右的数据库,需要从本地迁移到远程服务器上(从源数据库->目标数据库,使用导出数据方式)。

一、生成导出数据SSIS包。

首先,在SQL Server数据库对象管理器中,展开数据库->选择相应数据库 点击右键 -> 任务(T) -> 导出数据(X)...,如下图:

sql server怎么导出表格文件 sql server怎么导出数据_sql server怎么导出表格文件

打开“SQL Server 导入和导出向导”页面,点击“下一步”选择 数据源(即要从中复制数据的来源),设置 源数据库的服务器名称、身份验证以及数据库,如下图:

sql server怎么导出表格文件 sql server怎么导出数据_sql_02

“下一步”进入设置目标数据源(即要复制到的目标数据库),与上一步同理,设置目标数据源的 服务器名称、身份验证、数据库,如下图:

sql server怎么导出表格文件 sql server怎么导出数据_sql server怎么导出表格文件_03

完成源和目标数据库的设置后,下一步,指定表复制和查询。如果将整个数据库所有表数据都迁移,选择第一项“复制一个或多个表或视图的数据”;只是迁移部分数据(一个或多个数据表),选择第二项“编写查询以指定要传输的数据”,编写SQL查询语句来对复制操作的源数据进行操纵或限制,如下图:

sql server怎么导出表格文件 sql server怎么导出数据_sql server怎么导出表格文件_04

当前演示迁移数据测试是从本地到远程服务器,因网络问题直接连接远程服务器来导出数据,执行期间会出现网络断开的情况。

以下使用SQL分批导出方式进行处理,每次导出10W条数据。

选择“编写查询以指定要传输的数据”选项,下一步,输入要查询数据的SQL语句,如下图:

sql server怎么导出表格文件 sql server怎么导出数据_服务器_05

注:这里输入的SQL语句只支持查询select语句。

下一步,可以查看到 源与目标 的表或视图情况,上一步使用了SQL查询来导出数据,这里 源 位置所显示只是一个【查询】结果集,目标 位置可以选择目标数据库要接收数据迁移对应的数据表,如下图:

sql server怎么导出表格文件 sql server怎么导出数据_sql server怎么导出表格文件_06

注:接收数据迁移的目标数据表结构必须与SQL查询返回的【查询】结果集结构必须一一对应。如不选择目标数据表,目标数据库中会自动创建一个名为“查询”的数据表来存储迁移数据。

进入下一步,可以“立即运行”(默认选中)SSIS包来执行导出数据操作,也可以先保存导出数据配置的SSIS包,在特定时候才去执行。目前测试受限于网络问题,使用“保存SSIS包”方式来处理。取消“立即运行”复选项,会自动选中“保存SSIS包”选项,选择“文件系统”方式来保存SSIS包(生成*.dtsx文件),方便迁移文件到远程服务器上执行导出,如下图:

sql server怎么导出表格文件 sql server怎么导出数据_sql server怎么导出表格文件_07

保存 SSIS 包 两种方式:【SQL Server】 和 【文件系统】。

【SQL Server】 方式 => 保存在SQL Server系统内部,需要连接SQL Server Integration Server服务才能执行;

【文件系统】方式 => 将SSIS包保存到指定系统目录下。

下一步,给SSIS包指定一个名称以及文件存在的目录(默认是保存到系统盘->当前用户名所在文档目录下),如图:

sql server怎么导出表格文件 sql server怎么导出数据_SSIS_08

下一步,点击“完成”按钮,系统会根据前面几步的设置生成相应的SSIS包,如图:

sql server怎么导出表格文件 sql server怎么导出数据_数据库_09

完成后,点击 【关闭】按钮,退出【导出数据】向导设置。

因使用分批导出数据(每次导出10W条数据),需要重复操作上述步骤,生成所有数据的SSIS包。

二、执行导出数据SSIS包

完成第一部分操作后,将SSIS包Copy到要目标数据库所在服务器,双击SSIS包(*.dtsx)自动运行 执行包实用工具,如下图:

sql server怎么导出表格文件 sql server怎么导出数据_sql server怎么导出表格文件_10

 点击“执行”按钮,系统会根据SSIS包的设置来导出数据到目标数据库表里,自动显示 执行进度 情况,进度出现 完成占用时间 时,表示SSIS包已执行成功,如下图:

sql server怎么导出表格文件 sql server怎么导出数据_sql_11

重复上一步骤,执行完余下的SSIS包。

到这里,已完成数据迁移处理。

三、总结

  1. 进行数据迁移可以使用SQL Server自带的导入\导出功能
  2. 导出数据可以指定SQL查询方式来处理
  3. 大量数据迁移网络通信受限的情况下可以使用分批导出方式