遇到了由物理机虚拟化而成的 SQL Server 问题。由于某种原因,在虚拟化之前在物理 SQL Server 上设置了 CPU 掩码,现在该机器上的高级选项不可用,现在它是 VMware 客户机。所以我需要重新配置 CPU 关联掩码设置 - 这是高级选项,因此由于关联掩码问题而被阻止。
我尝试在单用户命令行模式下从 SQL 服务器执行此操作,我在 Google 上搜索过并发现很多人遇到类似的问题,但没有真正的解决方案。
以下是查询分析器的示例命令和输出。
sp_configure 'show advanced options', 1
GO
RECONFIGURE WITH OVERRIDE
GO
sp_configure 'affinity mask', 0x00000000
GO
RECONFIGURE
GO
-----------------------------------------
Configuration option 'show advanced options' changed from 0 to 1. Run the RECONFIGURE statement to install.
Msg 5832, Level 16, State 1, Line 1
The affinity mask specified does not match the CPU mask on this system.
Msg 15123, Level 16, State 1, Procedure sp_configure, Line 51
The configuration option 'affinity mask' does not exist, or it may be an advanced option.
答案1
我认为 Microsoft 支持的解决方案是备份数据库、重新安装 SQL Server,然后将数据库恢复到新安装。
如果你想尝试一些不受 MS 支持, 有可能非常危险,您可以尝试通过 SQL 查询更新主数据库。我不知道我是否推荐这样做,但它可能对您有用,并省去一些重新安装的麻烦。另外,我以前从未这样做过,所以不能保证它会起作用。步骤如下:
- 备份数据库
- 验证数据库备份是否有效
- 确实,确保你的数据库有良好的备份
- 停止 SQL Server
- 在中启动 SQL Server单用户模式(向 sqlserver.exe 添加 -m 选项)
从(管理)命令提示符处,在 sqlcmd 中运行以下命令:
sqlcmd -S ADMIN:server\instance -d master -W -s "," -Q "从 SYS.Configurations 中选择名称、值、最小值、最大值、Value_in_use、is_dynamic、is_advanced,其中名称 ='亲和力掩码'"
当然,
server\instance
在运行之前要替换。此外,ADMIN:
服务器名称开头的 也很重要 - 这会将您连接到专用管理连接。假设这返回了您期望的值(不正确的值),您可以尝试将亲和力掩码更新为 0。使用以下命令执行此操作:
sqlcmd -S ADMIN:server\instance -d master -W -s "," -Q "update sys.configurations set value=0 其中名称 = '亲和力掩码'"
关闭单用户模式服务器。
- 像平常一样启动 SQL Server。
- 祈祷吧。
答案2
我们店里就遇到过同样的问题。我们有一个 4 CPU 的 SQL 2005 机箱,通过 P2V 连接到一个 2 CPU 的 VMWare SQL 2005 机箱。SQL 2005 重新上线后,它陷入了您上面描述的困境。我们能够通过将 VMWare 机箱改回 4 路机箱来纠正这种情况(只需快速重启即可完成简单更改)。我们将其保留为 4 路机箱,但可以关闭处理器亲和性...将其缩小回 2 路,然后重新建立处理器亲和性。
您可以查询 sys.configurations 表来确定处理器亲和性实际设置的十进制值。如果您进行十进制到二进制的转换,则可以确定位掩码的样子,并且您可能会发现它被设置为期望比您实际拥有的处理器更多的处理器。