Compartir a través de


Error en la actualización de SQL Server con el código de error 574 al ejecutar scripts de base de datos de actualización

Este artículo le ayuda a solucionar un problema en el que una actualización acumulativa (CU) o Service Pack (SP) para SQL Server notifica el error 574 al ejecutar scripts de actualización de base de datos.

Síntomas

Cuando se aplica una CU o SP, el programa de instalación puede notificar el siguiente error:

Error en la espera del controlador de recuperación del Motor de base de datos. Compruebe el registro de errores de SQL Server para buscar posibles causas.

Al revisar el registro de errores de SQL Server, puede observar los siguientes mensajes de error:

Error: 574, Severity: 16, State: 0.
CONFIG statement cannot be used inside a user transaction.
Error: 912, Severity: 21, State: 2.
Script level upgrade for database 'master' failed because upgrade step 'sqlagent100_msdb_upgrade.sql' encountered error 574, state 0, severity 16.
This is a serious error condition which might interfere with regular operation and the database will be taken offline.
If the error happened during upgrade of the 'master' database, it will prevent the entire SQL Server instance from starting.
Examine the previous errorlog entries for errors, take the appropriate corrective actions and re-start the database so that the script upgrade steps run to completion.
Error: 3417, Severity: 21, State: 3.
Script level upgrade for database 'master' failed because upgrade step 'msdb110_upgrade.sql' encountered error 15173, state 1, severity 16

Causa

El proceso de actualización puede ejecutar algunos scripts de actualización dentro de una transacción. Estos scripts de actualización están diseñados con una suposición de que los usuarios no realizan cambios en los objetos del sistema y los permisos asociados. Si realiza accidentalmente cambios en los objetos o permisos del sistema, algunos de estos scripts pueden producir un error y la transacción asociada puede quedar huérfana y permanecer abierta. En este escenario, cuando el programa de instalación ejecuta posteriormente un script de actualización que usa sp_configure para establecer algunos valores de configuración, se produce el error 574. La causa real del error de instalación debe determinarse revisando las entradas que se registran antes del error 574.

Por ejemplo, un script como el siguiente puede producir el error 574:

BEGIN TRAN
USE MASTER;
GO
EXEC sp_configure 'recovery interval', '4';
RECONFIGURE WITH OVERRIDE;
COMMIT TRAN

Solución

Para resolver el problema, siga estos pasos:

  1. Inicie SQL Server con la marca de seguimiento 902. Para obtener más información, vea Pasos para iniciar SQL Server con la marca de seguimiento 902.

  2. Abra el registro de errores de SQL Server y revise los mensajes anteriores al error 574 para identificar la transacción con errores (consulte el siguiente patrón de ejemplo).

  3. Corrija la transacción con errores según la información de la sección Posibles causas y soluciones .

  4. Quite la marca de seguimiento 902 del elemento Parámetros de inicio y reinicie SQL Server.

    Una vez que SQL Server se inicia sin la marca de seguimiento 902, el script de actualización se ejecutará de nuevo.

    • Si el script de actualización de SP/CU se completa correctamente, puede comprobar el registro de errores de SQL Server y la carpeta de arranque para comprobarlo.
    • Si se produce un error de nuevo en el script de actualización, compruebe el registro de errores de SQL Server para ver otros errores y solucione los nuevos errores.

Patrón de ejemplo: Problemas al conceder permisos al rol del sistema

2020-08-17 09:38:12.09 spid11s Adding user 'hostname\svc_sqlagent' to SQLAgentUserRole msdb role...
2020-08-17 09:38:12.09 spid11s
2020-08-17 09:38:12.09 spid11s Granting login access'##MS_SSISServerCleanupJobLogin##' to msdb database...
2020-08-17 09:38:12.10 spid11s A problem was encountered granting access to MSDB database for login '(null)'. Make sure this login is provisioned with SQLServer and rerun sqlagent_msdb_upgrade.sql
2020-08-17 09:38:12.10 spid11s A problem was encountered granting access to MSDB database for login '(null)'. Make sure this login is provisioned with SQLServer and rerun sqlagent_msdb_upgrade.sql
2020-08-17 09:38:12.10 spid11s
2020-08-17 09:38:12.10 spid11s Adding user '##MS_SSISServerCleanupJobLogin##' to SQLAgentUserRole msdb role...

Posibles causas y soluciones

  • Las opciones de usuario hacen que se produzca un error en las transacciones.

    Solución: Conéctese a SQL Server, use la documentación de la opción de configuración del servidor de opciones de usuario para identificar las opciones que pueden causar el problema y quitar la configuración en conflicto.

    Por ejemplo, el soporte técnico de Microsoft ha visto instancias en las que la configuración de IMPLICIT_TRANSACTIONS hace que se produzca un error en la configuración. Como alternativa, si no puede identificar la opción de usuario en conflicto, quite todas las opciones de usuario mediante el siguiente script en SQL Server Management Studio (SSMS):

    EXEC sp_configure 'user options', '0'
    GO
    RECONFIGURE WITH OVERRIDE;
    GO
    
  • Los usuarios huérfanos provocan un error en las transacciones.

    Solución: compruebe si hay usuarios huérfanos mediante una consulta como la siguiente:

    SELECT dp.type_desc, dp.SID, dp.name AS user_name
    FROM sys.database_principals AS dp
    LEFT JOIN sys.server_principals AS sp
         ON dp.SID = sp.SID
    WHERE sp.SID IS NULL
         AND authentication_type_desc = 'INSTANCE';
    

    Para obtener más información sobre cómo resolver usuarios huérfanos, consulte Solución de problemas de usuarios huérfanos (SQL Server).

  • Los trabajos huérfanos provocan un error en las transacciones.

    Solución: compruebe si hay trabajos huérfanos mediante una consulta como la siguiente:

    SELECT sj.name AS Job_Name,
         sl.name AS Job_Owner
    FROM msdb.dbo.sysjobs_view sj
    LEFT JOIN master.dbo.syslogins sl ON sj.owner_sid = sl.sid
    WHERE sl.name <> 'sa'
    ORDER BY sj.name
    

    Cualquier registro que muestre un valor NULL aquí indica que el propietario del trabajo del agente aplicable está huérfano. Edite el trabajo y cambie el propietario a un inicio de sesión válido.