SQL Server 升级失败,并返回错误 15151

本文可帮助你排查安装 Microsoft SQL Server 累积更新(CU)或 Service Pack(SP)时发生的错误 15151。 运行数据库升级脚本时发生错误。

现象

应用 CU 或 SP 时,安装程序将返回以下错误消息:

等待数据库引擎恢复句柄失败。 有关可能的原因,请查看 SQL Server 错误日志。

此外,可能会在 SQL Server 错误日志中记录以下错误条目:

Error: 15151, Severity: 16, State: 1.
Cannot find the login '##MS_SSISServerCleanupJobLogin##', because it does not exist or you do not have permission.

原因

出现此问题的原因是手动删除了登录名(服务器主体),或者未遵循这些 说明

有关在 CU 或 SP 安装过程中运行的数据库升级脚本的详细信息,请参阅 在应用更新时排查升级脚本失败问题。

解决方法

若要解决该问题,请执行以下步骤:

  1. 使用 跟踪标志 902 启动 SQL Server。

  2. 在服务器上重新创建登录名:

    CREATE LOGIN [##MS_SSISServerCleanupJobLogin##]
    WITH PASSWORD = N'<password>',
    DEFAULT_DATABASE = [master],
    DEFAULT_LANGUAGE = [us_english],
    CHECK_EXPIRATION = OFF,
    CHECK_POLICY = OFF;
    
  3. 切换到 SSISDB 数据库,并将现有用户映射到新创建的登录名:

    USE SSISDB
    GO
    ALTER USER [##MS_SSISServerCleanupJobUser##] WITH LOGIN =[##MS_SSISServerCleanupJobLogin##]
    
  4. 在某些情况下,数据库用户信息也可能丢失。 在这种情况下,请在数据库中重新创建用户 SSISDB ,然后重新运行上一步,将用户映射到登录名:

    USE [SSISDB]
    GO
    DROP USER [##MS_SSISServerCleanupJobUser##]
    GO
    
    CREATE USER [##MS_SSISServerCleanupJobUser##] FOR LOGIN [##MS_SSISServerCleanupJobLogin##]
    GO
    
    ALTER USER [##MS_SSISServerCleanupJobUser##] WITH DEFAULT_SCHEMA=[dbo]
    GO
    
    GRANT EXECUTE ON [internal].[cleanup_server_project_version] TO [##MS_SSISServerCleanupJobUser##]
    GO
    GRANT EXECUTE ON [internal].[cleanup_server_retention_window] TO [##MS_SSISServerCleanupJobUser##]
    GO