Compartilhar via


A atualização do SQL Server falha com o código de erro 574 ao executar scripts de banco de dados de atualização

Este artigo ajuda você a solucionar problemas em que uma (Atualização Cumulativa) ou SP (Service Pack) para SQL Server relata o erro 574 ao executar scripts de atualização de banco de dados.

Sintomas

Quando você aplica uma ou SP, o programa de instalação pode relatar o seguinte erro:

Falha na espera pelo identificador de recuperação do Mecanismo de Banco de Dados. Verifique o log de erros do SQL Server para conhecer as causas possíveis.

Ao examinar o log de erros do SQL Server, você pode observar as seguintes mensagens de erro:

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

O processo de atualização pode executar alguns scripts de atualização em uma transação. Esses scripts de atualização são projetados com a suposição de que os usuários não fazem alterações nos objetos do sistema e nas permissões associadas. Se você inadvertidamente fizer alterações em objetos ou permissões do sistema, alguns desses scripts poderão falhar e a transação associada poderá se tornar órfã e permanecer aberta. Nesse cenário, quando o programa de instalação executa posteriormente um script de atualização que usa sp_configure para definir alguns valores de configuração, ocorre o erro 574. A causa real da falha de instalação deve ser determinada revisando as entradas registradas antes do erro 574.

Por exemplo, um script como o seguinte pode resultar no erro 574:

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

Solução

Para resolver o problema, siga estas etapas:

  1. Inicie o SQL Server com o sinalizador de rastreamento 902. Para obter mais informações, consulte Etapas para iniciar o SQL Server com o sinalizador de rastreamento 902.

  2. Abra o log de erros do SQL Server e examine as mensagens anteriores ao erro 574 para identificar a transação com falha (consulte o padrão de exemplo a seguir).

  3. Corrija a transação com falha de acordo com as informações na seção Possíveis causas e soluções .

  4. Remova o sinalizador de rastreamento 902 do item Parâmetros de Inicialização e reinicie o SQL Server.

    Depois que o SQL Server for iniciado sem o sinalizador de rastreamento 902, o script de atualização será executado novamente.

    • Se o script de atualização do SP/for concluído com êxito, você poderá verificar o log de erros do SQL Server e a pasta de inicialização para verificar.
    • Se o script de atualização falhar novamente, verifique se há outros erros no log de erros do SQL Server e solucione os novos erros.

Padrão de exemplo: problemas que concedem permissões à função do 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...

Possíveis causas e soluções

  • As opções do usuário fazem com que as transações falhem.

    Solução: conecte-se ao SQL Server, use a documentação da opção de configuração do servidor de opções do usuário para identificar as opções que podem causar o problema e remova a configuração conflitante.

    Por exemplo, o suporte da Microsoft viu casos em que a configuração de IMPLICIT_TRANSACTIONS faz com que a instalação falhe. Como alternativa, se você não conseguir identificar a opção de usuário conflitante, remova todas as opções de usuário usando o seguinte script no SSMS (SQL Server Management Studio):

    EXEC sp_configure 'user options', '0'
    GO
    RECONFIGURE WITH OVERRIDE;
    GO
    
  • Usuários órfãos fazem com que as transações falhem.

    Solução: verifique se há usuários órfãos usando uma consulta como a seguinte:

    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 obter mais informações sobre como resolver usuários órfãos, consulte Solucionar problemas de usuários órfãos (SQL Server).

  • Trabalhos órfãos fazem com que as transações falhem.

    Solução: verifique se há trabalhos órfãos usando uma consulta como a seguinte:

    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
    

    Qualquer registro que mostre um valor NULL aqui indica que o proprietário do Trabalho do Agente aplicável é órfão. Edite o trabalho e altere o proprietário para um logon válido.