我正在开发一种工具,最终将用于在 5000 多个生产数据库上同时运行 sql 脚本。目前,它仅用于在我们的开发和 QA 数据库上运行脚本。但我想以最可扩展的方式设计它,并且没有做过这样的事情的经验,所以我可以使用一些建议。
我目前使用的技术:C# .Net 4.0 ADO.Net SMO
编辑:我认为可扩展性只是指能够以尽可能最有效的方式在任意数量的数据库上运行脚本。
最佳答案
首先,如果您不能使用现有的管理工具之一,例如 Policy Based Management,我建议您仔细检查。或 Central Management Servers .特别是 PBM,它涵盖了许多传统上需要诸如“在每个数据库上运行此脚本”之类的操作。还有许多文章描述了 PBM 的实际应用,例如。 Policy-based Management and Central Management Servers .
另一件需要考虑的事情是使用 PowerShell 而不是 C#/ADO/SMO。 PS 可交付成果是在生产中易于更改/维护的脚本,与编译的可执行文件相反。此外,PS 的对象管道模型使许多任务在 PS 中比在原始 C# 中更容易。 PS可以使用多线程执行。参见 SQL Server PowerShell Overview .
除了处理类似的任务外,看看还有哪些其他项目。我自己有一个项目,dbUtilSqlcmd ,处理在 ADO.Net 环境中执行 .SQL 文件(处理批定界符 GO
,处理 sqlcmd 变量 :setvar
和 $(variable)
, 处理 :connect
命令等)。
最后,如果您最终编写代码而不是使用 PBM,则更大的问题将是线程和错误报告。不要为每个服务器/数据库启动一个线程,5000 个线程是不可行的。使用 ThreadPool.QueueUserWorkItem
反而。更好的是,使用 Tasks Parallel Library如果可能的话。
关于c# - 需要在 5000 多个数据库上运行 SQL 脚本。我应该如何处理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3885774/