Delen via


Gebruikersdatabases verplaatsen

van toepassing op:SQL Server-

In SQL Server kunt u de gegevens-, logboek- en volledige-tekstcatalogusbestanden van een gebruikersdatabase verplaatsen naar een nieuwe locatie door de nieuwe bestandslocatie op te geven in de FILENAME component van de instructie ALTER DATABASE van de ALTER DATABASE. Deze methode is 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 back-up en herstel of voert u de bewerkingen loskoppelen en koppelen uit.

Notitie

Dit artikel bevat informatie over het verplaatsen van gebruikersdatabasebestanden. Zie Systeemdatabases verplaatsenvoor het verplaatsen van systeembestandsdatabases.

Overwegingen

Wanneer u een database naar een ander serverexemplaren verplaatst om gebruikers en toepassingen een consistente ervaring te bieden, moet u mogelijk enkele of alle metagegevens voor de database opnieuw maken. Zie Metagegevens beheren bij het beschikbaar maken van een database op een andere servervoor meer informatie.

Sommige functies van de SQL Server Database Engine wijzigen de manier waarop de database-engine gegevens opslaat in de databasebestanden. Deze functies zijn beperkt tot specifieke edities van SQL Server. Een database die deze functies bevat, kan niet worden verplaatst naar een editie van SQL Server die deze niet ondersteunt. Gebruik de sys.dm_db_persisted_sku_features dynamische beheerweergave om alle editiespecifieke functies weer te geven die zijn ingeschakeld in de huidige database.

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.

Catalogussen met volledige tekst worden geïntegreerd in de database in plaats van op te slaan in het bestandssysteem. De volledige tekstcatalogus wordt automatisch verplaatst wanneer u een database verplaatst.

Notitie

Zorg ervoor dat het serviceaccount voor de Windows-serviceaccounts en -machtigingen configureren machtigingen heeft voor de nieuwe bestandslocatie in het bestandssysteem. Zie Bestandssysteemmachtigingen configureren voor database-enginetoegangvoor meer informatie.

Procedure voor geplande herlocatie

Als u een gegevens- of logboekbestand wilt verplaatsen als onderdeel van een geplande herlocatie, voert u de volgende stappen uit:

  1. Voer de volgende instructie uit om elk bestand te verplaatsen.

    ALTER DATABASE database_name
        MODIFY FILE (NAME = logical_name, FILENAME = 'new_path\os_file_name');
    
  2. Voer de volgende instructie uit om de database offline te brengen.

    ALTER DATABASE database_name
        SET OFFLINE;
    

    Voor deze actie is exclusieve toegang tot de database vereist. Als er een andere verbinding met de database is geopend, wordt de instructie ALTER DATABASE geblokkeerd totdat alle verbindingen zijn gesloten. Als u dit gedrag wilt overschrijven, gebruikt u de WITH <termination> clausule. Als u bijvoorbeeld alle andere verbindingen met de database automatisch wilt terugdraaien en de verbinding wilt verbreken, gebruikt u:

    ALTER DATABASE database_name
         SET OFFLINE
         WITH ROLLBACK IMMEDIATE;
    
  3. Verplaats het bestand of de bestanden naar de nieuwe locatie.

  4. Voer de volgende verklaring uit.

    ALTER DATABASE database_name
        SET ONLINE;
    
  5. 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>');
    

Herlocatie voor gepland schijfonderhoud

Als u een bestand wilt verplaatsen als onderdeel van een gepland schijfonderhoudsproces, voert u de volgende stappen uit:

  1. Voer de volgende instructie uit om elk bestand te verplaatsen.

    ALTER DATABASE database_name
        MODIFY FILE (NAME = logical_name, FILENAME = 'new_path\os_file_name');
    
  2. Als u onderhoud wilt uitvoeren, stopt u het exemplaar van SQL Server of sluit u het systeem af. Zie SQL Server-services starten, stoppen, onderbreken, hervatten en opnieuw startenvoor meer informatie.

  3. Verplaats het bestand of de bestanden naar de nieuwe locatie.

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

  5. 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>');
    

Procedure voor herstel van fouten

Als een bestand moet worden verplaatst vanwege een hardwarefout, gebruikt u de volgende stappen om het bestand naar een nieuwe locatie te verplaatsen.

Belangrijk

Als de database niet kan worden gestart, omdat 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. Stop het exemplaar van SQL Server als deze al is gestart.

  2. Start het exemplaar van SQL Server in master-only herstelmodus door een van de volgende opdrachten in te voeren bij de opdrachtprompt.

  3. Als u elk bestand wilt verplaatsen, gebruikt u sqlcmd opdrachten of SQL Server Management Studio om de volgende instructie uit te voeren.

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

    Raadpleeg sqlcmd - gebruik het hulpprogrammavoor meer informatie over hoe u de sqlcmd kunt gebruiken.

  4. Sluit het sqlcmd hulpprogramma of SQL Server Management Studio.

  5. Stop de instantie van SQL Server.

  6. Verplaats het bestand of de bestanden naar de nieuwe locatie.

  7. Start het exemplaar van SQL Server. Voer bijvoorbeeld het volgende uit: NET START MSSQLSERVER.

  8. 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>');
    

Voorbeelden

In het volgende voorbeeld wordt het AdventureWorks2022 logboekbestand verplaatst naar een nieuwe locatie als onderdeel van een geplande verplaatsing.

  1. Zorg ervoor dat u zich in de context van de master-database bevindt.

    USE master;
    GO
    
  2. Retourneer de naam van het logische bestand.

    SELECT name,
           physical_name AS CurrentLocation,
           state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID(N'AdventureWorks2022')
          AND type_desc = N'LOG';
    GO
    
  3. Stel de database offline in.

    ALTER DATABASE AdventureWorks2022
        SET OFFLINE;
    GO
    
  4. Verplaats het bestand fysiek naar een nieuwe locatie. Wijzig in de volgende instructie het pad dat is opgegeven in FILENAME naar de nieuwe locatie van het bestand op uw server.

    ALTER DATABASE AdventureWorks2022
        MODIFY FILE (NAME = AdventureWorks2022_Log, FILENAME = 'C:\NewLoc\AdventureWorks2022_Log.ldf');
    GO
    
    ALTER DATABASE AdventureWorks2022
        SET ONLINE;
    GO
    
  5. Controleer de nieuwe locatie.

    SELECT name,
           physical_name AS CurrentLocation,
           state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID(N'AdventureWorks2022')
          AND type_desc = N'LOG';