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

適用対象: SQL Server (サポートされているすべてのバージョン)

特定の状況では、startup option-m を使用して、SQL Server のインスタンスをシングル ユーザー モードで起動することが必要になる場合があります。 たとえば、サーバーの構成オプションを変更したり、破損した master データベースや他のシステム データベースを復旧したりすることがあります。 いずれの場合も、 SQL Server のインスタンスをシングル ユーザー モードで起動する必要があります。

Linux 上の master データベースをシングルユーザー モードで復元する方法については、「Linux 上のマスター データベースをシングルユーザー モードで復元する」を参照してください。

SQL Server をシングル ユーザー モードで起動すると、コンピューターのローカル Administrators グループのメンバーはすべて、固定サーバー ロール sysadmin のメンバーとして SQL Server のインスタンスに接続できるようになります。 詳細については、「システム管理者がロックアウトされた場合の SQL Server への接続」を参照してください。

シングル ユーザー モードで SQL Server のインスタンスを起動する場合は、次の点に注意してください。

  • 1 人のユーザーのみがサーバーに接続できます。

  • CHECKPOINT プロセスは実行されません。 既定では、このプロセスは、起動時に自動的に実行されます。

注意

シングル ユーザー モードの場合、 SQL Server のインスタンスに接続する前に SQL Server エージェント サービスを停止してください。そうしないと、 SQL Server エージェント サービスによってその接続が使用されるため、SQL Server のインスタンスがブロックされます。

シングル ユーザー モードで SQL Server のインスタンスを起動すると、 SQL Server Management Studio で SQL Serverに接続できます。 Management Studio のオブジェクト エクスプローラーでは、一部の操作で複数の接続が必要になるため失敗することがあります。 SQL Server をシングル ユーザー モードで管理するには、Management Studio または Azure Data Studio のクエリ エディターを介して接続することにより Transact-SQL ステートメントを実行するか、sqlcmd ユーティリティを使用します。

SQLCMD または Management Studio で -m オプションを使用すると、接続を特定のクライアント アプリケーションに限定できます。

注意

Linux では、SQLCMD は、このように大文字で入力する必要があります。

たとえば、-m"SQLCMD" を使用すると、接続が、sqlcmd クライアント プログラムとして識別される必要がある単一の接続に限定されます。 このオプションは、SQL Server をシングル ユーザー モードで起動するときに、その唯一の接続を不明なクライアント アプリケーションによって使用されていた場合に使用します。 Management Studio のクエリ エディターを使用して接続するには、-m"Microsoft SQL Server Management Studio - Query" を使用します。

重要

このオプションをセキュリティ機能として使用しないでください。 クライアント アプリケーションの名前はクライアント アプリケーションによって接続文字列の一部として指定されるため、本当の名前が指定されるとは限りません。

次の例では、SQL Server インスタンスがシングル ユーザー モードで起動され、SQL Server Management Studio クエリ エディターからの接続のみが許可されます。

net start "SQL Server (MSSQLSERVER)" /m"Microsoft SQL Server Management Studio - Query"

クラスター化インストールに関する注意

クラスター環境に SQL Server をインストールした場合、 SQL Server をシングル ユーザー モードで起動すると、利用可能な接続がクラスター リソースの dll によって占有され、サーバーに対する他の接続がブロックされます。 SQL Server がこの状態に陥ると、 SQL Server エージェントのリソースをオンラインに戻そうとしたときに、SQL のリソースが別のノードにフェールオーバーされる可能性があります (リソースがそのグループに影響するように構成されていた場合)。

この問題を回避するには、次の手順に従います。

  1. SQL Server の詳細プロパティから起動時のパラメーター -m を削除します。

  2. SQL Server リソースをオフラインにします。

  3. このグループの現在の所有者ノードのコマンド プロンプトで、次のコマンドを発行します:

    net start MSSQLSERVER /m
    
  4. クラスター アドミニストレーターまたはフェールオーバー クラスター管理コンソールから、 SQL Server リソースがまだオフライン状態にあるかどうかを確認します。

  5. ここで、次のコマンドを使用して SQL Server に接続し、必要な操作を行います: SQLCMD -E -S<servername>。

  6. 操作が完了したら、コマンド プロンプトを閉じ、クラスター アドミニストレーターから SQL および他のリソースをオンラインに戻します。

こちらもご覧ください