Flytta systemdatabaser

Gäller för:SQL Server

Den här artikeln beskriver hur du flyttar systemdatabaser i SQL Server. Det kan vara användbart att flytta systemdatabaser i följande situationer:

  • Misslyckande återhämtning. Databasen är till exempel i misstänkt läge eller har stängts av på grund av ett maskinvarufel.

  • Planerad flytt.

  • Flytt för schemalagd diskunderhåll.

Följande procedurer gäller för att flytta databasfiler inom samma instans av SQL Server. Om du vill flytta en databas till en annan instans av SQL Server eller till en annan server använder du säkerhetskopierings- och återställningsåtgärden.

Procedurerna i den här artikeln kräver databasfilernas logiska namn. Hämta namnet genom att fråga efter namnkolumnen i sys.master_files katalogvyn.

Important

Om du flyttar en systemdatabas och senare återskapar master databasen måste du flytta systemdatabasen igen eftersom återskapandeåtgärden installerar alla systemdatabaser till deras standardplats.

Flytta systemdatabaserna

Följ dessa steg om du vill flytta en systemdatabasdata eller loggfil som en del av en planerad flytt eller schemalagd underhåll. Detta omfattar databaserna model, msdboch tempdb system.

Important

Den här proceduren gäller för alla systemdatabaser utom databaserna master och Resource . Mer information om hur du flyttar databasen finns i senare i den master här artikeln. Det Resource går inte att flytta databasen.

  1. Registrera den befintliga platsen för de databasfiler som du tänker flytta genom att granska sys.master_files katalogvyn.

  2. Kontrollera att tjänstkontot för Databasmotor för SQL Server har fullständig behörighet till den nya platsen för filerna. Mer information finns i Konfigurera Windows-tjänstkonton och behörigheter. Om Database Engine tjänstkontot inte kan styra filerna på den nya platsen startar inte SQL Server-instansen.

  3. Kör följande instruktion för varje databasfil som ska flyttas.

    ALTER DATABASE database_name
        MODIFY FILE (NAME = logical_name, FILENAME = 'new_path\os_file_name');
    

    Tills tjänsten startas om fortsätter databasen att använda data och loggfiler på den befintliga platsen.

  4. Stoppa instansen av SQL Server för att utföra underhåll. Mer information finns i Starta, stoppa, pausa, återuppta och starta om SQL Server-tjänster.

  5. Kopiera databasfilen eller filerna till den nya platsen. Det här steget är inte nödvändigt för systemdatabasen tempdb . Filerna skapas automatiskt på den nya platsen.

  6. Starta om instansen av SQL Server eller servern. Mer information finns i Starta, stoppa, pausa, återuppta och starta om SQL Server-tjänster.

  7. Kontrollera filändringen genom att köra följande fråga. Systemdatabaserna bör rapportera de nya fysiska filplatserna.

    SELECT name,
           physical_name AS CurrentLocation,
           state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID(N'<database_name>');
    
  8. Eftersom du i steg 5 kopierade databasfilerna i stället för att flytta dem kan du nu på ett säkert sätt ta bort de oanvända databasfilerna från deras tidigare plats.

Uppföljning: När du har flyttat systemdatabasen msdb

msdb Om databasen flyttas och Database Mail har konfigurerats slutför du följande extra steg.

  1. Kontrollera att Service Broker är aktiverat för msdb databasen genom att köra följande fråga.

    SELECT is_broker_enabled
    FROM sys.databases
    WHERE name = N'msdb';
    

    Om Service Broker inte är aktiverat för msdbmåste den återaktiveras för att Database Mail ska fungera. Mer information finns i ALTER DATABASE ... SET ENABLE_BROKER.

    ALTER DATABASE msdb
        SET ENABLE_BROKER
        WITH ROLLBACK IMMEDIATE;
    

    Bekräfta att värdet is_broker_enabled för nu är 1.

  2. Kontrollera att Database Mail fungerar genom att skicka ett testmeddelande.

Återställningsprocedur vid fel

Om en fil måste flyttas på grund av ett maskinvarufel följer du dessa steg för att flytta filen till en ny plats. Den här proceduren gäller för alla systemdatabaser utom databaserna master och Resource . I följande exempel används Windows kommandotolk och sqlcmd-verktyget.

Important

Om databasen inte kan startas, om den är i misstänkt läge eller i ett oupptäckt tillstånd, kan endast medlemmar i den fasta sysadmin-rollen flytta filen.

  1. Kontrollera att tjänstkontot för Databasmotor för SQL Server har fullständig behörighet till den nya platsen för filerna. Mer information finns i Konfigurera Windows-tjänstkonton och behörigheter. Om Database Engine tjänstkontot inte kan styra filerna på den nya platsen startar inte SQL Server-instansen.

  2. Stoppa instansen av SQL Server om den har startats.

  3. Starta instansen av SQL Server i master- endast återställningsläge genom att ange något av följande kommandon i kommandotolken. Med startparametern 3608 förhindras SQL Server från att automatiskt starta och återställa alla databaser utom master databasen. Mer information finns i Startparametrar och TF3608.

    De parametrar som anges i dessa kommandon är skiftlägeskänsliga. Kommandona misslyckas när parametrarna inte anges som de visas.

    Kör följande kommando för standardinstansen (MSSQLSERVER):

    NET START MSSQLSERVER /f /T3608
    

    Kör följande kommando för en namngiven instans:

    NET START MSSQL$instancename /f /T3608
    

    Mer information finns i Starta, stoppa, pausa, återuppta och starta om SQL Server-tjänster.

  4. Efter tjänststarten med spårningsflaggan 3608 och /fstartar du en sqlcmd-anslutning till servern för att göra anspråk på den enda tillgängliga anslutningen. När du till exempel kör sqlcmd lokalt på samma server som standardinstansen (MSSQLSERVER) och för att ansluta med služba Active Directory integrationsautentisering kör du följande kommando:

    sqlcmd
    

    Så här ansluter du till en namngiven instans på den lokala servern med služba Active Directory integrationsautentisering:

    sqlcmd -S localhost\instancename
    

    Mer information om sqlcmd-syntax finns i sqlcmd-verktyget.

    Använd sqlcmd kommandon eller SQL Server Management Studio för att köra följande instruktion för varje fil som ska flyttas. Mer information om hur du använder sqlcmd-verktyget finns i sqlcmd – använd verktyget. När sqlcmd-sessionen är öppen kör du följande instruktion en gång för varje fil som ska flyttas:

    ALTER DATABASE database_name
        MODIFY FILE (NAME = logical_name, FILENAME = 'new_path\os_file_name');
    GO
    
  5. Avsluta verktyget sqlcmd eller SQL Server Management Studio.

  6. Stoppa instansen av SQL Server. Kör till exempel NET STOP MSSQLSERVER i kommandotolken.

  7. Kopiera filen eller filerna till den nya platsen.

  8. Starta om instansen av SQL Server. Kör till exempel NET START MSSQLSERVER i kommandotolken.

  9. Kontrollera filändringen genom att köra följande fråga.

    SELECT name,
           physical_name AS CurrentLocation,
           state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID(N'<database_name>');
    
  10. Eftersom du i steg 7 kopierade databasfilerna i stället för att flytta dem kan du nu på ett säkert sätt ta bort de oanvända databasfilerna från deras tidigare plats.

master Flytta databasen

Följ dessa steg för att master flytta databasen.

  1. Kontrollera att tjänstkontot för Databasmotor för SQL Server har fullständig behörighet till den nya platsen för filerna. Mer information finns i Konfigurera Windows-tjänstkonton och behörigheter. Om Database Engine tjänstkontot inte kan styra filerna på den nya platsen startar inte SQL Server-instansen.

  2. Leta upp och starta SQL Server Configuration ManagerStart-menyn. Mer information om den förväntade platsen finns i SQL Server Configuration Manager.

  3. I noden SQL Server Services högerklickar du på instansen av SQL Server (till exempel SQL Server (MSSQLSERVER)) och väljer Egenskaper.

  4. I dialogrutan egenskaper för SQL Server (instance_name) väljer du fliken Startparametrar.

  5. I rutan Befintliga parametrar väljer du parametern -d . I rutan Ange en startparameter ändrar du parametern till den nya sökvägen till masterdatafilen . Spara ändringen genom att välja Uppdatera .

  6. I rutan Befintliga parametrar väljer du parametern -l . I rutan Ange en startparameter ändrar du parametern till den nya sökvägen till masterloggfilen . Spara ändringen genom att välja Uppdatera .

    Parametervärdet för datafilen måste följa parametern -d och värdet för loggfilen måste följa parametern -l . I följande exempel visas parametervärdena för standardplatsen master för datafilen.

    -dC:\Program Files\Microsoft SQL Server\MSSQL<version>.MSSQLSERVER\MSSQL\DATA\master.mdf
    -lC:\Program Files\Microsoft SQL Server\MSSQL<version>.MSSQLSERVER\MSSQL\DATA\mastlog.ldf
    

    Om den planerade omlokaliseringen master för datafilen är E:\SQLDataändras parametervärdena enligt följande:

    -dE:\SQLData\master.mdf
    -lE:\SQLData\mastlog.ldf
    
  7. Välj OK för att spara ändringarna permanent och stäng dialogrutan egenskaper för SQL Server (instance_name).

  8. Stoppa instansen av SQL Server genom att högerklicka på instansnamnet och välja Stoppa.

  9. master.mdf Kopiera filerna och mastlog.ldf till den nya platsen.

  10. Starta om instansen av SQL Server.

  11. Kontrollera filändringen master för databasen genom att köra följande fråga.

    SELECT name,
           physical_name AS CurrentLocation,
           state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID('master');
    
  12. Nu bör SQL Server köras normalt. Men Microsoft rekommenderar också att du justerar registerposten på HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\instance_ID\Setup, där instance_ID är som MSSQL13.MSSQLSERVER. I den hive ändrar du SQLDataRoot värdet till den nya sökvägen till den nya platsen för databasfilerna master . Om registret inte uppdateras kan korrigeringen och uppgraderingen misslyckas.

  13. Eftersom du i steg 9 kopierade databasfilerna i stället för att flytta dem kan du nu på ett säkert sätt ta bort de oanvända databasfilerna från deras tidigare plats.

Flytta resursdatabasen

Databasens Resource plats är \<drive>:\Program Files\Microsoft SQL Server\MSSQL\<version>.<instance_name>\MSSQL\Binn\. Det går inte att flytta databasen.

Uppföljning: När du har flyttat alla systemdatabaser

Om du har flyttat alla systemdatabaser till en ny enhet eller volym, eller till en annan server med en annan enhetsbeteckning, gör du följande uppdateringar.

  • Ändra SQL Server Agent loggsökväg. Om du inte uppdaterar den här sökvägen kan SQL Server Agent inte starta.

  • Ändra databasens standardplats. Det går inte att skapa en ny databas om enhetsbeteckningen och sökvägen som anges som standardplats inte finns.

Ändra SQL Server Agent loggsökväg

Om du har flyttat alla systemdatabaser till en ny volym eller har migrerat till en annan server med en annan enhetsbeteckning, och sökvägen till SQL Agent-felloggfilen SQLAGENT.OUT inte längre finns, gör du följande uppdateringar.

  1. I Object Explorer från SQL Server Management Studio expanderar du SQL Server Agent.

  2. Högerklicka på Felloggar och välj Konfigurera.

  3. I dialogrutan Konfigurera SQL Server Agent felloggar anger du den nya platsen för SQLAGENT. OUT-fil. Standardplatsen är C:\Program Files\Microsoft SQL Server\MSSQL\<version>.<instance_name>\MSSQL\Log\.

Ändra databasens standardplats

  1. Från SQL Server Management Studio i Object Explorer ansluter du till önskad SQL Server instans. Högerklicka på instansen och välj Egenskaper.

  2. I dialogrutan Serveregenskaper väljer du Databasinställningar.

  3. Under Standardplatser för databas bläddrar du till den nya platsen för både data- och loggfilerna.

  4. Stoppa och starta SQL Server-tjänsten för att slutföra ändringen.

Examples

A. tempdb Flytta databasen

I följande exempel flyttas tempdb data och loggfiler till en ny plats som en del av en planerad flytt.

Tip

Ta tillfället i akt att granska dina tempdb filer för optimal storlek och placering. Mer information finns i Optimera tempdb-prestanda i SQL Server.

Eftersom tempdb återskapas varje gång instansen av SQL Server startas behöver du inte fysiskt flytta data och loggfiler. Filerna skapas på den nya platsen när tjänsten startas om i steg 4. Tills tjänsten startas tempdb om fortsätter du att använda data och loggfiler på den befintliga platsen.

  1. Fastställa databasens tempdb logiska filnamn och deras aktuella plats på disken.

    SELECT name,
           physical_name AS CurrentLocation
    FROM sys.master_files
    WHERE database_id = DB_ID(N'tempdb');
    GO
    
  2. Kontrollera att tjänstkontot för Databasmotor för SQL Server har fullständig behörighet till den nya platsen för filerna. Mer information finns i Konfigurera Windows-tjänstkonton och behörigheter. Om Database Engine tjänstkontot inte kan styra filerna på den nya platsen startar inte SQL Server-instansen.

  3. Ändra platsen för varje fil genom att använda ALTER DATABASE.

    USE master;
    GO
    
    ALTER DATABASE tempdb
        MODIFY FILE (NAME = tempdev, FILENAME = 'E:\SQLData\tempdb.mdf');
    GO
    
    ALTER DATABASE tempdb
        MODIFY FILE (NAME = templog, FILENAME = 'F:\SQLLog\templog.ldf');
    GO
    

    Tills tjänsten startas tempdb om fortsätter du att använda data och loggfiler på den befintliga platsen.

  4. Stoppa och starta om instansen av SQL Server.

  5. Verifiera filändringen.

    SELECT name,
           physical_name AS CurrentLocation,
           state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID(N'tempdb');
    
  6. Ta bort de oanvända tempdb filerna från den ursprungliga platsen.