今天弄SqlServer代理作業,弄了半天,把遇到的問題總結出來,主要是抨擊一下Sql Server的Express版本。好了,看下面的正題。
首先,需要安裝Sql Server Agent服務,該服務可以在Sql Server配置管理器中查看是安裝成功,然后啟動該服務。在這一步中,保證與Sql Server Agent服務與對應的Sql Server數據服務都不是Express版本。
Express版本有很多限制:1、數據庫容量限制到4GB。2、沒有表分區功能。3、不支持Sql Server代理,如果大家還有什么對Express的控訴,歡迎補充。
其次,保證Sql Server Management studio也不是Express版本。
在解決了安裝的問題后,就能夠很方便的享用Sql Server的定時作業了。
定時作業分為幾個部分:
1、新建作業
2、新建作業步聚
3、新建作業計划
好了,在看到上面的界面后就能輕松搞定自己的作業了。
如果新建作業時出現如下錯誤:
無法將類型為“Microsoft.SqlServer.Management.Smo.SimpleObjectKey”的對象強制轉換為類型“Microsoft.SqlServer.Management.Smo.Agent.JobObjectKey”。 (Microsoft.SqlServer.Smo)
那么就去微軟官方網下載sp2,鏈接如下:
http://www.microsoft.com/downloads/details.aspx?familyid=D07219B2-1E23-49C8-8F0C-63FA18F26D3A&displaylang=zh-cn
打開鏈接,就是: Microsoft SQL Server 2005 Service Pack 2
點擊"下載以下文件"后,可以看到:
SQLServer2005SP2-KB921896-x64-CHS.exe
SQLServer2005SP2-KB921896-x86-CHS.exe
選擇x86的,下載並安裝,然后可以創建作業了!
網上找了些SqlSever代理作業的資料,比較好,粘貼出來,如果涉及版權,請原作者聯系我,我將及時刪除。
MS SQL Server:定時作業的設置方法
如果在SQL Server 里需要定時或者每隔一段時間執行某個存儲過程或3200字符以內的SQL語句時,可以用管理->SQL Server代理->作業來實現。
1、管理->SQL Server代理->作業(按鼠標右鍵)->新建作業
2、新建作業屬性(常規)->名稱[自定義本次作業的名稱]->啟用的方框內是勾號->分類處可選擇也可用默認的[未分類(本地)]->所有者默認為登錄SQL Server用戶[也可選其它的登錄]->描述[填寫本次工作詳細描述內容];
創建作業分類的步驟: SQL Server代理->作業->右鍵選所有任務->添加、修改、刪除
3、新建作業屬性(步驟)->新建->步驟名[自定義第一步驟名稱]->類型[Transact-SQL(TSQL)腳本]->數據庫[要操作的數據庫]->命令 [ 如果是簡單的SQL直接寫進去即可,也可用打開按鈕輸入一個已寫好的*.sql。文件如果要執行存儲過程,填 exec p_procedure_name v_parameter1,[ v_parameter2…v_parameterN] ->確定 (如果有多個步驟,可以再次調用下面的新建按鈕;也可以對已有的多個步驟插入、編輯、刪除);
4、建作業屬性(調度)->新建調度->名稱[自定義調度名稱]->啟用的方框內是勾號->調度->反復出現-> 更改[調度時間表]->確定(如果只要保存此作業,不要定時做可以把啟用的方框內是勾號去掉);
5、建作業屬性(通知)->用默認的通知方法就好[當作業失敗時,寫入Windows應用程序系統日志] ->確定。
跟作業執行相關的一些SQL Server知識:
SQL Server Agent服務必須正常運行,啟動它的NT登錄用戶要跟啟動SQL Server數據庫的NT登錄用戶一致;
點作業右鍵可以查看作業執行的歷史記錄情況,也可以立即啟動作業和停止作業。
最近在看作業歷史記錄時,發現有的作業記錄的歷史記錄多,有的作業記錄的記錄的歷史記錄少。如何能使某些作業按各自的需求,保留一段時間.比如保留一個月的歷史記錄.看了SQL Server的在線幫助文檔,里面介紹說:
在管理->SQL Server代理->右鍵選屬性->作業系統->限制作業歷史記錄日志的大小
作業歷史記錄日志的最大大小(行數) ,默認為1000 。如果某台機器的作業數量很多,一定要提高它,例如為100000,每個作業歷史記錄日志的最大行數,默認為100。如果作業每天執行兩次,需要保留一個月的日志,可以設為60它們之間有一個相互制約關系, 我們可以根據自己的需要來改。
如果SQL Server服務器改過機器名,管理是舊名稱時建立的job的時候可能會遇到。錯誤14274: 無法添加、更新或刪除從MSX服務器上發起的作業(或其步驟或調度)。看了Microsoft的文檔:http://support.microsoft.com/default.aspx?scid=kb;en-us;281642說SQL Server 2000系統里msdb..sysjobs 里originating_server 字段里存的是原來的服務器的名稱。24X7在用的系統肯定不能按上面Microsoft的文檔說的那樣把名字改回來又改過去。於是想,msdb..sysjobs 能否update originating_server 字段成現在在用的新服務器名?
use msdb select * from sysjobs |
找到originating_server 字段還是舊服務器的job_id, 然后執行update語句:
update sysjobs set originating_server='new_server_name' where job_id='B23BBEBE-A3C1-4874-A4AB-0E2B7CD01E14' |
(所影響的行數為 1 行)
這樣就可以添加、更新或刪除那些曾經出error 14274 的作業了。
如果想把作業由一台機器遷移到另一台機器,可以先保留好創建作業的腳本, 然后在另一台機器上運行。
導出所有作業的創建腳本操作步驟:
管理->SQL Server代理->作業(鼠標右鍵)->所有任務->生成SQL腳本->保存到操作系統下的某個sql文件
導出某一個作業的創建腳本操作步驟:
管理->SQL Server代理->作業->選中待轉移的作業(鼠標右鍵)->所有任務->生成SQL腳本->保存到OS下的某個sql文件
然后在目的服務器上運行剛才保存下來的創建作業的sql腳本。( 如果建作業的用戶或者提醒的用戶不存在,則會出錯; 我們需要在目的服務器上建立相關的WINDOWS用戶或者SQL Server數據庫登錄, 也可以修改創建作業的腳本, 把目的服務器上不存在的用戶替換成已經有的用戶。如果生成日志的物理文件目錄不存在,也應該做相關的修改,例如d:/區轉f:/區等字符串的 @command 命令里有分隔符號 go 也會出錯, 可以把它去掉)