單用戶模式啟動(dòng) SQL Server實(shí)例總結(jié)
在SQL Server的數(shù)據(jù)庫維護(hù)過程中,有時(shí)候在一些特殊情況下需要在單用戶模式(single-user mode)下啟動(dòng)SQL Server實(shí)例。下面總結(jié)一下單用戶模式啟動(dòng)SQL Server的幾種方式:
1:命令模式(sqlservr.exe)啟動(dòng)
首先在命令窗口中切換到SQL Server的Binn目錄下(這個(gè)要視SQL Server實(shí)際安裝路徑情況而定,另外,在SQL Server多實(shí)例情況下,必須切換到對(duì)應(yīng)路徑),如果你對(duì)sqlservr.exe命令不熟悉,可以查看相關(guān)幫助信息。如下所示:
- C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Binn>sqlservr.exe /?
- usage: sqlservr
- [-a<L2 buffer pool directory>,<size in GB>] (adding an L2 buffer pool file)
- [-c] (not as a service)
- [-d file] (alternative master data file)
- [-l file] (alternative master log file)
- [-e file] (alternate errorlog file)
- [-f] (minimal configuration mode)
- [-m] (single user admin mode)
- [-g number] (stack MB to reserve)
- [-k <decimal number>] (checkpoint speed in MB/sec)
- [-n] (do not use event logging)
- [-s name] (alternate registry key name)
- [-T <number>] (trace flag turned on at startup)
- [-x] (no statistics tracking)
- [-y number] (stack dump on this error)
- [-B] (breakpoint on error (used with -y))
- [-K] (force regeneration of service master key (if exists))
- [-v] (list version information)
- See documentation for details.
- 2018-04-06 11:28:00.52 SQL Server shutdown has been initiated
sqlservr.ex啟動(dòng)時(shí),當(dāng)前環(huán)境存在多實(shí)例的情況下,而你又沒有指定參數(shù)-s的值,那么就會(huì)收到類似如下信息, 需要你指定-s參數(shù)。
- C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Binn>sqlservr.exe -c -m
- 2018-04-06 11:40:54.15 Server Multiple instances of SQL server are installe
- d on this computer. Renter the command, specifying the -s parameter with the nam
- e of the instance that you want to start.
- 2018-04-06 11:40:54.16 Server SQL Server shutdown has been initiated
- sqlservr.exe -c -m -s{instancename}
sqlservr.ex啟動(dòng)時(shí),如果SQL Server服務(wù)本身還在運(yùn)行,就會(huì)報(bào)“Operating system error = 32(The process cannot access the file because it is being used by another process.).
- C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Binn>sqlservr.exe -c -m -sMSSQLSERVER
- 2018-04-06 11:41:59.01 Server Error: 17058, Severity: 16, State: 1.
- 2018-04-06 11:41:59.01 Server initerrlog: Could not open error log file 'C:
- \Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Log\ERRORLOG'. Ope
- rating system error = 32(The process cannot access the file because it is being
- used by another process.).
- 2018-04-06 11:41:59.32 Server Error: 17058, Severity: 16, State: 1.
- 2018-04-06 11:41:59.32 Server initerrlog: Could not open error log file 'C:
- \Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Log\ERRORLOG'. Ope
- rating system error = 32(The process cannot access the file because it is being
- used by another process.).
- 2018-04-06 11:42:02.04 Server SQL Server shutdown has been initiated
如果在sqlservr.exe當(dāng)中退出單用戶模式,直接使用CTRL+C 或 CTRL + Break,如下所示:
2:命令模式(net star)啟動(dòng)
- C:\Users>net stop mssqlserver
- The following services are dependent on the SQL Server (MSSQLSERVER) service.
- Stopping the SQL Server (MSSQLSERVER) service will also stop these services.
- SQL Server Agent (MSSQLSERVER)
- Do you want to continue this operation? (Y/N) [N]: y
- The SQL Server Agent (MSSQLSERVER) service is stopping.
- The SQL Server Agent (MSSQLSERVER) service was stopped successfully.
- The SQL Server (MSSQLSERVER) service is stopping.
- The SQL Server (MSSQLSERVER) service was stopped successfully.
- C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Binn>net start mssqlserver /m
- The SQL Server (MSSQLSERVER) service is starting.
- The SQL Server (MSSQLSERVER) service was started successfully.
3:SQL Server配置管理器啟動(dòng)
在SQL Server配置管理器中,找到對(duì)應(yīng)實(shí)例,右鍵單擊屬性,在啟動(dòng)參數(shù)里面增加參數(shù)-m,然后重啟即可。
在單用戶模式下啟動(dòng)SQL Server實(shí)例時(shí),請注意下列事項(xiàng):
- 只有一個(gè)用戶可以連接到服務(wù)器。
- 不執(zhí)行CHECKPOINT 進(jìn)程。默認(rèn)情況下,啟動(dòng)時(shí)自動(dòng)執(zhí)行此進(jìn)程。
在單用戶模式下啟動(dòng)SQL Server 可使用計(jì)算機(jī)本地 Administrators 組的任何成員作為 sysadmin 固定服務(wù)器角色的成員連接到 SQL Server 實(shí)例。有關(guān)詳細(xì)信息,請參閱在系統(tǒng)管理員被鎖定時(shí)連接到 SQL Server。
在單用戶模式下, 只有一個(gè)用戶可以連接到服務(wù)器,那么這樣問題就來了,很有可能當(dāng)你需要登錄的時(shí)候,這個(gè)唯一的的用戶已經(jīng)被其它用戶捷足先登了。此時(shí)你卻被拒之門外,是否相當(dāng)抓狂。此時(shí)你可能遇到下面錯(cuò)誤
- C:\Users>sqlcmd
- Sqlcmd: Error: Microsoft ODBC Driver 11 for SQL Server : Login failed for user '
- xxxx'. Reason: Server is in single user mode. Only one administrator c
- an connect at this time..
SSMS客戶端一般遇到下面這樣的錯(cuò)誤信息:
- Login failed for user 'xxxx'. Reason: Server is in single user mode. Only one administrator can connect at this time. (Microsoft SQL Server, Error: 18461)
錯(cuò)誤日志或命令里面輸出的日志,你會(huì)看到類似如下信息:
- 2018-04-06 12:21:14.85 Logon Error: 18461, Severity: 14, State: 1.
- 2018-04-06 12:21:14.85 Logon Login failed for user 'xxx'. Reason: Server is in single user mode. Only one administrator can connect at this time. [CLIENT: 192.168.xxx.xxx]
在這種情況下,怎么辦呢?難道要拼速度?當(dāng)然不是,你需要從下面這些方面注意:
在單用戶模式下連接到SQL Server實(shí)例之前,停止SQL Server Agent 服務(wù);否則 SQL Server Agent 服務(wù)將使用該連接,從而使其阻塞。
在單用戶模式下啟動(dòng)SQL Server實(shí)例時(shí),SQL Server Management Studio 可以連接到 SQL Server。但是Management Studio中的對(duì)象資源管理器可能會(huì)失敗,因?yàn)樵谀承┎僮髦兴枰褂枚鄠€(gè)連接。若要在單用戶模式下管理 SQL Server,可以執(zhí)行 Transact-SQL 語句(僅通過 Management Studio 中的查詢編輯器連接)或者使用 sqlcmd 實(shí)用工具。
當(dāng)您將 -m 選項(xiàng)與 sqlcmd 或 Management Studio 結(jié)合使用時(shí),可以將連接限制為指定的客戶端應(yīng)用程序。例如,-m"sqlcmd" 將連接限制為單個(gè)連接并且該連接必須將自身標(biāo)識(shí)為 sqlcmd 客戶端程序。當(dāng)您正在單用戶模式下啟動(dòng) SQL Server 并且未知的客戶端應(yīng)用程序正在占用這個(gè)唯一的可用連接時(shí),使用此選項(xiàng)。若要通過 Management Studio 中的查詢編輯器進(jìn)行連接,請使用 -m"Microsoft SQL Server Management Studio - Query"。
如下所示,如果你指定了單用戶只能以SQLCMD連接,那么此時(shí),其它通過SSMS等其它方式連接數(shù)據(jù)庫都會(huì)報(bào)上面錯(cuò)誤,其它通過程序連接過來的連接就不會(huì)搶占這個(gè)連接了。
- C:\Windows\system32>net stop mssqlserver
- The SQL Server (MSSQLSERVER) service is stopping.
- The SQL Server (MSSQLSERVER) service was stopped successfully.
- C:\Windows\system32>net start mssqlserver /m"SQLCMD"
- The SQL Server (MSSQLSERVER) service is starting.
- The SQL Server (MSSQLSERVER) service was started successfully.
- C:\Windows\system32>
如果你指定參數(shù)/m"Microsoft SQL Server Management Studio - Query" 那么就會(huì)阻止像應(yīng)用程序或SQLCMD登錄
- C:\Windows\system32>net stop mssqlserver
- The SQL Server (MSSQLSERVER) service is stopping.
- The SQL Server (MSSQLSERVER) service was stopped successfully.
- C:\Windows\system32>net start mssqlserver /m"Microsoft SQL Server Management Studio - Query"
- The SQL Server (MSSQLSERVER) service is starting.
- The SQL Server (MSSQLSERVER) service was started successfully.
- C:\Users>sqlcmd
- Sqlcmd: Error: Microsoft ODBC Driver 11 for SQL Server : Login failed for user '
- xxx'. Reason: Server is in single user mode. Only one administrator c
- an connect at this time..