使用C#将1亿行数据批量复制到Azure SQL Server?

时间:2018-08-04 14:55:15

标签: c# sqlbulkcopy sql-server-2017

我有一个本地SQL Server 2017数据库,需要将两个表复制到Azure SQL Server数据库中;一个表具有超过1亿行数据,其中包括“地理位置”类型的列。我怎么做?

我现在正在运行批量复制:

using (SqlConnection streamsConnection = new SqlConnection(streamsConnectionString))
{
    streamsConnection.Open();

    using (SqlConnection cloudConnection = new SqlConnection(cloudConnectionString))
    {
        cloudConnection.Open();

        using (SqlCommand cmd = streamsConnection.CreateCommand())
        using (SqlBulkCopy bcp = new SqlBulkCopy(cloudConnection))
        {
            bcp.DestinationTableName = "GroundDataNodes";
            bcp.BatchSize = 200000;
            bcp.BulkCopyTimeout = 1200;
            bcp.NotifyAfter = 100000;
            bcp.SqlRowsCopied += new SqlRowsCopiedEventHandler(s_SqlRowsCopied);

            cmd.CommandText = "SELECT [Id],[nodeid],[latlon],[type],[label],[code],[lat],[lon]FROM[dbo].[GroundDataNodes]";

            using (SqlDataReader reader = cmd.ExecuteReader())
            {
                bcp.WriteToServer(reader);
            }

            Console.WriteLine("Finished!");
            Console.ReadLine();
        }
    }
}

但是我在批量加载方面还很陌生,我想知道如何改进它,这样就不需要花费数周的时间来运行...

2 个答案:

答案 0 :(得分:0)

尝试Azure数据库迁移服务。我迁移了一个内部SQL Server,该服务器在一天的时间内有1000万行。但是当然,它在很大程度上还取决于您的带宽。

也: 创建服务实例时,请使用多CPU通用定价层,以允许服务利用多个vCPU进行并行化和更快的数据传输。

在数据迁移操作过程中,临时将Azure SQL数据库目标实例扩展到Premium层SKU,以最大程度地减少Azure SQL数据库的限制,这可能会影响使用低级SKU时的数据传输活动。

答案 1 :(得分:0)

所以我尝试了各种上传方式,例如批量上传,迁移,备份等,但是都遇到了同样的问题,那是我的上传速度无法满足要求。可以,但是要花几天时间才能运行。因此,我决定编写服务器端的一些代码,直接从那里直接将其填充到数据库中,因此,我的上传速度变得不那么重要了。我想如果我有更好的上载速度,即使在“地理”领域等情况下,迁移工具也能很好地工作。虽然速度不是很快,但是会起作用。