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 サービスを停止する

  1. 次のコマンドは、SQL Server インスタンスが現在実行中の場合に停止します。

    systemctl stop mssql-server
    

現在のユーザーを mssql に変更する

  1. mssql ユーザーの下で SQL Server on Linux が実行されるため、最初にこのユーザーに切り替える必要があります。 このコマンドを実行すると、root パスワードの入力を求められます。

    su mssql
    

シングルユーザー モードで SQL Server を起動する

  1. SQLCMD-m オプションを使用すると、接続を特定のクライアント アプリケーションに限定できます (SQLCMD は次に示すように大文字にする必要があります)。

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

    前の例では、-m"SQLCMD" を使用すると、接続が、sqlcmd クライアント プログラムとして識別される必要がある単一の接続に限定されます。 このオプションは、master データベースを復元するためにシングルユーザー モードで SQL Server を起動する場合に使用します。

  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 の復元後に表示されなくなります。 ファイルは引き続きストレージ レイヤーに存在する必要があるため、それらのデータベースをオンラインにするには、それらのユーザー データベース ファイルを手動で再アタッチする必要があります。 詳細については、「データベースをアタッチする」を参照してください。