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:
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');
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 deWITH <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;
Verplaats het bestand of de bestanden naar de nieuwe locatie.
Voer de volgende verklaring uit.
ALTER DATABASE database_name SET ONLINE;
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:
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');
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.
Verplaats het bestand of de bestanden naar de nieuwe locatie.
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
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.
Stop het exemplaar van SQL Server als deze al is gestart.
Start het exemplaar van SQL Server in
master
-only herstelmodus door een van de volgende opdrachten in te voeren bij de opdrachtprompt.Voer de volgende opdracht uit voor het standaardexemplaar (MSSQLSERVER).
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. Zie SQL Server-services starten, stoppen en opnieuw starten op Linuxvoor meer informatie over Linux.
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.
Sluit het sqlcmd hulpprogramma of SQL Server Management Studio.
Stop de instantie van SQL Server.
Verplaats het bestand of de bestanden naar de nieuwe locatie.
Start het exemplaar van SQL Server. Voer bijvoorbeeld het volgende uit:
NET START MSSQLSERVER
.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.
Zorg ervoor dat u zich in de context van de
master
-database bevindt.USE master; GO
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
Stel de database offline in.
ALTER DATABASE AdventureWorks2022 SET OFFLINE; GO
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
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';