建立作業步驟
作業步驟是指作業對資料庫或伺服器所採取的動作,每一個作業必須至少有一個作業步驟。作業步驟可以是:
- 可執行檔程式與作業系統命令。
- Transact-SQL 陳述式,包括預存程序和擴充預存程序。
- Microsoft ActiveX Script。
- 複寫工作。
- SQL Server Analysis Services 工作。
- Integration Services 封裝。
每個作業步驟都是在特定的安全性內容中執行。如果作業步驟指定 Proxy,則作業步驟會在該 Proxy 認證的安全性內容中執行。如果作業步驟未指定 Proxy,則作業步驟會在 SQL Server Agent 服務帳戶的內容中執行。只有系統管理員 (sysadmin) 固定伺服器角色的成員,才可以建立未明確指定 Proxy 的作業。
因為作業步驟是在特定 Microsoft Windows 使用者的內容中執行,因此該使用者需具備讓作業步驟執行所必要的權限和組態。例如,如果您建立了一個作業,它需要磁碟機代號或通用命名慣例 (UNC) 路徑,則在測試工作時,其作業步驟應該會在您的 Microsoft Windows 使用者帳戶下執行。不過,作業步驟的 Windows 使用者也必須具備必要的權限、磁碟機代號組態或必要磁碟機的存取權,否則,作業步驟會失敗。若要防止此問題發生,請確定每一個作業步驟的 Proxy,對於作業步驟所執行的工作都具有必要權限。如需詳細資訊,請參閱<SQL Server 的安全性考量>。
作業步驟記錄
SQL Server Agent 可以將某些作業步驟的輸出寫入作業系統檔案,或 msdb 資料庫中的 sysjobstepslogs 資料表。以下作業步驟類型可以寫入輸出至兩個目的地:
- 可執行檔程式與作業系統命令。
- Transact-SQL 陳述式。
- Analysis Services 工作。
當執行作業步驟的使用者是系統管理員 (sysadmin) 固定伺服器角色的成員時,這些作業步驟才可以將作業步驟輸出寫入作業系統檔案。如果執行作業步驟的使用者是 msdb 資料庫中的 SQLAgentUserRole、SQLAgentReaderRole 或 SQLAgentOperatorRole 固定資料庫角色的成員,則這些作業步驟的輸出只能寫入 sysjobstepslogs 資料表中。
當作業或作業步驟遭到刪除時,作業步驟記錄也會跟著自動刪除。
附註: |
---|
複寫工作和 Integration Services 封裝作業步驟的記錄是由其個別的子系統處理,您不能使用 SQL Server Agent 來設定這些作業步驟類型的作業步驟記錄。 |
可執行程式和作業系統命令類型的作業步驟
可執行程式和作業系統命令可以作為作業步驟,這些檔案的副檔名為 .bat、.cmd、.com 或 .exe。
當您使用可執行程式或作業系統命令作為作業步驟時,必須指定:
- 指令成功時傳回的處理序結束代碼。
- 要執行的命令。若要執行作業系統命令,此處是指命令本身;若為外部程式,則是指程式名稱和程式的引數,例如:C:\Program Files\Microsoft SQL Server\90\Tools\Binn\sqlcmd.exe -e -q "sp_who"
附註: 如果可執行檔不在系統路徑或執行作業步驟的使用者路徑中,您必須提供可執行檔的完整路徑。
若要以可執行程式建立作業步驟
若要重設 SQL Server Agent 權限
Transact-SQL 作業步驟
當您建立 Transact-SQL 作業步驟時,必須:
- 識別用來執行作業的資料庫。
- 輸入要執行的 Transact-SQL 陳述式。陳述式可以呼叫預存程序或擴充預存程序。
(選擇性) 您也可以開啟現有的 Transact-SQL 檔案作為作業步驟的命令。
Transact-SQL 作業步驟不使用 SQL Server Agent Proxy。相反地,如果作業步驟的擁有者是系統管理員 (sysadmin) 固定伺服器角色的成員,則作業步驟會以作業步驟的擁有者或以 SQL Server Agent 服務帳戶來執行。系統管理員 (sysadmin) 固定伺服器角色的成員也可以指定 Transact-SQL 作業步驟在另一個使用者內容之下執行,方法是使用 sp_add_jobstep 預存程序的 database_user_name 參數。如需詳細資訊,請參閱<sp_add_jobstep (Transact-SQL)>。
附註: |
---|
單一 Transact-SQL 作業步驟可包含多個批次;Transact-SQL 作業步驟可包含內嵌 GO 命令。 |
若要建立 Transact-SQL 作業步驟
若要定義 Transact-SQL 作業步驟選項
ActiveX Scripting 作業步驟
建立 ActiveX Scripting 作業步驟時,您必須:
- 確認撰寫作業步驟所用的指令碼語言。
- 撰寫 ActiveX Script。
您也可以開啟一個現存的 ActiveX Script 檔作為該作業步驟的指令。另外,ActiveX Script 命令也可以在外部編譯 (例如,使用 Microsoft Visual Basic),然後再當成可執行程式來執行。
當作業步驟指令是一個 ActiveX Script 時,您可以使用 SQLActiveScriptHost 物件將輸出列印到作業步驟歷程記錄,或者是建立 COM 物件。SQLActiveScriptHost 是由 SQL Server Agent 主控系統導入指令碼命名空間內的全域物件。此物件有兩個方法 (Print 和 CreateObject)。下列範例顯示 ActiveX Scripting 在 Visual Basic Scripting Edition (VBScript) 中如何運作。
' VBScript example for ActiveX Scripting job step
Sub main()
' Create a Smo.Server object. The object connects to the
' server on which the script is running.
Set SmoServer = _
CreateObject ("Microsoft.SqlServer.Management.Smo.Server")
' Check the number of active connections for AdventureWorks.
ConnectionCount = _
SmoServer.GetActiveDbConnectionCount("AdventureWorks")
' If there are active connections, close the connections.
If ConnectionCount > 0 Then
' Log in the job history that this job step dropped
' connections to AdventureWorks.
Print ("Dropping connections to AdventureWorks." + crLf )
' Drop all active connections to AdventureWorks.
SmoServer.DropAllActiveDbConnections("AdventureWorks")
End If
End Sub
下列範例顯示 JScript 中的相同工作:
// JScript example for ActiveX job step
function main() {
// Create a Smo.Server object. The object connects to the
// server on which the script is running.
var SmoServer =
CreateObject("Microsoft.SqlServer.Management.Smo.Server");
// Check the number of active connections for AdventureWorks.
var ConnectionCount =
SmoServer.GetActiveDbConnectionCount("AdventureWorks");
// If there are active connections, close the connections.
if (ConnectionCount > 0) {
// Log in the job history that this job step dropped
// connections to AdventureWorks.
Print ("Dropping connections to AdventureWorks.\n");
// Drop all active connections to AdventureWorks.
SmoServer.DropAllActiveDbConnections("AdventureWorks");
}
}
若要建立 ActiveX Script 作業步驟
複寫作業步驟
當您利用複寫建立發行集和訂閱時,依預設會建立複寫作業。建立的作業類型取決於複寫類型 (快照式、交易式或合併式) 和所使用的選項。
複寫作業步驟會啟動以下複寫代理程式的其中之一:
- 快照集代理程式 (快照集作業)
- 記錄讀取器代理程式 (LogReader 作業)
- 散發代理程式 (散發作業)
- 合併代理程式 (合併作業)
- 佇列讀取器代理程式 (QueueReader 作業)
設定複寫時,您可以指定以三種方式之一來執行複寫代理程式:在 SQL Server Agent 啟動之後持續執行、視需要執行或根據排程執行。如需複寫代理程式的詳細資訊,請參閱<複寫代理程式概觀>。
SQL Server Analysis Services 作業步驟
SQL Server Agent 支援兩個不同類型的 SQL Server Analysis Services 作業步驟,即命令作業步驟和查詢作業步驟。
SQL Server Analysis Services 命令作業步驟
建立 Analysis Services 命令作業步驟時,您必須:
- 識別要執行作業步驟的資料庫 OLAP 伺服器。
- 輸入要執行的陳述式。陳述式必須是 XML for Analysis Services Execute 方法。陳述式可能不包含完整的 SOAP Envelope 或 XML for Analysis Services Discover 方法。請注意,SQL Server Management Studio 支援完整的 SOAP Envelope 和 Discover 方法,但 SQL Server Agent 作業步驟並不支援。
如需 XML for Analysis Services 的詳細資訊,請參閱<XML for Analysis Overview (XMLA)>。
SQL Server Analysis Services 查詢作業步驟
建立 Analysis Services 查詢作業步驟時,您必須:
- 識別要執行作業步驟的資料庫 OLAP 伺服器。
- 輸入要執行的陳述式。陳述式必須為多維度運算式 (MDX) 查詢。
如需 MDX 的詳細資訊,請參閱<MDX 查詢基礎觀念 (MDX)>。
Integration Services 封裝
建立 Integration Services 封裝作業步驟時,您必須:
- 識別封裝的來源。
- 識別封裝的位置。
- 如果組態檔是封裝所必要的,請識別組態檔。
- 如果命令檔是封裝所必要的,請識別命令檔。
- 識別要用於封裝的驗證。例如,您可以指定封裝必須加以簽署,或封裝必須有特定的封裝識別碼。
- 識別封裝的資料來源。
- 識別封裝的記錄提供者。
- 指定在執行封裝之前要設定的變數和值。
- 識別執行選項。
- 新增或修改命令列選項。
如需有關建立用於執行 Integration Services 封裝之作業步驟的詳細資訊,請參閱<如何:使用 SQL Server Agent 作業執行封裝>。
請參閱
概念
其他資源
sysjobstepslogs (Transact-SQL)
sp_add_job (Transact-SQL)