Обновление SQL Server завершается ошибкой с кодом ошибки 574 при выполнении скриптов базы данных обновления
Эта статья поможет устранить проблему, из-за которой накопительное обновление (CU) или пакет обновления (SP) для SQL Server сообщает об ошибке 574 при выполнении скриптов обновления базы данных.
Симптомы
При применении cu или SP программа установки может сообщить следующее сообщение об ошибке:
Ошибка при ожидании дескриптора восстановления компонента Database Engine. Проверьте журнал ошибок SQL Server на наличие потенциальных причин.
При просмотре журнала ошибок SQL Server можно заметить следующие сообщения об ошибках:
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
Причина
Процесс обновления может выполнять некоторые скрипты обновления в транзакции. Эти скрипты обновления предназначены с учетом того, что пользователи не вносят изменения в системные объекты и связанные разрешения. Если вы непреднамеренно вносите изменения в системные объекты или разрешения, некоторые из этих скриптов могут завершиться ошибкой, и связанная транзакция может стать потерянным и оставаться открытой. В этом сценарии, когда программа установки позже выполняет скрипт обновления, который используется sp_configure
для задания некоторых значений конфигурации, возникает ошибка 574. Фактическая причина сбоя установки должна быть определена путем проверки записей, зарегистрированных до ошибки 574.
Например, сценарий, как показано ниже, может привести к ошибке 574:
BEGIN TRAN
USE MASTER;
GO
EXEC sp_configure 'recovery interval', '4';
RECONFIGURE WITH OVERRIDE;
COMMIT TRAN
Решение
Чтобы устранить проблему, выполните следующие действия.
Запустите SQL Server с флагом трассировки 902. Дополнительные сведения см. в разделе "Действия по запуску SQL Server с флагом трассировки 902".
Откройте журнал ошибок SQL Server и просмотрите сообщения до ошибки 574, чтобы определить неудачную транзакцию (см. следующий пример шаблона).
Исправьте сбойную транзакцию в соответствии с информацией в разделе "Потенциальные причины и решения ".
Удалите флаг трассировки 902 из элемента "Параметры запуска" и перезапустите SQL Server.
После запуска SQL Server без флага трассировки 902 скрипт обновления будет выполнен снова.
- Если скрипт обновления SP/CU успешно завершен, можно проверить журнал ошибок SQL Server и папку начальной загрузки.
- Если скрипт обновления завершается ошибкой, проверьте журнал ошибок SQL Server для других ошибок и устраните новые ошибки.
Пример шаблона: проблемы с предоставлением разрешений системной роли
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...
Потенциальные причины и решения
Параметры пользователя вызывают сбой транзакций.
Решение. Подключитесь к SQL Server, используйте документацию по настройке сервера пользовательских параметров , чтобы определить параметры, которые могут вызвать проблему, и удалить конфликтующий параметр.
Например, служба поддержки Майкрософт видела экземпляры, в которых параметр для IMPLICIT_TRANSACTIONS приводит к сбою установки. Кроме того, если не удается определить конфликтующий параметр пользователя, удалите все параметры пользователя с помощью следующего сценария в SQL Server Management Studio (SSMS):
EXEC sp_configure 'user options', '0' GO RECONFIGURE WITH OVERRIDE; GO
Потерянные пользователи вызывают сбой транзакций.
Решение. Проверьте наличие потерянных пользователей с помощью запроса, например следующего:
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';
Дополнительные сведения о том, как устранить потерянных пользователей, см. в разделе "Устранение неполадок потерянных пользователей" (SQL Server).
Потерянные задания приводят к сбою транзакций.
Решение. Проверьте наличие потерянных заданий с помощью запроса, например следующего:
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
Любая запись, показывающая значение NULL, указывает, что владелец применимого задания агента недоступен. Измените задание и измените владельца на допустимое имя входа.