放假的時候,公司同事安裝 Sql Server 2005 時,發生了 Sql Agent 無法啟動的問題。
回到公司後,只好自己檢查了一下。
果然,在 Sql Server Configuration Manager 啟動 Sql Agent 時,發生了問題。
現象一:
SQL Server blocked access to 程序 'dbo.sp_sqlagent_get_startup_info' of component 'Agent XPs' because this component is turned off as part of the security configuration for this server. A system administrator can enable the use of 'Agent XPs' by using sp_configure
但事件檢視器上,也發生這樣的錯誤訊息
現象二:
SQLServerAgent could not be started(reason: SQLServerAgent 必須能夠以系統管理員(SysAdmin) 的身皆連接到 SQLServer, 但'(未知)'不是系統管理員(SysAdmin)角色的成員)
此時還搞不清楚狀況。只知道服務起不來。
另外,改用 sql script 來啟動時,也會發生狀況。
exec sp_configure 'show advanced options', '1' RECONFIGURE exec sp_configure exec sp_configure 'Agent XPs', '1' RECONFIGURE
結果發生以下的錯誤。
現象三:
訊息 5845,層級16,狀態1,行2
處理序的存取 Token 中,目前沒有 Address Windowing Extensions (AWE) 需要的 'lock pages in memory' 權限。
此時開始警覺到是否與伺服器的環境相關,尤其是記憶體的大小與配置設定的問題。
然後,在C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\LOG\SQLAGENT.OUT 也找到了下列的錯誤訊息
現象四:
2009-02-17 15:35:14 - ! [298] SQLServer 錯誤: 5845,處理序的存取 Token 中,目前沒有 Address Windowing Extensions (AWE) 需要的 'lock pages in memory' 權限。 [SQLSTATE 42000] (DisableAgentXPs) 2009-02-17 15:35:14 - ! [298] SQLServer 錯誤: 15281,SQL Server 已封鎖元件 'Agent XPs' 的 程序 'dbo.sp_sqlagent_has_server_access' 之存取,因為此元件已經由此伺服器的安全性組態關閉。系統管理員可以使用 sp_configure 來啟用 'Agent XPs' 的使用。如需有關啟用 'Agent XPs' 的詳細資訊,請參閱《SQL Server 線上叢書》中的<介面區組態>(Surface Area Configuration)。 [SQLSTATE 42000] (ConnIsLoginSysAdmin) 2009-02-17 15:35:14 - ! [298] SQLServer 錯誤: 15281,SQL Server 已封鎖元件 'Agent XPs' 的 程序 'dbo.sp_sqlagent_get_startup_info' 之存取,因為此元件已經由此伺服器的安全性組態關閉。系統管理員可以使用 sp_configure 來啟用 'Agent XPs' 的使用。如需有關啟用 'Agent XPs' 的詳細資訊,請參閱《SQL Server 線上叢書》中的<介面區組態>(Surface Area Configuration)。 [SQLSTATE 42000] 2009-02-17 15:35:14 - ? [100] Microsoft SQLServerAgent 版本 9.00.4035.00 (x86 unicode 零售 組建) : 處理序識別碼 2620 2009-02-17 15:35:14 - ? [101] SQL Server 版本 9.00.4035 (0 連接限制) 2009-02-17 15:35:14 - ? [102] SQL Server ODBC 驅動程式版本 9.00.4035 2009-02-17 15:35:14 - ? [103] 驅動程式所使用的 NetLib 為 DBNETLIB.DLL; 本機主機伺服器為 2009-02-17 15:35:14 - ? [310] 偵測到 16 個處理器和 4096 MB RAM 2009-02-17 15:35:14 - ? [339] 本機電腦為 TW006VATDB001,正在執行 Windows NT 5.2 (3790) Service Pack 2 2009-02-17 15:35:14 - ! [000] SQLServerAgent 必須能夠以系統管理員 (SysAdmin) 的身分連接到 SQLServer,但 '(未知)' 不是系統管理員 (SysAdmin) 角色的成員 2009-02-17 15:35:15 - ? [098] SQLServerAgent 已結束 (正常)
現象五:
資料庫伺服器上,實體記憶體配有 8GB,但實際 Sql Server 只吃到1.6 GB 左右。
打開 c:\boot.ini ,發現是如下的配置
[boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS [operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows Server 2003, Standard" /PAE /noexecute=optout /fastdetect
現象六:
據同事描述,此電腦曾經改電腦名稱。即 ServerA 換成 ServerB
因此,根據之前的經驗,下了
select @@servername
結果是 ServerA,而非改名過後的 ServerB
解決
步驟一:
參考 交通部Microsoft SQL Server 效能再進階,知道了伺服器記憶體> 4 GB,<= 16 GB, Boot.ini 除了加上/3GB的參數,還必須要再加上/PAE的參數,因此改 c:\boot.ini 成如下配置[boot loader] timeout=30 default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS [operating systems] multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows Server 2003, Standard" /3GB /PAE /noexecute=optout /fastdetect
步驟二:
據 http://msdn.microsoft.com/en-us/library/ms190730.aspx 所述,將 SqlAgent 的服務Account 加入。
步驟三:
根據 http://msdn.microsoft.com/en-us/library/ms143799.aspx 所說的步驟,將 ServerA 改成 ServerB。
步驟四:
重新開機。 步驟一是鐵定需要重新開機的。而步驟二與三原則上只需重起 SqlServer 的服務即可。
結論
經過了一番努力,終於完成了。而記憶體在半小時之內也吃到了 2.7 GB。
那怎麼知道 Sql Server 是尚未需要超過 2.7 GB 的記憶體,還是再也吃不了更多的記憶體呢?
此時 Performon counter 就發揮作用了。效能物件 SQL Server:Memory Manager,計數器 Target Server Memory。此計數器描述伺服器曾經需要的伺服器記憶體大小。如果此值大於實體記憶體,就代表記憶體不足。
沒有留言:
張貼留言