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
, msdb
en 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 msdb
of 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.
Noteer alle configuratiewaarden voor de hele server.
SELECT * FROM sys.configurations;
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;
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'));
Zoek de huidige back-up van de
master
,model
enmsdb
databases.Als het exemplaar van SQL Server is geconfigureerd als een replicatiedistributeur, zoekt u de huidige back-up van de
distribution
-database.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.
Controleer of kopieën van de
master
,model
,msdb
gegevens- en logboeksjabloonbestanden aanwezig zijn op de lokale server. De standaardlocatie voor de sjabloonbestanden isC:\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 naarsetup\sql_engine_core_inst_msi\Pfiles\SqlServr\MSSQL.X\MSSQL\Binn\Templates
.
Systeemdatabases herbouwen
Met de volgende procedure worden de master
, model
, msdb
en 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
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 serverC:\Program Files\Microsoft SQL Server\160\Setup Bootstrap\SQLServer2022
.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 detempdb
gegevensbestanden verspreid over de mappen op een round robin-manier.
Standaardwaarde: Systeemgegevensdirectory[ /SQLTEMPDBLOGDIR=Directory ] Hiermee geeft u de map voor het tempdb
logboekbestand.
Standaardwaarde: SysteemgegevensmapWanneer 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
.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 aantaltempdb
bestanden niet bekend tijdens de installatie. Daarom weet het ebuildDatabase-scenario niet hoeveeltempdb
bestanden moeten worden gelezen. U kunt de waarde van het aantaltempdb
bestanden opnieuw opgeven met de parameter SQLTEMPDBFILECOUNT. Als de parameter niet is opgegeven, voegt RebuildDatabase een standaardaantaltempdb
bestanden toe. Dit is net zo veeltempdb
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
,model
enmsdb
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
Start het installatieprogramma van SQL Server (
setup.exe
) vanaf de distributiemedia.Selecteer in het linkernavigatiegebied Onderhoud, en selecteer vervolgens Herstellen.
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.
Selecteer op de pagina Exemplaar selecteren het exemplaar dat u wilt herstellen en selecteer vervolgens Volgende.
De herstelregels zullen uitgevoerd worden om de bewerking te valideren. Als u wilt doorgaan, selecteert u Volgende.
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.
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.
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.
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"
Wijzig in Windows Verkenner de naam van de
msdb
-databasebestanden. Deze bevinden zich standaard in de submap DATA voor het SQL Server-exemplaar.Gebruik SQL Server Configuration Manager om de Database Engine-service op de normale manier te stoppen en opnieuw te starten zonder extra traceringsvlaggen.
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. VervangMSSQLXX.INSTANCE_NAME
ook door de map die overeenkomt met uw versie en instantie.Open met behulp van Windows Kladblok het
instmsdb.out
-bestand en controleer de uitvoer op eventuele fouten.Pas alle CU's die zijn geïnstalleerd op de instantie opnieuw toe, waarmee uw
msdb
-database wordt bijgewerkt naar het huidige CU-niveau.Maak de gebruikersinhoud die is opgeslagen in de
msdb
-database opnieuw, zoals taken, waarschuwingen en andere items.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.
Wijzig de naam van de huidige
tempdb.mdf
entemplog.ldf
bestanden als deze niet ontbreken.Start SQL Server vanaf een opdrachtprompt met behulp van de sqlservr-toepassing.
sqlservr -c -f -T3608 -T4022 -s <instance> -mSQLCMD
Gebruik
MSSQLSERVER
voor een standaardinstantie enMSSQL$<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.
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
Sluit de server af door op
Ctrl
+C
te drukken in het opdrachtpromptvenster.Start de SQL Server-service opnieuw op. Hiermee maakt u een nieuwe set
tempdb
databasebestanden en herstelt u detempdb
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.