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

时间:2017-06-02 17:53:24

标签: sql sql-server sql-server-2008 batch-file google-cloud-sql

我正在尝试在启动(或重新启动)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 个答案:

答案 0 :(得分:1)

<块引用>

SQL Server 提供了系统存储过程 sp_procoption,可用于指定一个或多个存储过程在 SQL Server 服务启动时自动执行。

<块引用>

例如,您的数据库中可能有一个昂贵的查询,它在第一次执行时需要一些时间来运行。使用 sp_procoption,您可以在服务器启动时运行此查询来预编译执行计划,这样您的用户之一就不会成为第一个运行此特定查询的不幸灵魂。我已经使用此功能来设置我编写的 Profiler 服务器端跟踪的自动执行。脚本跟踪是一个存储过程的一部分,该过程设置为在服务器启动时自动执行。

exec sp_procoption @ProcName = ['stored procedure name'], 
@OptionName = 'STARTUP', 
@OptionValue = [on|off]

阅读更多:Automatically Running Stored Procedures at SQL Server Startup


码头工人

MSSQL Docker 镜像的解决方案,参见:SQL Server Docker container is stopping after setup