Udostępnij za pośrednictwem


Przywracanie bazy danych master w systemie Linux w trybie pojedynczego użytkownika

Dotyczy:programu SQL Server — Linux

W pewnych okolicznościach może być konieczne przywrócenie bazy danych master na wystąpieniu programu SQL Server w trybie pojedynczego użytkownika w systemie Linux. Scenariusze obejmują migrację do nowego wystąpienia lub odzyskiwanie po niespójnościach.

Notatka

Program SQL Server zostanie automatycznie zamknięty po zakończeniu przywracania. To zachowanie jest zgodnie z projektem.

Aby przywrócić bazę danych master, należy uruchomić program SQL Server w trybie pojedynczego użytkownika przy użyciu opcji uruchamiania -m z wiersza polecenia.

Aby uruchomić wystąpienie programu SQL Server w trybie pojedynczego użytkownika w systemie Windows, zobacz Tryb pojedynczego użytkownika dla programu SQL Server.

Warunki wstępne

Uruchamianie programu SQL Server w trybie pojedynczego użytkownika umożliwia każdemu członkowi lokalnej grupy administratorów możliwość nawiązania połączenia z programem SQL Server jako członek roli serwera sysadmin. Aby uzyskać więcej informacji, zobacz Jak połączyć się z serwerem SQL, gdy administratorzy systemu są zablokowani.

Po uruchomieniu wystąpienia programu SQL Server w trybie pojedynczego użytkownika:

  • Tylko jeden użytkownik może nawiązać połączenie z serwerem.
  • Proces CHECKPOINT nie jest wykonywany. Domyślnie jest uruchamiany automatycznie podczas uruchamiania.

Zatrzymaj usługę SQL Server

  1. Następujące polecenie zatrzymuje wystąpienie programu SQL Server, jeśli jest aktualnie uruchomione:

    systemctl stop mssql-server
    

Zmień bieżącego użytkownika na mssql

  1. Program SQL Server w systemie Linux działa w ramach użytkownika mssql, dlatego najpierw musisz przełączyć się na tego użytkownika. Podczas uruchamiania tego polecenia zostanie wyświetlony monit o podanie hasła root.

    su mssql
    

Uruchamianie programu SQL Server w trybie pojedynczego użytkownika

  1. W przypadku używania opcji -m z SQLCMDmożna ograniczyć połączenia z określoną aplikacją kliencką (SQLCMD muszą być zapisane wielkimi literami, jak pokazano).

    /opt/mssql/bin/sqlservr -m"SQLCMD"
    

    W poprzednim przykładzie -m"SQLCMD" ogranicza połączenia do jednego, a to połączenie musi identyfikować się jako program kliencki sqlcmd. Użyj tej opcji podczas uruchamiania programu SQL Server w trybie pojedynczego użytkownika, aby przywrócić bazę danych master.

  2. Podczas uruchamiania programu SQL Server generuje kilka wpisów dziennika. Możesz potwierdzić, że działa w trybie pojedynczego użytkownika, wyszukując następujące wiersze w danych wyjściowych:

    [...]
    2022-05-24 04:26:27.24 Server      Command Line Startup Parameters:
             -m "SQLCMD"
    [...]
    2022-05-24 04:26:28.20 spid8s      Warning ******************
    2022-05-24 04:26:28.21 spid8s      SQL Server started in single-user mode. This an informational message only. No user action is required.
    

Połącz się z wystąpieniem SQL Server

  1. Użyj sqlcmd, aby nawiązać połączenie z instancją SQL Server. Po wykonaniu kroków opisanych w sekcji Uruchamianie programu SQL Server w trybie pojedynczego użytkownika można zobaczyć, że program SQL Server działa w trybie interaktywnym . W związku z tym należy otworzyć nową sesję terminalu, aby uruchomić sqlcmd w następujący sposób.

    /opt/mssql-tools/bin/sqlcmd -S <ServerName> -U sa -P <password>
    

    W poprzednim przykładzie <ServerName> jest nazwą hosta z uruchomionym programem SQL Server, jeśli łączysz się zdalnie. Jeśli łączysz się bezpośrednio na hoście, na którym działa program SQL Server, możesz pominąć ten parametr lub użyć localhost. <StringPassword> to hasło dla konta SA .

Przywracanie bazy danych master

  1. Uruchom następujące polecenia w sqlcmd. Należy pamiętać, że sqlcmd oczekuje GO na końcu skryptu, aby go wykonać.

    USE [master];
    GO
    
    RESTORE DATABASE [master] FROM DISK = N'/var/opt/mssql/data/master.bak'
        WITH FILE = 1,
        MOVE N'master' TO N'/var/opt/mssql/data/master.mdf',
        MOVE N'mastlog' TO N'/var/opt/mssql/data/mastlog.ldf',
        NOUNLOAD, REPLACE, STATS = 5;
    GO
    

    W poprzednim przykładzie ścieżka do pliku kopii zapasowej bazy danych master jest /var/opt/mssql/data/master.bak. Tę wartość należy zastąpić poprawną ścieżką do pliku kopii zapasowej bazy danych master.

  2. Powinny zostać wyświetlone dane wyjściowe podobne do poniższego przykładu, jeśli przywracanie zakończy się pomyślnie.

    Processed 456 pages for database 'master', file 'master' on file 1.
    Processed 5 pages for database 'master', file 'mastlog' on file 1.
    The master database has been successfully restored. Shutting down SQL Server.
    SQL Server is terminating this process.
    

Uruchom ponownie usługę SQL Server

  1. Aby ponownie uruchomić program SQL Server, uruchom następujące polecenie.

    systemctl start mssql-server
    

Uwagi

Po przywróceniu kopii zapasowej bazy danych master, bazy danych użytkowników dodane do instancji po wykonaniu tej kopii nie będą widoczne po przywróceniu master. Pliki powinny nadal istnieć w warstwie magazynu, więc należy ręcznie ponownie dołączyć te pliki bazy danych użytkownika, aby przenieść te bazy danych w tryb online. Aby uzyskać więcej informacji, zobacz Załącz bazę danych.