Linux 上のマスター データベースをシングルユーザー モードで復元する
適用対象: SQL Server - Linux
特定の状況では、Linux のシングル ユーザー モードで SQL Server のインスタンスに master
データベースを復元することが必要になる場合があります。 シナリオには、新しいインスタンスへの移行や不整合からの復旧が含まれます。
Note
SQL Server は、復元が完了した後に自動的にシャットダウンされます。 この動作は仕様です。
master
データベースを復元するには、コマンド ラインの スタートアップ オプション -m
を使用して、シングルユーザー モードで SQL Server を起動する必要があります。
Windows のシングル ユーザー モードで SQL Server インスタンスを起動する方法については、「SQL Server 用シングル ユーザー モード」を参照してください。
前提条件
SQL Server をシングル ユーザー モードで起動すると、ローカル Administrators グループのメンバーはすべて、固定サーバー ロール sysadmin のメンバーとして SQL Server に接続できるようになります。 詳細については、「システム管理者がロックアウトされた場合の SQL Server への接続」を参照してください。
SQL Server のインスタンスをシングル ユーザー モードで起動する場合:
- 1 人のユーザーのみがサーバーに接続できます。
CHECKPOINT
プロセスは実行されません。 既定では、このプロセスは、起動時に自動的に実行されます。
SQL Server サービスを停止する
次のコマンドは、SQL Server インスタンスが現在実行中の場合に停止します。
systemctl stop mssql-server
現在のユーザーを mssql
に変更する
mssql
ユーザーの下で SQL Server on Linux が実行されるため、最初にこのユーザーに切り替える必要があります。 このコマンドを実行すると、root
パスワードの入力を求められます。su mssql
シングルユーザー モードで SQL Server を起動する
SQLCMD
で-m
オプションを使用すると、接続を特定のクライアント アプリケーションに限定できます (SQLCMD
は次に示すように大文字にする必要があります)。/opt/mssql/bin/sqlservr -m"SQLCMD"
前の例では、
-m"SQLCMD"
を使用すると、接続が、sqlcmd クライアント プログラムとして識別される必要がある単一の接続に限定されます。 このオプションは、master
データベースを復元するためにシングルユーザー モードで SQL Server を起動する場合に使用します。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 <StrongPassword>
前の例では、
<ServerName>
はリモートで接続している場合に SQL Server を実行しているホストの名前です。 SQL Server が実行されているホストで直接接続している場合は、このパラメーターをスキップするか、またはlocalhost
を使用できます。<StringPassword>
は SA アカウントのパスワードです。
master
データベースを復元する
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
データベース バックアップ ファイルへの正しいパスに置き換える必要があります。復元が成功すると、次の例のような出力が表示されます。
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」を参照してください。