翻譯(十四)——通往SQL Server代理的階梯-二級:作業步驟和子系統
翻譯(十四)——通往SQL Server代理的階梯-二級:作業步驟和子系統
Richard Waymire,2017/10/11(首次出版:2011/02/17)
鏈接: http://www.sqlservercentral.com/articles/SQL+Agent/Job+Steps+and+Subsystems/72268/
該系列
本文是樓梯系列的一部分:SQL Server代理的階梯
SQL Server代理是任何實時數據庫系統的核心。代理有許多不太明顯的用途,因此對於開發人員和dba來說,系統的知識總是有用的。Richard Waymire提供了一個簡單的解釋。
SQL Server代理作業是由一系列的一個或多個作業步驟組成的。一個作業步驟被分配到一個特定的工作子系統,它確定了工作步驟將要執行的工作類型。每個作業步驟都在一個單獨的安全上下文中運行,盡管每個作業也有一個所有者決定誰可以修改該作業。本文將重點討論組成sqlserver代理作業的作業步驟和子系統。
快速回顧一下工作
認為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代理子系統。
翻譯(十四)——通往SQL Server代理的階梯-二級:作業步驟和子系統