2010-10-07 52 views
2

我正在开发一个工具,最终将用于同时在5000多个生产数据库上运行sql脚本。目前它只能用于在我们的Dev和QA数据库上运行脚本。但是我想用最具扩展性的方式来设计它,并且没有经验来做这样的事情,所以我可以使用一些建议。需要在5000多个数据库上运行SQL脚本。我应该怎么办?

技术我目前使用的:C#.NET 4.0 ADO.Net SMO

编辑:我想通过可扩展的我仅仅意味着能够以最高效的方式运行的数据库任意数量的脚本。

+1

您有什么担忧?这个脚本是做什么的,这使得它在5k数据库而不是5上运行很重要? – egrunin 2010-10-07 20:54:00

+0

那么,脚本更新数据库,以镜像中央服务器上的“黄金”数据库。我主要关注的是性能。 – JimDaniel 2010-10-07 21:03:31

+0

所以他们都会同时查询“黄金”数据库? – mpen 2010-10-07 21:12:51

回答

0

首先,我会建议仔细检查一下,如果您不能使用现有的管理设施之一,如Policy Based ManagementCentral 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

0

可扩展性是什么意思?回答这可能是找到你要找的答案的最佳方式。帮助:

  1. 哪些功能需要在未来扩展?
  2. 你想使用插件或只是修改主应用程序的代码?
  3. “基础”是否可以改变? (需要仔细使用接口。)

当然,使它具有可扩展性,然后永远不会使用该扩展性,这意味着你浪费了时间。所以,想想现在是否真的需要这个。

0

我建议你使用SQL'Bulk input'方法,这是我与MS SQL碰到的最快速的方法。欢呼声

相关问题