将 WSUS 数据库从 WID 迁移到 SQL
适用范围:Windows Server 2022、Windows Server 2019、Windows Server 2012、Windows Server 2012 R2、Windows Server 2016
使用以下步骤将 WSUS 数据库 (SUSDB) 从 Windows 内部数据库实例迁移到 SQL Server 的本地或远程实例。
先决条件
- SQL 实例。 这可以是默认的 MSSQLServer 或自定义实例。
- SQL Server Management Studio
- 安装了 WID 角色的 WSUS
- IIS(通过服务器管理器安装 WSUS 时,通常包含该软件)。 该软件尚未安装,需要进行安装。
迁移 WSUS 数据库
停止 WSUS 服务器上的 IIS 和 WSUS 服务
从 PowerShell(提升)运行:
Stop-Service IISADMIN
Stop-Service WsusService
从 Windows 内部数据库拆离 SUSDB
使用 SQL Management Studio
- 右键单击“SUSDB”->“任务”-> 单击“拆离”:
- 选中“删除现有连接”,然后单击“确定”(可选,如果存在可用连接)。
使用命令提示符
重要
这些步骤显示如何使用 sqlcmd 实用工具从 Windows 内部数据库实例拆离 WSUS 数据库 (SUSDB)。 有关 sqlcmd 实用工具的详细信息,请参阅 sqlcmd 实用工具。
- 打开提升的命令提示符
- 使用 sqlcmd 实用工具运行以下 SQL 命令,以从 Windows 内部数据库实例拆离 WSUS 数据库 (SUSDB):
sqlcmd -S \\.\pipe\Microsoft##WID\tsql\query
use master
GO
alter database SUSDB set single_user with rollback immediate
GO
sp_detach_db SUSDB
GO
将 SUSDB 文件复制到 SQL Server
- 将 SUSDB.mdf 和 SUSDB_log.ldf 从 WID 数据文件夹 (%SystemDrive%\Windows\WID\Data) 复制到 SQL 实例数据文件夹。
提示
例如,如果 SQL 实例文件夹位于 C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL,而 WID 数据文件夹位于 C:\Windows\WID\Data,则将 SUSDB 文件从 C:\Windows\WID\Data 复制到 C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Data
将 SUSDB 附加到 SQL 实例
- 在“SQL Server Management Studio”中的“实例”节点下,右键单击“数据库”,然后单击“附加”。
- 在“附加数据库”框的“要附加的数据库”下,单击“添加”按钮并找到 SUSDB.mdf 文件(从 WID 文件夹复制),然后单击“确定”。
提示
也可使用 Transact-Sql 完成此操作。 有关说明,请参阅关于附加数据库的 SQL 文档。
示例(使用上述示例中的路径):
USE master;
GO
CREATE DATABASE SUSDB
ON
(FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Data\SUSDB.mdf'),
(FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Log\SUSDB_Log.ldf')
FOR ATTACH;
GO
验证 SQL Server 和数据库登录名及权限
SQL Server 登录权限
附加 SUSDB 后,通过执行以下操作,验证 NT AUTHORITY\NETWORK SERVICE 是否具有对 SQL Server 实例的登录权限:
- 进入 SQL Server Management Studio
- 打开实例
- 单击“安全性”
- 单击“登录名”
应会列出 NT AUTHORITY\NETWORK SERVICE 帐户。 如果未列出,则需要通过添加新登录名来添加它。
重要
如果 SQL 实例与 WSUS 位于不同的计算机上,则 WSUS 服务器的计算机帐户应以 [FQDN]\[WSUSComputerName]$ 格式列出。 如果未列出,则可使用以下步骤添加它,并将 NT AUTHORITY\NETWORK SERVICE 替换为 WSUS 服务器的计算机帐户 ([FQDN]\[WSUSComputerName]$)。这将是对 NT AUTHORITY\NETWORK SERVICE 授予权限的补充
添加 NT AUTHORITY\NETWORK SERVICE 并向其授予权限
- 右键单击“登录名”,然后单击“新建登录名…”
- 在“常规”页面上,填写“登录名”(NT AUTHORITY\NETWORK SERVICE),并将“默认数据库”设置为 SUSDB。
- 在“服务器角色”页面上,确保“public”和“sysadmin”处于选中状态。
- 在“用户映射”页面上:
- 在“映射到此登录名的用户:”下,选择“SUSDB”
- 在“数据库角色成员身份: SUSDB”下,确保选中以下内容:
- 公共
- webService
- 单击 “确定”
现在应会在“登录名”下看到 NT AUTHORITY\NETWORK SERVICE。
数据库权限
- 右键单击“SUSDB”
- 选择“属性”
- 单击“权限”
应会列出 NT AUTHORITY\NETWORK SERVICE 帐户。
如果未列出,请添加该帐户。
在“登录名”文本框中,按以下格式输入 WSUS 计算机:
[FQDN]\[WSUSComputerName]$
确认“默认数据库”设置为“SUSDB”。
提示
在以下示例中,FQDN 为 Contosto.com,WSUS 计算机名称为 WsusMachine:
在“用户映射”页上的“映射到此登录名的用户”下,选择“SUSDB”数据库
在“数据库角色成员身份: SUSDB”下选中“webservice”:
单击“确定”以保存设置。
注意
可能需要重启 SQL 服务才能使更改生效。
编辑注册表,以将 WSUS 指向 SQL Server 实例
重要
请认真遵循本部分所述的步骤。 如果注册表修改不正确,可能会发生严重问题。 在修改注册表之前,请备份注册表,以便在出现问题时可以还原。
单击“开始”,再单击“运行”,键入“regedit& ”,然后单击“确定”。
找到以下项:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\UpdateServices\Server\Setup\SqlServerName
在“值”文本框中,键入“[ServerName]\[InstanceName]”,然后单击“确定”。 如果实例名称为默认实例,请键入“[ServerName]”。
找到以下项:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Update Services\Server\Setup\Installed Role Services\UpdateServices-WidDatabase
将项重命名为“UpdateServices-Database”
注意
如果不更新此项,则 WsusUtil 将尝试为 WID(而非已迁移到的 SQL 实例)提供服务。
在 WSUS 服务器上启动 IIS 和 WSUS 服务
从 PowerShell(提升)运行:
Start-Service IISADMIN
Start-Service WsusService
注意
如果使用的是 WSUS 控制台,请关闭并重启它。
卸载 WID 角色(不推荐)
警告
如果删除 WID 角色,还将删除数据库文件夹 (%SystemDrive%\Program Files\Update Services\Database),其中包含 WSUSUtil.exe 执行安装后任务所需的脚本。 如果选择卸载 WID 角色,请务必事先备份 %SystemDrive%\Program Files\Update Services\Database 文件夹。
使用 PowerShell:
Uninstall-WindowsFeature -Name 'Windows-Internal-Database'
删除 WID 角色后,请验证是否存在以下注册表项:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Update Services\Server\Setup\Installed Role Services\UpdateServices-Database