SQL服务器代理服务无法启动

SQL Server Agent service could not be started

我使用以下命令在 Windows Server 2016 虚拟机上的 Docker 容器中启动 Windows SQL 服务器:

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 (Agent XPs disabled) 节点。 所以我经历了 https://www.mssqltips.com/sqlservertip/2729/how-to-start-sql-server-agent-when-agent-xps-show-disabled/ 中的所有内容。之后我执行了

exec sp_configure 'Agent XPs'

结果是:

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

有趣的是,当我 运行

exec sp_configure 'Agent XPs'

再次,我明白了:

start-agent-command 怎么可能禁用 Agent XP?

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

编辑3: 在收到 Jeroen Mostert 的评论后,我查看了 EventLog。 我使用了以下命令:

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。然后我 运行 上面的命令启动代理,它给了我接下来的两行

System-EventLog 给了我:

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) 

您好,您需要启动 SQL Server Agent 服务,如何启动服务您可以按照此 link: Start Service

第 1 步: 首先,您必须单击开始菜单并搜索 SQL 服务器配置管理器,然后单击 SQL Server 配置搜索结果中的经理选项。

第 2 步: 然后你必须 select 从左侧菜单中的 SQL 服务器服务,你可以看到服务 SQL Server (SQLEXPRESS) 不是 运行 并且已停止。

第 3 步: 现在,您必须启动服务 SQL 服务器 (SQLEXPRESS) 为此,您必须按下鼠标右键单击 SQL Server(代理)服务和 select 启动选项以启动服务。

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

因为您 运行 在 docker 容器中,我假设您也在使用某种形式的环境管理(chef、puppet、jenkins)等。仔细检查您的所有参与者环境。也许其中之一是检测代理状态以及是否应允许代理 xp。此外,如果您在域中,您可能需要检查 SQL 策略和 AD 策略。但是逆转发生的速度表明docker实例中的代理人太过分了。

我的解决方案是将 build-server 升级到 Windows Server 2019。就是这样。然后一切正常,没有任何进一步的改变。

我设法解决了进入 docker 容器的问题,使用 "cmd" 然后 运行 一个特定的命令来启动 windows 服务。

1) docker exec -it YourSQLServerContainerName cmd

2) net start sqlserveragent

您可以停止和启动您的容器,它会保持 运行ning 状态。

我有同样的问题,这里是我如何解决我的问题。

首先,我使用 mcr.microsoft.com/mssql/server:2019-CU3-[=38 将 SQL 服务器安装为 Docker 容器=]-16.04 图像,我使用 host network_mode 作为数据库容器。

接下来,在查看 SQL 代理日志后,我注意到它无法连接到服务器。

 $ 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 Agent 正在尝试连接实例 '(local),1433',所以我的解决方案是解决localsqlserver 使用本地 IP 的主机。我通过将以下记录添加到服务器的 /etc/hosts 文件来完成它。

127.0.0.1 local
127.0.0.1 sqlserver

我从日志中发现 SQL 代理试图连接 /var/opt/mssql/log/sqlagent.out

中的实例“(local),1433”

我正在使用 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