3

将视图结果从一台服务器上的数据库复制到新服务器上的另一个数据库(均运行 SQL Server 2008)时,以下哪种方法可能最有效?

1. 带有 OLE DB 源/目标的 SSIS 数据流任务

忽略错误,仅为演示目的设置

2.自定义脚本

例如

using (SqlConnection connection = new SqlConnection(sourceConnectionString))
using (SqlCommand command = new SqlCommand(sourceQuery, connection))
{
    connection.Open();
    using (SqlDataReader reader = command.ExecuteReader())
    {
        using (SqlBulkCopy bulkCopy = new SqlBulkCopy(destinationConnectionString))
        {
            bulkCopy.DestinationTableName = destinationTable;
            //Any Column mapping required
            bulkCopy.WriteToServer(reader);
        }
    }
}

3. SSIS 批量插入

我看不出这与使用自定义脚本有什么不同,但没有增加的不灵活性,它只适用于表/视图而不适用于存储过程。


我意识到这与类似的比较不太一样,因为各种选项都有额外的日志记录和错误处理等级别,但假设我根本不需要日志记录来尝试使比赛场地尽可能均匀。

4

2 回答 2

3

根据此 SO Post,BULK INSERT 的性能优于 SqlBulkCopy。但是,根据这篇文章,DataFlow 任务优于 Bulk Insert SSIS 任务

于 2012-07-09T16:53:44.010 回答
3

这并不是真正直接回答您的问题,但是...

您的问题的简短答案可能是使用具有代表性的数据集尝试不同的方法并亲自查看。这将为您提供一个比 SO 上的任何人都可以提供的对您的环境更有意义的答案,并且是了解每个选项所涉及的工作和问题的好方法。

更长的答案是 SSIS 批量插入任务很可能是最慢的,因为它只能加载平面文件数据。为了使用它,您必须先将数据导出到源服务器上的文件,然后再将其重新加载到目标服务器上。如果服务器之间的 WAN 连接速度非常慢,这可能会很有用,因为您可以在复制文件之前压缩文件以最小化数据量,否则只会增加更多工作量。

至于 SSIS 和SqlBulkCopy我之间的区别,我没有个人经验,SqlBulkCopy所以我只能建议,如果没有明确的“赢家”,你先选择最简单、最容易维护的实现,不要担心找到最快的解决方案,直到你实际上需要。代码只需要运行得足够快,而不是尽可能快,并且从您的问题中并不清楚您实际上存在性能问题。

于 2012-07-09T20:34:53.617 回答