Przenoszenie systemowych baz danych
Dotyczy:programu SQL Server
W tym artykule opisano sposób przenoszenia systemowych baz danych w programie SQL Server. Przenoszenie systemowych baz danych może być przydatne w następujących sytuacjach:
Odzyskiwanie po awarii. Na przykład baza danych jest w trybie podejrzanym lub została zamknięta z powodu awarii sprzętowej.
Planowana relokacja.
Przeniesienie zaplanowanej konserwacji dysku.
Poniższe procedury dotyczą przenoszenia plików bazy danych w tym samym wystąpieniu programu SQL Server. Aby przenieść bazę danych do innego wystąpienia programu SQL Server lub innego serwera, użyj operacji tworzenia kopii zapasowej i przywracania.
Procedury opisane w tym artykule wymagają logicznej nazwy plików bazy danych. Aby uzyskać nazwę, wykonaj zapytanie o kolumnę name w widoku wykazu sys.master_files.
Ważny
Jeśli przeniesiesz systemową bazę danych, a później ponownie skompilujesz bazę danych master
, musisz ponownie przenieść systemową bazę danych, ponieważ operacja ponownego kompilowania instaluje wszystkie systemowe bazy danych do ich domyślnej lokalizacji.
Przenoszenie systemowych baz danych
Aby przenieść systemowe dane bazy danych lub plik dziennika w ramach planowanej relokacji lub zaplanowanej operacji konserwacji, wykonaj następujące kroki. Obejmuje to bazy danych systemu model
, msdb
i tempdb
.
Ważny
Ta procedura dotyczy wszystkich systemowych baz danych z wyjątkiem baz danych master
i Resource
. Zobacz w dalszej części tego artykułu, aby uzyskać instrukcje dotyczące przenoszenia bazy danych master
. Nie można przenieść bazy danych Resource
.
Zarejestruj istniejącą lokalizację plików bazy danych, które chcesz przenieść, przeglądając widok katalogu sys.master_files.
Sprawdź, czy konto usługi aparatu bazy danych programu SQL Server ma pełne uprawnienia do nowej lokalizacji plików. Aby uzyskać więcej informacji, zobacz Konfiguracja kont usług Windows i uprawnień. Jeśli konto usługi Aparatu Baz Danych nie może zarządzać plikami w nowej lokalizacji, instancja programu SQL Server nie zostanie uruchomiona.
Dla każdego pliku bazy danych do przeniesienia uruchom następującą instrukcję.
ALTER DATABASE database_name MODIFY FILE (NAME = logical_name, FILENAME = 'new_path\os_file_name');
Do momentu ponownego uruchomienia usługi baza danych będzie nadal używać plików danych i dzienników w istniejącej lokalizacji.
Zatrzymaj wystąpienie programu SQL Server w celu przeprowadzenia konserwacji. Aby uzyskać więcej informacji, zobacz uruchamianie, zatrzymywanie, wstrzymywanie, wznawianie i ponowne uruchamianie usług programu SQL Server.
Skopiuj plik bazy danych lub pliki do nowej lokalizacji. Ten krok nie jest konieczny dla
tempdb
systemowej bazy danych; te pliki są tworzone automatycznie w nowej lokalizacji.Uruchom ponownie wystąpienie programu SQL Server lub serwera. Aby uzyskać więcej informacji, zobacz uruchamianie, zatrzymywanie, wstrzymywanie, wznawianie i ponowne uruchamianie usług programu SQL Server.
Sprawdź zmianę pliku, uruchamiając następujące zapytanie. Systemowe bazy danych powinny zgłaszać nowe lokalizacje plików fizycznych.
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID(N'<database_name>');
Ponieważ w kroku 5 skopiowano pliki bazy danych zamiast ich przenoszenia, teraz można bezpiecznie usunąć nieużywane pliki bazy danych z poprzedniej lokalizacji.
Kontynuacja: po przeniesieniu bazy danych systemu msdb
Jeśli baza danych msdb
zostanie przeniesiona i skonfigurowana zostanie Poczta bazy danych , wykonaj następujące dodatkowe kroki.
Sprawdź, czy usługa Service Broker jest włączona dla bazy danych
msdb
, uruchamiając następujące zapytanie.SELECT is_broker_enabled FROM sys.databases WHERE name = N'msdb';
Jeśli usługa Service Broker nie jest włączona dla
msdb
, musi zostać ponownie włączona, aby poczta bazy danych działała. Aby uzyskać więcej informacji, zobacz ALTER DATABASE ... USTAW ENABLE_BROKER.ALTER DATABASE msdb SET ENABLE_BROKER WITH ROLLBACK IMMEDIATE;
Upewnij się, że wartość
is_broker_enabled
wynosi teraz 1.Sprawdź, czy poczta bazy danych działa, wysyłając testową wiadomość e-mail.
Procedura odzyskiwania po awarii
Jeśli plik musi zostać przeniesiony z powodu awarii sprzętowej, wykonaj następujące kroki, aby przenieść plik do nowej lokalizacji. Ta procedura dotyczy wszystkich systemowych baz danych z wyjątkiem baz danych master
i Resource
. W poniższych przykładach użyto wiersza polecenia systemu Windows i sqlcmd Utility.
Ważny
Jeśli nie można uruchomić bazy danych, jeśli jest w trybie podejrzanym lub w stanie nieodzyskanym, tylko członkowie stałej roli sysadmin mogą przenieść plik.
Sprawdź, czy konto usługi silnika bazy danych programu SQL Server ma pełne uprawnienia do nowej lokalizacji plików. Aby uzyskać więcej informacji, zobacz Konfigurowanie kont serwisowych Windows i uprawnień. Jeśli konto usługi silnika bazy danych nie może kontrolować plików w nowej lokalizacji, wystąpienie programu SQL Server nie zostanie uruchomione.
Zatrzymaj wystąpienie programu SQL Server, jeśli jest ono uruchomione.
Uruchom wystąpienie programu SQL Server w
master
tylko w trybie odzyskiwania, wpisując jedno z następujących poleceń w wierszu polecenia. Użycie parametru uruchamiania 3608 uniemożliwia programowi SQL Server automatyczne uruchamianie i odzyskiwanie dowolnej bazy danych z wyjątkiem bazy danychmaster
. Aby uzyskać więcej informacji, zobacz parametry uruchamiania i TF3608.Parametry określone w tych poleceniach rozróżniają wielkość liter. Polecenia kończą się niepowodzeniem, gdy parametry nie są określone, jak pokazano.
W przypadku domyślnego wystąpienia (MSSQLSERVER) uruchom następujące polecenie:
NET START MSSQLSERVER /f /T3608
W przypadku nazwanego wystąpienia uruchom następujące polecenie:
NET START MSSQL$instancename /f /T3608
Aby uzyskać więcej informacji, zobacz uruchamianie, zatrzymywanie, wstrzymywanie, wznawianie i ponowne uruchamianie usług programu SQL Server.
Natychmiast po uruchomieniu usługi z flagą śledzenia 3608 i
/f
uruchom sqlcmd połączenie z serwerem, aby uzyskać dostęp do pojedynczego połączenia. Na przykład podczas wykonywania sqlcmd lokalnie na tym samym serwerze co domyślne wystąpienie (MSSQLSERVER) i aby nawiązać połączenie z uwierzytelnianiem zintegrowanym z usługą Active Directory, uruchom następujące polecenie:sqlcmd
Aby nawiązać połączenie z nazwanym wystąpieniem na serwerze lokalnym, z wykorzystaniem uwierzytelnienia zintegrowanego z Active Directory:
sqlcmd -S localhost\instancename
Aby uzyskać więcej informacji na temat składni sqlcmd, zobacz sqlcmd utility.
Dla każdego pliku do przeniesienia użyj sqlcmd poleceń lub programu SQL Server Management Studio, aby uruchomić następującą instrukcję. Aby uzyskać więcej informacji na temat korzystania z narzędzia sqlcmd, zobacz sqlcmd — użyj narzędzia. Po otwarciu sesji sqlcmd uruchom następującą instrukcję raz dla każdego pliku, który ma zostać przeniesiony:
ALTER DATABASE database_name MODIFY FILE (NAME = logical_name, FILENAME = 'new_path\os_file_name'); GO
Zamknij narzędzie sqlcmd lub SQL Server Management Studio.
Zatrzymaj wystąpienie programu SQL Server. Na przykład uruchom
NET STOP MSSQLSERVER
w wierszu polecenia.Skopiuj plik lub pliki do nowej lokalizacji.
Uruchom ponownie wystąpienie programu SQL Server. Na przykład uruchom
NET START MSSQLSERVER
w wierszu polecenia.Sprawdź zmianę pliku, uruchamiając następujące zapytanie.
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID(N'<database_name>');
Ponieważ w kroku 7 skopiowano pliki bazy danych zamiast ich przenoszenia, teraz można bezpiecznie usunąć nieużywane pliki bazy danych z poprzedniej lokalizacji.
Przenoszenie bazy danych master
Aby przenieść bazę danych master
, wykonaj następujące kroki.
Sprawdź, czy konto usługi silnika bazy danych programu SQL Server ma pełne uprawnienia do nowej lokalizacji plików. Aby uzyskać więcej informacji, zobacz Konfiguracja kont usług Windows i uprawnień. Jeśli konto usługi silnika bazy danych nie może kontrolować plików w nowej lokalizacji, nie zostanie uruchomione wystąpienie programu SQL Server.
Z menu Start znajdź i uruchom program SQL Server Configuration Manager. Aby uzyskać więcej informacji na temat oczekiwanej lokalizacji, zobacz SQL Server Configuration Manager.
W węźle SQL Server Services kliknij prawym przyciskiem myszy instancję programu SQL Server (na przykład SQL Server (MSSQLSERVER)) i wybierz pozycję Właściwości.
W oknie dialogowym Właściwości SQL Server (instance_name) wybierz kartę Parametry Uruchamiania .
W polu Istniejące parametry wybierz parametr
-d
. W polu Określ parametr uruchamiania, zmień ten parametr na nową ścieżkę do pliku danychmaster
. Wybierz pozycję Update, aby zapisać zmianę.W polu Istniejące parametry wybierz parametr
-l
. W polu Określ parametr uruchamiania zmień parametr na nową ścieżkę plikudziennikamaster
. Wybierz pozycję Update, aby zapisać zmianę.Wartość parametru dla pliku danych musi być zgodna z parametrem
-d
, a wartość pliku dziennika musi być zgodna z parametrem-l
. W poniższym przykładzie przedstawiono wartości parametrów dla domyślnej lokalizacji pliku danychmaster
.-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
Jeśli planowana relokacja pliku danych
master
jestE:\SQLData
, wartości parametrów zostaną zmienione w następujący sposób:-dE:\SQLData\master.mdf -lE:\SQLData\mastlog.ldf
Wybierz pozycję OK, aby trwale zapisać zmiany i zamknąć okno dialogowe właściwości programu SQL Server (instance_name).
Zatrzymaj wystąpienie programu SQL Server, klikając prawym przyciskiem myszy nazwę wystąpienia i wybierając polecenie Zatrzymaj.
Skopiuj pliki
master.mdf
imastlog.ldf
do nowej lokalizacji.Uruchom ponownie wystąpienie programu SQL Server.
Sprawdź zmianę pliku dla bazy danych
master
, uruchamiając następujące zapytanie.SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID('master');
W tym momencie program SQL Server powinien działać normalnie. Firma Microsoft zaleca jednak dostosowanie także wpisu rejestru w
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\instance_ID\Setup
, gdzie identyfikator_instancji jest jakMSSQL13.MSSQLSERVER
. W tym hive zmień wartośćSQLDataRoot
na nową ścieżkę nowej lokalizacji plików bazy danychmaster
. Niepowodzenie aktualizacji rejestru może spowodować niepowodzenie stosowania poprawek i uaktualniania.Ponieważ w kroku 9 skopiowano pliki bazy danych zamiast ich przenoszenia, teraz można bezpiecznie usunąć nieużywane pliki bazy danych z poprzedniej lokalizacji.
Przenoszenie bazy danych zasobów
Lokalizacja bazy danych Resource
jest \<drive>:\Program Files\Microsoft SQL Server\MSSQL\<version>.<instance_name>\MSSQL\Binn\
. Nie można przenieść bazy danych.
Kontynuacja: po przeniesieniu wszystkich systemowych baz danych
Jeśli wszystkie systemowe bazy danych zostały przeniesione do nowego dysku lub woluminu albo na inny serwer z inną literą dysku, wprowadź następujące aktualizacje.
Zmień ścieżkę dziennika agenta programu SQL Server. Jeśli ta ścieżka nie zostanie zaktualizowana, uruchomienie agenta programu SQL Server nie powiedzie się.
Zmień domyślną lokalizację bazy danych. Utworzenie nowej bazy danych może zakończyć się niepowodzeniem, jeśli litera dysku i ścieżka określona jako lokalizacja domyślna nie istnieją.
Zmienianie ścieżki dziennika agenta programu SQL Server
Jeśli wszystkie systemowe bazy danych zostały przeniesione do nowego woluminu lub zostały zmigrowane na inny serwer z inną literą dysku, a ścieżka pliku dziennika błędów programu SQL Agent SQLAGENT.OUT
już nie istnieje, wprowadź następujące aktualizacje.
W SQL Server Management Studio, w eksploratorze obiektów , rozwiń węzeł SQL Server Agent.
Kliknij prawym przyciskiem myszy dzienniki błędów i wybierz pozycję Konfiguruj.
W oknie dialogowym Konfigurowanie dzienników błędów SQL Server Agent określ nową lokalizację pliku SQLAGENT.OUT. Domyślna lokalizacja to
C:\Program Files\Microsoft SQL Server\MSSQL\<version>.<instance_name>\MSSQL\Log\
.
Zmienianie domyślnej lokalizacji bazy danych
W programie SQL Server Management Studio w eksploratorze obiektów nawiąż połączenie z żądanym wystąpieniem programu SQL Server. Kliknij prawym przyciskiem myszy wystąpienie i wybierz właściwości .
W oknie dialogowym Właściwości serwera wybierz pozycję Ustawienia bazy danych.
W obszarze Domyślne lokalizacje bazy danychprzejdź do nowej lokalizacji zarówno dla plików danych, jak i plików dziennika.
Zatrzymaj i uruchom usługę SQL Server, aby ukończyć zmianę.
Przykłady
A. Przenoszenie bazy danych tempdb
Poniższy przykład przenosi dane i pliki dziennika tempdb
do nowej lokalizacji w ramach planowanej relokacji.
Napiwek
Skorzystaj z tej okazji, aby przejrzeć pliki tempdb
pod kątem optymalnego rozmiaru i rozmieszczenia. Aby uzyskać więcej informacji, zobacz Optymalizowanie wydajności bazy danych tempdb w programie SQL Server.
Ponieważ tempdb
jest ponownie tworzone przy każdym uruchomieniu wystąpienia programu SQL Server, nie trzeba fizycznie przenosić danych i plików dziennika. Pliki są tworzone w nowej lokalizacji po ponownym uruchomieniu usługi w kroku 4. Do momentu ponownego uruchomienia usługi tempdb
nadal używa plików danych i dzienników w istniejącej lokalizacji.
Określ nazwy plików logicznych bazy danych
tempdb
i ich bieżącą lokalizację na dysku.SELECT name, physical_name AS CurrentLocation FROM sys.master_files WHERE database_id = DB_ID(N'tempdb'); GO
Sprawdź, czy konto usługi silnika bazy danych SQL Server ma pełne uprawnienia do nowej lokalizacji plików. Aby uzyskać więcej informacji, zobacz Skonfiguruj konta usług systemu Windows i uprawnienia. Jeśli konto usługi silnika bazy danych nie może kontrolować plików w nowej lokalizacji, wystąpienie programu SQL Server nie uruchomi się.
Zmień lokalizację każdego pliku przy użyciu
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
Do momentu ponownego uruchomienia usługi
tempdb
nadal będzie używać plików danych i dzienników w istniejącej lokalizacji.Zatrzymaj i uruchom ponownie wystąpienie programu SQL Server.
Sprawdź zmianę pliku.
SELECT name, physical_name AS CurrentLocation, state_desc FROM sys.master_files WHERE database_id = DB_ID(N'tempdb');
Usuń nieużywane pliki
tempdb
z ich oryginalnej lokalizacji.
Powiązana zawartość
- bazy danych zasobów
- baza danych tempdb
- bazy danych master
- bazy danych msdb
- model bazy danych
- Przenoszenie baz danych użytkowników
- Przenieś pliki bazy danych
- uruchamianie, zatrzymywanie, wstrzymywanie, wznawianie i ponowne uruchamianie usług programu SQL Server
- ALTER DATABASE (Transact-SQL)
- Odbudowywanie systemowych baz danych