Delen via


Systeemdatabases herbouwen

van toepassing op:SQL Server-

Systeemdatabases moeten opnieuw worden opgebouwd om beschadigingsproblemen op te lossen in de hoofddatabases, model, msdbof resource systeemdatabases, of om de standaardsortering op serverniveau te wijzigen. Dit artikel bevat stapsgewijze instructies voor het herbouwen van systeemdatabases in SQL Server.

Dit artikel is niet gerelateerd aan het opnieuw opbouwen van indexen.

Beperkingen

Wanneer de master, model, msdben tempdb systeemdatabases opnieuw worden opgebouwd, worden de databases verwijderd en opnieuw gemaakt op de oorspronkelijke locatie. Als er een nieuwe sortering wordt opgegeven in de herbouwinstructie, worden de systeemdatabases gemaakt met behulp van die sorteringsinstelling. Gebruikerswijzigingen in deze databases gaan verloren. U hebt bijvoorbeeld door de gebruiker gedefinieerde objecten in de master database, geplande taken in msdbof wijzigingen in de standaarddatabase-instellingen in de model-database.

Voorwaarden

Voer de volgende taken uit voordat u de systeemdatabases opnieuw bouwt om ervoor te zorgen dat u de systeemdatabases kunt herstellen naar hun huidige instellingen.

  1. Noteer alle configuratiewaarden voor de hele server.

    SELECT * FROM sys.configurations;
    
  2. Noteer alle hotfixes die zijn toegepast op het exemplaar van SQL Server en de huidige sortering. U moet deze hotfixes opnieuw gebruiken nadat u de systeemdatabases opnieuw hebt opgebouwd.

    SELECT
    SERVERPROPERTY('ProductVersion ') AS ProductVersion,
    SERVERPROPERTY('ProductLevel') AS ProductLevel,
    SERVERPROPERTY('ResourceVersion') AS ResourceVersion,
    SERVERPROPERTY('ResourceLastUpdateDateTime') AS ResourceLastUpdateDateTime,
    SERVERPROPERTY('Collation') AS Collation;
    
  3. Noteer de huidige locatie van alle gegevens en logboekbestanden voor de systeemdatabases. Als u de systeemdatabases opnieuw bouwt, worden alle systeemdatabases op de oorspronkelijke locatie geïnstalleerd. Als u systeemdatabasegegevens of logboekbestanden naar een andere locatie hebt verplaatst, moet u de bestanden opnieuw verplaatsen.

    SELECT name, physical_name AS current_file_location
    FROM sys.master_files
    WHERE database_id IN (DB_ID('master'), DB_ID('model'), DB_ID('msdb'), DB_ID('tempdb'));
    
  4. Zoek de huidige back-up van de master, modelen msdb databases.

  5. Als het exemplaar van SQL Server is geconfigureerd als een replicatiedistributeur, zoekt u de huidige back-up van de distribution-database.

  6. Zorg ervoor dat u over de juiste machtigingen beschikt om de systeemdatabases opnieuw te bouwen. Als u deze bewerking wilt uitvoeren, moet u lid zijn van de sysadmin vaste serverfunctie. Zie Server-Level Rollenvoor meer informatie.

  7. Controleer of kopieën van de master, model, msdb gegevens- en logboeksjabloonbestanden aanwezig zijn op de lokale server. De standaardlocatie voor de sjabloonbestanden is C:\Program Files\Microsoft SQL Server\MSSQL<xx>.MSSQLSERVER\MSSQL\Binn\Templates (waarbij <xx> de versie is die u hebt geïnstalleerd). Deze bestanden worden gebruikt tijdens het herbouwproces en moeten aanwezig zijn om de installatie te voltooien. Als ze ontbreken, voert u de functie Herstellen van Setup uit of kopieert u de bestanden handmatig vanaf uw installatiemedia. Als u de bestanden op het installatiemedium wilt vinden, gaat u naar de juiste platformmap (x86 of x64) en navigeert u vervolgens naar setup\sql_engine_core_inst_msi\Pfiles\SqlServr\MSSQL.X\MSSQL\Binn\Templates.

Systeemdatabases herbouwen

Met de volgende procedure worden de master, model, msdben tempdb systeemdatabases opnieuw opgebouwd. U kunt niet opgeven welke systeemdatabases opnieuw moeten worden opgebouwd. Voor geclusterde exemplaren moet deze procedure worden uitgevoerd op het actieve knooppunt en moet de SQL Server-resource in de bijbehorende clustertoepassingsgroep offline worden gehaald voordat u de procedure uitvoert.

Met deze procedure wordt de resource-database niet opnieuw opgebouwd. Zie de sectie De resourcesysteemdatabase opnieuw opbouwen verderop in dit artikel.

Systeemdatabases herbouwen voor een exemplaar van SQL Server

  1. Plaats het SQL Server-installatiemedium in het schijfstation of wijzig de mappen vanaf een opdrachtprompt in de locatie van het setup.exe-bestand op de lokale server. Voor SQL Server 2022 (16.x) is de standaardlocatie op de server C:\Program Files\Microsoft SQL Server\160\Setup Bootstrap\SQLServer2022.

  2. Voer in een opdrachtpromptvenster de volgende opdracht in. Vierkante haken worden gebruikt om optionele parameters aan te geven. Voer de haakjes niet in. Wanneer u een Windows-besturingssysteem gebruikt waarvoor UAC (User Account Control) is ingeschakeld, zijn verhoogde bevoegdheden vereist voor het uitvoeren van Setup. De opdrachtprompt moet worden uitgevoerd als Administrator.

    setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=InstanceName /SQLSYSADMINACCOUNTS=accounts [ /SAPWD= StrongPassword ] [ /SQLCOLLATION=CollationName ]
    
    Parameternaam Beschrijving
    /QUIET or /Q Hiermee geeft u op dat Setup moet worden uitgevoerd zonder een gebruikersinterface.
    /ACTION=REBUILDDATABASE Hiermee geeft u op dat Setup de systeemdatabases opnieuw moet maken.
    /INSTANCENAME=InstanceName De naam van het exemplaar van SQL Server. Voer MSSQLSERVER in voor het standaardexemplaar.
    /SQLSYSADMINACCOUNTS=accounts Hiermee specificeert u de Windows-groepen of afzonderlijke accounts die moeten worden toegevoegd aan de sysadmin vaste serverrol. Wanneer u meer dan één account opgeeft, scheidt u de accounts met een lege ruimte. Voer bijvoorbeeld BUILTIN\Administrators MyDomain\MyUserin. Wanneer u een account opgeeft dat een lege spatie binnen de accountnaam bevat, plaatst u het account tussen dubbele aanhalingstekens. Voer bijvoorbeeld NT AUTHORITY\SYSTEM-in.
    [ /SAPWD =StrongPassword ] Hiermee geeft u het wachtwoord voor het SQL Server sa-account. Deze parameter is vereist als het exemplaar de modus Gemengde verificatie (SQL Server en Windows-verificatie) gebruikt.

    Beveiligingsnotitie: Het sa-account is een bekend SQL Server-account en is vaak gericht op kwaadwillende gebruikers. Het is van cruciaal belang dat u een sterk wachtwoord gebruikt voor de sa aanmelding.

    Geef deze parameter niet op voor de modus Windows-verificatie.
    [ /SQLCOLLATION=CollationName ] Hiermee geeft u een nieuwe sortering op serverniveau op. Deze parameter is optioneel. Wanneer deze niet is opgegeven, wordt de huidige sortering van de server gebruikt.

    Belangrijk: Als u de sortering op serverniveau wijzigt, wordt de sortering van bestaande gebruikersdatabases niet gewijzigd. Alle zojuist gemaakte gebruikersdatabases maken standaard gebruik van de nieuwe sortering.

    Zie De serversortering instellen of wijzigenvoor meer informatie.
    [ /SQLTEMPDBFILECOUNT=NumberOfFiles ] Hiermee bepaalt u het aantal tempdb gegevensbestanden. Deze waarde kan worden verhoogd tot 8 of het aantal kernen, afhankelijk van wat hoger is.

    Standaardwaarde: 8 of het aantal kernen, afhankelijk van wat lager is.
    [ /SQLTEMPDBFILESIZE=FileSizeInMB ] Hiermee geeft u de initiële grootte van elk tempdb gegevensbestand in MB. De instelling maakt een grootte tot 1024 MB mogelijk.

    Standaardwaarde: 8
    [ /SQLTEMPDBFILEGROWTH=FileSizeInMB ] Hiermee specificeert u het bestandsgroei-increment van elk tempdb gegevensbestand in MB. Een waarde van 0 geeft aan dat automatische groei is uitgeschakeld en dat er geen extra ruimte is toegestaan. De setup staat een grootte tot maximaal 1024 MB toe.

    Standaardwaarde: 64
    [ /SQLTEMPDBLOGFILESIZE=BestandsgrootteInMB ] Hiermee geeft u de initiële grootte van het tempdb logboekbestand in MB. De configuratie staat een grootte tot 1024 MB toe.

    Standaardwaarde: 8.

    Toegestaan bereik: Min = 8, max = 1024.
    [ /SQLTEMPDBLOGFILEGROWTH=FileSizeInMB ] Geeft de vergroting van het logboekbestand tempdb in MB aan. Een waarde van 0 geeft aan dat automatische groei is uitgeschakeld en dat er geen extra ruimte is toegestaan. Met de installatie kan de grootte tot maximaal 1024 MB worden ingesteld.

    Standaardwaarde: 64

    Toegestaan bereik: Min = 8, max = 1024.
    [ /SQLTEMPDBDIR=Directories ] Geeft de directories voor tempdb gegevensbestanden aan. Wanneer u meer dan één map opgeeft, scheidt u de mappen met een lege ruimte. Als er meerdere directory's worden opgegeven, worden de tempdb gegevensbestanden verspreid over de mappen op een round robin-manier.

    Standaardwaarde: Systeemgegevensdirectory
    [ /SQLTEMPDBLOGDIR=Directory ] Hiermee geeft u de map voor het tempdb logboekbestand.

    Standaardwaarde: Systeemgegevensmap
  3. Wanneer Setup de systeemdatabases opnieuw heeft opgebouwd, keert deze terug naar de opdrachtprompt zonder berichten. Controleer het Summary.txt logboekbestand om te controleren of het proces is voltooid. Dit bestand bevindt zich op C:\Program Files\Microsoft SQL Server\160\Setup Bootstrap\Logs.

  4. In het scenario RebuildDatabase worden systeemdatabases verwijderd en opnieuw geïnstalleerd in een schone status. Omdat de instelling van het aantal tempdb bestanden niet behouden blijft, is de waarde van het aantal tempdb bestanden niet bekend tijdens de installatie. Daarom weet het ebuildDatabase-scenario niet hoeveel tempdb bestanden moeten worden gelezen. U kunt de waarde van het aantal tempdb bestanden opnieuw opgeven met de parameter SQLTEMPDBFILECOUNT. Als de parameter niet is opgegeven, voegt RebuildDatabase een standaardaantal tempdb bestanden toe. Dit is net zo veel tempdb bestanden als het CPU-aantal of 8, afhankelijk van wat lager is.

Taken na herbouwen

Nadat u de database opnieuw hebt opgebouwd, moet u mogelijk de volgende extra taken uitvoeren:

  • Herstel de meest recente volledige back-ups van de master, modelen msdb databases. Zie Back-up maken en herstellen van systeemdatabases (SQL Server)voor meer informatie.

    Belangrijk

    Als u de serversortering hebt gewijzigd, herstelt u de systeemdatabases niet. Als u dit doet, wordt de nieuwe sortering vervangen door de vorige sorteringsinstelling.

    Als een back-up niet beschikbaar is of als de herstelde back-up niet actueel is, maakt u ontbrekende items opnieuw. Maak bijvoorbeeld alle ontbrekende vermeldingen voor uw gebruikersdatabases, back-upapparaten, SQL Server-aanmeldingen, eindpunten enzovoort opnieuw. De beste manier om items opnieuw te maken, is door de oorspronkelijke scripts uit te voeren die ze hebben gemaakt.

    Belangrijk

    U wordt aangeraden uw scripts te beveiligen om te voorkomen dat ze door onbevoegden worden gewijzigd.

  • Als het exemplaar van SQL Server is geconfigureerd als een replicatiedistributeur, moet u de distribution-database herstellen. Zie Back-up maken en gerepliceerde databases herstellenvoor meer informatie.

  • Verplaats de systeemdatabases naar de locaties die u eerder hebt vastgelegd. Voor meer informatie, zie Systeemdatabases verplaatsen.

  • Controleer of de configuratiewaarden voor de hele server overeenkomen met de waarden die u eerder hebt vastgelegd.

De resourcedatabase opnieuw opbouwen

Met de volgende procedure wordt de resource systeemdatabase opnieuw opgebouwd. Wanneer u de resource-database opnieuw bouwt, gaan alle hot fixes verloren en moeten ze daarom opnieuw worden toegepast.

De resourcesysteemdatabase herbouwen

  1. Start het installatieprogramma van SQL Server (setup.exe) vanaf de distributiemedia.

  2. Selecteer in het linkernavigatiegebied Onderhoud, en selecteer vervolgens Herstellen.

  3. Installatieondersteuningsregel en bestandsroutines worden uitgevoerd om ervoor te zorgen dat alle vereiste componenten op uw systeem zijn geïnstalleerd en dat de computer aan de validatieregels voor installatie voldoet. Selecteer OK of Installeren om door te gaan.

  4. Selecteer op de pagina Exemplaar selecteren het exemplaar dat u wilt herstellen en selecteer vervolgens Volgende.

  5. De herstelregels zullen uitgevoerd worden om de bewerking te valideren. Als u wilt doorgaan, selecteert u Volgende.

  6. Selecteer op de pagina Gereed om te Repareren de optie Herstellen. De pagina Voltooid geeft aan dat de bewerking is voltooid.

Een nieuwe msdb-database maken

Als de msdb-database beschadigd is of vermoedt en u geen back-up van de msdb-database hebt, kunt u een nieuwe msdb maken met behulp van het instmsdb script.

Waarschuwing

Als u de msdb-database opnieuw bouwt met behulp van het instmsdb.sql script, worden alle gegevens verwijderd die zijn opgeslagen in msdb, zoals taken, waarschuwingen, operators, onderhoudsplannen, back-upgeschiedenis, beheerinstellingen op basis van beleid, Database Mail, Prestatiedatawarehouse, enzovoort.

  1. Stop alle services die verbinding maken met de Database Engine, waaronder SQL Server Agent, SSRS, SSIS en alle toepassingen die SQL Server gebruiken als gegevensarchief.

  2. Start SQL Server vanaf de opdrachtregel met behulp van de opdracht:

    NET START MSSQLSERVER /T3608
    

    Zie Start, Stop, Pause, Resume, Restart the Database Engine, SQL Server Agent of SQL Server Browser Servicevoor meer informatie. Zie TF3608-voor meer informatie over traceringsvlag 3608.

  3. Maak in een ander opdrachtregelvenster de msdb database los door de volgende opdracht uit te voeren, waarbij u <servername> vervangt door het exemplaar van SQL Server:

    SQLCMD -E -S<servername> -dmaster -Q"EXEC sp_detach_db msdb"
    
  4. Wijzig in Windows Verkenner de naam van de msdb-databasebestanden. Deze bevinden zich standaard in de submap DATA voor het SQL Server-exemplaar.

  5. Gebruik SQL Server Configuration Manager om de Database Engine-service op de normale manier te stoppen en opnieuw te starten zonder extra traceringsvlaggen.

  6. Maak in een opdrachtpromptvenster verbinding met SQL Server en voer de opdracht uit:

    SQLCMD -E -S<servername> -i"C:\Program Files\Microsoft SQL Server\MSSQLXX.INSTANCE_NAME\MSSQL\Install\instmsdb.sql" -o"C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Install\instmsdb.out"
    

    Vervang <servername> door het exemplaar van de database-engine. Gebruik het bestandssysteempad van het exemplaar van SQL Server. Vervang MSSQLXX.INSTANCE_NAME ook door de map die overeenkomt met uw versie en instantie.

  7. Open met behulp van Windows Kladblok het instmsdb.out-bestand en controleer de uitvoer op eventuele fouten.

  8. Pas alle CU's die zijn geïnstalleerd op de instantie opnieuw toe, waarmee uw msdb-database wordt bijgewerkt naar het huidige CU-niveau.

  9. Maak de gebruikersinhoud die is opgeslagen in de msdb-database opnieuw, zoals taken, waarschuwingen en andere items.

  10. Maak een back-up van de msdb-database.

De tempdb-database opnieuw opbouwen

Als de tempdb database beschadigd of verdacht is en de database-engine niet kan worden gestart, kunt u tempdb herbouwen zonder alle systeemdatabases opnieuw te hoeven opbouwen.

  1. Wijzig de naam van de huidige tempdb.mdf en templog.ldf bestanden als deze niet ontbreken.

  2. Start SQL Server vanaf een opdrachtprompt met behulp van de sqlservr-toepassing.

    sqlservr -c -f -T3608 -T4022 -s <instance> -mSQLCMD
    

    Gebruik MSSQLSERVERvoor een standaardinstantie en MSSQL$<instance_name>voor een benoemde instantie. Traceringsvlag 4022 schakelt de uitvoering van opgeslagen opstartprocedures uit. Met de -mSQLCMD kan alleen sqlcmd.exe verbinding maken met de server. Zie Andere opstartoptiesvoor meer informatie.

    Notitie

    Zorg ervoor dat het opdrachtpromptvenster geopend blijft nadat de SQL Server is gestart. Als u het opdrachtpromptvenster sluit, wordt het proces beëindigd.

  3. Maak verbinding met de server met behulp van sqlcmden gebruik vervolgens de volgende opgeslagen procedure om de status van de tempdb-database opnieuw in te stellen.

    exec master..sp_resetstatus tempdb
    
  4. Sluit de server af door op Ctrl+C te drukken in het opdrachtpromptvenster.

  5. Start de SQL Server-service opnieuw op. Hiermee maakt u een nieuwe set tempdb databasebestanden en herstelt u de tempdb database.

Fouten bij herbouwen oplossen

Syntaxis en andere runtimefouten worden weergegeven in het opdrachtpromptvenster. Bekijk de installatie-instructie voor de volgende syntaxisfouten:

  • Ontbrekende slashmarkering (/) vóór elke parameternaam.

  • Er ontbreekt een gelijkteken (=) tussen de parameternaam en de parameterwaarde.

  • Aanwezigheid van spaties tussen de parameternaam en het gelijkteken.

  • Aanwezigheid van komma's (,) of andere tekens die niet zijn opgegeven in de syntaxis.

Nadat de herbouwbewerking is voltooid, controleert u de SQL Server-logboeken op eventuele fouten. De standaardlocatie van het logboek is C:\Program Files\Microsoft SQL Server\160\Setup Bootstrap\Logs. Als u het logboekbestand met de resultaten van het herbouwproces wilt vinden, wijzigt u de mappen in de map Logboeken vanaf een opdrachtprompt en voert u vervolgens findstr /s RebuildDatabase summary*.*uit. Deze zoekopdracht wijst u naar logboekbestanden die de resultaten bevatten van het heropbouwen van systeemdatabases. Open de logboekbestanden en bekijk ze op relevante foutberichten.