原文連接:http://www.sqlservercentral.com/articles/SQL+Agent/Job+Steps+and+Subsystems/72268/sql
By Richard Waymire, 2017/10/11 (first published: 2011/02/17)shell
本文是樓梯系列的一部分:樓梯SQL Server代理數據庫
SQL Server代理是任何實時數據庫系統的核心。 使用的代理有不少並不老是很明顯,因此係統的知識老是有用的,開發人員和dba。 理查德Waymire提供了一個簡單的解釋,它的許多用途。安全
SQL Server代理工做是由一個或多個工做的一系列步驟。 工做步驟是分配給一個特定的工做子系統,它標識的工做步驟是要執行的工做。 每一個工做步驟運行在一個單獨的安全上下文,儘管每一個工做也有一個主人,決定誰能夠修改工做。 本文將關注的工做步驟和子系統組成一個SQL服務器代理工做。服務器
最好的方法認爲SQL Server代理工做是一個容器,將一組其餘組件,須要執行一個給定的任務。 一份工做的主要成分是工做步驟,時間表,警報和通知。sqlserver
當建立一個工做,一個全部者分配給的工做。 所一級,默認狀況下,業主將建立工做的用戶(不管是transact - sql,經過sp_add_job系統存儲過程或使用SQL Server Management Studio)。 大部分的設施的SQL服務器代理假設你是一個系統管理員服務器角色的成員。 若是你是,那麼你或任何其餘系統管理員能夠修改工做一旦建立角色成員。 若是你想要那些角色成員可以修改工做,那麼你應該改變工做老闆是用戶的登陸。 請注意,系統管理員成員能夠改變任何工做,無論工做的全部權。spa
1級提到過,一個SQL服務器代理工做是由至少一個做業步驟。 當大多數人認爲的工做執行一些工做,他們真正的意思是SQL Server是一個工做的步驟。 工做步驟是定義的類型您想要執行的行動,和每一個工做步驟將執行下列工做子系統之一:操作系統
讓咱們建立一個工做,和必要的工做步驟,備份主數據庫。 建立一個新的工做,我叫我「備份主」如圖1所示。3d
圖1——建立一個新的工做代理
如今單擊步驟選項卡來查看工做步驟,並單擊New…彈出新的做業步對話框(圖2)。
圖2——建立一個新的工做步驟
我填寫這份工做中的步驟執行完整性檢查主數據庫在咱們開始以前的備份。 我所能作的一切在一個步驟,但想告訴你步驟之間的工做流程。 我已經給個人步驟名稱、「檢查DB的完整性,並將類型設置爲transact - sql。 數據庫環境的主人。 我把一個簡單的命令在文本框:
DBCC CHECKDB
一些解釋爲了使這個對話框。 類型下拉選擇SQL Server代理子系統。 可能的子系統將在下面描述。 沒有安全代理佔transact - sql的工做步驟,因此做業步驟將運行在老闆的背景下工做。 運行安全代理賬戶啓用工做一步一個不一樣的用戶的安全上下文,和一般用於工做不歸系統管理員角色的成員。
您選擇的工做子系統將改變其餘對話框的內容。 transact - sql的工做步驟,爲您提供一個簡單的文本框輸入你的transact - sql,正如我在這裏完成。 每一個工做步驟相關聯的可能有一個不一樣的子系統。
接下來,單擊高級選項卡爲新工做步驟。 您將看到如圖3所示的屏幕。 成功的行動定義做業步驟成功完成後會發生什麼。 默認選擇是去下一個步驟,這意味着若是有多個步驟的工做,這個工做,執行下一步。 若是你點擊下拉,你會看到其餘選項,包括退出工做(不管是成功或失敗的通知),或跳躍到另外一個步驟。 注意,最後一個選項,跳躍到另外一個步驟,纔出現你至少在第二步的工做。
圖3 -高級選項的新工做步驟
若是一個步驟失敗因爲某種緣由,你能夠選擇的數量,能夠嘗試重試做業步驟。 你也能夠指定一個延遲(分鐘)之間嘗試成功完成的工做步驟。 下面是失敗的行爲(即工做步驟是沒法完成或結束在一個錯誤代碼)。 選項是同樣的成功,與一個不一樣的默認(與您預期的同樣)。
由於這是一個transact - sql批量做業步驟類型,你能夠有任何transact - sql命令的輸出被記錄到一個輸出文件(就像在sqlcmd - o選項)。 你也能夠一個表(記錄結果sysjobstepslogs在MSDB表)。
單擊OK,而後單擊新添加第二步工做。 假設第一步沒有生成一個錯誤,下一個備份的工做步驟主數據庫。 從個人系統的命令(如圖4所示):
備份數據庫(主)磁盤= N 'C:\ Program Files \ Microsoft SQL Server \ MSSQL10_50.MSSQLSERVER \該備份\ \ master.bak ' 與初始化
圖4,第二個工做步驟備份主數據庫
由於這是工做的結束,點擊先進的選項卡並選擇成功行動爲「辭職報告成功。 「就是這樣,您應該可以點擊OK,看看完成的工做步驟,如圖5所示。
圖5 -完成的工做
如今單擊OK完成定義工做,運行工做。 當你點擊運行工做,注意,由於有多個步驟你如今問這一步你想開始工做。 運行做業的第一步(如圖6),並觀察工做的流程第一步成功運行,而後移動到第二個和最後一步的工做。
圖6 -開始工做步驟(選擇步驟1)
一旦成功完成,工做是標誌着成功,退出(如圖7)。
圖7——這項工做已經成功運行
有七個主要工做子系統,您將使用。 這個數字不包括複製子系統,由於他們是一個特殊狀況,一般這些工做步驟和工做是由複製組件而不是DBA。 咱們將推遲討論的三個分析服務子系統爲下一個水平,他們有幾個獨特的考慮。
transact - sql子系統很簡單,多是最多見的類型的工做步驟將建立。 它容許您運行transact - sql(但不是sqlcmd擴展transact - SQL)針對本地SQL Server的實例,這個實例的隸屬於SQL Server代理。 注意,與分析服務子系統,你只能鏈接到本地SQL Server實例。 還要注意,沒有transact - sql代理能力,因此t - sql的工做步驟老是運行在安全上下文中工做的全部者。
ActiveX子系統容許您運行VBScript、Jscript或其餘自定義腳本語言(在理論上)。 在默認狀況下,腳本將運行在安全上下文中的SQL Server代理服務賬戶。 若是你精通VBScript這多是一個方便的子系統,可是子系統已經棄用的SQL Server 2008,您應該使用PowerShell子系統。
CmdExec子系統容許您運行操做系統命令(若是你有一個命令提示符打開)。 的命令將運行SQL Server代理服務賬戶的安全上下文中。 這裏要記住的重要的事情(和ActiveX子系統)是沒有用戶可以點擊或接受任何提示,因此確保你的腳本將運行沒有用戶干預。
PowerShell子系統容許您運行Windows PowerShell腳本1.0或2.0兼容。 子系統與其餘腳本,該腳本將在默認狀況下在安全上下文中運行的SQL Server代理服務賬戶。 PowerShell是很是強大的,你應該認真調查PowerShell的增加你的知識。 PowerShell將容許您鏈接到遠程系統,這是一個在限制transact - SQL子系統的鏈接到遠程的SQL服務器的實例。
正如您能夠看到的,SQL Server代理工做步驟問題的核心工做內容。 許多不一樣的子系統,每一個給你不一樣的功能。 在這樓梯的下一步,我將檢查代理功能,提升安全工做步驟,以及其餘SQL代理子系統進行分析服務。