Programar tareas administrativas automáticas en el Agente de SQL Server

Los objetos siguientes representan al Agente de SQL Server en SMO:

  • El objeto JobServer tiene tres recopilaciones de trabajos, alertas y operadores.

  • El objeto OperatorCollection representa una lista de localizadores, direcciones de correo electrónico y operadores de net send a los que se puede notificar automáticamente los eventos mediante el Agente de SQL Server de Microsoft.

  • El objeto AlertCollection representa una lista de circunstancias como eventos del sistema o condiciones de rendimiento supervisadas por SQL Server.

  • El objeto JobCollection es ligeramente más complejo. Representa una lista de tareas de varios pasos que se ejecutan en programaciones especificadas. Los pasos e información de programación están almacenados en los objetos JobSchedule y JobStep.

Los objetos del Agente de SQL Server se encuentran en el espacio de nombres Microsoft.SqlServer.Management.Smo.Agent.

Ejemplos

Para utilizar cualquier ejemplo de código que se proporcione, deberá elegir el entorno de programación, la plantilla de programación y el lenguaje de programación en los que crear su aplicación. Para obtener más información, vea Cómo crear un proyecto de Visual Basic SMO en Visual Studio .NET o Cómo crear un proyecto de Visual C# SMO en Visual Studio .NET.

  1. Para los programas que utilizan el Agente SQL Server, debe incluir la instrucción Imports para certificar el espacio de nombres del Agente. Inserte la instrucción después de las demás instrucciones Imports, antes de cualquier declaración de la aplicación, como:

Imports Microsoft.SqlServer.Management.Smo

Imports Microsoft.SqlServer.Management.Common

Imports Microsoft.SqlServer.Management.Smo.Agent

Crear un trabajo con pasos y una programación en Visual Basic

En este ejemplo de código se crea un trabajo con pasos y una programación y, a continuación, se informa a un operador.

'Connect to the local, default instance of SQL Server.
Dim srv As Server
srv = New Server
'Define an Operator object variable by supplying the Agent (parent JobServer object) and the name in the constructor.
Dim op As [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 Agent.
op.Create()
'Define a Job object variable by supplying the Agent and the name arguments in the constructor and setting properties.
Dim jb As 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 Agent. 
jb.Create()
'Define a JobStep object variable by supplying the parent job and name arguments in the constructor.
Dim jbstp As 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. 
Dim jbsch As 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
Dim ts1 As TimeSpan
ts1 = New TimeSpan(9, 0, 0)
jbsch.ActiveStartTimeOfDay = ts1
Dim ts2 As TimeSpan
ts2 = New TimeSpan(17, 0, 0)
jbsch.ActiveEndTimeOfDay = ts2
jbsch.FrequencyInterval = 1
Dim d As Date
d = New Date(2003, 1, 1)
jbsch.ActiveStartDate = d
'Create the job schedule on the instance of SQL Agent.
jbsch.Create()

Crear un trabajo con pasos y una programación en Visual C#

En este ejemplo de código se crea un trabajo con pasos y una programación y, a continuación, se informa a un operador.

//Connect to the local, default instance of SQL Server. 
{ 
Server srv = default(Server); 
srv = new Server(); 
//Define an Operator object variable by supplying the Agent (parent JobServer object) and the name in the constructor. 
Operator op = default(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 = default(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 = default(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 = default(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 = default(TimeSpan); 
ts1 = new TimeSpan(9, 0, 0); 
jbsch.ActiveStartTimeOfDay = ts1; 
TimeSpan ts2 = default(TimeSpan); 
ts2 = new TimeSpan(17, 0, 0); 
jbsch.ActiveEndTimeOfDay = ts2; 
jbsch.FrequencyInterval = 1; 
System.DateTime d = default(System.DateTime); 
d = new System.DateTime(2003, 1, 1); 
jbsch.ActiveStartDate = d; 
//Create the job schedule on the instance of SQL Agent. 
jbsch.Create(); 
} 

Crear una alerta en Visual Basic

En este ejemplo de código se crea una alerta que se desencadena mediante una condición de rendimiento. La condición se debe proporcionar en un formato concreto:

ObjectName|CounterName|Instance|ComparisionOp|CompValue

Se requiere un operador para la notificación de la alerta. El tipo Operator requiere los corchetes porque operator es una palabra clave de Visual Basic.

'Connect to the local, default instance of SQL Server.
Dim srv As Server
srv = New Server
'Define an Alert object variable by supplying the SQL Agent and the name arguments in the constructor.
Dim al As 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 Agent and the name arguments in the constructor.
Dim op As [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)

Crear una alerta en Visual C#

En este ejemplo de código se crea una alerta que se desencadena mediante una condición de rendimiento. La condición se debe proporcionar en un formato concreto:

ObjectName|CounterName|Instance|ComparisionOp|CompValue

Se requiere un operador para la notificación de alerta. El tipo Operator requiere los corchetes porque operator es una palabra clave de Visual C#.

//Connect to the local, default instance of SQL Server. 
{ 
Server srv = default(Server); 
srv = new Server(); 
//Define an Alert object variable by supplying the SQL Server Agent and the name arguments in the constructor. 
Alert al = default(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 = default(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); 
}

Permite el acceso del usuario al subsistema mediante una cuenta de proxy en Visual Basic

En este ejemplo de código se muestra cómo permitir el acceso de un usuario a un subsistema especificado utilizando el método AddSubSystem del objeto ProxyAccount.

'Connect to the local, default instance of SQL Server.
Dim srv As Server
srv = New Server
'Declare a JobServer object variable and reference the SQL Agent.
Dim js As JobServer
js = srv.JobServer
'Define a Credential object variable by supplying the parent server and name arguments in the constructor.
Dim c As 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 Agent, the name, the credential, the description arguments in the constructor.
Dim pa As 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.

Permite el acceso del usuario al subsistema mediante una cuenta de proxy en Visual C#

En este ejemplo de código se muestra cómo permitir el acceso de un usuario a un subsistema especificado utilizando el método AddSubSystem del objeto ProxyAccount.

//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.