Přesun uživatelských databází
platí pro:SQL Server
Na SQL Serveru můžete přesunout data, protokol a fulltextové soubory katalogu uživatelské databáze do nového umístění zadáním nového umístění souboru v klauzuli FILENAME
příkazu ALTER DATABASE. Tato metoda se vztahuje na přesun databázových souborů v rámci stejné instance SQL Serveru. Pokud chcete přesunout databázi do jiné instance SQL Serveru nebo na jiný server, použijte zálohování a obnovení, nebo operace odpojit a připojit.
Poznámka
Tento článek se zabývá přesouváním souborů uživatelské databáze. Informace o přesouvání systémových databázových souborů najdete v tématu Přesunutí systémových databází.
Úvahy
Když přesunete databázi do jiné instance serveru, abyste uživatelům a aplikacím poskytli konzistentní prostředí, budete možná muset znovu vytvořit některá nebo všechna metadata pro databázi. Další informace naleznete v tématu Správa metadat při zpřístupnění databáze na jiném serveru.
Některé funkce databázového stroje SQL Serveru mění způsob, jakým databázový stroj ukládá informace do databázových souborů. Tyto funkce jsou omezené na konkrétní edice SQL Serveru. Databázi obsahující tyto funkce nelze přesunout do edice SQL Serveru, která je nepodporuje. Pomocí zobrazení dynamické správy sys.dm_db_persisted_sku_features
zobrazíte seznam všech funkcí specifických pro edici, které jsou v aktuální databázi povolené.
Postupy v tomto článku vyžadují logický název databázových souborů. Název získáte dotazem na sloupec s názvem v zobrazení katalogu sys.master_files.
Fulltextové katalogy jsou integrované do databáze, nikoli do systému souborů. Při přesunu databáze se fulltextové katalogy automaticky přesunou.
Poznámka
Ujistěte se, že služební účet pro Konfigurace účtů služeb systému Windows a oprávnění má oprávnění k novému umístění souboru v systému souborů. Další informace naleznete v tématu Konfigurace oprávnění systému souborů pro přístup k databázovému stroji.
Plánovaná procedura přemístění
Pokud chcete přesunout data nebo soubor protokolu jako součást plánovaného přemístění, postupujte takto:
Pro každý soubor, který se má přesunout, spusťte následující příkaz.
ALTER DATABASE database_name MODIFY FILE (NAME = logical_name, FILENAME = 'new_path\os_file_name');
Spuštěním následujícího příkazu přeneste databázi do režimu offline.
ALTER DATABASE database_name SET OFFLINE;
Tato akce vyžaduje výhradní přístup k databázi. Pokud je k databázi otevřené jiné připojení, příkaz
ALTER DATABASE
je zablokovaný, dokud se všechna připojení neskončí. Chcete-li toto chování přepsat, použijte klauzuliWITH <termination>
. Pokud chcete například automaticky vrátit zpět a odpojit všechna ostatní připojení k databázi, použijte:ALTER DATABASE database_name SET OFFLINE WITH ROLLBACK IMMEDIATE;
Přesuňte soubor nebo soubory do nového umístění.
Spusťte následující příkaz.
ALTER DATABASE database_name SET ONLINE;
Ověřte změnu souboru spuštěním následujícího dotazu.
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID(N'<database_name>');
Přemístění pro plánovanou údržbu disků
Pokud chcete soubor přemístit v rámci procesu plánované údržby disků, postupujte takto:
Pro každý soubor, který se má přesunout, spusťte následující příkaz.
ALTER DATABASE database_name MODIFY FILE (NAME = logical_name, FILENAME = 'new_path\os_file_name');
Pokud chcete provést údržbu, zastavte instanci SQL Serveru nebo vypněte systém. Další informace najdete v tématu Spuštění, zastavení, pozastavení, obnovení a restartování služeb SYSTÉMU SQL Server.
Přesuňte soubor nebo soubory do nového umístění.
Restartujte instanci SQL Serveru nebo serveru. Další informace najdete v tématu Spuštění, zastavení, pozastavení, obnovení a restartování služeb SQL Serveru
Ověřte změnu souboru spuštěním následujícího dotazu.
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID(N'<database_name>');
Postup obnovení selhání
Pokud soubor musí být přesunut z důvodu selhání hardwaru, pomocí následujícího postupu přemísťujte soubor do nového umístění.
Důležitý
Pokud databázi nejde spustit, znamená to, že je v podezřelém režimu nebo v neobnoveném stavu, soubor můžou přesunout jenom členové pevné role správce systému.
Pokud už byla instance SQL Serveru spuštěná, zastavte ji.
Spusťte instanci SQL Serveru v režimu obnovení
master
-only zadáním jednoho z následujících příkazů na příkazovém řádku.Pro výchozí instanci (MSSQLSERVER) spusťte následující příkaz.
NET START MSSQLSERVER /f /T3608
Pro pojmenovanou instanci spusťte následující příkaz.
NET START MSSQL$instancename /f /T3608
Další informace najdete v tématu Spuštění, zastavení, pozastavení, obnovení a restartování služeb SYSTÉMU SQL Server. Informace o Linuxu najdete v tématu Spuštění, zastavení a restartování služeb SQL Serveru v systému Linux.
Pro každý soubor, který se má přesunout, použijte příkazy sqlcmd nebo SQL Server Management Studio a spusťte následující příkaz.
ALTER DATABASE database_name MODIFY FILE (NAME = logical_name, FILENAME = 'new_path\os_file_name');
Další informace o použití nástroje sqlcmd naleznete v tématu sqlcmd - použití nástroje.
Ukončete nástroj sqlcmd nebo SQL Server Management Studio.
Zastavte instanci SQL Serveru.
Přesuňte soubor nebo soubory do nového umístění.
Spusťte instanci SQL Serveru. Například spusťte příkaz:
NET START MSSQLSERVER
.Ověřte změnu souboru spuštěním následujícího dotazu.
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID(N'<database_name>');
Příklady
Následující příklad přesune soubor protokolu AdventureWorks2022
do nového umístění jako součást plánovaného přemístění.
Ujistěte se, že jste v kontextu databáze
master
.USE master; GO
Vrátí název logického souboru.
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
Nastavte databázi offline.
ALTER DATABASE AdventureWorks2022 SET OFFLINE; GO
Fyzicky přesuňte soubor do nového umístění. V následujícím příkazu upravte cestu zadanou v
FILENAME
na nové umístění souboru na vašem serveru.ALTER DATABASE AdventureWorks2022 MODIFY FILE (NAME = AdventureWorks2022_Log, FILENAME = 'C:\NewLoc\AdventureWorks2022_Log.ldf'); GO ALTER DATABASE AdventureWorks2022 SET ONLINE; GO
Ověřte nové umístění.
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID(N'AdventureWorks2022') AND type_desc = N'LOG';