我有一个本地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();
}
}
}
但是我在批量加载方面还很陌生,我想知道如何改进它,这样就不需要花费数周的时间来运行...
答案 0 :(得分:0)
尝试Azure数据库迁移服务。我迁移了一个内部SQL Server,该服务器在一天的时间内有1000万行。但是当然,它在很大程度上还取决于您的带宽。
也: 创建服务实例时,请使用多CPU通用定价层,以允许服务利用多个vCPU进行并行化和更快的数据传输。
在数据迁移操作过程中,临时将Azure SQL数据库目标实例扩展到Premium层SKU,以最大程度地减少Azure SQL数据库的限制,这可能会影响使用低级SKU时的数据传输活动。
答案 1 :(得分:0)
所以我尝试了各种上传方式,例如批量上传,迁移,备份等,但是都遇到了同样的问题,那是我的上传速度无法满足要求。可以,但是要花几天时间才能运行。因此,我决定编写服务器端的一些代码,直接从那里直接将其填充到数据库中,因此,我的上传速度变得不那么重要了。我想如果我有更好的上载速度,即使在“地理”领域等情况下,迁移工具也能很好地工作。虽然速度不是很快,但是会起作用。