公司有一個老系統,這個系統所用的數據庫是SQL SERVER 2000,它所在的Dell服務器已經運行超過10年了,早已經過了保修服務期,最近幾乎每周會出現一次故障,加之5月份另外一台服務器壞了兩個硬盤,所以非常擔心這台服務器“壽終正寢”,跟開發維護那邊溝通,想將數據庫遷移升級到SQL SERVER 2008,但是由於是老舊系統,現在的負責人不敢做數據庫升級,最終協商下來,只能遷移到另外一台服務器,不做升級。
在部署測試環境時,先將master,msdb等系統數據庫直接拷貝過去覆蓋原系統數據庫,啟動數據庫后,出現了莫名錯誤。不得已只能從生產庫備份master后在測試庫還原,然后莫名的錯誤解決了(之前沒有截圖,記錄下來),但是啟動SQL SERVER代理服務器時,出現下面錯誤。
在目錄C:\Program Files\Microsoft SQL Server\MSSQL\LOG\下找到SQLAGENT.OUT錯誤日志文件,發現如下錯誤提示:
2013-09-20 09:46:12 - ! [298] SQLServer 錯誤: 229,EXECUTE permission denied on object 'sp_sqlagent_has_server_access', database 'msdb', owner 'dbo'. [SQLSTATE 42000] (ConnIsLoginSysAdmin) 2013-09-20 09:46:12 - ! [298] SQLServer 錯誤: 229,EXECUTE permission denied on object 'sp_sqlagent_get_startup_info', database 'msdb', owner 'dbo'. [SQLSTATE 42000] 2013-09-20 09:46:12 - ? [100] Microsoft SQLServerAgent 8.00.2039 版(內部版本號 x86 unicode retail): 進程 ID 2013-09-20 09:46:12 - ? [100] Microsoft SQLServerAgent 8.00.2039 版(內部版本號 x86 unicode retail): 進程 ID 796 2013-09-20 09:46:12 - ? [101] SQL Server 8.00.2039 版(0 連接限制) 2013-09-20 09:46:12 - ? [102] SQL Server ODBC 驅動程序 3.85.1117 版 2013-09-20 09:46:12 - ? [103] 正由驅動程序使用的 NetLib 是 DBMSSHRN.DLL;本地主機服務器是 2013-09-20 09:46:12 - ? [310] 檢測到 2 個處理器和 2048 MB RAM 2013-09-20 09:46:12 - ? [339] 本地計算機是 GETHRTESTW2KS,運行 Windows NT 5.0 (2195) Service Pack 4 2013-09-20 09:46:12 - ! [000] SQLServerAgent 必須可以以 SysAdmin 身份連接到 SQLServer,但是“(未知)”不是 SysAdmin 角色的成員 2013-09-20 09:46:13 - ? [098] SQLServerAgent 已終止 (正常)
看來是權限問題,但是具體原因又不太清除,搜索后終於在這位老兄的博客http://www.sqldbadiaries.com/2011/01/17/sql-server-agent-does-not-start-unknown-is-not-a-member-of-the-sysadmin-role/找到答案,生產環境是用一個NT賬號(域賬號)啟動該服務,
但是在測試環境使用本地系統賬號(Local System)
但是由於BUILTIN\Administrators這個登錄名沒有sysadmin服務器角色,所以啟動上面的SQL SERVER代理服務時,就報那個錯誤了。只需要勾選上sysadmin角色,然后重啟該服務就OK了