Flytta användardatabaser
gäller för:SQL Server
I SQL Server kan du flytta data-, logg- och fulltextkatalogfilerna för en användardatabas till en ny plats genom att ange den nya filplatsen i instruktionen FILENAME
i instruktionen ALTER DATABASE. Den här metoden gäller för att flytta databasfiler inom samma SQL Server-instans. Om du vill flytta en databas till en annan instans av SQL Server eller till en annan server, använder du säkerhetskopiering och återställning eller koppla från och koppla till åtgärder.
Obs
Den här artikeln beskriver hur du flyttar användardatabasfiler. Information om hur du flyttar systemdatabasfiler finns i Flytta systemdatabaser.
Överväganden
När du flyttar en databas till en annan serverinstans kan du behöva återskapa vissa eller alla metadata för databasen för att tillhandahålla en konsekvent upplevelse för användare och program. Mer information finns i Hantera metadata när du gör en databas tillgänglig på en annan server.
Vissa funktioner i SQL Server Database Engine ändrar hur databasmotorn lagrar information i databasfilerna. Dessa funktioner är begränsade till specifika utgåvor av SQL Server. En databas som innehåller dessa funktioner kan inte flyttas till en utgåva av SQL Server som inte stöder dem. Använd vyn sys.dm_db_persisted_sku_features
dynamisk hantering för att visa alla utgåvasspecifika funktioner som är aktiverade i den aktuella databasen.
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.
Fulltextkataloger är integrerade i databasen i stället för att lagras i filsystemet. Fulltextkatalogerna flyttas automatiskt när du flyttar en databas.
Not
Kontrollera att tjänstkontot för Konfigurera Windows-tjänstkonton och behörigheter har behörighet till den nya filplatsen i filsystemet. Mer information finns i Konfigurera filsystembehörigheter för databasmotoråtkomst.
Planerad omlokaliseringsprocedur
Följ dessa steg om du vill flytta en data- eller loggfil som en del av en planerad omlokalisering:
Kör följande instruktion för varje fil som ska flyttas.
ALTER DATABASE database_name MODIFY FILE (NAME = logical_name, FILENAME = 'new_path\os_file_name');
Kör följande uttryck för att ta databasen offline.
ALTER DATABASE database_name SET OFFLINE;
Den här åtgärden kräver exklusiv åtkomst till databasen. Om en annan anslutning är öppen för databasen blockeras
ALTER DATABASE
-instruktionen tills alla anslutningar stängs. Om du vill åsidosätta det här beteendet använder duWITH <termination>
-satsen. Om du till exempel vill återställa och koppla från alla andra anslutningar till databasen automatiskt använder du:ALTER DATABASE database_name SET OFFLINE WITH ROLLBACK IMMEDIATE;
Flytta filen eller filerna till den nya platsen.
Kör följande kommando.
ALTER DATABASE database_name SET ONLINE;
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>');
Flytt för schemalagt diskunderhåll
Följ dessa steg för att flytta en fil som en del av en schemalagd diskunderhållsprocess:
Kör följande instruktion för varje fil som ska flyttas.
ALTER DATABASE database_name MODIFY FILE (NAME = logical_name, FILENAME = 'new_path\os_file_name');
Om du vill utföra underhåll stoppar du instansen av SQL Server eller stänger av systemet. Mer information finns i Starta, stoppa, pausa, återuppta och starta om SQL Server-tjänster.
Flytta filen eller filerna till den nya platsen.
Starta om instansen av SQL Server eller servern. Mer information finns i Starta, stoppa, pausa, återuppta och starta om SQL Server-tjänster
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>');
Återställningsprocedur vid fel
Om en fil måste flyttas på grund av ett maskinvarufel använder du följande steg för att flytta filen till en ny plats.
Viktig
Om databasen inte kan startas, dvs. den är i misstänkt läge eller i ett oupptäckt tillstånd, kan endast medlemmar i den fasta sysadmin-rollen flytta filen.
Stoppa instansen av SQL Server om den redan har startats.
Starta instansen av SQL Server i
master
- endast återställningsläge genom att ange något av följande kommandon i kommandotolken.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. Information om Linux finns i Starta, stoppa och starta om SQL Server-tjänster i Linux.
Använd sqlcmd kommandon eller SQL Server Management Studio för att köra följande instruktion för varje fil som ska flyttas.
ALTER DATABASE database_name MODIFY FILE (NAME = logical_name, FILENAME = 'new_path\os_file_name');
Mer information om hur du använder verktyget sqlcmd finns i sqlcmd – använd verktyget.
Avsluta verktyget sqlcmd eller SQL Server Management Studio.
Stoppa instansen av SQL Server.
Flytta filen eller filerna till den nya platsen.
Starta instansen av SQL Server. Kör till exempel:
NET START MSSQLSERVER
.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>');
Exempel
I följande exempel flyttas loggfilen AdventureWorks2022
till en ny plats som en del av en planerad omlokalisering.
Se till att du är i sammanhanget med
master
-databasen.USE master; GO
Återge det logiska filnamnet.
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
Sätt databasen i offline-läge.
ALTER DATABASE AdventureWorks2022 SET OFFLINE; GO
Flytta filen fysiskt till en ny plats. I följande instruktion ändrar du sökvägen som anges i
FILENAME
till den nya platsen för filen på servern.ALTER DATABASE AdventureWorks2022 MODIFY FILE (NAME = AdventureWorks2022_Log, FILENAME = 'C:\NewLoc\AdventureWorks2022_Log.ldf'); GO ALTER DATABASE AdventureWorks2022 SET ONLINE; GO
Kontrollera den nya platsen.
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID(N'AdventureWorks2022') AND type_desc = N'LOG';