MSSQL 错误:“数据库‘master’的脚本级升级失败...升级步骤‘msdb110_upgrade.sql’遇到错误 200,状态 7,严重性 25。”

Jon*_*nno 6 sql-server

突然有一天(在我的开发 PC 上)我的 Microsoft SQL Server 2012 实例(以实例名称“SQL2012”安装)无法启动(我所有其他安装的实例都启动了)。尝试在“服务”下手动启动它失败。我不记得在此之前最近做过任何更改。失败的原因一直是个谜。

在检查事件查看器时,在系统下它显示了一条相当有趣的错误消息[强调我的]:

SQL Server (SQL2012) 服务因以下特定于服务的错误而终止:
警告:在 SQL Server (SQL2012) 之前您必须注销。如果您此时尚未注销,您的会话将断开连接,并且您打开的任何打开的文件或设备可能会丢失数据。

在应用程序事件日志下检查,我发现了这 2 条错误消息(前面有许多 MSSQL$SQL2012 信息性消息):

数据库“master”的脚本级升级失败,因为升级步骤“msdb110_upgrade.sql”遇到错误 200,状态 7,严重性 25。这是一个严重的错误情况,可能会干扰常规操作,并且数据库将脱机。如果在升级“master”数据库期间发生错误,则会阻止整个 SQL Server 实例启动。检查以前的错误日志条目是否有错误,采取适当的纠正措施并重新启动数据库,以便脚本升级步骤运行完成。

其次是:

无法恢复主数据库。SQL Server 无法运行。从完整备份中恢复主服务器、修复它或重建它。有关如何重建 master 数据库的详细信息,请参阅 SQL Server 联机丛书。

担心丢失我的系统数据库(并且没有要恢复的备份 - 谁会备份他们的系统数据库??)并且需要访问实例和附加数据库 - 我愿意尝试任何事情。甚至可能恢复系统数据库:即使没有备份也恢复 SQL Server 主数据库- 但这看起来相当复杂。

Jon*_*nno 14

幸运的是,我最终能够启动实例(感谢您的回答: https: //stackoverflow.com/a/59676743/4993856,我信任它,因为 Pinal Dave 还提到了该特定开关:SQL SERVER \xe2\x80 \x93 数据库 \xe2\x80\x98master\xe2\x80\x99 的脚本级升级失败,因为升级步骤 msdb110_upgrade.sql 遇到错误 926,状态 1,严重性 25)如果我运行:

\n
\n

net start mssqlserver$SQL2012 /T902

\n
\n

这表明升级脚本存在一些问题...(请记住,SQL 是使用实例名称安装的:SQL2012,因此上面为命名实例使用了mssqlserver$SQL2012 )。

\n

经过更多搜索后,我发现了这篇文章:Installing service pack /cumulative update on SQL Server 2016 / 2017 Breaks Database Engine (not完全相同的SQL版本与我的),它指向以下可能的区域设置设置(控制面板[当通过\'icons\'] > 所有控制面板项目 > 区域 > 管理 >“更改系统区域设置...”):

\n
\n

区域设置中的“测试版:使用 Unicode UTF-8 实现全球语言支持”

\n
\n

在此输入图像描述

\n

就是这样!取消选择该选项(并可能重新启动计算机)后,MSSQL Server 2012 实例启动时没有任何问题,并且我能够访问之前附加的所有数据库。

\n

我假设待决升级脚本已成功运行。现在回想起来,有可能我同意安装 SQL 更新,并且之后从未费心测试对实例的访问。

\n

我也不记得为什么我选择在“区域设置”下启用该特定设置,可能是由于某些 Linux 兼容性,但看起来它在最近的 Windows 版本中已默认“打开”。

\n