Sdílet prostřednictvím


Přesun systémových databází

platí pro:SQL Server

Tento článek popisuje, jak přesunout systémové databáze na SQL Serveru. Přesunutí systémových databází může být užitečné v následujících situacích:

  • Obnova po selhání Například databáze je v podezřelém režimu nebo se vypnula kvůli selhání hardwaru.

  • Plánované přemístění.

  • Přemístění pro plánovanou údržbu disků

Následující postupy platí pro přesun databázových souborů ve stejné instanci SQL Serveru. Pokud chcete přesunout databázi do jiné instance SQL Serveru nebo na jiný server, použijte operaci zálohování a obnovení.

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.

Důležitý

Pokud přesunete systémovou databázi a později znovu sestavíte databázi master, musíte systémovou databázi znovu přesunout, protože operace opětovného sestavení nainstaluje všechny systémové databáze do výchozího umístění.

Přesun systémových databází

Chcete-li přesunout systémová data databáze nebo soubor protokolu jako součást plánované operace přemístění nebo plánované údržby, postupujte takto. To zahrnuje systémové databáze model, msdba tempdb.

Důležitý

Tento postup platí pro všechny systémové databáze s výjimkou master a Resource databází. Postup přesunutí databáze master najdete dále v tomto článku. Databázi Resource nelze přesunout.

  1. Poznamenejte si existující umístění souborů databáze, které chcete přesunout, a to kontrolou zobrazení katalogu sys.master_files.

  2. Ověřte, že účet služby pro databázový stroj SQL Serveru má úplná oprávnění k novému umístění souborů. Další informace naleznete v tématu Konfigurace účtů služeb systému Windows a oprávnění. Pokud účet služby Databázový stroj nemůže řídit soubory v novém umístění, instance SQL Serveru se nespustí.

  3. Pro každý soubor databáze, 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');
    

    Dokud se služba nerestartuje, databáze bude dál používat data a soubory protokolů v existujícím umístění.

  4. Zastavte instanci SQL Serveru, aby se prováděla údržba. Další informace najdete v tématu Spuštění, zastavení, pozastavení, obnovení a restartování služeb SYSTÉMU SQL Server.

  5. Zkopírujte soubor databáze nebo soubory do nového umístění. Tento krok není nezbytný pro systémovou databázi tempdb; tyto soubory se automaticky vytvoří v novém umístění.

  6. Restartujte instanci SQL Serveru nebo serveru. Další informace najdete v tématu Spuštění, zastavení, pozastavení, obnovení a restartování služeb SYSTÉMU SQL Server.

  7. Ověřte změnu souboru spuštěním následujícího dotazu. Systémové databáze by měly hlásit nová umístění fyzických souborů.

    SELECT name,
           physical_name AS CurrentLocation,
           state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID(N'<database_name>');
    
  8. Vzhledem k tomu, že jste v kroku 5 zkopírovali soubory databáze místo jejich přesunutí, můžete nyní bezpečně odstranit nepoužívané databázové soubory z předchozího umístění.

Následně: Po přesunutí databáze systému msdb

Pokud je databáze msdb přesunuta a databázová pošta je nakonfigurovaná, proveďte následující kroky navíc.

  1. Spuštěním následujícího dotazu ověřte, že je pro databázi msdb povolená služba Service Broker.

    SELECT is_broker_enabled
    FROM sys.databases
    WHERE name = N'msdb';
    

    Pokud služba Service Broker není pro msdbpovolená, musí být znovu povolená pro funkci Databázová pošta. Další informace naleznete v tématu ALTER DATABASE ... SET ENABLE_BROKER.

    ALTER DATABASE msdb
        SET ENABLE_BROKER
        WITH ROLLBACK IMMEDIATE;
    

    Ověřte, že hodnota is_broker_enabled je teď 1.

  2. Ověřte, že databázová pošta funguje odesláním testovací pošty.

Postup zotavení po selhání

Pokud se soubor musí přesunout kvůli selhání hardwaru, přemísťujte soubor do nového umístění podle těchto kroků. Tento postup platí pro všechny systémové databáze s výjimkou master a Resource databází. Následující příklady používají příkazový řádek systému Windows a nástroj sqlcmd utility.

Důležitý

Pokud databázi nejde spustit, pokud je v podezřelém režimu nebo v neobnoveném stavu, můžou soubor přesunout jenom členové pevné role správce systému.

  1. Ověřte, že účet služby pro databázový stroj SQL Serveru má úplná oprávnění k novému umístění souborů. Další informace naleznete v tématu Konfigurace účtů služeb systému Windows a oprávnění. Pokud účet služby Databázový stroj nemůže řídit soubory v novém umístění, instance SQL Serveru se nespustí.

  2. Pokud je spuštěná, zastavte instanci SQL Serveru.

  3. 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. Použití spouštěcího parametru 3608 zabraňuje automatickému spuštění a obnovení jakékoli databáze s výjimkou master databáze. Další informace naleznete v tématu parametry spuštění a TF3608.

    Parametry zadané v těchto příkazech jsou citlivé na velikost písmen. Příkazy selžou, když parametry nejsou zadané, jak je znázorněno.

    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.

  4. Ihned po spuštění služby s příznakem trasování 3608 a /f, spusťte sqlcmd připojení k serveru pro zajištění jednoho dostupného připojení. Pokud například spouštíte sqlcmd místně na stejném serveru jako výchozí instance (MSSQLSERVER) a chcete se připojit pomocí ověřování integrace služby Active Directory, spusťte následující příkaz:

    sqlcmd
    

    Pokud se chcete připojit k pojmenované instanci na místním serveru s ověřováním pomocí integrace služby Active Directory:

    sqlcmd -S localhost\instancename
    

    Další informace o syntaxi sqlcmd najdete v části nástroj sqlcmd.

    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. Další informace o použití nástroje sqlcmd naleznete v tématu sqlcmd – použití nástroje. Jakmile je relace sqlcmd otevřená, spusťte jednou následující příkaz pro přesunutí každého souboru:

    ALTER DATABASE database_name
        MODIFY FILE (NAME = logical_name, FILENAME = 'new_path\os_file_name');
    GO
    
  5. Ukončete nástroj sqlcmd nebo SQL Server Management Studio.

  6. Zastavte instanci SQL Serveru. Například spusťte NET STOP MSSQLSERVER na příkazovém řádku.

  7. Zkopírujte soubor nebo soubory do nového umístění.

  8. Restartujte instanci SQL Serveru. Například spusťte NET START MSSQLSERVER na příkazovém řádku.

  9. 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>');
    
  10. Vzhledem k tomu, že jste v kroku 7 zkopírovali soubory databáze místo jejich přesunutí, můžete nyní bezpečně odstranit nepoužívané databázové soubory z předchozího umístění.

Přesun databáze master

Chcete-li přesunout databázi master, postupujte takto.

  1. Ověřte, že účet služby pro databázový stroj SQL Serveru má úplná oprávnění k novému umístění souborů. Další informace naleznete v tématu Konfigurace účtů služeb systému Windows a oprávnění. Pokud účet služby Databázový stroj nemůže řídit soubory v novém umístění, instance SQL Serveru se nespustí.

  2. V nabídce Start vyhledejte a spusťte SQL Server Configuration Manager. Další informace o očekávaném umístění naleznete v tématu SQL Server Configuration Manager.

  3. V uzlu služby SQL Server klikněte pravým tlačítkem myši na instanci SQL Serveru (například SQL Server (MSSQLSERVER)) a zvolte Vlastnosti.

  4. V dialogovém okně Vlastnosti SQL Serveru (instance_name) vyberte kartu Parametry spuštění.

  5. V poli Existující parametry vyberte parametr -d. V poli Zadejte spouštěcí parametr změňte parametr na novou cestu k souboru masterdat. Změnu uložte výběrem Aktualizovat.

  6. V poli Existující parametry vyberte parametr -l. V poli určete spouštěcí parametr změňte parametr na novou cestu souboru protokolu master. Zvolte aktualizovat pro uložení změny.

    Hodnota parametru datového souboru musí následovat za parametrem -d a hodnota souboru protokolu musí následovat za parametrem -l. Následující příklad ukazuje hodnoty parametrů pro výchozí umístění datového souboru master.

    -dC:\Program Files\Microsoft SQL Server\MSSQL<version>.MSSQLSERVER\MSSQL\DATA\master.mdf
    -lC:\Program Files\Microsoft SQL Server\MSSQL<version>.MSSQLSERVER\MSSQL\DATA\mastlog.ldf
    

    Pokud je plánované přemístění datového souboru masterE:\SQLData, hodnoty parametrů by se změnily následujícím způsobem:

    -dE:\SQLData\master.mdf
    -lE:\SQLData\mastlog.ldf
    
  7. Výběrem OK uložte změny trvale a zavřete dialogové okno vlastnosti SQL Serveru (instance_name).

  8. Zastavte instanci SQL Serveru tak, že kliknete pravým tlačítkem myši na název instance a zvolíte Zastavit.

  9. Zkopírujte soubory master.mdf a mastlog.ldf do nového umístění.

  10. Restartujte instanci SQL Serveru.

  11. Spuštěním následujícího dotazu ověřte změnu souboru pro databázi master.

    SELECT name,
           physical_name AS CurrentLocation,
           state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID('master');
    
  12. V tomto okamžiku by měl SQL Server běžet normálně. Společnost Microsoft však doporučuje také upravit položku registru na HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\instance_ID\Setup, kde instance_ID je jako MSSQL13.MSSQLSERVER. V tomto podregistru změňte hodnotu SQLDataRoot na novou cestu umístění databázových souborů master. Selhání aktualizace registru může způsobit selhání oprav a upgradu.

  13. Vzhledem k tomu, že jste v kroku 9 zkopírovali soubory databáze místo jejich přesunutí, můžete nyní bezpečně odstranit nepoužívané databázové soubory z předchozího umístění.

Přesun databáze prostředků

Umístění databáze Resource je \<drive>:\Program Files\Microsoft SQL Server\MSSQL\<version>.<instance_name>\MSSQL\Binn\. Databázi nelze přesunout.

Pokračování: Po přemístění všech systémových databází

Pokud jste přesunuli všechny systémové databáze na nový disk nebo svazek, případně na jiný server s odlišným písmenem disku, proveďte následující aktualizace.

  • Změňte cestu protokolu agenta SQL Serveru. Pokud tuto cestu neaktualizujete, agent SQL Serveru se nespustí.

  • Změňte výchozí umístění databáze. Vytvoření nové databáze může selhat, pokud písmeno disku a cesta zadané jako výchozí umístění neexistují.

Změňte cestu protokolu agenta SQL Serveru

Pokud jste přesunuli všechny systémové databáze na nový svazek nebo migrovali na jiný server s jiným písmenem jednotky a cesta k souboru protokolu chyb SQL Agenta SQLAGENT.OUT již neexistuje, proveďte následující aktualizace.

  1. V aplikaci SQL Server Management Studio v Průzkumníku objektů , rozbalte položku Agenta SQL Serveru .

  2. Klikněte pravým tlačítkem na protokoly chyb a vyberte Konfigurovat.

  3. V dialogovém okně Konfigurovat protokoly chyb agenta SQL Serveru zadejte nové umístění souboru SQLAGENT.OUT. Výchozí umístění je C:\Program Files\Microsoft SQL Server\MSSQL\<version>.<instance_name>\MSSQL\Log\.

Změna výchozího umístění databáze

  1. Z aplikace SQL Server Management Studio se v Průzkumník objektůpřipojte k požadované instanci SQL Serveru. Klikněte pravým tlačítkem myši na instanci a vyberte Vlastnosti.

  2. V dialogovém okně Vlastnosti serveru vyberte Nastavení databáze.

  3. V části Výchozí umístění databázepřejděte do nového umístění pro data i soubory protokolu.

  4. Zastavením a spuštěním služby SQL Serveru dokončete změnu.

Příklady

A. Přesun databáze tempdb

Následující příklad přesune tempdb data a soubory protokolu do nového umístění v rámci plánovaného přemístění.

Spropitné

Využijte tuto příležitost ke kontrole tempdb souborů, abyste získali optimální velikost a umístění. Další informace naleznete v tématu Optimalizace výkonu databáze tempdb v SYSTÉMU SQL Server.

Vzhledem k tomu, že se při každém spuštění instance SQL Serveru znovu vytvoří tempdb, nemusíte fyzicky přesouvat data a soubory protokolů. Soubory se vytvoří v novém umístění při restartování služby v kroku 4. Dokud nebude služba restartována, tempdb nadále pokračuje v používání dat a souborů protokolů v existujícím umístění.

  1. Určete názvy logických souborů databáze tempdb a jejich aktuální umístění na disku.

    SELECT name,
           physical_name AS CurrentLocation
    FROM sys.master_files
    WHERE database_id = DB_ID(N'tempdb');
    GO
    
  2. Ověřte, že účet služby pro databázový stroj SQL Serveru má úplná oprávnění k novému umístění souborů. Další informace naleznete v tématu Konfigurace účtů služeb systému Windows a oprávnění. Pokud účet služby Databázový stroj nemůže řídit soubory v novém umístění, instance SQL Serveru se nespustí.

  3. Změňte umístění každého souboru pomocí ALTER DATABASE.

    USE master;
    GO
    
    ALTER DATABASE tempdb
        MODIFY FILE (NAME = tempdev, FILENAME = 'E:\SQLData\tempdb.mdf');
    GO
    
    ALTER DATABASE tempdb
        MODIFY FILE (NAME = templog, FILENAME = 'F:\SQLLog\templog.ldf');
    GO
    

    Dokud se služba nerestartuje, tempdb nadále používá data a soubory protokolů v existujícím umístění.

  4. Zastavte a restartujte instanci SQL Serveru.

  5. Ověřte změnu souboru.

    SELECT name,
           physical_name AS CurrentLocation,
           state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID(N'tempdb');
    
  6. Odstraňte nepoužívané tempdb soubory z původního umístění.