【问题标题】:Import huge SQL file into SQL Server将巨大的 SQL 文件导入 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 并实现了分页/重试功能。

标签: sql sql-server import bigdata sqlcmd


【解决方案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 来完成。

祝你好运,

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-22
    • 1970-01-01
    • 2015-06-08
    • 2010-10-27
    • 2013-02-20
    • 2014-04-05
    • 1970-01-01
    相关资源
    最近更新 更多