cuo*_*gle 5 c# sql sql-server stored-procedures azure-sql-database
我们有很长时间运行的存储过程执行 ETL 工作,以便将原始表中的数据加载到 Azure 数据库中的星型架构(事实 - 维度)中。
这个存储过程需要大约 10 到 20 小时运行超过 1000 万行(使用 MERGE 语句)。
目前,我们从 C# 代码 (ADO.NET) 运行存储过程并保持CommandTimeout = 0(永远)。但有时连接会断开,因为与 Azure 数据库的连接不稳定。
是否可以在数据库级别运行存储过程而不一直保持连接打开,然后在 Progress 表中记录存储过程的过程以跟踪进度?
我看到一些建议:
代理作业,在 Azure 数据库上似乎不可能,因为它目前不支持。
SqlCommand.BeginExecuteNonQuery:我不确定 100% 是否BeginExecuteNonQuery仍然保持连接在引擎盖下打开。
有没有其他方法可以做到这一点?
您可以使用 Azure 自动化 Runbook。
https://azure.microsoft.com/en-us/blog/azure-automation-your-sql-agent-in-the-cloud/?cdn=disable
https://gallery.technet.microsoft.com/scriptcenter/How-to-use-a-SQL-Command-be77f9d2
https://azure.microsoft.com/en-us/blog/azure-automation-runbook-management/?cdn=disable
http://www.sqlservercentral.com/articles/Azure+SQL+database/117804/
希望这可以帮助。
问候,
阿尔贝托·莫里洛