Восстановление базы данных 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
Следующая команда останавливает экземпляр SQL Server, если он запущен в данный момент:
systemctl stop mssql-server
Изменение текущего пользователя на mssql
SQL Server на Linux выполняется под пользователем
mssql
, поэтому сначала необходимо переключиться на этого пользователя. При выполненииroot
этой команды вам будет предложено ввести пароль.su mssql
Запуск SQL Server в однопользовательском режиме
При использовании параметра
-m
сSQLCMD
вы можете ограничить подключения к определенному клиентскому приложению (капитализацияSQLCMD
, как показано далее):/opt/mssql/bin/sqlservr -m"SQLCMD"
В предыдущем примере
-m"SQLCMD"
разрешает только одно соединение, которое должно идентифицироваться как клиентская программа sqlcmd. Используйте этот параметр при запуске SQL Server в однопользовательском режиме для восстановления базы данныхmaster
.При запуске 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
Используйте sqlcmd для подключения к экземпляру SQL Server:
/opt/mssql-tools/bin/sqlcmd -S <ServerName> -U sa -P <password>
В предыдущем примере
<ServerName>
представляет собой имя узла, работающего SQL Server при удаленном подключении. Если вы подключаетесь непосредственно на узле, где выполняется SQL Server, этот параметр можно пропустить или использоватьlocalhost
.<StringPassword>
является паролем учетной записи sa.
Восстановление базы данных master
Выполните следующие команды в 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
файлу резервной копии базы данных.Если восстановление выполнено успешно, вы увидите примерно следующие выходные данные.
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.
Перезапустите SQL Server с помощью следующей команды.
systemctl start mssql-server
Замечания
При восстановлении резервной копии базы данных master
все существующие пользовательские базы данных, добавленные в экземпляр после создания резервной копии, не будут видны после восстановления master
. Файлы по-прежнему должны существовать на уровне хранилища, поэтому необходимо вручную повторно подключить эти файлы пользовательской базы данных, чтобы перенести эти базы данных в интернет. Дополнительные сведения см. в статье Attach a Database.