Tento článek popisuje, jak změnit umístění datových souborů a souborů protokolů databáze serveru Microsoft SQL Server 2005, SQL Server 2000 nebo SQL Server 7.0.
Další informace o přesunutí systémové databáze na serveru SQL Server 2005 naleznete na webu SQL Server Books Online (Online příručky pro SQL Server) v tématu Moving System Databases (Přesunování systémových databází). Toto téma naleznete na následujícím webu MSDN (Microsoft Developer Network):
Souhrn
Postup pro změnu umístění některých systémových databází serveru SQL Server není shodný s postupem pro změnu umístění uživatelských databází. Tyto zvláštní případy jsou popsány samostatně.
Poznámka: Systémové databáze serveru SQL Server 7.0 nejsou kompatibilní se serverem SQL Server 2000. Nepřipojujte databáze master, model, msdb ani distribuční databáze serveru SQL Server 7.0 k serveru SQL Server 2000. Používáte-li SQL Server 2005, můžete připojovat databáze serveru SQL Server 2005 pouze k instanci. Ve všech příkladech v tomto článku se předpokládá, že je SQL Server nainstalovaný ve složce D:\Mssql7. V příkladech se dále předpokládá, že jsou datové soubory a soubory protokolů umístěny ve výchozí složce D:\Mssql7\Data. V příkladech jsou datové soubory a soubory protokolů všech databází přesouvány do složky E:\Sqldata.
Požadavky
-
Vytvořte aktuální zálohu všech databází, především databáze master, z jejich aktuálního umístění.
-
Musíte mít oprávnění správce (SA).
-
Je třeba znát názvy a aktuální umístění všech datových souborů a souborů protokolů databáze.
Poznámka: Název a aktuální umístění všech souborů používaných určitou databází můžete zjistit pomocí uložené procedury sp_helpfile:use <nazev_databaze>
go
sp_helpfile
go -
K přesouvané databázi byste měli mít výhradní přístup. Dojde-li při přesouvání k problémům a nebudete mít přístup k přesunuté databázi nebo nebudete moci spustit SQL Server, zkontrolujte protokol chyb serveru SQL Server, další informace o chybách, ke kterým došlo, také naleznete v dokumentaci SQL Server Books Online.
Přesun uživatelských databází
V následujícím příkladu provedeme přesun databáze s názvem mydb. Tato databáze obsahuje jeden datový soubor (Mydb.mdf) a jeden soubor protokolu (Mydblog.ldf). Má-li přesouvaná databáze více datových souborů nebo souborů protokolů, uveďte je všechny v seznamu odděleném čárkou v uložené proceduře sp_attach_db. Uložená procedura sp_detach_db se nemění, ať je počet souborů v databázi jakýkoli, protože tato procedura neobsahuje jejich seznam.
-
Zadáním následujících příkazů odpojte databázi:
use master
go
sp_detach_db 'mydb'
go -
Dále zkopírujte datové soubory a soubory protokolů z aktuálního umístění (D:\Mssql7\Data) do nového umístění (E:\Sqldata).
-
Znovu připojte databázi. Následujícím postupem použijte soubory v novém umístění:
use master
go
sp_attach_db 'mydb','E:\Sqldata\mydbdata.mdf','E:\Sqldata\mydblog.ldf'
goZměnu umístění souborů lze ověřit pomocí uložené procedury sp_helpfile:
use mydb
go
sp_helpfile
goHodnoty ve sloupci filename by měly obsahovat nové umístění.
Poznámka: Článek 922804 znalostní báze Microsoft Knowledge Base popisuje problematiku databází serveru SQL Server 2005 v úložišti připojeném k síti.
Další informace naleznete v následujícím článku znalostní báze Microsoft Knowledge Base:
922804 OPRAVA: Po odpojení databáze serveru Microsoft SQL Server 2005, která se nachází v úložišti připojeném k síti, nelze databázi serveru SQL Server opět připojit (Tento článek může obsahovat odkazy na anglický obsah (dosud nepřeložený).)Zvažte tento problém. Dále zvažte oprávnění použitá na databázi odpojenou od serveru SQL Server 2005. Další informace najdete v tématu „Securing Data and Log Files“ (Zabezpečení datových souborů a souborů protokolů) dokumentace SQL Server Books Online v části o odpojení a připojení databáze. Tento článek naleznete na následujícím webu MSDN (Microsoft Developer Network):
Přesun vzorových databází
Chcete-li přesunout vzorovou databázi pubs a Northwind na serveru SQL Server 2000 nebo SQL Server 7.0 nebo vzorovou databázi AdventureWorks a AdventureWorksDW na serveru SQL Server 2005, postupujte stejně jako při přesunu uživatelských databází.
Přesun databáze model
SQL Server 7.0
-
Ujistěte se, že neběží služba Agent serveru SQL Server.
-
Použijte stejný postup jako při přesouvání uživatelských databází.
SQL Server 2005 a SQL Server 2000
Na serveru SQL Server 2005 a SQL Server 2000 nelze k odpojení systémových databází použít uloženou proceduru sp_detach_db. Pokusíte-li se spustit příkaz sp_detach_db 'model', zobrazí se tato chybová zpráva:
Server: Msg 7940, Level 16, State 1, Line 1
System databases master, model, msdb, and tempdb cannot be detached. (Systémové databáze master, model, msdb a tempdb nelze odpojit.)
Chcete-li přesunout databázi model, musíte SQL Server spustit s možností -c a -m a s příznakem trasování 3608. Příznak trasování 3608 serveru SQL Server brání v obnovení všech databází kromě databáze master.
Poznámka: Po provedení této akce nebudete mít přístup k žádné uživatelské databázi. Při použití tohoto příznaku trasování neprovádějte kromě kroků popsaných dále žádné jiné operace. Chcete-li přidat příznak trasování 3608 jako spouštěcí parametr serveru SQL Server, použijte následující postup:
-
V programu SQL Server Enterprise Manager klepněte pravým tlačítkem myši na název serveru a potom klepněte na příkaz Properties (Vlastnosti).
-
Na kartě General (Obecné) klepněte na položku Startup Parameters (Spouštěcí parametry).
-
Přidejte následující nový parametr:
-c -m -T3608
Používáte-li SQL Server 2005, můžete ke změně spouštěcích parametrů služby SQL Server použít program SQL Server Configuration Manager. Další informace o tom, jak změnit parametry pro spuštění, naleznete na následujícím webu MSDN (Microsoft Developer Network):
http://msdn2.microsoft.com/en-us/library/ms190737.aspxPo přidání možnosti -c a -m a příznaku trasování 3608 postupujte takto:
-
Zastavte a restartujte službu SQL Server.
-
Zadáním následujících příkazů odpojte databázi model:
use master
go
sp_detach_db 'model'
go -
Přesuňte soubory Model.mdf a Modellog.ldf ze složky D:\Mssql7\Data do složky E:\Sqldata.
-
Zadáním následujících příkazů znovu připojte databázi model:
use master
go
sp_attach_db 'model','E:\Sqldata\model.mdf','E:\Sqldata\modellog.ldf'
go -
Pomocí programu SQL Server Enterprise Manager nebo programu SQL Server Configuration Manager odeberte parametry -c -m -T3608 z parametrů pro spuštění.
-
Zastavte a restartujte službu SQL Server. Změnu umístění souborů lze ověřit pomocí uložené procedury sp_helpfile. Zadejte například následující příkaz:
use model
go
sp_helpfile
go
Přesun databáze MSDB
SQL Server 7.0
Poznámka: Používáte-li tento postup k přesunu databáze msdb i model, je třeba nejprve znovu připojit databázi model a pak databázi msdb. Postupujte takto:
-
Ujistěte se, že neběží služba Agent serveru SQL Server.
-
Použijte stejný postup jako při přesouvání uživatelských databází.
Poznámka: Pokud právě běží služba Agent serveru SQL Server, uložená procedura sp_detach_db neproběhne úspěšně a zobrazí se následující zpráva:
Server: Msg 3702, Level 16, State 1, Line 0
Cannot drop the database 'msdb' because it is currently in use. (Nelze uvolnit databázi 'msdb', protože je používána.)
DBCC execution completed. (Provádění funkce DBCC bylo dokončeno.) If DBCC printed error messages, contact your system administrator. (Pokud funkce DBCC zobrazila chybové zprávy, obraťte se na správce systému.)
SQL Server 2005 a SQL Server 2000
Chcete-li přesunout databázi MSDB, je třeba spustit SQL Server s možností -c a -m a s příznakem trasování 3608. Příznak trasování 3608 serveru SQL Server brání v obnovení všech databází kromě databáze master. Chcete-li přidat možnost -c a -m a příznak trasování, postupujte podle pokynů v části Přesun databáze model. Po přidání možnosti -c a -m a příznaku trasování 3608 postupujte takto:
-
Zastavte a restartujte službu SQL Server.
-
Ujistěte se, že neběží služba Agent serveru SQL Server.
-
Zadáním následujících příkazů odpojte databázi msdb:
use master
go
sp_detach_db 'msdb'
go -
Přesuňte soubory Msdbdata.mdf a Msdblog.ldf z aktuálního umístění (D:\Mssql8\Data) do nového umístění (E:\Mssql8\Data).
-
Z pole parametrů pro spuštění v programu Enterprise Manager odeberte parametry -c -m -T3608.
-
Zastavte a restartujte službu SQL Server.
Poznámka: Pokud se pokusíte znovu připojit databázi msdb spuštěním serveru SQL Server s možností -c a -m a s příznakem trasování 3608, může se zobrazit následující chybová zpráva:Server: Msg 615, Level 21, State 1, Line 1
Could not find database table ID 3, name 'model'. (Nelze najít tabulku databáze ID 3 s názvem 'model'.) -
Zadáním následujících příkazů znovu připojte databázi msdb:
use master
go
sp_attach_db 'msdb','E:\Mssql8\Data\msdbdata.mdf','E:\Mssql8\Data\msdblog.ldf'
go
Poznámka: Použijete-li tento postup společně s přesunutím databáze model, snažíte se odpojit databázi msdb a také odpojit databázi model. Při tomto postupu je třeba nejprve znovu připojit databázi model a potom databázi msdb. Připojíte-li znovu databázi msdb jako první, zobrazí se při pokusu o opětovné připojení databáze model následující chybová zpráva:
Msg 0, Level 11, State 0, Line 0
A severe error occurred on the current command. (V aktuálním příkazu došlo k vážné chybě.) The results, if any, should be discarded. (Výsledky, pokud existují, by měly být zahozeny.)
V tomto případě je třeba odpojit databázi msdb, připojit databázi model a potom znovu připojit databázi msdb.
Po přesunu databáze msdb se může zobrazit následující chybová zpráva:
Chyba 229: EXECUTE permission denied on object 'ObjectName', database 'master', owner 'dbo'. (Oprávnění ke spuštění bylo odepřeno pro objekt 'název_objektu', databázi 'master', vlastníka 'dbo'.)
K tomuto problému dochází při přerušení řetězce vlastnictví. Vlastník databáze msdb a databáze master není stejný. V tomto případě došlo ke změně vlastnictví databáze msdb. Chcete-li vyřešit tento problém, spusťte následující příkazy v jazyce Transact-SQL. K tomu můžete použít nástroj příkazového řádku Osql.exe (SQL Server 7.0 a SQL Server 2000) nebo Sqlcmd.exe (SQL Server 2005):
USE MSDB
Go
EXEC sp_changedbowner 'sa'
Go
Další informace naleznete v následujícím článku znalostní báze Microsoft Knowledge Base:
272424 Kontrola řetězce vlastnictví objektu napříč databázemi závisí na přihlašovacím jménu mapovaném k vlastníkům objektu (Tento článek může obsahovat odkazy na anglický obsah (dosud nepřeložený).)
Přesunutí hlavní databáze (master)
-
V programu SQL Server Enterprise Manager změňte cestu k datovým souborům a souborům protokolů databáze master.
Poznámka: Pomocí tohoto programu můžete také změnit umístění protokolu chyb. -
V programu Enterprise Manager klepněte pravým tlačítkem myši na daný SQL Server a potom klepněte na příkaz Properties (Vlastnosti).
-
Klepnutím na možnost Startup Parameters (Parametry pro spuštění) zobrazte následující záznamy: -dD:\MSSQL7\data\master.mdf -eD:\MSSQL7\log\ErrorLog -lD:\MSSQL7\data\mastlog.ldf -d je úplná cesta datového souboru databáze master.
-e je úplná cesta k protokolu chyb.
-l je úplná cesta k souboru protokolu hlavní databáze. -
Změňte tyto hodnoty podle následujících pokynů:
-
Odeberte aktuální záznamy pro soubory Master.mdf a Mastlog.ldf.
-
Přidejte nové záznamy zadávající nové umístění:
-dE:\SQLDATA\master.mdf
-lE:\SQLDATA\mastlog.ldf
-
-
Zastavte službu SQL Server.
-
Zkopírujte soubory Master.mdf a Mastlog.ldf do nového umístění (E:\Sqldata).
-
Restartujte službu SQL Server.
Poznámka: Používáte-li SQL Server 2005, použijte ke změně cesty datových souborů a souborů protokolů databáze master program SQL Server Configuration Manager.
Přesun databáze tempdb
Soubory databáze tempdb můžete přesunout pomocí příkazu ALTER DATABASE.
-
Určete logické názvy souborů databáze tempdb pomocí uložené procedury sp_helpfile následujícím způsobem:
use tempdb
go
sp_helpfile
goLogické názvy souborů jsou obsaženy ve sloupci name (název). Tento příklad obsahuje výchozí názvy souborů tempdev a templog.
-
Pomocí příkazu ALTER DATABASE zadejte logický název souboru následujícím způsobem:
use master
go
Alter database tempdb modify file (name = tempdev, filename = 'E:\Sqldata\tempdb.mdf')
go
Alter database tempdb modify file (name = templog, filename = 'E:\Sqldata\templog.ldf')
goMěla by se zobrazit následující zpráva potvrzující změnu:
Zpráva 1
File 'tempdev' modified in sysaltfiles. (Soubor tempdev byl změněn ve složce sysaltfiles.) Delete old file after restarting SQL Server. (Po restartování serveru SQL Server odstraňte starý soubor.)
Zpráva 2
File 'templog' modified in sysaltfiles. (Soubor templog byl změněn ve složce sysaltfiles.) Delete old file after restarting SQL Server. (Po restartování serveru SQL Server odstraňte starý soubor.)
-
Pomocí procedury sp_helpfile v databázi tempdb nelze tyto změny potvrdit, dokud nerestartujete službu SQL Server.
-
Zastavte a restartujte službu SQL Server.
Přesunutí hlavní databáze a databáze prostředků
Další informace o přesunutí hlavní databáze a databáze prostředků naleznete na následujícím webu MSDN (Microsoft Developer Network):
Další informace
Další informace naleznete v následujících článcích znalostní báze Microsoft Knowledge Base:
912397 Změníte-li spouštěcí parametr pro instanci serveru SQL Server 2000 nebo SQL Server 2005, která je v clusteru, na neplatnou hodnotu, nelze spustit službu SQL Server (Tento článek může obsahovat odkazy na anglický obsah (dosud nepřeložený).)
274188 Téma o řešení potíží s opuštěnými uživateli v dokumentaci Books Online je neúplné (Tento článek může obsahovat odkazy na anglický obsah (dosud nepřeložený).)
246133 Přenášení přihlašovacích jmen a hesel mezi instancemi serveru SQL Server (Tento článek může obsahovat odkazy na anglický obsah (dosud nepřeložený).)
168001 PRB: Chyby uživatelských přihlášení anebo oprávnění po obnovení zálohy
Další informace naleznete v následujících publikacích:
Microsoft Corporation
Microsoft SQL Server 7.0 System Administration Training Kit
Microsoft Press, 2001
Microsoft Corporation
MCSE Training Kit: Microsoft SQL Server 2000 System Administration
Microsoft Press, 2001
Microsoft Corporation
Microsoft SQL Server 2000 Resource Kit
Microsoft Press, 2001