我要求一个解决方案来SQL Server Express
按计划在多个实例上执行自定义 SQL 脚本。
我见过的解决方案ApexSQL Propagate
没有Redgate SQL Multi Script
调度程序,我有超过 170 个实例可以在它们上运行定期作业。
任何有关如何以最佳方式执行预定脚本的建议都将不胜感激。
我要求一个解决方案来SQL Server Express
按计划在多个实例上执行自定义 SQL 脚本。
我见过的解决方案ApexSQL Propagate
没有Redgate SQL Multi Script
调度程序,我有超过 170 个实例可以在它们上运行定期作业。
任何有关如何以最佳方式执行预定脚本的建议都将不胜感激。
你可以使用 powershell 脚本和 csv 文件来自动化你的大部分工作
并且,为其示例 csv 文件:
这个脚本连接到服务器实例 DBServer,在我的例子中是默认的,并连接到 db,对于备份它可以是 master,并执行 CommandText
它使用集成安全性,但您可以扩展脚本以使用 sql server 密码安全性,您可以扩展脚本以从文件等中获取 sql 命令,等等。
您可以将所有 170 个实例添加到 csv 文件中,脚本将对您的所有服务器执行 sql 命令。
当然,对于生产,脚本必须更复杂,并带有错误日志记录。
这可能是一种非常笨拙的方法。如果你在 Windows 上,你可以在使用 Windows 调度程序运行的 bat 文件中执行它们。在 Linux 上,您可以使用 cron 和 bash 脚本做同样的事情。
我不知道它的调度方面,也不知道 SQL Server Express 的局限性,但我使用看起来像这样的 Windows CMD.EXE 脚本执行了一些车队管理任务,输入是要在其上运行的 SQL 脚本文件每个服务器。
真正的脚本有更多变量——选择一台服务器运行或“全部”,并以今天的日期命名日志文件。
在给定时间运行命令的 Windows 关键字是“AT”,如果权限合适,则这可能会导致 Windows 命令在您的另一台服务器上运行。因此,如果您有 170 个 Windows 服务器...并且如果每个服务器上都安装了 SQLCMD...(并且允许登录到 SQL Server,可能使用实际密码 - )
或者,Management Studio 中的一个手动技巧(如果这适用于 Express 服务器)是右键单击以在服务器组上运行查询,该查询在该组中的每个服务器上运行。我还在学习它,我只是尝试了这个变体——它起作用了:
(我怀疑我们每个服务器的时间设置都略有不同,以决定 12:42 的实际时间。)
要在凌晨 1 点安排行动 - 将时间设置为“00:59:00”,以防夏令时赶上你。之后的行从给定时间开始执行,SELECT 的结果显示为 UNION ALL 来自每个服务器的结果......可能以随机顺序显示。而且你必须让 Management Studio 在一夜之间打开......