使用 SQL Server Agent 排程自動管理工作
適用於:sql ServerAzure SQL 資料庫 Azure SQL 受控執行個體 Microsoft Fabric 中的 Azure Synapse Analytics SQL 資料庫
在 SMO 中,SQL Server Agent 是由下列物件表示:
物件 JobServer 有三個作業集合、警示和運算符。
物件 OperatorCollection 代表呼叫器、電子郵件地址和 net send 運算符的清單,這些運算符可由 Microsoft sql Server Agent 自動通知事件。
物件 AlertCollection 代表一份情況清單,例如 SQL Server 所監視的系統事件或效能條件。
物件 JobCollection 稍微複雜一點。 它代表以指定排程執行的多重步驟工作清單。 步驟和排程資訊會儲存在和 JobSchedule 物件中JobStep。
SQL Server Agent 對象位於 命名空間中 Microsoft.SqlServer.Management.Smo.Agent 。
範例
若要使用提供的任何程式代碼範例,您必須選擇程式設計環境、程式設計範本,以及用來建立應用程式的程式設計語言。 如需詳細資訊,請參閱 在Visual Studio .NET 中建立Visual C# SMO 專案。
對於使用 SQL Server Agent 的程式,您必須包含 using 語句來限定 Agent 命名空間。 將語句插入其他 using 語句之後,於應用程式中的任何宣告之前,例如:
using Microsoft.SqlServer.Management.Smo;
using Microsoft.SqlServer.Management.Common;
using Imports Microsoft.SqlServer.Management.Smo.Agent;
在 Visual C 中使用步驟和排程建立作業#
此程式代碼範例會建立具有步驟和排程的作業,然後通知操作員。
{
//Connect to the local, default instance of SQL Server.
Server srv = new Server();
//Define an Operator object variable by supplying the Agent (parent JobServer object) and the name in the constructor.
Operator op = new Operator(srv.JobServer, "Test_Operator");
//Set the Net send address.
op.NetSendAddress = "Network1_PC";
//Create the operator on the instance of SQL Server Agent.
op.Create();
//Define a Job object variable by supplying the Agent and the name arguments in the constructor and setting properties.
Job jb = new Job(srv.JobServer, "Test_Job");
//Specify which operator to inform and the completion action.
jb.OperatorToNetSend = "Test_Operator";
jb.NetSendLevel = CompletionAction.Always;
//Create the job on the instance of SQL Server Agent.
jb.Create();
//Define a JobStep object variable by supplying the parent job and name arguments in the constructor.
JobStep jbstp = new JobStep(jb, "Test_Job_Step");
jbstp.Command = "Test_StoredProc";
jbstp.OnSuccessAction = StepCompletionAction.QuitWithSuccess;
jbstp.OnFailAction = StepCompletionAction.QuitWithFailure;
//Create the job step on the instance of SQL Agent.
jbstp.Create();
//Define a JobSchedule object variable by supplying the parent job and name arguments in the constructor.
JobSchedule jbsch = new JobSchedule(jb, "Test_Job_Schedule");
//Set properties to define the schedule frequency, and duration.
jbsch.FrequencyTypes = FrequencyTypes.Daily;
jbsch.FrequencySubDayTypes = FrequencySubDayTypes.Minute;
jbsch.FrequencySubDayInterval = 30;
TimeSpan ts1 = new TimeSpan(9, 0, 0);
jbsch.ActiveStartTimeOfDay = ts1;
TimeSpan ts2 = new TimeSpan(17, 0, 0);
jbsch.ActiveEndTimeOfDay = ts2;
jbsch.FrequencyInterval = 1;
System.DateTime d = new System.DateTime(2003, 1, 1);
jbsch.ActiveStartDate = d;
//Create the job schedule on the instance of SQL Agent.
jbsch.Create();
}
在 PowerShell 中使用步驟和排程建立作業
此程式代碼範例會建立具有步驟和排程的作業,然後通知操作員。
#Get a server object which corresponds to the default instance
$srv = New-Object -TypeName Microsoft.SqlServer.Management.SMO.Server
#Define an Operator object variable by supplying the Agent (parent JobServer object) and the name in the constructor.
$op = New-Object -TypeName Microsoft.SqlServer.Management.SMO.Agent.Operator -argumentlist $srv.JobServer, "Test_Operator"
#Set the Net send address.
$op.NetSendAddress = "Network1_PC"
#Create the operator on the instance of SQL Agent.
$op.Create()
#Define a Job object variable by supplying the Agent and the name arguments in the constructor and setting properties.
$jb = New-Object -TypeName Microsoft.SqlServer.Management.SMO.Agent.Job -argumentlist $srv.JobServer, "Test_Job"
#Specify which operator to inform and the completion action.
$jb.OperatorToNetSend = "Test_Operator";
$jb.NetSendLevel = [Microsoft.SqlServer.Management.SMO.Agent.CompletionAction]::Always
#Create the job on the instance of SQL Server Agent.
$jb.Create()
#Define a JobStep object variable by supplying the parent job and name arguments in the constructor.
$jbstp = New-Object -TypeName Microsoft.SqlServer.Management.SMO.Agent.JobStep -argumentlist $jb, "Test_Job_Step"
$jbstp.Command = "Test_StoredProc";
$jbstp.OnSuccessAction = [Microsoft.SqlServer.Management.SMO.Agent.StepCompletionAction]::QuitWithSuccess;
$jbstp.OnFailAction =[Microsoft.SqlServer.Management.SMO.Agent.StepCompletionAction]::QuitWithFailure;
#Create the job step on the instance of SQL Agent.
$jbstp.Create();
#Define a JobSchedule object variable by supplying the parent job and name arguments in the constructor.
$jbsch = New-Object -TypeName Microsoft.SqlServer.Management.SMO.Agent.JobSchedule -argumentlist $jb, "Test_Job_Schedule"
#Set properties to define the schedule frequency, and duration.
$jbsch.FrequencyTypes = [Microsoft.SqlServer.Management.SMO.Agent.FrequencyTypes]::Daily
$jbsch.FrequencySubDayTypes = [Microsoft.SqlServer.Management.SMO.Agent.FrequencySubDayTypes]::Minute
$jbsch.FrequencySubDayInterval = 30
$ts1 = New-Object -TypeName TimeSpan -argumentlist 9, 0, 0
$jbsch.ActiveStartTimeOfDay = $ts1
$ts2 = New-Object -TypeName TimeSpan -argumentlist 17, 0, 0
$jbsch.ActiveEndTimeOfDay = $ts2
$jbsch.FrequencyInterval = 1
$jbsch.ActiveStartDate = "01/01/2003"
#Create the job schedule on the instance of SQL Agent.
$jbsch.Create();
在 Visual C 中建立警示#
此程式代碼範例會建立由效能條件觸發的警示。 條件必須以特定格式提供:
ObjectName|CounterName|實例|ComparisionOp|CompValue
警示通知需要操作員。 此 Operator 類型需要方括弧,因為 運算符 是 C# 關鍵詞。
{
//Connect to the local, default instance of SQL Server.
Server srv = new Server();
//Define an Alert object variable by supplying the SQL Server Agent and the name arguments in the constructor.
Alert al = new Alert(srv.JobServer, "Test_Alert");
//Specify the performance condition string to define the alert.
al.PerformanceCondition = "SQLServer:General Statistics|User Connections||>|3";
//Create the alert on the SQL Agent.
al.Create();
//Define an Operator object variable by supplying the SQL Server Agent and the name arguments in the constructor.
Operator op = new Operator(srv.JobServer, "Test_Operator");
//Set the net send address.
op.NetSendAddress = "NetworkPC";
//Create the operator on the SQL Agent.
op.Create();
//Run the AddNotification method to specify the operator is notified when the alert is raised.
al.AddNotification("Test_Operator", NotifyMethods.NetSend);
}
在 PowerShell 中建立警示
此程式代碼範例會建立由效能條件觸發的警示。 條件必須以特定格式提供:
ObjectName|CounterName|實例|ComparisionOp|CompValue
警示通知需要操作員。 此 Operator 類型需要方括弧,因為 運算符 是 C# 關鍵詞。
#Get a server object which corresponds to the default instance
$srv = New-Object -TypeName Microsoft.SqlServer.Management.SMO.Server
#Define an Alert object variable by supplying the SQL Agent and the name arguments in the constructor.
$al = New-Object -TypeName Microsoft.SqlServer.Management.SMO.Agent.Alert -argumentlist $srv.JobServer, "Test_Alert"
#Specify the performance condition string to define the alert.
$al.PerformanceCondition = "SQLServer:General Statistics|User Connections||>|3"
#Create the alert on the SQL Agent.
$al.Create()
#Define an Operator object variable by supplying the Agent (parent JobServer object) and the name in the constructor.
$op = New-Object -TypeName Microsoft.SqlServer.Management.SMO.Agent.Operator -argumentlist $srv.JobServer, "Test_Operator"
#Set the Net send address.
$op.NetSendAddress = "Network1_PC"
#Create the operator on the instance of SQL Agent.
$op.Create()
#Run the AddNotification method to specify the operator is notified when the alert is raised.
$ns = [Microsoft.SqlServer.Management.SMO.Agent.NotifyMethods]::NetSend
$al.AddNotification("Test_Operator", $ns)
#Drop the alert and the operator
$al.Drop()
$op.Drop()
允許使用者在 Visual C 中使用 Proxy 帳戶存取子系統#
此程式代碼範例示範如何使用 物件的 方法ProxyAccount,允許使用者存取指定的子系統AddSubSystem。
//Connect to the local, default instance of SQL Server.
{
Server srv = default(Server);
srv = new Server();
//Declare a JobServer object variable and reference the SQL Server Agent.
JobServer js = default(JobServer);
js = srv.JobServer;
//Define a Credential object variable by supplying the parent server and name arguments in the constructor.
Credential c = default(Credential);
c = new Credential(srv, "Proxy_accnt");
//Set the identity to a valid login represented by the vIdentity string variable.
//The sub system will run under this login.
c.Identity = vIdentity;
//Create the credential on the instance of SQL Server.
c.Create();
//Define a ProxyAccount object variable by supplying the SQL Server Agent, the name, the credential, the description arguments in the constructor.
ProxyAccount pa = default(ProxyAccount);
pa = new ProxyAccount(js, "Test_proxy", "Proxy_accnt", true, "Proxy account for users to run job steps in command shell.");
//Create the proxy account on the SQL Agent.
pa.Create();
//Add the login, represented by the vLogin string variable, to the proxy account.
pa.AddLogin(vLogin);
//Add the CmdExec subsytem to the proxy account.
pa.AddSubSystem(AgentSubSystem.CmdExec);
}
//Now users logged on as vLogin can run CmdExec job steps with the specified credentials.