不同版本的SQL Server之间数据导出导入的方法及性能比较
当前位置:点晴教程→点晴OA办公管理信息系统
→『 安装指引&开发建议 』
工作中有段时间常常涉及到不同版本的数据库间导出导入数据的问题,索性整理一下,并简单比较下性能,有所遗漏的方法也欢迎讨论、补充。 00.建立测试环境 01.使用SQL Server Import and Export Tool 02.使用Generate Scripts 03.使用BCP 04.使用SqlBulkCopy 05.使用Linked Server进行数据迁移 06.使用RedGate的SQL Data Compare 07.结果对比 可以先看下测试的结果
00.建立测试环境建立一个测试的环境,一个数据源数据库,版本为SQL Server 2008,一个目标数据库,版本为SQL Server 2000。 实验环境如下图所示,源数据库使用语句生成了100万的测试数据。
建立测试表并生成100万的测试数据 01.使用SQL Server Import and Export Tool使用SQL Server Import and Export Tool进行数据的导出,也可以在目标数据库端使用Import进行导入,这部分套件也是SSIS的一部分。 在源数据库上右键,选择Task -> Export Data 分别填写源数据库和目标数据库的连接信息。
选择“copy data from one or more tables or views” 选择需要导数据的表,并且可以编辑列的Mapping关系。 可以选择立即执行或者存储为SSIS的包,用于执行计划等其他用途。 这里我们选择立即执行。 注意导入的时候如果遇到如下的错误 Error 0xc02020f4: Data Flow Task: The column "Tel" cannot be processed because more than one code page (936 and 1252) are specified for it. 是因为两边的数据库的Collation设置不一样造成的,需要设置同样的Collation。
02.使用Generate Scripts生成脚本在源数据库上右键,选择Task -> Geneate Scripts... 配置相关信息,注意选择数据库的版本并将Script Data设置成True。 这里需要注意,因为有100万的数据,所以导出的SQL文件就有400多M,所以用SQL Server Management Studio是打不开的。 所以只能使用sqlcmd执行。 sqlcmd语句
03.使用BCP进行导出导入在尝试了前面两个效率低下的工具之后,我们终于开始尝试下SQL Server中专门用于导数据的工具:BCP。 关于BCP的详细用法可以参见MSDN的帮助文档。 我们先使用BCP导出数据。 -U和-P后面分别为数据库的用户名和密码。 我们可以看到100万的数据导出仅用了1.8秒。 现在我们再使用BCP进行导入。 执行后发现,导入数据使用了20.8秒,还是很快的。
04.使用SqlBulkCopy.NET Framework 2.0中增加的SqlBulkCopy类可以进行高效的数据迁移动作,这也为代码实现数据迁移提供了接口。 并且SqlBulkCopy类提供了修改字段Mapping关系的方法ColumnMappings。 使用SqlBulkCopy类进行数据迁移 执行后
05.使用Linked Server进行数据迁移先在源数据库上对目标数据库建立Linked Server,或者反过来也行。 建立Linked Server
是用INSERT INTO...SELECT...进行导入 执行用时
06.使用RedGate的SQL Data Compare进行数据迁移第三方的工具,有数据库结构比较的工具SQL Compare和数据比较工具SQL Data Compare。 执行 因为也是生成INSERT的SQL执行的,所以就不做过多比较了,上面已经测试过了。 07.结果对比因为这里测试的环境有网络和表结构的特殊情况,不能说明所有情况下效能的差异,但是也可作为参考之用。 下面给出比较结果。
该文章在 2017/4/5 9:56:38 编辑过 |
关键字查询
相关文章
正在查询... |