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
, msdb
a 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.
Poznamenejte si existující umístění souborů databáze, které chcete přesunout, a to kontrolou zobrazení katalogu sys.master_files.
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í.
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í.
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.
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í.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.
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>');
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.
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
msdb
povolená, 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.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.
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í.
Pokud je spuštěná, zastavte instanci SQL Serveru.
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ýjimkoumaster
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.
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
Ukončete nástroj sqlcmd nebo SQL Server Management Studio.
Zastavte instanci SQL Serveru. Například spusťte
NET STOP MSSQLSERVER
na příkazovém řádku.Zkopírujte soubor nebo soubory do nového umístění.
Restartujte instanci SQL Serveru. Například spusťte
NET START MSSQLSERVER
na příkazovém řádku.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>');
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.
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í.
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.
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.
V dialogovém okně Vlastnosti SQL Serveru (instance_name) vyberte kartu Parametry spuštění.
V poli Existující parametry vyberte parametr
-d
. V poli Zadejte spouštěcí parametr změňte parametr na novou cestu k souborumaster
dat. Změnu uložte výběrem Aktualizovat.V poli Existující parametry vyberte parametr
-l
. V poli určete spouštěcí parametr změňte parametr na novou cestu souboru protokolumaster
. 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 souborumaster
.-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
master
E:\SQLData
, hodnoty parametrů by se změnily následujícím způsobem:-dE:\SQLData\master.mdf -lE:\SQLData\mastlog.ldf
Výběrem OK uložte změny trvale a zavřete dialogové okno vlastnosti SQL Serveru (instance_name).
Zastavte instanci SQL Serveru tak, že kliknete pravým tlačítkem myši na název instance a zvolíte Zastavit.
Zkopírujte soubory
master.mdf
amastlog.ldf
do nového umístění.Restartujte instanci SQL Serveru.
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');
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 jakoMSSQL13.MSSQLSERVER
. V tomto podregistru změňte hodnotuSQLDataRoot
na novou cestu umístění databázových souborůmaster
. Selhání aktualizace registru může způsobit selhání oprav a upgradu.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.
V aplikaci SQL Server Management Studio v Průzkumníku objektů , rozbalte položku Agenta SQL Serveru .
Klikněte pravým tlačítkem na protokoly chyb a vyberte Konfigurovat.
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
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.
V dialogovém okně Vlastnosti serveru vyberte Nastavení databáze.
V části Výchozí umístění databázepřejděte do nového umístění pro data i soubory protokolu.
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í.
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
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í.
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í.Zastavte a restartujte instanci SQL Serveru.
Ověřte změnu souboru.
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID(N'tempdb');
Odstraňte nepoužívané
tempdb
soubory z původního umístění.