Udostępnij za pośrednictwem


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, msdbi 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.

  1. Zarejestruj istniejącą lokalizację plików bazy danych, które chcesz przenieść, przeglądając widok katalogu sys.master_files.

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

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

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

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

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

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

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

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

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

  2. Zatrzymaj wystąpienie programu SQL Server, jeśli jest ono uruchomione.

  3. Uruchom wystąpienie programu SQL Server w mastertylko 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 danych master. 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.

  4. Natychmiast po uruchomieniu usługi z flagą śledzenia 3608 i /furuchom 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
    
  5. Zamknij narzędzie sqlcmd lub SQL Server Management Studio.

  6. Zatrzymaj wystąpienie programu SQL Server. Na przykład uruchom NET STOP MSSQLSERVER w wierszu polecenia.

  7. Skopiuj plik lub pliki do nowej lokalizacji.

  8. Uruchom ponownie wystąpienie programu SQL Server. Na przykład uruchom NET START MSSQLSERVER w wierszu polecenia.

  9. 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>');
    
  10. 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.

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

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

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

  4. W oknie dialogowym Właściwości SQL Server (instance_name) wybierz kartę Parametry Uruchamiania .

  5. W polu Istniejące parametry wybierz parametr -d. W polu Określ parametr uruchamiania, zmień ten parametr na nową ścieżkę do pliku danych master. Wybierz pozycję Update, aby zapisać zmianę.

  6. W polu Istniejące parametry wybierz parametr -l. W polu Określ parametr uruchamiania zmień parametr na nową ścieżkę plikudziennika master. 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 danych 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
    

    Jeśli planowana relokacja pliku danych master jest E:\SQLData, wartości parametrów zostaną zmienione w następujący sposób:

    -dE:\SQLData\master.mdf
    -lE:\SQLData\mastlog.ldf
    
  7. Wybierz pozycję OK, aby trwale zapisać zmiany i zamknąć okno dialogowe właściwości programu SQL Server (instance_name).

  8. Zatrzymaj wystąpienie programu SQL Server, klikając prawym przyciskiem myszy nazwę wystąpienia i wybierając polecenie Zatrzymaj.

  9. Skopiuj pliki master.mdf i mastlog.ldf do nowej lokalizacji.

  10. Uruchom ponownie wystąpienie programu SQL Server.

  11. 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');
    
  12. 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 jak MSSQL13.MSSQLSERVER. W tym hive zmień wartość SQLDataRoot na nową ścieżkę nowej lokalizacji plików bazy danych master. Niepowodzenie aktualizacji rejestru może spowodować niepowodzenie stosowania poprawek i uaktualniania.

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

  1. W SQL Server Management Studio, w eksploratorze obiektów , rozwiń węzeł SQL Server Agent.

  2. Kliknij prawym przyciskiem myszy dzienniki błędów i wybierz pozycję Konfiguruj.

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

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

  2. W oknie dialogowym Właściwości serwera wybierz pozycję Ustawienia bazy danych.

  3. W obszarze Domyślne lokalizacje bazy danychprzejdź do nowej lokalizacji zarówno dla plików danych, jak i plików dziennika.

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

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

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

  4. Zatrzymaj i uruchom ponownie wystąpienie programu SQL Server.

  5. Sprawdź zmianę pliku.

    SELECT name,
           physical_name AS CurrentLocation,
           state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID(N'tempdb');
    
  6. Usuń nieużywane pliki tempdb z ich oryginalnej lokalizacji.