Поделиться через


Восстановление базы данных master в Linux в однопользовательском режиме

Область применения: SQL Server — Linux

В определенных обстоятельствах может потребоваться восстановить master базу данных в экземпляре SQL Server в однопользовательском режиме в Linux. Такие сценарии включают миграцию в новый экземпляр или восстановление после устранения несоответствий.

Примечание.

SQL Server автоматически завершит работу после завершения восстановления. Такое поведение предусмотрено программой.

Чтобы восстановить master базу данных, необходимо запустить SQL Server в однопользовательском режиме с помощью параметра -m запуска из командной строки.

Для запуска экземпляра SQL Server в однопользовательском режиме на Windows см. Однопользовательский режим для SQL Server.

Предварительные условия

После запуска SQL Server в однопользовательском режиме каждый член локальной группы администраторов сможет подключаться к SQL Server от имени члена предопределенной роли сервера sysadmin. Дополнительные сведения см. в статье Подключение к SQL Server в случае, если доступ системных администраторов заблокирован.

При запуске экземпляра SQL Server в однопользовательском режиме:

  • Только один пользователь может подключиться к серверу.
  • Процесс CHECKPOINT не выполняется. По умолчанию он выполняется автоматически при запуске.

Остановите службу SQL Server

  1. Следующая команда останавливает экземпляр SQL Server, если он запущен в данный момент:

    systemctl stop mssql-server
    

Изменение текущего пользователя на mssql

  1. SQL Server на Linux выполняется под пользователемmssql, поэтому сначала необходимо переключиться на этого пользователя. Во время выполнения команды root вам предложат ввести пароль.

    su mssql
    

Запуск SQL Server в однопользовательском режиме

  1. При использовании параметра -m с SQLCMD вы можете ограничить подключения к определенному клиентскому приложению (капитализация SQLCMD, как показано далее):

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

    В предыдущем примере -m"SQLCMD" разрешает только одно соединение, которое должно идентифицироваться как клиентская программа sqlcmd. Используйте этот параметр при запуске SQL Server в однопользовательском режиме для восстановления базы данных master.

  2. При запуске SQL Server создается несколько записей журнала. Вы можете убедиться, что он работает в однопользовательском режиме, найдите следующие строки в выходных данных:

    [...]
    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.
    

Подключение к экземпляру SQL Server

  1. Используйте sqlcmd для подключения к экземпляру SQL Server. Завершив действия, описанные в разделе Запуск SQL Server в однопользовательском режиме, вы увидите, что SQL Server работает в интерактивном режиме. Таким образом, необходимо открыть новый сеанс терминала, чтобы запустить sqlcmd следующим образом.

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

    В предыдущем примере <ServerName> представляет собой имя узла, работающего SQL Server при удаленном подключении. Если вы подключаетесь непосредственно на узле, где выполняется SQL Server, этот параметр можно пропустить или использовать localhost. <StringPassword> является паролем учетной записи sa.

Восстановление базы данных master

  1. Выполните следующие команды в sqlcmd. Помните, что для выполнения скрипта sqlcmd ожидает GO в конце этого скрипта.

    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
    

    В предыдущем примере путь к файлу резервной копии базы данных master/var/opt/mssql/data/master.bak. Это значение необходимо заменить правильным путем к master файлу резервной копии базы данных.

  2. Если восстановление выполнено успешно, вы увидите примерно следующие выходные данные.

    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.
    

Перезапустите службу SQL Server.

  1. Перезапустите SQL Server с помощью следующей команды.

    systemctl start mssql-server
    

Замечания

При восстановлении резервной копии базы данных master все существующие пользовательские базы данных, добавленные в экземпляр после создания резервной копии, не будут видны после восстановления master. Файлы по-прежнему должны существовать на уровне хранилища, поэтому необходимо вручную повторно подключить эти файлы пользовательской базы данных, чтобы перенести эти базы данных в интернет. Дополнительные сведения см. в статье Attach a Database.