Dela via


Å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, msdboch 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 msdbeller ä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.

  1. Registrera alla serveromfattande konfigurationsvärden.

    SELECT * FROM sys.configurations;
    
  2. 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;
    
  3. 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'));
    
  4. Leta upp den aktuella säkerhetskopian av databaserna master, modeloch msdb.

  5. Om instansen av SQL Server har konfigurerats som replikeringsdistributör letar du upp den aktuella säkerhetskopian av distribution-databasen.

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

  7. Kontrollera att kopior av master, model, msdb data och loggmallfiler finns på den lokala servern. Standardplatsen för mallfilerna är C:\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 till setup\sql_engine_core_inst_msi\Pfiles\SqlServr\MSSQL.X\MSSQL\Binn\Templates.

Återskapa systemdatabaser

Följande procedur återskapar master, model, msdboch 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

  1. 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å servern C:\Program Files\Microsoft SQL Server\160\Setup Bootstrap\SQLServer2022.

  2. 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 sprids tempdb-datafilerna över katalogerna enligt en rundtursprincip.

    Standardvärde: System Data Directory
    [ /SQLTEMPDBLOGDIR=Directory ] Anger katalogen för tempdb loggfilen.

    Standardvärde: System Data Directory
  3. Nä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.

  4. 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 antalet tempdb filer inte känt under installationen. Därför vet scenariot ebuildDatabase inte antalet tempdb filer som ska läsas. Du kan ange värdet för antalet tempdb filer igen med parametern SQLTEMPDBFILECOUNT. Om parametern inte anges lägger RebuildDatabase till ett standardantal tempdb filer, vilket är lika många tempdb 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, modeloch msdb 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

  1. Starta installationsprogrammet för SQL Server (setup.exe) från distributionsmediet.

  2. I det vänstra navigeringsområdet väljer du Underhålloch väljer sedan Reparera.

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

  4. På sidan Välj instans väljer du den instans som ska repareras och väljer sedan Nästa.

  5. Reglerna för reparation kommer att köras för att validera åtgärden. Om du vill fortsätta väljer du Nästa.

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

  1. Stoppa alla tjänster som ansluter till databasmotorn, inklusive SQL Server Agent, SSRS, SSIS och alla program som använder SQL Server som datalager.

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

  3. 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"
    
  4. Använd Utforskaren i Windows och byt namn på msdb databasfiler. Dessa finns som standard i undermappen DATA för SQL Server-instansen.

  5. Använd SQL Server Configuration Manager och stoppa och starta om tjänsten Database Engine normalt utan ytterligare spårningsflaggor.

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

  7. Öppna filen instmsdb.out med Hjälp av Windows Notepad och kontrollera om det finns några fel i utdata.

  8. Tillämpa alla CU:er som är installerade på instansen igen, vilket uppgraderar din msdb databas till den aktuella CU-nivån.

  9. Återskapa användarinnehållet som lagras i msdb-databasen, till exempel jobb, aviseringar och andra objekt.

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

  1. Byt namn på aktuella tempdb.mdf och templog.ldf filer om de inte saknas.

  2. 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 MSSQLSERVERför namngiven instans MSSQL$<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.

  3. 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
    
  4. Stäng av servern genom att trycka på Ctrl+C i kommandotolken.

  5. Starta om SQL Server-tjänsten. Detta skapar en ny uppsättning tempdb databasfiler och återställer tempdb 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.