共用方式為


建立作業步驟

作業步驟是指作業對資料庫或伺服器所採取的動作,每一個作業必須至少有一個作業步驟。作業步驟可以是:

  • 可執行檔程式與作業系統命令。
  • 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 資料庫中的 SQLAgentUserRoleSQLAgentReaderRoleSQLAgentOperatorRole 固定資料庫角色的成員,則這些作業步驟的輸出只能寫入 sysjobstepslogs 資料表中。

當作業或作業步驟遭到刪除時,作業步驟記錄也會跟著自動刪除。

ms187056.note(zh-tw,SQL.90).gif附註:
複寫工作和 Integration Services 封裝作業步驟的記錄是由其個別的子系統處理,您不能使用 SQL Server Agent 來設定這些作業步驟類型的作業步驟記錄。

可執行程式和作業系統命令類型的作業步驟

可執行程式和作業系統命令可以作為作業步驟,這些檔案的副檔名為 .bat、.cmd、.com 或 .exe。

當您使用可執行程式或作業系統命令作為作業步驟時,必須指定:

  • 指令成功時傳回的處理序結束代碼。
  • 要執行的命令。若要執行作業系統命令,此處是指命令本身;若為外部程式,則是指程式名稱和程式的引數,例如:C:\Program Files\Microsoft SQL Server\90\Tools\Binn\sqlcmd.exe -e -q "sp_who"
    ms187056.note(zh-tw,SQL.90).gif附註:
    如果可執行檔不在系統路徑或執行作業步驟的使用者路徑中,您必須提供可執行檔的完整路徑。
若要以可執行程式建立作業步驟
若要重設 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)>。

ms187056.note(zh-tw,SQL.90).gif附註:
單一 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 主控系統導入指令碼命名空間內的全域物件。此物件有兩個方法 (PrintCreateObject)。下列範例顯示 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)

說明及資訊

取得 SQL Server 2005 協助