在启动时运行 MS SQL 服务器脚本

5
我希望您能在Windows 2012 R2服务器实例(Google Cloud Server)启动(或重新启动)时运行SQL脚本。我使用SQL脚本、批处理文件和任务计划程序来实现这一目标。
为了进行测试,我创建了一个简单的SQL脚本,将日期时间戳添加到表中:
USE <Databasename>
GO

INSERT INTO testingTable(time_Stamp)
VALUES (GETDATE())

SELECT * FROM testingTable

(其中Databasename显然包含特定数据库的名称)

批处理文件如下所示:

sqlcmd -S <servername> -i "C:\Temp\testQuery.sql" > C:\Temp\output.txt

我将所有内容输出到文本文件中。当我运行批处理文件时,输出看起来很好:它打印出了我运行此SQL查询的所有时间,并将其保存在文本文件中。
我已经计划安排此任务在启动时运行(按照此处的步骤:https://www.sevenforums.com/tutorials/67503-task-create-run-program-startup-log.html)。我在这里尝试了整个一系列的设置,但似乎没有任何效果,包括论坛中突出显示的确切设置。
现在当我重新启动服务器时,输出文件显示以下错误消息:
Msg 904, Level 16, State 3, Server <servername>, Line 1
Database 7 cannot be autostarted during server shutdown or startup.
Msg 208, Level 16, State 1, Server <servername>, Line 2
Invalid object name 'testingTable'.

似乎 MS SQL 不允许在登录到任何用户帐户之前运行脚本。实际问题是我需要在早晨非常早的时候运行一些 SQL 任务,以便当每个人到达办公室时已经完成。我已经成功使用 VMPower 自动启动了服务器,但我无法自动登录到任何帐户。我希望有人能给我一些解决此问题的反馈。如果可能的话,我希望我的当前设置可以正常工作,但如果有人知道如何自动登录到现有谷歌云服务器实例上的帐户,那将非常有帮助。谢谢Joost。

1
你是否正在寻找这个链接 https://www.mssqltips.com/sqlservertip/1574/automatically-running-stored-procedures-at-sql-server-startup/? - Wendy
1
可能本地SQL的副本尚未完成初始化,但您正在尝试在它们上线之前访问数据库。查看事件查看器,看看何时出现错误以及何时SQL服务器在线。在写入数据库之前,您可能需要插入30秒的延迟。 - Chuck
@Chuck:是的,这确实起到了作用。我使用了一个超时语句来设置了2分钟的延迟。谢谢你。 - JoostDui
1个回答

2
SQL Server 提供了系统存储过程 sp_procoption,可以用来指定一个或多个存储过程在 SQL Server 服务启动时自动执行。
例如,您的数据库中可能有一个耗时较长的昂贵查询,在第一次执行时需要一些时间。使用 sp_procoption,您可以在服务器启动时运行此查询以预编译执行计划,以便您的用户不会成为第一个运行此特定查询的不幸者。我曾使用此功能设置自动执行脚本化的 Profiler 服务器端跟踪。脚本化跟踪被作为存储过程的一部分,并在服务器启动时自动执行。
exec sp_procoption @ProcName = ['stored procedure name'], 
@OptionName = 'STARTUP', 
@OptionValue = [on|off]

阅读更多:在 SQL Server 启动时自动运行存储过程


Docker

有关 MSSQL Docker 镜像的解决方案,请参见:SQL Server Docker 容器在安装后停止


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接