AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 201861
Accepted
Ian_H
Ian_H
Asked: 2018-03-22 01:41:35 +0800 CST2018-03-22 01:41:35 +0800 CST 2018-03-22 01:41:35 +0800 CST

Windows 更新、错误日志和 wmi 提供程序错误后 SQL Server 2008r2 无法启动

  • 772

我在 Windows 2008 R2 机器上有一个 SQL Server 2008 R2 实例,并且 Windows 已经将近一年没有更新(我知道),昨晚应用了 Windows 补丁(大约有 100 个待处理),今天早上 SQL Server不会启动。

事件查看器中的错误是:

initrrlog:无法打开错误日志文件“D:\Program Files\Microsoft SQL Server\MSSQL10_50.SQL1\MSSQL\Log\ERRORLOG”。操作系统错误 = 5(无法检索此错误的文本。原因:15105)。

根据许多链接(例如SQLServerCentral),我发现这似乎确实是某种权限问题。SQL Server 配置为使用的服务帐户是网络服务帐户,我在 AD 中检查过,似乎没问题,密码正确(自昨天以来,在这方面没有任何变化,当它工作时)我也试过:

  • 在盒子上设置服务帐户本地管理员(临时)

  • 确保服务帐户也已添加到服务器上的 SQL Server 组

  • 向服务帐户授予对错误日志文件夹的显式权限(完全控制);然后到整个程序文件文件夹(完全控制)

我仍然得到同样的错误。

接下来,我尝试在配置管理器中更改使用的服务帐户(网络管理员 - (我知道,只是为了测试)或本地服务帐户),当应用这些更改时,我收到 WMI 提供程序错误:

WMI 提供程序错误 [调用 WMI 提供程序错误代码:0x800742a2]

WMI 提供程序错误

我对此有点困惑,以前从未见过类似的东西。

有没有人对正在发生的事情有任何想法,或者我错过了什么可以尝试的东西?

编辑 1:

补充一点,我在搜索 WMI 错误MS Support、SQLServerCentral时检查了第一次点击,但他们似乎仍然在暗示权限问题。我已经仔细检查了上述所有与权限问题相关的内容,但看不出问题出在哪里(服务帐户现在是本地管理员(!),在框上的 SQL Server 组中,并且对所有人都有明确的完全控制权程序文件)。我想知道这个 WMI 错误是红鲱鱼,还是完全独立的问题。

编辑 2:

似乎 ERRORLOG 文件有问题阻止启动,而不是权限问题 - 不确定是什么,但可能是文件本身的损坏或某些东西,因为删除它(好吧,将它复制到其他地方)似乎已经强制 SQL服务器生成一个新的,它启动正常。我不确定错误日志文件有什么问题(我会看看我是否可以打开它并进行调查),我不知道 WMI Provider 错误是什么,现在服务在线我无法完全测试现在,我将在计划的停机时间稍后再试一次,以查看 WMI 提供程序是否出现(并酌情更新/添加为答案)。

编辑 3(最终更新):

似乎所有症状都具有误导性,在这种情况下,此类问题的常见原因(权限)不是原因,这是 ERRORLOG 文件本身的问题,删除它(重新创建)解决了问题和服务出现了。我添加了一个描述这个的答案。但是,这似乎是我能找到的唯一一种具有此原因的症状的情况,并且在许多情况下是权限,我在上面提供了链接,这个问题的答案非常详细。因此,如果您将来遇到此问题,我建议您在检查 ERRORLOG 文件本身之前按照这些步骤(首先检查权限问题)。

sql-server sql-server-2008-r2
  • 2 2 个回答
  • 2699 Views

2 个回答

  • Voted
  1. John K. N.
    2018-03-22T02:07:12+08:002018-03-22T02:07:12+08:00

    根据微软文章的官方解决方案是:

    若要解决此问题,请将域用户帐户添加到 SQLServer2005MSSQLUser$ ComputerName $ InstanceName域组。

    为此,请按照下列步骤操作:
    1. 单击开始,指向管理工具,然后单击Active Directory 用户和计算机。
    2. 在Active Directory 用户和计算机管理单元中,单击用户。
    3. 双击SQLServer2005MSSQLUser$ComputerName$InstanceName。
    4. 在属性对话框中,单击成员选项卡。
    5. 在成员选项卡上,单击添加。
    6. 在选择用户、联系人、计算机或组对话框中,在DomainName\UserName中键入用户格式下输入要选择的对象名称,然后单击确定。7. 在属性对话框中,单击确定。

    参考

    • 在 Windows Server 2008 域控制器上将 SQL Server 2008 组件的服务帐户更改为非域管理员帐户时出现错误消息:“由于登录失败,服务未启动”或“WMI 提供程序错误”(Microsoft 支持)

    • WMI 提供程序错误 - 更改 SQL 服务帐户时(SQLServerCentral)

    SQL Server 配置管理器

    当您运行SQL Server 配置管理器并修改设置时,配置管理器将根据所做的配置更改添加和删除文件和目录的权限。

    这就是为什么 Microsoft 声明,配置更改应始终使用SQL Server 配置管理器进行。

    重要
    始终使用 SQL Server 工具(例如 SQL Server 配置管理器)更改 SQL Server 或 SQL Server 代理服务使用的帐户,或更改帐户的密码。除了更改帐户名称之外,SQL Server 配置管理器还会执行其他配置,例如在 Windows 注册表中设置权限,以便新帐户可以读取 SQL Server 设置。Windows 服务控制管理器等其他工具可以更改帐户名称,但不会更改相关设置。如果服务无法访问注册表的 SQL Server 部分,则服务可能无法正常启动。

    参考:SQL Server 配置管理器(Microsoft Docs)

    要执行的实际步骤

    在您的情况下,您可能已经执行了几个步骤,但顺序不正确。尝试以下操作:

    1. 打开SQL Server 配置管理器
    2. 将SQL Server (INSTANCE)服务帐户设置为您不希望服务在其下运行的用户
    3. 为您的实例重新启动SQL Server (INSTANCE)服务(应该失败)
    4. 关闭SQL Server 配置管理器
    5. 将您希望 SQL Server 服务在其下运行的服务帐户添加到指定的组(如文章开头所述;步骤 1-7)
    6. 打开SQL Server 配置管理器
    7. 将SQL Server (INSTANCE)服务帐户设置为您刚刚添加到SQLServer2005MSSQLUser$ComputerName$InstanceName组的用户。
    8. 为您的实例重新启动SQL Server (INSTANCE)服务

    如果这不起作用,您可能在 SQL Server 程序文件结构的某个级别破坏了 ACL(权限)。

    SQL Server 帐户和 ACL

    您的服务仍未启动,并且仍然可能是权限 (ACL) 问题?

    然后您可能必须修复文件/文件夹权限。SQL Server 帐户的完整列表和所需权限在以下详尽文档中列出:

    • 设置 Windows 服务帐户(Microsoft Technet / 2008R2)
    • 配置 Windows 服务帐户和权限(Microsoft SQL Docs / 2012)

    在文档中引用MSSQLServer的任何地方,都替换为您希望用来运行SQL Server (INSTANCE)的帐户。

    例如,在检查文档的查看为 SQL Server 服务帐户创建的访问控制列表部分时,请确保您的YourServiceAccount有权访问:

    服务帐户 | 文件和文件夹 | 使用权
    -----------------+--------------+-- -------------
    MSSQL服务器 | Instid\MSSQL\备份 | 完全控制
                        | Instid\MSSQL\binn | 读取、执行
                        | Instid\MSSQL\数据 | 完全控制
    ……
    

    而不是MSSQLServer使用YourServiceAccount.

    参考:

    • 设置 Windows 服务帐户(Microsoft Technet / 2008R2)
    • 配置 Windows 服务帐户和权限(Microsoft SQL Docs / 2016+)
    • 1
  2. Best Answer
    Ian_H
    2018-03-24T02:00:22+08:002018-03-24T02:00:22+08:00

    这是最终的更新/修复:

    我怀疑这个问题相当独特,并且所有指出的问题都具有误导性 - 它们都导致权限问题,结果证明不是问题。正如另一个答案所强调的那样,在大多数情况下,这似乎确实是问题所在。

    在这种情况下,错误日志文件本身似乎存在问题,从该位置删除文件似乎迫使 SQL Server 在启动时生成一个新文件,然后服务正确启动。

    后来我在配置管理器中测试了更改设置,并且没有 WMI Provider 错误的迹象,因此这似乎也具有误导性。这一切似乎都归结为 ERRORLOG 文件本身的问题,而不是对它的访问。我将尝试询问该 ERRORLOG 文件,看看我是否能找出问题所在(并酌情更新),但现在看来问题已解决。

    概括:

    在大多数情况下,这些症状可能是权限问题,原始问题中有类似问题的链接,@hot2use 的答案中有详细说明。

    但是,(在可能不常见的情况下,并且在这种情况下)有时问题是错误日志文件本身的问题,而不是访问它的权限,并且删除(或只是移动到其他地方)似乎迫使 SQL Server 服务上来并生成一个新的 ERRORLOG 文件。

    附加信息/链接:

    来自原始帖子的类似问题的链接:-

    SQLServer 中心| 支持| SQLAuthority

    WMI Provider 的另一种问题(似乎有类似的症状):- MsSupport

    链接到这个问题的答案,该问题详细介绍了权限错误,这通常是出现这些症状的原因(只是这次不是!):- AnswerByHot2use

    • 0

相关问题

  • SQL Server - 使用聚集索引时如何存储数据页

  • 我需要为每种类型的查询使用单独的索引,还是一个多列索引可以工作?

  • 什么时候应该使用唯一约束而不是唯一索引?

  • 死锁的主要原因是什么,可以预防吗?

  • 如何确定是否需要或需要索引

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve