Sdílet prostřednictvím


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:

  1. 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');
    
  2. 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 klauzuli WITH <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;
    
  3. Přesuňte soubor nebo soubory do nového umístění.

  4. Spusťte následující příkaz.

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

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

  3. Přesuňte soubor nebo soubory do nového umístění.

  4. 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

  5. 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.

  1. Pokud už byla instance SQL Serveru spuštěná, zastavte ji.

  2. 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.

  3. 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.

  4. Ukončete nástroj sqlcmd nebo SQL Server Management Studio.

  5. Zastavte instanci SQL Serveru.

  6. Přesuňte soubor nebo soubory do nového umístění.

  7. Spusťte instanci SQL Serveru. Například spusťte příkaz: NET START MSSQLSERVER.

  8. 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í.

  1. Ujistěte se, že jste v kontextu databáze master.

    USE master;
    GO
    
  2. 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
    
  3. Nastavte databázi offline.

    ALTER DATABASE AdventureWorks2022
        SET OFFLINE;
    GO
    
  4. 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
    
  5. 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';