Delen via


Upgrade van SQL Server mislukt met foutcode 574 bij het uitvoeren van updatedatabasescripts

Dit artikel helpt u bij het oplossen en oplossen van een probleem waarbij een cumulatieve update (CU) of Service Pack (SP) voor SQL Server fout 574 rapporteert bij het uitvoeren van database-upgradescripts.

Symptomen

Wanneer u een CU of SP toepast, kan het installatieprogramma de volgende fout melden:

Wachten op herstelinvoer van database-engine is mislukt. Controleer het SQL Server-foutenlogboek voor mogelijke oorzaken.

Wanneer u het SQL Server-foutenlogboek bekijkt, ziet u mogelijk de volgende foutberichten:

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

Oorzaak

Tijdens het updateproces kunnen enkele upgradescripts binnen een transactie worden uitgevoerd. Deze updatescripts zijn ontworpen met een aanname dat gebruikers geen wijzigingen aanbrengen in systeemobjecten en bijbehorende machtigingen. Als u per ongeluk wijzigingen aanbrengt in systeemobjecten of -machtigingen, kunnen sommige van deze scripts mislukken en kan de bijbehorende transactie zwevend raken en open blijven. In dit scenario, wanneer het installatieprogramma later een upgradescript uitvoert dat gebruikt sp_configure om bepaalde configuratiewaarden in te stellen, treedt fout 574 op. De werkelijke oorzaak van de installatiefout moet worden bepaald door vermeldingen te controleren die vóór fout 574 worden geregistreerd.

Een script zoals de volgende kan bijvoorbeeld leiden tot fout 574:

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

Oplossing

Voer de volgende stappen uit om het probleem op te lossen:

  1. Start SQL Server met traceringsvlag 902. Zie Stappen voor het starten van SQL Server met traceringsvlag 902 voor meer informatie.

  2. Open het SQL Server-foutenlogboek en controleer de berichten vóór fout 574 om de mislukte transactie te identificeren (zie het volgende voorbeeldpatroon).

  3. Corrigeer de mislukte transactie op basis van de informatie in de sectie Mogelijke oorzaken en oplossingen .

  4. Verwijder traceringsvlag 902 uit het item Opstartparameters en start SQL Server opnieuw.

    Zodra SQL Server zonder traceringsvlag 902 wordt gestart, wordt het upgradescript opnieuw uitgevoerd.

    • Als het SP/CU-upgradescript is voltooid, kunt u het SQL Server-foutenlogboek en de bootstrapmap controleren om te controleren.
    • Als het upgradescript opnieuw mislukt, controleert u het SQL Server-foutenlogboek op andere fouten en lost u de nieuwe fouten op.

Voorbeeldpatroon: Problemen met het verlenen van machtigingen aan systeemrol

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...

Mogelijke oorzaken en oplossingen

  • Gebruikersopties zorgen ervoor dat transacties mislukken.

    Oplossing: Maak verbinding met SQL Server, gebruik de documentatie voor serverconfiguratieopties voor gebruikersopties om opties te identificeren die het probleem kunnen veroorzaken en verwijder de conflicterende instelling.

    Microsoft-ondersteuning heeft bijvoorbeeld exemplaren gezien waarbij de instelling voor IMPLICIT_TRANSACTIONS ervoor zorgt dat de installatie mislukt. Als u de conflicterende gebruikersoptie niet kunt identificeren, verwijdert u alle gebruikersopties met behulp van het volgende script in SQL Server Management Studio (SSMS):

    EXEC sp_configure 'user options', '0'
    GO
    RECONFIGURE WITH OVERRIDE;
    GO
    
  • Zwevende gebruikers zorgen ervoor dat transacties mislukken.

    Oplossing: Controleer op zwevende gebruikers met behulp van een query zoals de volgende:

    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';
    

    Zie Problemen met zwevende gebruikers oplossen (SQL Server) voor meer informatie over het oplossen van zwevende gebruikers.

  • Zwevende taken zorgen ervoor dat transacties mislukken.

    Oplossing: Controleer op zwevende taken met behulp van een query zoals de volgende:

    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
    

    Elke record met een NULL-waarde hier geeft aan dat de eigenaar van de toepasselijke agenttaak zwevend is. Bewerk de taak en wijzig de eigenaar in een geldige aanmelding.