在SQL Server的数据库维护过程中,有时候在一些特殊情况下需要在单用户模式(single-user mode)下启动SQL Server实例。下面总结一下单用户模式启动SQL Server的几种方式:
1:命令模式(sqlservr.exe)启动
首先在命令窗口中切换到SQL Server的Binn目录下(这个要视SQL Server实际安装路径情况而定,另外,在SQL Server多实例情况下,必须切换到对应路径),如果你对sqlservr.exe命令不熟悉,可以查看相关帮助信息。如下所示:
C:\ProgramFiles\MicrosoftSQLServer\MSSQL12.MSSQLSERVER\MSSQL\Binn>sqlservr.exe/? usage:sqlservr [-a<L2bufferpooldirectory>,<sizeinGB>](addinganL2bufferpoolfile) [-c](notasaservice) [-dfile](alternativemasterdatafile) [-lfile](alternativemasterlogfile) [-efile](alternateerrorlogfile) [-f](minimalconfigurationmode) [-m](singleuseradminmode) [-gnumber](stackMBtoreserve) [-k<decimalnumber>](checkpointspeedinMB/sec) [-n](donotuseeventlogging) [-sname](alternateregistrykeyname) [-T<number>](traceflagturnedonatstartup) [-x](nostatisticstracking) [-ynumber](stackdumponthiserror) [-B](breakpointonerror(usedwith-y)) [-K](forceregenerationofservicemasterkey(ifexists)) [-v](listversioninformation) Seedocumentationfordetails. 2018-04-0611:28:00.52SQLServershutdownhasbeeninitiated
sqlservr.ex启动时,当前环境存在多实例的情况下,而你又没有指定参数-s的值,那么就会收到类似如下信息, 需要你指定-s参数。
C:\ProgramFiles\MicrosoftSQLServer\MSSQL12.MSSQLSERVER\MSSQL\Binn>sqlservr.exe-c-m 2018-04-0611:40:54.15ServerMultipleinstancesofSQLserverareinstalle donthiscomputer.Renterthecommand,specifyingthe-sparameterwiththenam eoftheinstancethatyouwanttostart. 2018-04-0611:40:54.16ServerSQLServershutdownhasbeeninitiated sqlservr.exe-c-m-s{instancename}
sqlservr.ex启动时,如果SQL Server服务本身还在运行,就会报“Operating system error = 32(The process cannot access the file because it is being used by another process.).
C:\ProgramFiles\MicrosoftSQLServer\MSSQL12.MSSQLSERVER\MSSQL\Binn>sqlservr.exe-c-m-sMSSQLSERVER 2018-04-0611:41:59.01ServerError:17058,Severity:16,State:1. 2018-04-0611:41:59.01Serveriniterrlog:Couldnotopenerrorlogfile'C: \ProgramFiles\MicrosoftSQLServer\MSSQL12.MSSQLSERVER\MSSQL\Log\ERRORLOG'.Ope ratingsystemerror=32(Theprocesscannotaccessthefilebecauseitisbeing usedbyanotherprocess.). 2018-04-0611:41:59.32ServerError:17058,Severity:16,State:1. 2018-04-0611:41:59.32Serveriniterrlog:Couldnotopenerrorlogfile'C: \ProgramFiles\MicrosoftSQLServer\MSSQL12.MSSQLSERVER\MSSQL\Log\ERRORLOG'.Ope ratingsystemerror=32(Theprocesscannotaccessthefilebecauseitisbeing usedbyanotherprocess.). 2018-04-0611:42:02.04ServerSQLServershutdownhasbeeninitiated
如果在sqlservr.exe当中退出单用户模式,直接使用CTRL+C 或 CTRL + Break,如下所示:
2:命令模式(net star)启动
C:\Users>netstopmssqlserver ThefollowingservicesaredependentontheSQLServer(MSSQLSERVER)service. StoppingtheSQLServer(MSSQLSERVER)servicewillalsostoptheseservices. SQLServerAgent(MSSQLSERVER) Doyouwanttocontinuethisoperation?(Y/N)[N]:y TheSQLServerAgent(MSSQLSERVER)serviceisstopping. TheSQLServerAgent(MSSQLSERVER)servicewasstoppedsuccessfully. TheSQLServer(MSSQLSERVER)serviceisstopping. TheSQLServer(MSSQLSERVER)servicewasstoppedsuccessfully. C:\ProgramFiles\MicrosoftSQLServer\MSSQL12.MSSQLSERVER\MSSQL\Binn>netstartmssqlserver/m TheSQLServer(MSSQLSERVER)serviceisstarting. TheSQLServer(MSSQLSERVER)servicewasstartedsuccessfully.
3:SQL Server配置管理器启动
在SQL Server配置管理器中,找到对应实例,右键单击属性,在启动参数里面增加参数-m,然后重启即可。
在单用户模式下启动SQL Server实例时,请注意下列事项:
- 只有一个用户可以连接到服务器。
- 不执行CHECKPOINT 进程。默认情况下,启动时自动执行此进程。
在单用户模式下启动SQL Server 可使用计算机本地 Administrators 组的任何成员作为 sysadmin 固定服务器角色的成员连接到 SQL Server 实例。有关详细信息,请参阅在系统管理员被锁定时连接到 SQL Server。
在单用户模式下, 只有一个用户可以连接到服务器,那么这样问题就来了,很有可能当你需要登录的时候,这个唯一的的用户已经被其它用户捷足先登了。此时你却被拒之门外,是否相当抓狂。此时你可能遇到下面错误
C:\Users>sqlcmd Sqlcmd:Error:MicrosoftODBCDriver11forSQLServer:Loginfailedforuser' xxxx'.Reason:Serverisinsingleusermode.Onlyoneadministratorc anconnectatthistime..
SSMS客户端一般遇到下面这样的错误信息:
Loginfailedforuser'xxxx'.Reason:Serverisinsingleusermode.Onlyoneadministratorcanconnectatthistime.(MicrosoftSQLServer,Error:18461)
错误日志或命令里面输出的日志,你会看到类似如下信息:
2018-04-0612:21:14.85LogonError:18461,Severity:14,State:1. 2018-04-0612:21:14.85LogonLoginfailedforuser'xxx'.Reason:Serverisinsingleusermode.Onlyoneadministratorcanconnectatthistime.[CLIENT:192.168.xxx.xxx]
在这种情况下,怎么办呢?难道要拼速度?当然不是,你需要从下面这些方面注意:
在单用户模式下连接到SQL Server实例之前,停止SQL Server Agent 服务;否则 SQL Server Agent 服务将使用该连接,从而使其阻塞。
在单用户模式下启动SQL Server实例时,SQL Server Management Studio 可以连接到 SQL Server。但是Management Studio中的对象资源管理器可能会失败,因为在某些操作中它需要使用多个连接。若要在单用户模式下管理 SQL Server,可以执行 Transact-SQL 语句(仅通过 Management Studio 中的查询编辑器连接)或者使用 sqlcmd 实用工具。
当您将 -m 选项与 sqlcmd 或 Management Studio 结合使用时,可以将连接限制为指定的客户端应用程序。例如,-m"sqlcmd" 将连接限制为单个连接并且该连接必须将自身标识为 sqlcmd 客户端程序。当您正在单用户模式下启动 SQL Server 并且未知的客户端应用程序正在占用这个唯一的可用连接时,使用此选项。若要通过 Management Studio 中的查询编辑器进行连接,请使用 -m"Microsoft SQL Server Management Studio – Query"。
如下所示,如果你指定了单用户只能以SQLCMD连接,那么此时,其它通过SSMS等其它方式连接数据库都会报上面错误,其它通过程序连接过来的连接就不会抢占这个连接了。
C:\Windows\system32>netstopmssqlserver TheSQLServer(MSSQLSERVER)serviceisstopping. TheSQLServer(MSSQLSERVER)servicewasstoppedsuccessfully. C:\Windows\system32>netstartmssqlserver/m"SQLCMD" TheSQLServer(MSSQLSERVER)serviceisstarting. TheSQLServer(MSSQLSERVER)servicewasstartedsuccessfully. C:\Windows\system32>
如果你指定参数/m"Microsoft SQL Server Management Studio – Query" 那么就会阻止像应用程序或SQLCMD登录
C:\Windows\system32>netstopmssqlserver TheSQLServer(MSSQLSERVER)serviceisstopping. TheSQLServer(MSSQLSERVER)servicewasstoppedsuccessfully. C:\Windows\system32>netstartmssqlserver/m"MicrosoftSQLServerManagementStudio-Query" TheSQLServer(MSSQLSERVER)serviceisstarting. TheSQLServer(MSSQLSERVER)servicewasstartedsuccessfully. C:\Users>sqlcmd Sqlcmd:Error:MicrosoftODBCDriver11forSQLServer:Loginfailedforuser' xxx'.Reason:Serverisinsingleusermode.Onlyoneadministratorc anconnectatthistime..
转载请注明:IT运维空间 » 运维技术 » 单用户模式启动 SQL Server实例总结
发表评论