SQL Server代理服务无法启动。

9
我使用以下命令在Windows Server 2016虚拟机上启动了一个运行在Docker容器中的Windows SQL Server:
docker container run --name mssql-server --detach --publish 1433:1433 --memory 2048mb --volume C:\_Data:C:\_Data --env sa_password=myPassword --env ACCEPT_EULA=Y microsoft/mssql-server-windows-developer

接下来,我想使用以下命令启动 SQL 代理:

docker container exec mssql-server cmd.exe /C "net start sqlserveragent"

不幸的是,我得到了这个输出:

The SQL Server Agent (MSSQLSERVER) service is starting.
The SQL Server Agent (MSSQLSERVER) service could not be started.

The service did not report an error.

More help is available by typing NET HELPMSG 3534

当我输入NET HELPMSG 3534时,我会得到以下结果:
The service did not report an error.

我完全没有思路。在我的本地机器上,这个可以正常工作,但是在构建服务器上却不能。

任何帮助都会很感激。

编辑: 我打开了 SQL Server Management Studio 并注意到SQL Server Agent(代理 XPs 已禁用)节点。 所以我按照https://www.mssqltips.com/sqlservertip/2729/how-to-start-sql-server-agent-when-agent-xps-show-disabled/中的步骤进行了操作。之后我执行了

exec sp_configure 'Agent XPs'

结果如下:

Agent XPs are clearly enabled

但是当我尝试启动代理时,我得到了与上面完全相同的错误信息(服务正在启动... 服务无法启动... 没有报告错误)。

有趣的是,当我运行

exec sp_configure 'Agent XPs'

我再次遇到这个问题:

Agent XPs are disabled

启动代理命令如何禁用代理 XPs?

编辑2:我从https://community.spiceworks.com/topic/293771-sql-server-agent-agent-xps-disabled-sql-server-2008的评论中得知,代理在启动和停止时会自动配置这些值。所以我不应该手动启用它。

编辑3:在Jeroen Mostert的评论后,我查看了事件日志。我使用了以下命令:

docker container exec mssql-server powershell.exe "Get-EventLog Application -Newest 100"

这是来自应用程序日志的结果

Time         EntryType   Source                                  InstanceID Message                                                                                        
----         ---------   ------                                  ---------- -------                                                                                        
Jun 25 10:37 Information SQLSERVERAGENT                          1073741926 SQLServerAgent service successfully stopped.                                                   
Jun 25 10:37 Information MSSQLSERVER                             1073757281 Configuration option 'Agent XPs' changed from 1 to 0. Run the RECONFIGURE statement to install.
Jun 25 10:36 Information MSSQLSERVER                             1073757281 Configuration option 'Agent XPs' changed from 0 to 1. Run the RECONFIGURE statement to install.

你可以看到,我已手动启用了Agent XPs。然后我运行了上面的命令来启动代理程序,这给了我下面两行。
系统事件日志告诉我:
Time         EntryType   Source                                   InstanceID Message                                                                                                                                                                                                                                                             
----         ---------   ------                                   ---------- -------                                                                                                                                                                                                                                                             
Jun 25 10:37 Information Service Control Manager                  1073748860 The SQL Server Agent (MSSQLSERVER) service entered the stopped state.                                                                                                                                                                                               

编辑4: 根据Dan Guzman的评论: 这是SQLAGENT.OUT的内容:

2019-07-09 11:03:44 - ? [000]
2019-07-09 11:03:44 - ? [098] SQLServerAgent terminated (normally)

编辑 5:版本是 (select @@version) 是:

Microsoft SQL Server 2017 (RTM-CU3-GDR) (KB4052987) - 14.0.3015.40 (X64)   Dec 22 2017 16:13:22   Copyright (C) 2017 Microsoft Corporation  Developer Edition (64-bit) on Windows Server 2016 Datacenter 10.0 <X64> (Build 14393: ) (Hypervisor) 

1
通过在容器 SQL 实例中运行此查询来检查 SQL 代理错误日志:EXEC xp_readerrorlog 0, 2 - Dan Guzman
@DanGuzman:感谢您的输入。查询结果为:“日期 | 错误级别:3 | 文本:[093] SQLServerAgent 正常终止”。这对我来说并不是很有帮助。 - Rico-E
@Rico-E,请将完整的SQL Agent日志内容添加到您的问题中。这可以通过在容器中运行命令type "C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\Log\SQLAGENT.OUT"来获取。 - Dan Guzman
你在使用Express版本吗? - Daniel Brughera
1
@LukaszSzozda,当我运行问题中的命令时,查询结果是“Microsoft SQL Server 2017 (RTM-CU3-GDR) (KB4052987) - 14.0.3015.40(X64)Dec 22 2017 16:13:22 版权所有 (C) 2017 Microsoft Corporation Developer Edition (64-bit) on Windows Server 2016 Datacenter 10.0 <X64> (Build 14393: ) (Hypervisor)”。除非使用了旧的缓存镜像,否则Rico-E的容器应该也会得到相同的结果。 - Dan Guzman
显示剩余6条评论
6个回答

1

我的解决方案是将构建服务器升级到Windows Server 2019。就这样。然后一切都可以正常工作,无需进一步更改。


0

我成功解决了这个问题,通过使用“cmd”进入docker容器,然后运行特定的命令来启动Windows服务。

1)docker exec -it YourSQLServerContainerName cmd

2)net start sqlserveragent

您可以停止和启动容器,并保留其运行状态。


0

你需要启动 SQL Server 代理服务,如何启动服务可以参考此链接: 启动服务

步骤 1: 首先,你要点击开始菜单并搜索 SQL Server 配置管理器,然后从搜索结果中选择SQL Server配置管理器选项。

步骤 2: 接着,你需要从左侧菜单中选择 SQL Server 服务,你会看到服务SQL Server(SQLEXPRESS)未运行且已停止。

步骤3:现在,您需要启动SQL Server(SQLEXPRESS)服务,为此,您必须在SQL Server(代理)服务上按鼠标右键,并选择“启动”选项来启动该服务。

步骤4:您可以看到服务状态正在运行,现在您应该再次尝试连接SQL Server数据库引擎。


抱歉,这并没有帮助,因为我正在运行一个 SQL Server 的 Docker 容器。没有所谓的配置管理器。 - Rico-E
Docker容器 - Lukasz Szozda

0

因为你正在运行docker容器,我假设你也使用了一些环境管理工具(比如chef、puppet、jenkins等)。仔细审查你的环境中的所有参与者。也许其中一个正在检测代理状态以及是否允许代理XP。此外,如果你在域中,则可能需要检查SQL策略和AD策略。但反转发生的速度表明,docker实例中的代理是有问题的罪魁祸首。


0

我从日志中发现SQL Agent尝试连接实例“(local),1433”,记录在/var/opt/mssql/log/sqlagent.out中

我正在使用Amazon Linux 2和更新的Sql Server 2017。

通过将以下记录(第一行)添加到服务器的/etc/hosts文件中,使用本地I编辑本地和sqlserver主机。

172.31.1.200 ip-172-31-1-200

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4

::1 localhost6 localhost6.localdomain6


0

我曾经遇到过同样的问题,这是我解决问题的方法。

首先,我使用mcr.microsoft.com/mssql/server:2019-CU3-ubuntu-16.04镜像将SQL Server安装为Docker容器,并在数据库容器中使用host network_mode

接下来,在查看SQL Agent日志后,我发现它无法连接到服务器。

 $ tail -100f /var/opt/mssql/log/sqlagent.1 # read agent's logs
 ...
 2020-10-03 21:25:01 - ! [000] Unable to connect to server '(local),1433'; SQLServerAgent cannot start
 2020-10-03 21:25:01 - ! [103] SQLServerAgent could not be started (reason: Unable to connect to server '(local),1433'; SQLServerAgent cannot start)
 2020-10-03 21:25:06 - ! [298] SQLServer Error: 11001, TCP Provider: No such host is known. [SQLSTATE 08001]
 ...

最后,我从日志中发现SQL代理尝试连接实例'(local),1433',所以我的解决方案是将localsqlserver主机解析为本地IP。我通过向服务器的/etc/hosts文件添加以下记录来完成此操作。
127.0.0.1 local
127.0.0.1 sqlserver

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