web-dev-qa-db-ja.com

SQLCMDを使用できません

SQL Serverを次のようにシングルユーザーモードで起動しました:c:\....\sqlservr -m

SQLCMD -Eで接続しようとすると、次のエラーが発生します。

Msg 18461, Level 14, State 1, Server SERVERNAME, Line 1
Login failed to user 'USER\Name'. Reason: Server is in single user mode. Only one administrator can connect at this time.

ドメイン管理者としてサーバーにログオンしているユーザー。

これを試す前に、ログオンしているユーザーはこのSQLサーバーとは何の関係もありませんでした。 (私は実際、新しいSAを作成しようとしています。現在のパスワードがわからないためです)

編集

私がそうしたとしても:

c:\....\sqlservr -m"sqlcmd"

上記のエラーがまだ発生します。他の場所から他のSQLCMD呼び出しが発生しているかどうかはわかりません。

4
rhughes

このケースは、 システム管理者がロックアウトされたときにSQL Serverに接続する で明示的に呼び出されます。

SQL Serverのインスタンスをシングルユーザーモードで起動するときは、最初にSQL Serverエージェントサービスを停止します。そうしないと、SQL Serverエージェントが最初に接続し、2番目のユーザーとして接続できない場合があります。

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

8
Remus Rusanu

潜在的な構文のしわがあります。 MSドキュメント でも、@ RemusRasanuが指摘したように、次のように-m"sqlcmd"を使用するように指示されています。

たとえば、-m "sqlcmd"は接続を単一の接続に制限し、その接続はそれ自体をsqlcmdクライアントプログラムとして識別する必要があります。このオプションは、SQL Serverをシングルユーザーモードで起動し、不明なクライアントアプリケーションが利用可能な唯一の接続を使用している場合に使用します。

パラメータ値の引用符が期待どおりに機能しないことを示す証拠がいくつかあります。シングルユーザーモードを使用して接続する際に問題があり、スタートアップパラメータから引用符を削除しました。つまり、-mSQLCMDの代わりに-m"sqlcmd"を使用するとうまくいきました。因果関係があることを確認するために、数回異なる方法で両方の方法を試しましたが、そうです。多分それはある種のバギーなEdgeケースかもしれませんが、私にとってはうまくいきました。

SQLログでも違いを確認できます。例えば:

2015-06-30 17:13:41.89 Server      Registry startup parameters: 
     -d c:\Prog[...]\master.mdf
     -e c:\Prog[...]\ERRORLOG
     -l c:\Prog[...]\mastlog.ldf
     -m "SQLCMD"

versus

2015-06-30 17:13:41.89 Server      Registry startup parameters: 
     -d c:\Prog[...]\master.mdf
     -e c:\Prog[...]\ERRORLOG
     -l c:\Prog[...]\mastlog.ldf
     -m SQLCMD

私はこのServerFaultの回答からこれを盗んだので、役立つ場合はそこに行き、投票してください: https://serverfault.com/a/338294/318

6
Matt