rhu*_*hes 4 sql-server sql-server-2008-r2 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.
Run Code Online (Sandbox Code Playgroud)
我以域管理员身份登录到服务器的用户。
在我尝试之前,我登录的用户与此 SQL 服务器无关。(事实上,我正在尝试创建一个新的 SA,因为我们不知道当前密码是什么)
编辑
似乎即使我这样做:
c:\....\sqlservr -m"sqlcmd"
Run Code Online (Sandbox Code Playgroud)
我仍然收到上述错误。我不确定其他SQLCMD地方是否还有其他电话。
当系统管理员被锁定时连接到 SQL Server 中明确指出了这种情况:
在单用户模式下启动 SQL Server 实例时,首先停止 SQL Server 代理服务。否则,SQL Server 代理可能会先连接并阻止您作为第二个用户进行连接。
将 -m 选项与 sqlcmd 或 SQL Server Management Studio 结合使用时,可以将连接限制为指定的客户端应用程序。例如,
-m"sqlcmd"将连接限制为单个连接,并且该连接必须将自身标识为 sqlcmd 客户端程序。当您在单用户模式下启动 SQL Server 并且未知的客户端应用程序正在使用唯一可用的连接时,请使用此选项。要通过 Management Studio 中的查询编辑器进行连接,请使用-m"Microsoft SQL Server Management Studio - Query".
这是一个潜在的语法问题。尽管@RemusRasanu 指出的MS 文档说要使用-m"sqlcmd",如下所示:
例如,-m"sqlcmd" 将连接限制为单个连接,并且该连接必须将自身标识为 sqlcmd 客户端程序。当您在单用户模式下启动 SQL Server 并且未知的客户端应用程序正在使用唯一可用的连接时,请使用此选项。
有一些证据表明参数值中的引号阻止它按预期工作。我在使用单用户模式连接时遇到问题,并从启动参数中删除引号,即使用-mSQLCMD而不是-m"sqlcmd"为我工作。我尝试了几次不同的方法来验证存在因果关系,情况似乎确实如此。也许这是某种有问题的边缘情况,但它对我有用。
您也可以看到 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"
Run Code Online (Sandbox Code Playgroud)
相对
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
Run Code Online (Sandbox Code Playgroud)
我从这个 ServerFault 答案中偷了这个,所以如果你觉得它有帮助,请去那里投票:https : //serverfault.com/a/338294/3183