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

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

症状

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

等待数据库引擎恢复句柄失败。 检查SQL Server错误日志中的潜在原因。

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

**Error message :**
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_SSISServerCleanupJobLogin##]
    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