Återskapa systemdatabaser
gäller för:SQL Server
Systemdatabaser måste återskapas för att åtgärda korruptionsproblem i master, model, msdbeller resource systemdatabaser, eller för att ändra standardserver-sammanställning. Den här artikeln innehåller stegvisa instruktioner för att återskapa systemdatabaser i SQL Server.
Den här artikeln handlar inte om återuppbyggnad av index.
Begränsningar
När master
, model
, msdb
och tempdb
systemdatabaser återskapas, tas databaserna bort och återskapas på den ursprungliga platsen. Om en ny sortering anges i återskapningsinstruktionen skapas systemdatabaserna med den sorteringsinställningen. Alla användarändringar i dessa databaser går förlorade. Du kan till exempel ha användardefinierade objekt i master
-databasen, schemalagda jobb i msdb
eller ändringar i standarddatabasinställningarna i model
-databasen.
Förutsättningar
Utför följande uppgifter innan du återskapar systemdatabaserna för att säkerställa att du kan återställa systemdatabaserna till deras aktuella inställningar.
Registrera alla serveromfattande konfigurationsvärden.
SELECT * FROM sys.configurations;
Registrera alla snabbkorrigeringar som tillämpas på instansen av SQL Server och den aktuella sorteringen. Du måste använda snabbkorrigeringarna igen när du har återskapat systemdatabaserna.
SELECT SERVERPROPERTY('ProductVersion ') AS ProductVersion, SERVERPROPERTY('ProductLevel') AS ProductLevel, SERVERPROPERTY('ResourceVersion') AS ResourceVersion, SERVERPROPERTY('ResourceLastUpdateDateTime') AS ResourceLastUpdateDateTime, SERVERPROPERTY('Collation') AS Collation;
Registrera den aktuella platsen för alla data och loggfiler för systemdatabaserna. Om du återskapar systemdatabaserna installeras alla systemdatabaser på den ursprungliga platsen. Om du har flyttat systemdatabasdata eller loggfiler till en annan plats måste du flytta filerna igen.
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'));
Leta upp den aktuella säkerhetskopian av databaserna
master
,model
ochmsdb
.Om instansen av SQL Server har konfigurerats som replikeringsdistributör letar du upp den aktuella säkerhetskopian av
distribution
-databasen.Se till att du har rätt behörigheter för att återskapa systemdatabaserna. Om du vill utföra den här åtgärden måste du vara medlem i sysadmin fast serverroll. Mer information finns i Server-Level Roller.
Kontrollera att kopior av
master
,model
,msdb
data och loggmallfiler finns på den lokala servern. Standardplatsen för mallfilerna ärC:\Program Files\Microsoft SQL Server\MSSQL<xx>.MSSQLSERVER\MSSQL\Binn\Templates
(där<xx>
är den version som du har installerat). Dessa filer används under återskapandeprocessen och måste finnas för att installationen ska lyckas. Om de saknas kör du reparationsfunktionen i installationsprogrammet eller kopierar filerna manuellt från installationsmediet. Om du vill hitta filerna på installationsmediet går du till lämplig plattformskatalog (x86 eller x64) och navigerar sedan tillsetup\sql_engine_core_inst_msi\Pfiles\SqlServr\MSSQL.X\MSSQL\Binn\Templates
.
Återskapa systemdatabaser
Följande procedur återskapar master
, model
, msdb
och tempdb
systemdatabaser. Du kan inte ange vilka systemdatabaser som ska återskapas. För klustrade instanser måste den här proceduren utföras på den aktiva noden och SQL Server-resursen i motsvarande klusterprogramgrupp måste tas offline innan proceduren utförs.
Den här proceduren återskapar inte resource
-databasen. Se avsnittet Återskapa resurssystemdatabasen senare i den här artikeln.
Återskapa systemdatabaser för en instans av SQL Server
Infoga SQL Server-installationsmediet i diskenheten, eller från en kommandotolk, byt katalog till platsen för filen
setup.exe
på den lokala servern. För SQL Server 2022 (16.x) är standardplatsen på servernC:\Program Files\Microsoft SQL Server\160\Setup Bootstrap\SQLServer2022
.I ett kommandotolksfönster anger du följande kommando. Hakparenteser används för att ange valfria parametrar. Gå inte in i parenteserna. När du använder ett Windows-operativsystem som har UAC (User Account Control) aktiverat kräver installationsprogrammet utökade privilegier. Kommandotolken måste köras som administratör.
setup /QUIET /ACTION=REBUILDDATABASE /INSTANCENAME=InstanceName /SQLSYSADMINACCOUNTS=accounts [ /SAPWD= StrongPassword ] [ /SQLCOLLATION=CollationName ]
Parameternamn Beskrivning /QUIET eller /Q Anger att installationsprogrammet ska köras utan något användargränssnitt. /ACTION=REBUILDDATABASE Anger att installationsprogrammet ska återskapa systemdatabaserna. /INSTANCENAME=InstanceName Namnet på instansen av SQL Server. För standardinstansen anger du MSSQLSERVER. /SQLSYSADMINACCOUNTS=konton Anger de Windows-grupper eller enskilda konton som ska läggas till i sysadmin fast serverroll. När du anger fler än ett konto separerar du kontona med ett tomt utrymme. Ange till exempel BUILTIN\Administrators MyDomain\MyUser. När du anger ett konto som innehåller ett mellanslag i kontonamnet, ska du omsluta kontot med dubbla citattecken. Ange till exempel NT AUTHORITY\SYSTEM. [ /SAPWD=StrongPassword ] Anger lösenordet för SQL Server-sa-kontot. Den här parametern krävs om instansen använder blandat autentiseringsläge (SQL Server och Windows-autentisering).
Säkerhetsanteckning: Kontot sa är ett välkänt SQL Server-konto och det riktas ofta mot skadliga användare. Det är viktigt att du använder ett starkt lösenord för sa inloggning.
Ange inte den här parametern för Windows-autentiseringsläge.[ /SQLCOLLATION=CollationName ] Anger en ny sortering på servernivå. Den här parametern är valfri. När det inte anges används serverns aktuella sortering.
Viktigt: Ändring av sortering på servernivå ändrar inte sortering av befintliga användardatabaser. Alla nyskapade användardatabaser använder den nya sorteringen som standard.
Mer information finns i Ange eller Ändra serversortering.[ /SQLTEMPDBFILECOUNT=NumberOfFiles ] Anger antalet tempdb
datafiler. Det här värdet kan ökas upp till 8 eller antalet kärnor, beroende på vilket som är högst.
Standardvärde: 8 eller antalet kärnor, beroende på vilket som är lägre.[ /SQLTEMPDBFILESIZE=FileSizeInMB ] Anger den ursprungliga storleken på varje tempdb
datafil i MB. Med konfigurationen kan storleken vara upp till 1 024 MB.
Standardvärde: 8[ /SQLTEMPDBFILEGROWTH=FileSizeInMB ] Anger ökning av filtillväxt för varje tempdb
datafil i MB. Värdet 0 anger att automatisk tillväxt är inaktiverad och att inget ytterligare utrymme tillåts. Med konfigurationen kan storleken vara upp till 1 024 MB.
Standardvärde: 64[ /SQLTEMPDBLOGFILESIZE=FileSizeInMB ] Anger den ursprungliga storleken på den tempdb
loggfilen i MB. Med konfigurationen kan storleken vara upp till 1 024 MB.
Standardvärde: 8.
Tillåtet intervall: Min = 8, max = 1024.[ /SQLTEMPDBLOGFILEGROWTH=FileSizeInMB ] Anger filtillväxtökningen för den tempdb
loggfilen i MB. Värdet 0 anger att automatisk tillväxt är inaktiverad och att inget ytterligare utrymme tillåts. Med konfigurationen kan storleken vara upp till 1 024 MB.
Standardvärde: 64
Tillåtet intervall: Min = 8, max = 1024.[ /SQLTEMPDBDIR=Kataloger ] Anger katalogerna för tempdb
datafiler. När du anger fler än en katalog separerar du katalogerna med ett tomt utrymme. Om flera kataloger anges spridstempdb
-datafilerna över katalogerna enligt en rundtursprincip.
Standardvärde: System Data Directory[ /SQLTEMPDBLOGDIR=Directory ] Anger katalogen för tempdb
loggfilen.
Standardvärde: System Data DirectoryNär installationen har slutfört återskapande av systemdatabaserna återgår den till kommandotolken utan meddelanden. Granska Summary.txt loggfilen för att kontrollera att processen har slutförts. Den här filen finns på
C:\Program Files\Microsoft SQL Server\160\Setup Bootstrap\Logs
.Scenariot RebuildDatabase tar bort systemdatabaser och installerar dem igen i ett rent tillstånd. Eftersom inställningen för
tempdb
filantal inte bevaras är värdet för antalettempdb
filer inte känt under installationen. Därför vet scenariot ebuildDatabase inte antalettempdb
filer som ska läsas. Du kan ange värdet för antalettempdb
filer igen med parametern SQLTEMPDBFILECOUNT. Om parametern inte anges lägger RebuildDatabase till ett standardantaltempdb
filer, vilket är lika mångatempdb
filer som cpu-antalet eller 8, beroende på vilket som är lägre.
Uppgifter efter ombyggnad
När du har återskapat databasen kan du behöva utföra följande ytterligare uppgifter:
Återställ dina senaste fullständiga säkerhetskopior av
master
,model
ochmsdb
databaser. Mer information finns i Säkerhetskopiera och återställa systemdatabaser (SQL Server).Viktig
Om du har ändrat serversortering ska du inte återställa systemdatabaserna. Om du gör det ersätts den nya sorteringen med den tidigare sorteringsinställningen.
Om en säkerhetskopia inte är tillgänglig eller om den återställde säkerhetskopian inte är aktuell kan du återskapa eventuella saknade poster. Du kan till exempel återskapa alla poster som saknas för dina användardatabaser, säkerhetskopieringsenheter, SQL Server-inloggningar, slutpunkter och så vidare. Det bästa sättet att återskapa poster är att köra de ursprungliga skripten som genererade dem.
Viktig
Vi rekommenderar att du skyddar dina skript för att förhindra att de ändras av obehöriga personer.
Om instansen av SQL Server har konfigurerats som replikeringsdistributör måste du återställa
distribution
databasen. Mer information finns i Säkerhetskopiera och återställa replikerade databaser.Flytta systemdatabaserna till de platser som du registrerade tidigare. För mer information, se Flytta systemdatabaser.
Kontrollera att konfigurationsvärdena för hela servern matchar de värden som du registrerade tidigare.
Återskapa resursdatabasen
Följande procedur återskapar resource
-systemdatabasen. När du återskapar resource
databas går alla snabbkorrigeringar förlorade och måste därför tillämpas igen.
Återskapa resurssystemdatabasen
Starta installationsprogrammet för SQL Server (
setup.exe
) från distributionsmediet.I det vänstra navigeringsområdet väljer du Underhålloch väljer sedan Reparera.
Installationsvalideringsregler och filprocesser körs för att säkerställa att systemet har nödvändig programvara installerad och att datorn uppfyller installationsvalideringskraven. Välj OK eller Installera för att fortsätta.
På sidan Välj instans väljer du den instans som ska repareras och väljer sedan Nästa.
Reglerna för reparation kommer att köras för att validera åtgärden. Om du vill fortsätta väljer du Nästa.
På sidan Redo att reparera väljer du Reparera. Den slutförda sidan anger att åtgärden är klar.
Skapa en ny msdb-databas
Om msdb
-databasen är skadad eller misstänkt och du inte har någon säkerhetskopia av msdb
-databasen kan du skapa en ny msdb
med hjälp av skriptet instmsdb
.
Varning
Om du återskapar msdb
-databasen med hjälp av skriptet instmsdb.sql
eliminerar du all information som lagras i msdb
till exempel jobb, aviseringar, operatörer, underhållsplaner, säkerhetskopieringshistorik, principbaserade hanteringsinställningar, Database Mail, Performance Data Warehouse och så vidare.
Stoppa alla tjänster som ansluter till databasmotorn, inklusive SQL Server Agent, SSRS, SSIS och alla program som använder SQL Server som datalager.
Starta SQL Server från kommandoraden med kommandot :
NET START MSSQLSERVER /T3608
Mer information finns i Start, Stop, Pause, Resume, Restart the Database Engine, SQL Server Agent eller SQL Server Browser Service. Information om spårningsflagga 3608 finns i TF3608.
I ett annat kommandoradsfönster kopplar du från
msdb
-databasen genom att köra följande kommando och ersätta<servername>
med SQL Server-instansen:SQLCMD -E -S<servername> -dmaster -Q"EXEC sp_detach_db msdb"
Använd Utforskaren i Windows och byt namn på
msdb
databasfiler. Dessa finns som standard i undermappen DATA för SQL Server-instansen.Använd SQL Server Configuration Manager och stoppa och starta om tjänsten Database Engine normalt utan ytterligare spårningsflaggor.
I kommandotolken ansluter du till SQL Server och kör kommandot:
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"
Ersätt
<servername>
med instansen av databasmotorn. Använd filsystemsökvägen för instansen av SQL Server. Ersätt ocksåMSSQLXX.INSTANCE_NAME
med katalogen som motsvarar din version och instans.Öppna filen
instmsdb.out
med Hjälp av Windows Notepad och kontrollera om det finns några fel i utdata.Tillämpa alla CU:er som är installerade på instansen igen, vilket uppgraderar din
msdb
databas till den aktuella CU-nivån.Återskapa användarinnehållet som lagras i
msdb
-databasen, till exempel jobb, aviseringar och andra objekt.Säkerhetskopiera
msdb
-databasen.
Återskapa tempdb-databasen
Om tempdb
databasen är skadad eller misstänkt och databasmotorn inte startar kan du återskapa tempdb
utan att behöva återskapa alla systemdatabaser.
Byt namn på aktuella
tempdb.mdf
ochtemplog.ldf
filer om de inte saknas.Starta SQL Server från en kommandorad med hjälp av sqlservr-programmet.
sqlservr -c -f -T3608 -T4022 -s <instance> -mSQLCMD
För ett standardinstansnamn använder du
MSSQLSERVER
för namngiven instansMSSQL$<instance_name>
. Spårningsflagga 4022 inaktiverar körning av lagrade procedurer vid start.-mSQLCMD
tillåter endast att sqlcmd.exe ansluter till servern. Mer information finns i Andra startalternativ.Not
Kontrollera att kommandotolken förblir öppen efter att SQL Server startar. Om du stänger kommandotolken avslutas processen.
Anslut till servern med hjälp av sqlcmdoch använd sedan följande lagrade procedur för att återställa statusen för
tempdb
-databasen.exec master..sp_resetstatus tempdb
Stäng av servern genom att trycka på
Ctrl
+C
i kommandotolken.Starta om SQL Server-tjänsten. Detta skapar en ny uppsättning
tempdb
databasfiler och återställertempdb
databasen.
Felsök fel vid återskapande
Syntaxfel och andra körningsfel visas i kommandotolkens fönster. Undersök installationsutstruktionen för följande syntaxfel:
Snedstreck (
/
) saknas framför varje parameternamn.Likhetstecknet (
=
) saknas mellan parameternamnet och parametervärdet.Det finns tomma blanksteg mellan parameternamnet och likhetstecknet.
Förekomst av kommatecken (
,
) eller andra tecken som inte anges i syntaxen.
När återskapandeåtgärden är klar undersöker du SQL Server-loggarna efter eventuella fel. Standardloggplatsen är C:\Program Files\Microsoft SQL Server\160\Setup Bootstrap\Logs
. Om du vill hitta loggfilen som innehåller resultatet av återskapandeprocessen, byt katalog till mappen Loggar från ett kommandofönster och kör sedan findstr /s RebuildDatabase summary*.*
. Den här sökningen visar alla loggfiler som innehåller resultatet av återskapande av systemdatabaser. Öppna loggfilerna och granska dem för relevanta felmeddelanden.