Condividi tramite


L'aggiornamento di SQL Server non riesce e viene visualizzato il codice di errore 2714 durante l'esecuzione di script di aggiornamento del database

Questo articolo risolve un problema per cui un aggiornamento cumulativo (CU) o Service Pack (SP) segnala l'errore 2714 quando si eseguono script di aggiornamento del database.

Sintomi

Quando si applica un CU o SP, il programma di installazione potrebbe segnalare l'errore seguente:

Attesa dell'handle di recupero del Motore di database non riuscita. Controllare il log degli errori di SQL Server per individuare le possibili cause.

Quando si esamina il log degli errori di SQL Server, è possibile notare uno dei seguenti gruppi di messaggi di errore:

2021-07-27 14:08:44.31 spid6s      Error: 2714, Severity: 16, State: 6.
2021-07-27 14:08:44.31 spid6s      There is already an object named 'DatabaseMailUserRole' in the database.
2021-07-27 14:08:44.31 spid6s      Error: 2759, Severity: 16, State: 0.
2021-07-27 14:08:44.31 spid6s      CREATE SCHEMA failed due to previous errors.
2021-07-27 14:08:44.31 spid6s      Error: 912, Severity: 21, State: 2.
2021-07-27 14:08:44.31 spid6s      Script level upgrade for database 'master' failed because upgrade step 'msdb110_upgrade.sql' encountered error 2714, state 6, severity 25.
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.
2021-07-27 14:08:44.32 spid6s      Error: 3417, Severity: 21, State: 3.
Restore master from a full backup, repair it, or rebuild it. For more information about how to rebuild the master database, see SQL Server Books Online.
2021-07-27 14:08:44.31 spid6s      Error: 2714, Severity: 16, State: 6.
2021-07-27 14:08:44.31 spid6s      There is already an object named 'TargetServersRole' in the database.
2021-07-27 14:08:44.31 spid6s      Error: 912, Severity: 21, State: 2.
2021-07-27 14:08:44.31 spid6s      Script level upgrade for database 'master' failed because upgrade step 'msdb110_upgrade.sql' encountered error 2714, state 6, severity 25.
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.
2021-07-27 14:08:44.32 spid6s      Error: 3417, Severity: 21, State: 3.
Restore master from a full backup, repair it, or rebuild it. For more information about how to rebuild the master database, see SQL Server Books Online.

Risolvere il problema di aggiornamento con lo schema DatabaseMailUserRole

Esaminare le informazioni seguenti per risolvere il problema di aggiornamento associato a DatabaseMailUserRole.

Causa

Questo errore si verifica se uno schema di sistema, un utente o un ruolo non è configurato correttamente nel msdb database.

Si verifica anche quando lo script di aggiornamento non riesce a ricreare lo DatabaseMailUserRole schema nel msdb database. Questo problema può verificarsi quando lo DatabaseMailUserRole schema non è di proprietà del DatabaseMailUserRole ruolo, ad esempio se lo schema è di proprietà di dbo.

Per altre informazioni sugli script di aggiornamento del database eseguiti durante l'installazione di CU o SP, vedere Risoluzione degli errori di script di aggiornamento durante l'applicazione di un aggiornamento.

Risoluzione

  1. Arrestare e riavviare SQL Server usando T902. Ad esempio, è possibile eseguire questo comando da un prompt dei comandi:

    Per un'istanza predefinita:

    NET START MSSQLSERVER /T902
    

    Per le istanze denominate:

    NET START MSSQL$INSTANCENAME  /T902
    
  2. Eseguire il backup del msdb database come precauzione.

    BACKUP DATABASE msdb TO disk = '<backup folder>'
    
  3. Aprire SQL Server Management Studio, connettersi all'istanza di SQL Server ed eseguire il backup del msdb database.

  4. Espandere Database>msdb>>Di sistema Schemi di>sicurezza>DatabaseMailuserRole.

  5. Eliminare lo schema denominato DatabaseMailUserRole.

  6. Arrestare SQL Server e riavviarlo senza il flag di traccia 902.

    Dopo l'avvio di SQL Server senza flag di traccia 902, lo script di aggiornamento viene eseguito di nuovo e lo DatabaseMailUserRole schema viene ricreato.

    • Se lo script di aggiornamento sp o CU viene completato correttamente, controllare il log degli errori di SQL Server e la cartella bootstrap per verificare.
    • Se lo script di aggiornamento non riesce di nuovo, controllare la presenza di altri errori nel log degli errori di SQL Server e risolvere i nuovi errori.

Risolvere il problema di aggiornamento con il ruolo TargetServersRole

Esaminare le informazioni seguenti per risolvere il problema di aggiornamento associato a TargetServersRole.

Causa

Questo errore si verifica quando lo script di aggiornamento non riesce a ricreare il TargetServersRole ruolo di sicurezza nel msdb database. Questo ruolo viene usato negli ambienti multiserver. Per impostazione predefinita, il TargetServersRole ruolo di sicurezza è di proprietà di dboe il ruolo è proprietario dello TargetServersRole schema. Se si modifica inavvertitamente questa associazione e l'aggiornamento che si sta installando include modifiche a uno di questi ruoli, l'aggiornamento potrebbe non riuscire e restituire l'errore 2714: There is already an object named 'TargetServersRole' in the database. Per risolvere il problema, seguire questa procedura:

Risoluzione

  1. Arrestare e riavviare SQL Server usando T902.

    Per un'istanza predefinita:

    NET START MSSQLSERVER /T902
    

    Per le istanze denominate:

    NET START MSSQL$INSTANCENAME /T902
    
  2. Eseguire il backup del msdb database come precauzione.

    BACKUP DATABASE msdb TO disk = '<backup folder>'
    
  3. Creare un elenco di utenti (se presenti) che al momento fanno attualmente parte di questo ruolo. È possibile elencare i membri del ruolo eseguendo la query seguente:

    EXEC msdb.dbo.sp_helprolemember 'TargetServersRole'
    
  4. Eliminare il TargetServersRole ruolo usando l'istruzione seguente:

    EXEC msdb.dbo.sp_droprole @rolename = N'TargetServersRole'
    
  5. Per verificare se il problema è stato risolto, riavviare l'istanza di SQL Server senza usare il flag 902di traccia .

  6. Aggiungere nuovamente gli utenti dal passaggio 3 a TargetServersRole.