SQL Server Permissions:View Server State
緣由:
Techdays2012時,楊老師的10個問題裡,有一個問題是『你的SQL Server還是活著嗎?』。
Techdays2013時老師又有一個『你知道SQL Server Agent已經停止的嗎?』。
當時有聽老師在講,但實際上也沒確實去做。因為老師在檢查SQL是否還是活著,
是用已註冊在中央管理伺服器中的SQL Server清單然後搭配Openrowset的方式去
連結每一台SQL Server,因此只要有TimeOut的情況就表示該SQL Server有問題。
而中央管理伺服器需在網域的狀態下才能用,而我的SQL主機很多都沒有加入網域,
所以也就沒做。
至於SQL Agent的部分,老師是在OS中排程去執行某一段已經寫好的Script去檢查
sysprocesses中是否有Agent的Session(不可能用Agent去排程檢查Agent是否停了)
。但由於每台Server都要在OS上設定再加上自己覺得Agent應該不太可能會起不來,
所以也沒做。
直到某一日兩個狀況都被我碰見了,才毅然決然的決定該好好監測這兩大問題。
解決方式:
我的作法是找一部HA機制較好的SQL,然後依老師的作法在OS中設排程去檢查自己
的SQL Agent是否還活著。然後用這一台SQL去掃其他所有的SQL主機是否有Agent
的Session。所以我做一次掃瞄,如果Connection TimeOut就表示SQL服務沒有起來。
如果有Connection上但是沒有Agent的Session,那就表示該SQL的Agent沒有起來。
因此我在所有SQL上建立一個sqlislive的login帳號(最小權限),然後在負責偵測的
SQL Server上也是用Openrowset去Connection所有SQL並
Select program_name From master.dbo.sysprocesses Where program_name like 'SQLAgent%'
。
但是我遇見一個問題,由於sqlislive是最小權限,該帳號可以Connection,但是卻無權
限看到所有的processes,因此當然也查不到Agent的Session了。
拉哩拉渣寫一堆的主題終於到了,查了一下資料,在這一個討論串中得到解答。就是應
該給sqlislive帳號 VIEW SERVER STATE的權限,語法:
Grant VIEW SERVER STATE to sqlislive
最小權限時只能看見自己的Session
當我們授與該帳號View Server State權限後,就可以看見所有Session
我是ROCK
rockchang@mails.fju.edu.tw