将巨大的 SQL 文件导入 SQL Server

Posted

技术标签:

【中文标题】将巨大的 SQL 文件导入 SQL Server【英文标题】:Import huge SQL file into SQL Server 【发布时间】:2014-07-11 10:51:34 【问题描述】:

我使用sqlcmd 实用程序将一个 7 GB 的大型 SQL 转储文件导入远程 SQL Server。我使用的命令是这样的:

sqlcmd -S IP address -U user -P password -t 0 -d database -i file.sql

大约 20-30 分钟后,服务器会定期回复:

Sqlcmd:错误:脚本错误。

有什么建议或建议吗?

【问题讨论】:

这正在推动网络技术的极限:D 我也遇到过类似的情况,但我很幸运能够做到 db to db 并实现了分页/重试功能。 【参考方案1】:

我假设file.sql 只是一堆INSERT 语句。对于大量行,我建议使用 BCP 命令行实用程序。这将比单个 INSERT 语句快几个数量级。

您还可以使用 T-SQL BULK INSERT 命令批量插入数据。在这种情况下,数据库服务器需要可以访问文件路径(即 UNC 路径或复制到服务器上的驱动器)以及所需的权限。见http://msdn.microsoft.com/en-us/library/ms188365.aspx。

【讨论】:

您建议我先将数据转换为分隔符分隔的文件(例如 CSV)?) 默认的 BCP 字符格式是制表符分隔的。如果需要,您可以指定不同的分隔符。如果源数据是 SQL Server 表的导出,则可以使用 BCP 输出以本机格式创建文件。原生格式更快。 【参考方案2】:

为什么不使用 SSIS。虽然我拥有 DBA 证书,但我总是尝试使用正确的工具来完成这项工作。

以下是使用 SSIS 的一些原因。

1 - 使用仍然可以使用快速加载、批量复制。确保您设置了批量大小。

2 - 错误处理要好得多。

但是,如果您使用的是快速加载,则要么批量提交,要么被丢弃。

如果您使用单个记录,则可以将每个错误行定向到单独的目标。

3 - 您可以在将源数据加载到目标之前对其执行转换。

简而言之,Extract Translate Load。

4 - SSIS 喜欢内存和缓冲区。如果您想深入了解,请阅读 Matt Mason 或 Brian Knight 的一些文章。

最后但并非最不重要的一点是,如果作业未在目标服务器上运行且输入文件位于本地磁盘上,则 LAN/WAN 始终会发挥作用。

如果您使用良好的管道在同一主干上,事情就会进展得很快。

总之,是的,您可以使用 BCP。它非常适合小型快速工作。任何复杂的错误处理都应该使用 SSIS 来完成。

祝你好运,

【讨论】:

以上是关于将巨大的 SQL 文件导入 SQL Server的主要内容,如果未能解决你的问题,请参考以下文章

使用 phpmyadmin 导入巨大的 sql 文件

如何将非表数据导入 SQL Server Reporting Services?

java语言实现把txt文本文档里面的数据导入到SQL Server数据库的表中

如何快速为 mysql 导入一个巨大的 sql 脚本?

SQLServer2005怎么导入巨大的sql脚本

sql 将Excel文件导入为SQL Server表