翻譯(十四)——通往SQL Server代理的階梯-二級:做業步驟和子系統sql
Richard Waymire,2017/10/11(首次出版:2011/02/17)shell
連接: http://www.sqlservercentral.com/articles/SQL+Agent/Job+Steps+and+Subsystems/72268/數據庫
該系列安全
本文是樓梯系列的一部分:SQL Server代理的階梯服務器
SQL Server代理是任何實時數據庫系統的核心。代理有許多不太明顯的用途,所以對於開發人員和dba來講,系統的知識老是有用的。Richard Waymire提供了一個簡單的解釋。sqlserver
SQL Server代理做業是由一系列的一個或多個做業步驟組成的。一個做業步驟被分配到一個特定的工做子系統,它肯定了工做步驟將要執行的工做類型。每一個做業步驟都在一個單獨的安全上下文中運行,儘管每一個做業也有一個全部者決定誰能夠修改該做業。本文將重點討論組成sqlserver代理做業的做業步驟和子系統。spa
快速回顧一下工做操作系統
認爲SQL Server代理做業的最佳方式是將執行給定任務所需的其餘組件的集合相關聯的容器。工做的主要組成部分是工做步驟、進度、警報和通知。翻譯
當一個任務被建立時,一個全部者被分配到該任務中。正如第1級所提到的,默認狀況下,全部者將是建立工做的用戶(經過transact - SQL、經過sp_add_job系統存儲過程或使用SQL Server Management Studio)。SQL Server代理的大多數功能都假定您是一個sysadmin服務器角色成員。若是您是,那麼您或任何其餘sysadmin角色成員能夠在建立工做後修改該工做。若是您但願一個非sysadmin角色成員可以修改該做業,那麼您應該更改該用戶的登陸名。請注意,sysadmin成員能夠更改任何工做,而不考慮工做全部權。代理
工做的步驟
如第1級所述,SQL Server代理做業由至少一個做業步驟組成。當大多數人想到一份工做的時候,他們對SQL Server的真正含義是工做步驟。做業步驟由您但願執行的操做類型定義,每一個做業步驟將由下列工做子系統中的一個執行:
ActiveX
操做系統(CMDExec)
Powershell
各類複製任務
SQL Server Analysis Services(SSAS)命令(即XML /A)
SQL Server Analysis Services(SSAS)查詢(MDX)
SQL Server Integration Services(SSIS)包(SQL Server 2000中的DTS包)
transact - sql腳本(t - sql)
讓咱們建立一個做業和必要的做業步驟,以備份主數據庫。建立一個新工做,我將其稱爲「備份主」,如圖1所示。
圖1 -建立新工做
如今單擊步驟選項卡來查看工做步驟,並單擊New…彈出新的做業步對話框(圖2)。
圖2 -建立新的工做步驟
在開始備份以前,我已經填寫了這個任務的步驟,以執行主數據庫的完整性檢查。我本能夠一步一步地完成全部工做,可是我想讓您知道步驟之間的工做流程。我已經給出了個人步驟名稱,「檢查主數據庫的完整性」,並將類型設置爲transact - sql。數據庫上下文是master。我在文本框中添加了一個簡單的命令:
DBCC CHECKDB
爲了這個對話,有幾個解釋。類型下拉是選擇SQL Server代理子系統的地方。下面將描述可能的子系統。沒有用於transact - sql做業步驟的安全代理賬戶,所以做業步驟將在做業全部者的上下文中運行。安全代理賬戶容許使用不一樣用戶的安全上下文運行做業步驟,而且一般用於不屬於sysadmin角色成員的做業。
您選擇的做業子系統將會更改對話框其他部分的內容。對於transact - sql做業步驟,提供了一個簡單的文本框,供您輸入transact - sql,就像我在這裏所作的那樣。每一個做業步驟可能有一個與之相關的不一樣子系統。
接下來,單擊new job步驟的Advanced選項卡。您將看到如圖3所示的屏幕。On success動做定義了成功完成工做步驟後所發生的事情。默認選項是進入下一個步驟,意思是若是在一個做業中有多個步驟,而這個工做,執行下一個步驟。若是您單擊下拉菜單,您將看到其餘選項——包括退出工做(得到成功或失敗通知),或跳轉到另外一個步驟。注意最後一個選項,跳到另外一個步驟,直到你至少在工做的第二步纔出現。
圖3 -新工做步驟高級選項
若是一個步驟因某種緣由而失敗,您能夠選擇能夠從新嘗試工做步驟的嘗試次數。您還能夠在每次嘗試成功完成做業步驟之間指定一個延遲(分鐘)。下面是失敗操做(即工做步驟沒法完成或以錯誤代碼結束)。選項與成功的選項是同樣的,有不一樣的缺省值(正如您所指望的那樣)。
由於這是transact - sql做業步驟類型,您能夠將transact - sql命令的任何輸出記錄到輸出文件(就像sqlcmd中的- o選項)。您還能夠將結果記錄到一個表中(MSDB中的sysjobstepslogs表)。
單擊OK,而後單擊New以添加到該做業的第2步。假設第1步沒有產生錯誤,接下來的做業將返回主數據庫。下面是來自個人系統的命令(如圖4所示):
BACKUP DATABASE [master] TO DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL10_50.MSSQLSERVER\MSSQL\Backup\master.bak' WITH INIT
圖4 -備份主數據庫的第二個工做步驟
由於這是工做的結束,點擊高級選項卡,選擇「成功行動」做爲「放棄工做報告成功」。這就是它——您應該可以單擊OK,並看到完整的做業步驟,如圖5所示。
圖5 -完成的工做
如今單擊OK完成定義做業並運行該做業。當您單擊以運行該做業時,請注意,由於有多個步驟,您如今能夠詢問您想要開始工做的哪一個步驟。從第一步開始運行(如圖6所示),並觀察工做的流程,由於第一步成功運行,而後移動到做業的第二步和最後一步。
圖6 -開始工做(選擇步驟1)
成功完成後,做業將標記成功並退出(如圖7所示)。
圖7 -做業已成功運行
工做子系統
您將使用7個主要的工做子系統。這個數字不包括複製子系統,由於它們是一個特殊的狀況,一般這些工做步驟和做業是由複製組件建立的,而不是由DBA建立的。咱們將把對三個分析服務子系統的討論推遲到下一個級別,由於它們有幾個獨特的考慮。
transact - sql腳本(t - sql)
transact - sql子系統很是簡單,極可能是您將建立的最多見的工做步驟。它容許您針對SQL Server代理的本地實例運行transact - SQL(但不是sqlcmd擴展到transact - SQL)。注意,與分析服務子系統不一樣,您只能鏈接到本地SQL服務器實例。還要注意,transact - sql沒有代理能力,所以t - sql的做業步驟老是在做業全部者的安全上下文中運行。
ActiveX腳本
ActiveX子系統容許您運行VBScript、Jscript或其餘自定義腳本語言(在理論上)。默認狀況下,腳本將在SQL Server代理服務賬戶的安全上下文中運行。若是您精通VBScript,這多是一個方便的子系統,可是子系統已被棄用爲SQL Server 2008,您應該使用PowerShell子系統。
操做系統(CmdExec)
CmdExec子系統容許您運行操做系統命令(就像您有一個命令提示符打開同樣)。命令將在SQL Server代理服務賬戶的安全上下文中運行。這裏要記住的關鍵是(在ActiveX子系統中),沒有用戶可以單擊或接受任何提示,因此請確保您的腳本在沒有用戶干預的狀況下運行。
PowerShell
PowerShell子系統容許您運行Windows PowerShell 1.0或2.0兼容腳本。與其餘腳本子系統同樣,默認狀況下腳本將在SQL Server代理服務賬戶的安全上下文中運行。PowerShell很是強大,您應該認真研究一下您對PowerShell的瞭解。PowerShell將容許您鏈接到遠程系統,所以這是一個繞過transact - SQL子系統鏈接到遠程SQL服務器實例的方法。
下次
如您所見,SQL Server代理做業步驟是工做內容的核心。有許多不一樣的子系統可供使用,每一個子系統提供不一樣的功能。在此樓梯的下一步中,我將檢查代理功能,以加強對做業步驟的安全性,以及用於分析服務的其餘SQL代理子系統。