Systeemdatabases verplaatsen

Van toepassing op:SQL Server

In dit artikel wordt beschreven hoe u systeemdatabases verplaatst in SQL Server. Het verplaatsen van systeemdatabases kan handig zijn in de volgende situaties:

  • Herstel van mislukking. De database bevindt zich bijvoorbeeld in de verdachte modus of is afgesloten vanwege een hardwarefout.

  • Geplande verhuizing.

  • Verplaatsing voor gepland schijfonderhoud.

De volgende procedures zijn van toepassing op het verplaatsen van databasebestanden binnen hetzelfde exemplaar van SQL Server. Als u een database wilt verplaatsen naar een ander exemplaar van SQL Server of naar een andere server, gebruikt u de back-up- en herstelbewerking.

Voor de procedures in dit artikel is de logische naam van de databasebestanden vereist. Als u de naam wilt ophalen, voert u een query uit op de naamkolom in de sys.master_files catalogusweergave.

Important

Als u een systeemdatabase verplaatst en de master database later opnieuw opbouwt, moet u de systeemdatabase opnieuw verplaatsen omdat met de herbouwbewerking alle systeemdatabases worden geïnstalleerd op de standaardlocatie.

De systeemdatabases verplaatsen

Als u een systeemdatabasegegevens of logboekbestand wilt verplaatsen als onderdeel van een geplande herlocatie of gepland onderhoud, volgt u deze stappen. Dit omvat de model, msdben tempdb systeemdatabases.

Important

Deze procedure is van toepassing op alle systeemdatabases behalve de master en Resource databases. Zie verderop in dit artikel voor stappen om de master database te verplaatsen. De Resource database kan niet worden verplaatst.

  1. Noteer de bestaande locatie van de databasebestanden die u wilt verplaatsen door de sys.master_files catalogusweergave te controleren.

  2. Controleer of het serviceaccount voor de SQL Server Database Engine volledige machtigingen heeft voor de nieuwe locatie van de bestanden. Zie Windows-serviceaccounts en -machtigingen configurerenvoor meer informatie. Als het Database Engine serviceaccount de bestanden op de nieuwe locatie niet kan beheren, wordt het SQL Server exemplaar niet gestart.

  3. Voer de volgende instructie uit om elk databasebestand te verplaatsen.

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

    Totdat de service opnieuw wordt opgestart, blijft de database de gegevens en logboekbestanden op de bestaande locatie gebruiken.

  4. Stop het exemplaar van SQL Server om onderhoud uit te voeren. Zie SQL Server-services starten, stoppen, onderbreken, hervatten en opnieuw startenvoor meer informatie.

  5. Kopieer het databasebestand of de bestanden naar de nieuwe locatie. Deze stap is niet nodig voor de tempdb systeemdatabase. Deze bestanden worden automatisch op de nieuwe locatie gemaakt.

  6. Start het exemplaar van SQL Server of de server opnieuw op. Zie SQL Server-services starten, stoppen, onderbreken, hervatten en opnieuw startenvoor meer informatie.

  7. Controleer de bestandswijziging door de volgende query uit te voeren. De systeemdatabases moeten de nieuwe fysieke bestandslocaties rapporteren.

    SELECT name,
           physical_name AS CurrentLocation,
           state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID(N'<database_name>');
    
  8. Aangezien u in stap 5 de databasebestanden hebt gekopieerd in plaats van ze te verplaatsen, kunt u de ongebruikte databasebestanden veilig verwijderen van hun vorige locatie.

Opvolgen: Na het verplaatsen van de msdb systeemdatabase

Als de msdb database wordt verplaatst en Database Mail is geconfigureerd, voert u de volgende extra stappen uit.

  1. Controleer of Service Broker is ingeschakeld voor de msdb database door de volgende query uit te voeren.

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

    Als De Service Broker niet is ingeschakeld, moet deze opnieuw worden ingeschakeld msdbvoor Database Mail om te kunnen functioneren. Zie voor meer informatie ALTER DATABASE ... SET ENABLE_BROKER.

    ALTER DATABASE msdb
        SET ENABLE_BROKER
        WITH ROLLBACK IMMEDIATE;
    

    Controleer of de waarde is_broker_enabled nu 1 is.

  2. Controleer of Database Mail werkt door een testmail te verzenden.

Procedure voor herstel van fouten

Als een bestand moet worden verplaatst vanwege een hardwarefout, volgt u deze stappen om het bestand naar een nieuwe locatie te verplaatsen. Deze procedure is van toepassing op alle systeemdatabases behalve de master en Resource databases. In de volgende voorbeelden worden de Windows opdrachtregelprompt en sqlcmd Utility gebruikt.

Important

Als de database niet kan worden gestart, als deze zich in de verdachte modus of in een niet-herstelde status bevindt, kunnen alleen leden van de vaste rol sysadmin het bestand verplaatsen.

  1. Controleer of het serviceaccount voor de SQL Server Database Engine volledige machtigingen heeft voor de nieuwe locatie van de bestanden. Zie Windows-serviceaccounts en -machtigingen configurerenvoor meer informatie. Als het Database Engine serviceaccount de bestanden op de nieuwe locatie niet kan beheren, wordt het SQL Server exemplaar niet gestart.

  2. Stop het exemplaar van SQL Server als deze is gestart.

  3. Start het exemplaar van SQL Server in master-only herstelmodus door een van de volgende opdrachten in te voeren bij de opdrachtprompt. Als u opstartparameter 3608 gebruikt, voorkomt u dat SQL Server elke database automatisch start en herstelt, behalve de master database. Zie Opstartparameters en TF3608 voor meer informatie.

    De parameters die in deze opdrachten zijn opgegeven, zijn hoofdlettergevoelig. De opdrachten mislukken wanneer de parameters niet worden opgegeven zoals wordt weergegeven.

    Voer voor het standaardexemplaren (MSSQLSERVER) de volgende opdracht uit:

    NET START MSSQLSERVER /f /T3608
    

    Voer voor een benoemd exemplaar de volgende opdracht uit:

    NET START MSSQL$instancename /f /T3608
    

    Zie SQL Server-services starten, stoppen, onderbreken, hervatten en opnieuw startenvoor meer informatie.

  4. Onmiddellijk na het opstarten van de service met traceringsvlag 3608 en /fstart u een sqlcmd-verbinding met de server om de enkele verbinding te claimen die beschikbaar is. Als u bijvoorbeeld sqlcmd lokaal uitvoert op dezelfde server als het standaardexemplaren (MSSQLSERVER) en verbinding wilt maken met Active Directory integratieverificatie, voert u de volgende opdracht uit:

    sqlcmd
    

    Als u verbinding wilt maken met een benoemd exemplaar op de lokale server, met Active Directory integratieverificatie:

    sqlcmd -S localhost\instancename
    

    Zie het hulpprogramma sqlcmd voor meer informatie over de sqlcmd-syntaxis.

    Als u elk bestand wilt verplaatsen, gebruikt u sqlcmd opdrachten of SQL Server Management Studio om de volgende instructie uit te voeren. Zie sqlcmd : gebruik het hulpprogramma voor meer informatie over het gebruik van het hulpprogramma sqlcmd. Zodra de sqlcmd-sessie is geopend, voert u de volgende instructie één keer uit voor elk bestand dat moet worden verplaatst:

    ALTER DATABASE database_name
        MODIFY FILE (NAME = logical_name, FILENAME = 'new_path\os_file_name');
    GO
    
  5. Sluit het sqlcmd hulpprogramma of SQL Server Management Studio.

  6. Stop de instantie van SQL Server. Voer bijvoorbeeld uit NET STOP MSSQLSERVER in de opdrachtregelprompt.

  7. Kopieer het bestand of de bestanden naar de nieuwe locatie.

  8. Start het exemplaar van SQL Server opnieuw op. Voer bijvoorbeeld uit NET START MSSQLSERVER in de opdrachtregelprompt.

  9. Controleer de bestandswijziging door de volgende query uit te voeren.

    SELECT name,
           physical_name AS CurrentLocation,
           state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID(N'<database_name>');
    
  10. Aangezien u in stap 7 de databasebestanden hebt gekopieerd in plaats van ze te verplaatsen, kunt u de ongebruikte databasebestanden veilig verwijderen van hun vorige locatie.

De master database verplaatsen

Volg deze stappen om de master database te verplaatsen.

  1. Controleer of het serviceaccount voor de SQL Server Database Engine volledige machtigingen heeft voor de nieuwe locatie van de bestanden. Zie Windows-serviceaccounts en -machtigingen configurerenvoor meer informatie. Als het Database Engine serviceaccount de bestanden op de nieuwe locatie niet kan beheren, wordt het SQL Server exemplaar niet gestart.

  2. Zoek en start SQL Server Configuration Manager in het menu Start. Zie SQL Server Configuration Manager voor meer informatie over de verwachte locatie.

  3. Klik in het knooppunt SQL Server Services met de rechtermuisknop op het exemplaar van SQL Server (bijvoorbeeld SQL Server (MSSQLSERVER)) en kies Eigenschappen.

  4. Selecteer in het dialoogvenster Eigenschappen van SQL Server (instance_name) het tabblad Opstartparameters.

  5. Selecteer de -d parameter in het vak Bestaande parameters. Wijzig in het vak Een opstartparameter opgeven de parameter in het nieuwe pad van het mastergegevensbestand . Selecteer Bijwerken om de wijziging op te slaan.

  6. Selecteer de -l parameter in het vak Bestaande parameters. Wijzig in het vak Een opstartparameter opgeven de parameter in het nieuwe pad van het masterlogboekbestand . Selecteer Bijwerken om de wijziging op te slaan.

    De parameterwaarde voor het gegevensbestand moet de -d parameter volgen en de waarde voor het logboekbestand moet de -l parameter volgen. In het volgende voorbeeld ziet u de parameterwaarden voor de standaardlocatie van het master gegevensbestand.

    -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
    

    Als de geplande herlocatie voor het master gegevensbestand is E:\SQLData, worden de parameterwaarden als volgt gewijzigd:

    -dE:\SQLData\master.mdf
    -lE:\SQLData\mastlog.ldf
    
  7. Selecteer OK om de wijzigingen permanent op te slaan en sluit het dialoogvenster SQL Server (instance_name) Eigenschappen.

  8. Stop het exemplaar van SQL Server door met de rechtermuisknop op de naam van het exemplaar te klikken en Stop te kiezen.

  9. Kopieer de master.mdf en mastlog.ldf bestanden naar de nieuwe locatie.

  10. Start het exemplaar van SQL Server opnieuw op.

  11. Controleer de bestandswijziging voor de master database door de volgende query uit te voeren.

    SELECT name,
           physical_name AS CurrentLocation,
           state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID('master');
    
  12. Op dit moment moet SQL Server normaal worden uitgevoerd. Microsoft raadt echter ook aan om de registervermelding aan te passen op HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\instance_ID\Setup, waar instance_ID als MSSQL13.MSSQLSERVERvolgt is. Wijzig in die component de SQLDataRoot waarde in het nieuwe pad van de nieuwe locatie van de master databasebestanden. Als u het register niet bijwerkt, kan het patchen en upgraden mislukken.

  13. Aangezien u in stap 9 de databasebestanden hebt gekopieerd in plaats van ze te verplaatsen, kunt u de ongebruikte databasebestanden veilig van hun vorige locatie verwijderen.

De resourcedatabase verplaatsen

De locatie van de Resource database is \<drive>:\Program Files\Microsoft SQL Server\MSSQL\<version>.<instance_name>\MSSQL\Binn\. De database kan niet worden verplaatst.

Opvolgen: Na het verplaatsen van alle systeemdatabases

Als u alle systeemdatabases naar een nieuw station of volume hebt verplaatst, of naar een andere server met een andere stationsletter, moet u de volgende updates uitvoeren.

  • Wijzig het SQL Server Agent logboekpad. Als u dit pad niet bijwerkt, kan SQL Server Agent niet worden gestart.

  • Wijzig de standaardlocatie van de database. Het maken van een nieuwe database kan mislukken als de stationsletter en het pad dat is opgegeven als de standaardlocatie niet bestaan.

Het SQL Server Agent-logboekpad wijzigen

Als u alle systeemdatabases naar een nieuw volume hebt verplaatst of naar een andere server met een andere stationsletter hebt gemigreerd en het pad van het foutenlogboekbestand SQLAGENT.OUT van de SQL Agent niet meer bestaat, moet u de volgende updates uitvoeren.

  1. Vouw vanuit SQL Server Management Studio in ObjectverkennerSQL Server Agent uit.

  2. Klik met de rechtermuisknop op Foutenlogboeken en selecteer Configureren.

  3. Geef in het dialoogvenster SQL Server Agent Foutlogboeken configureren de nieuwe locatie van DE SQLAGENT op. OUT-bestand. De standaardlocatie is C:\Program Files\Microsoft SQL Server\MSSQL\<version>.<instance_name>\MSSQL\Log\.

De standaardlocatie van de database wijzigen

  1. Maak vanuit SQL Server Management Studio in Objectverkenner verbinding met het gewenste SQL Server exemplaar. Klik met de rechtermuisknop op het exemplaar en selecteer Eigenschappen.

  2. Selecteer Database-instellingen in het dialoogvenster Servereigenschappen.

  3. Blader onder Standaardlocaties voor databases naar de nieuwe locatie voor zowel de gegevens- als logboekbestanden.

  4. Stop en start de SQL Server-service om de wijziging te voltooien.

Examples

Eén. De tempdb database verplaatsen

In het volgende voorbeeld worden de tempdb gegevens en logboekbestanden naar een nieuwe locatie verplaatst als onderdeel van een geplande herlocatie.

Tip

Neem deze gelegenheid om uw tempdb bestanden te controleren voor optimale grootte en plaatsing. Zie Tempdb-prestaties optimaliseren in SQL Server voor meer informatie.

Omdat tempdb telkens wanneer het exemplaar van SQL Server wordt gestart, opnieuw wordt gemaakt, hoeft u de gegevens en logboekbestanden niet fysiek te verplaatsen. De bestanden worden gemaakt op de nieuwe locatie wanneer de service opnieuw wordt opgestart in stap 4. Totdat de service opnieuw wordt opgestart, tempdb blijven de gegevens en logboekbestanden op de bestaande locatie worden gebruikt.

  1. Bepaal de namen van logische bestanden van de tempdb database en de huidige locatie op de schijf.

    SELECT name,
           physical_name AS CurrentLocation
    FROM sys.master_files
    WHERE database_id = DB_ID(N'tempdb');
    GO
    
  2. Controleer of het serviceaccount voor de SQL Server Database Engine volledige machtigingen heeft voor de nieuwe locatie van de bestanden. Zie Windows-serviceaccounts en -machtigingen configurerenvoor meer informatie. Als het Database Engine serviceaccount de bestanden op de nieuwe locatie niet kan beheren, wordt het SQL Server exemplaar niet gestart.

  3. Verander de locatie van elk bestand door gebruik te maken van 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
    

    Totdat de service opnieuw wordt opgestart, tempdb blijven de gegevens en logboekbestanden op de bestaande locatie worden gebruikt.

  4. Stop en herstart de instantie van SQL Server.

  5. Controleer de bestandswijziging.

    SELECT name,
           physical_name AS CurrentLocation,
           state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID(N'tempdb');
    
  6. Verwijder de ongebruikte bestanden van de oorspronkelijke tempdb locatie.