原因
先說寫這篇文章的原因,這裡通過兩個簡單的案例說明。
案例一:在一個Windows作業系統中,安裝有10個SQL Server執行個體,每一個執行個體存在大約120個資料庫。現在要同時啟動10個執行個體的服務(SQL Server & SQL Server Agent & SQL Server FullText Search)。通過SQL Server Configuration Manager,需要一個執行個體,一個服務的一一啟動。那是多麼繁瑣、笨拙的操作。
案例二:在案例一的情境,啟動了全部的執行個體。不久,就發現程式運行緩慢,即使在Microsoft SQL Server Management Studio(MSMS)管理器查詢資料,都有如蝸牛爬樹。這時候,需要關閉一些暫時不用的SQL Server執行個體的服務。等需要的時候再啟動。一些時候,可能會碰到經常要關閉這個執行個體的服務,啟動另外執行個體的服務,以便解決Windows系統資源緊張的問題。
解決
解決上面案例繁瑣的操作問題,可以考慮通過Net命令,來啟動或停止各個SQLServer服務,如:
net Start SQLAgent$SQL2005DE1 /*啟動執行個體SQL2005DE1中的SQLAgent服務*/net Stop SQLAgent$SQL2005DE1 /*停止執行個體SQL2005DE1中的SQLAgent服務*/
根據Net命令,可以通過編寫一個批處理指令碼實現,啟動各個執行個體的各服務。Copy下面的代碼,儲存為尾碼名為Bat的批次檔“Start&StopSQLServer.bat”:
View Code @echo off
:a
echo 原生執行個體列表:
echo ---------------------------
echo 1 PC143\SQL2005DE1
echo 2 PC143\SQL2005DE2
echo 3 PC143\SQL2005DE3
echo 4 PC143\SQL2005DE4
echo 5 PC143\SQL2005DE5
echo 6 PC143\SQL2005DE6
echo 7 PC143\SQL2005DE7
echo 8 PC143\SQL2005DE8
echo 9 PC143\SQL2005DE9
echo 10 PC143\SQL2005DE10
echo ---------------------------
echo 操作動作:
echo 1 啟動服務
echo 0 停止服務
echo ---------------------------
echo.
Set/p var2=請輸入操作動作:[1/0]
Set/p var1=請輸入執行個體編號:[1/2/3/4/5/6/7/8/9/10]
if %var1% ==1 if %var2% ==1 goto S1
if %var1% ==2 if %var2% ==1 goto S2
if %var1% ==3 if %var2% ==1 goto S3
if %var1% ==4 if %var2% ==1 goto S4
if %var1% ==5 if %var2% ==1 goto S5
if %var1% ==6 if %var2% ==1 goto S6
if %var1% ==7 if %var2% ==1 goto S7
if %var1% ==8 if %var2% ==1 goto S8
if %var1% ==9 if %var2% ==1 goto S9
if %var1% ==10 if %var2% ==1 goto S10
if %var1% ==1 if %var2% ==0 goto T1
if %var1% ==2 if %var2% ==0 goto T2
if %var1% ==3 if %var2% ==0 goto T3
if %var1% ==4 if %var2% ==0 goto T4
if %var1% ==5 if %var2% ==0 goto T5
if %var1% ==6 if %var2% ==0 goto T6
if %var1% ==7 if %var2% ==0 goto T7
if %var1% ==8 if %var2% ==0 goto T8
if %var1% ==9 if %var2% ==0 goto T9
if %var1% ==10 if %var2% ==0 goto T10
echo.
cls
goto a:
echo.
:S1
net Start SQLAgent$SQL2005DE1 /Y
net Start msftesql$SQL2005DE1 /Y
goto EndApp
echo.
:S2
net Start SQLAgent$SQL2005DE2 /Y
net Start msftesql$SQL2005DE2 /Y
goto EndApp
echo.
:S3
net Start SQLAgent$SQL2005DE3 /Y
net Start msftesql$SQL2005DE3 /Y
goto EndApp
echo.
:S4
net Start SQLAgent$SQL2005DE4 /Y
net Start msftesql$SQL2005DE4 /Y
goto EndApp
echo.
:S5
net Start SQLAgent$SQL2005DE5 /Y
net Start msftesql$SQL2005DE5 /Y
goto EndApp
echo.
:S6
net Start SQLAgent$SQL2005DE6 /Y
net Start msftesql$SQL2005DE6 /Y
goto EndApp
echo.
:S7
net Start SQLAgent$SQL2005DE7 /Y
net Start msftesql$SQL2005DE7 /Y
goto EndApp
echo.
:S8
net Start SQLAgent$SQL2005DE8 /Y
net Start msftesql$SQL2005DE8 /Y
goto EndApp
echo.
:S9
net Start SQLAgent$SQL2005DE9 /Y
net Start msftesql$SQL2005DE9 /Y
goto EndApp
echo.
:S10
net Start SQLAgent$SQL2005DE10 /Y
net Start msftesql$SQL2005DE10 /Y
goto EndApp
echo.
:T1
net Stop MSSQL$SQL2005DE1 /Y
net Stop msftesql$SQL2005DE1 /Y
goto EndApp
echo.
:T2
net Stop MSSQL$SQL2005DE2 /Y
net Stop msftesql$SQL2005DE2 /Y
goto EndApp
echo.
:T3
net Stop MSSQL$SQL2005DE3 /Y
net Stop msftesql$SQL2005DE3 /Y
goto EndApp
echo.
:T4
net Stop MSSQL$SQL2005DE4 /Y
net Stop msftesql$SQL2005DE4 /Y
goto EndApp
echo.
:T5
net Stop MSSQL$SQL2005DE5 /Y
net Stop msftesql$SQL2005DE5 /Y
goto EndApp
:T6
net Stop MSSQL$SQL2005DE6 /Y
net Stop msftesql$SQL2005DE6 /Y
goto EndApp
:T7
net Stop MSSQL$SQL2005DE7 /Y
net Stop msftesql$SQL2005DE7 /Y
goto EndApp
:T8
net Stop MSSQL$SQL2005DE8 /Y
net Stop msftesql$SQL2005DE8 /Y
goto EndApp
:T9
net Stop MSSQL$SQL2005DE9 /Y
net Stop msftesql$SQL2005DE9 /Y
goto EndApp
:T10
net Stop MSSQL$SQL2005DE10 /Y
net Stop msftesql$SQL2005DE10 /Y
goto EndApp
:EndApp
Set/p var3=是否繼續操作:[y/n]
If %var3% == y goto a:
這裡示範了PC143上的10個SQL Server執行個體啟動、停止的批處理指令碼。下面來運行這個指令碼,啟動PC143上其中一個執行個體服務PC143\SQL2005DE4:
關閉執行個體服務,類似啟動執行個體服務,如:
小結
上面的批處理指令碼,雖然代碼看似很長,其實格式很簡單,熟悉Windows批處理指令碼的朋友,一定能簡化它。啟動或停止執行個體的服務,還可以使用別的後台指令碼語言實現,如Windows PowerShell,或Python。無論使用哪一種,最終目的是要解決文章開頭的兩個案例問題。寫批處理指令碼,能讓我們少敲次鍵盤,少按幾次滑鼠。通過簡單的指令碼代碼實現,代替一些繁瑣笨拙的操作,久而久之,會發覺它們能為我們節省了不少的時間,提高了工作效率。