Восстановление базы данных 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:

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

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

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

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

    use [master];
    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. Файлы по-прежнему должны существовать на уровне хранения, поэтому вам нужно вручную повторно присоединить эти пользовательские файлы базы данных для подключения баз данных к сети. Дополнительные сведения см. в статье Подключение базы данных.