将 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

  1. 右键单击“SUSDB”->“任务”-> 单击“拆离”:Screenshot of SQL Server Management Studio showing the SUSDB > Tasks > Detach option selected.
  2. 选中“删除现有连接”,然后单击“确定”(可选,如果存在可用连接)。 Screenshot of the Detach Database dialog box with the Drop Existing Connections option selected and the OK option highlighted.

使用命令提示符

重要

这些步骤显示如何使用 sqlcmd 实用工具从 Windows 内部数据库实例拆离 WSUS 数据库 (SUSDB)。 有关 sqlcmd 实用工具的详细信息,请参阅 sqlcmd 实用工具

  1. 打开提升的命令提示符
  2. 使用 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

  1. 将 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 实例

  1. 在“SQL Server Management Studio”中的“实例”节点下,右键单击“数据库”,然后单击“附加”。 Screenshot of SQL Server Management Studio showing the Databases > Attach option selected.
  2. 在“附加数据库”框的“要附加的数据库”下,单击“添加”按钮并找到 SUSDB.mdf 文件(从 WID 文件夹复制),然后单击“确定”。 Screenshot of the Attach Databases dialog box with the Add option highlighted.Screenshot of the Locate Database Files dialog box with the S U S D B M D F file highlighted.

提示

也可使用 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 实例的登录权限:

  1. 进入 SQL Server Management Studio
  2. 打开实例
  3. 单击“安全性”
  4. 单击“登录名”

应会列出 NT AUTHORITY\NETWORK SERVICE 帐户。 如果未列出,则需要通过添加新登录名来添加它。

重要

如果 SQL 实例与 WSUS 位于不同的计算机上,则 WSUS 服务器的计算机帐户应以 [FQDN]\[WSUSComputerName]$ 格式列出。 如果未列出,则可使用以下步骤添加它,并将 NT AUTHORITY\NETWORK SERVICE 替换为 WSUS 服务器的计算机帐户 ([FQDN]\[WSUSComputerName]$)。这将是对 NT AUTHORITY\NETWORK SERVICE 授予权限的补充

添加 NT AUTHORITY\NETWORK SERVICE 并向其授予权限
  1. 右键单击“登录名”,然后单击“新建登录名…”Screenshot of SQL Server Management Studio showing the Logins > New Login option selected.
  2. 在“常规”页面上,填写“登录名”(NT AUTHORITY\NETWORK SERVICE),并将“默认数据库”设置为 SUSDB。 Screenshot of the General page of the Login dialog box showing the Login name and Defualt database fields populated.
  3. 在“服务器角色”页面上,确保“public”和“sysadmin”处于选中状态。 Screenshot of the Server Roles page of the Login dialog box showing the public and sysadmin options selected.
  4. 在“用户映射”页面上
    • 在“映射到此登录名的用户:”下,选择“SUSDB”
    • 在“数据库角色成员身份: SUSDB”下,确保选中以下内容
      • 公共
      • webServiceScreenshot of the User Mapping page of the Login dialog box showing the public and webService options selected.
  5. 单击 “确定”

现在应会在“登录名”下看到 NT AUTHORITY\NETWORK SERVICE。 Screenshot of the Object Explorer showing N T AUTHORITY NETWORK SERVICE under Logins.

数据库权限

  1. 右键单击“SUSDB”
  2. 选择“属性”
  3. 单击“权限”

应会列出 NT AUTHORITY\NETWORK SERVICE 帐户。

  1. 如果未列出,请添加该帐户。

  2. 在“登录名”文本框中,按以下格式输入 WSUS 计算机:

    [FQDN]\[WSUSComputerName]$

  3. 确认“默认数据库”设置为“SUSDB”。

    提示

    在以下示例中,FQDN 为 Contosto.com,WSUS 计算机名称为 WsusMachine:

    Screenshot of the Login dialog box showing that the FQDN is Contosto.com** and the W S U S machine name is W s u s Machine.

  4. 在“用户映射”页上的“映射到此登录名的用户”下,选择“SUSDB”数据库

  5. 在“数据库角色成员身份: SUSDB”下选中“webservice”:Screenshot of the User Mapping page of the Login dialog box showing the SUSDB and webService options selected.

  6. 单击“确定”以保存设置。

    注意

    可能需要重启 SQL 服务才能使更改生效。

编辑注册表,以将 WSUS 指向 SQL Server 实例

重要

请认真遵循本部分所述的步骤。 如果注册表修改不正确,可能会发生严重问题。 在修改注册表之前,请备份注册表,以便在出现问题时可以还原。

  1. 单击“开始”,再单击“运行”,键入“regedit& ”,然后单击“确定”。

  2. 找到以下项:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\UpdateServices\Server\Setup\SqlServerName

  3. 在“值”文本框中,键入“[ServerName]\[InstanceName]”,然后单击“确定”。 如果实例名称为默认实例,请键入“[ServerName]”。

  4. 找到以下项:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Update Services\Server\Setup\Installed Role Services\UpdateServices-WidDatabaseScreenshot of the Registry Editor dialog box with the UpdateServices-WidDatabase key highlighted.

  5. 将项重命名为“UpdateServices-Database”Screenshot of the Registry Editor dialog box showing the key name update to UpdateServices-Database.

    注意

    如果不更新此项,则 WsusUtil 将尝试为 WID(而非已迁移到的 SQL 实例)提供服务。

在 WSUS 服务器上启动 IIS 和 WSUS 服务

从 PowerShell(提升)运行:

    Start-Service IISADMIN
    Start-Service WsusService

注意

如果使用的是 WSUS 控制台,请关闭并重启它。

警告

如果删除 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