procedimientos procedimiento permisos para otro job ejemplo ejecutar desde dentro crear almacenados almacenado sql-server tsql

otro - permisos para ejecutar procedimientos almacenados sql-server



Ejecución programada del procedimiento almacenado en el servidor SQL (8)

¿Es posible configurar de alguna manera Microsoft SQL Server para ejecutar un procedimiento almacenado de forma regular?


Añadiré una cosa: donde estoy solía tener un montón de trabajos por lotes que funcionaban todas las noches. Sin embargo, nos estamos alejando de eso para usar una aplicación cliente programada en las tareas programadas de Windows que inicia cada trabajo. Hay al menos tres razones para esto:

  1. Tenemos algunos programas de consola que deben ejecutarse todas las noches también. De esta forma, todas las tareas programadas pueden estar en un solo lugar. Por supuesto, esto crea un único punto de falla, pero si los trabajos de la consola no se ejecutan vamos a perder un día de trabajo al día siguiente de todos modos.
  2. El programa que inicia los trabajos captura mensajes de impresión y errores del servidor y los escribe en un registro de aplicación común para todos nuestros procesos por lotes. Hace que el registro desde el uso de los trabajos sql sea mucho más simple.
  3. Si alguna vez necesitamos actualizar el servidor (y esperamos hacerlo pronto) no tenemos que preocuparnos por cambiar de trabajo. Simplemente vuelva a señalar la aplicación una vez.

Es una aplicación VB.Net realmente corta: puedo publicar el código si a alguien le interesa.



Probablemente no es la respuesta que está buscando, pero me parece más útil simplemente usar el Programador de tareas de Windows Server

Puede usar directamente el comando sqlcmd.exe -S "." -d YourDataBase -Q "exec SP_YourJob" sqlcmd.exe -S "." -d YourDataBase -Q "exec SP_YourJob"

O incluso crea un archivo .bat . De modo que puede hacer doble clic en la tarea bajo demanda.

Esto también se ha abordado en HERE


Puede usar SQL Server Service Broker para crear un mecanismo personalizado.

Idea (simplificada):

  1. Escriba un procedimiento / desencadenador almacenado que inicie una conversación ( BEGIN DIALOG ) como loopback (FROM my_service TO my_service) - obtenga el controlador de conversación

    DECLARE @dialog UNIQUEIDENTIFIER; BEGIN DIALOG CONVERSATION @dialog FROM SERVICE [name] TO SERVICE ''name'' ...;

  2. Comience el temporizador de conversación

    DECLARE @time INT; BEGIN CONVERSATION TIMER (@dialog) TIMEOUT = @time;

  3. Después de una cantidad especificada de segundos, se enviará un mensaje a un servicio. Se pondrá en cola con la cola asociada.

    CREATE QUEUE queue_name WITH STATUS = ON, RETENTION = OFF , ACTIVATION (STATUS = ON, PROCEDURE_NAME = <procedure_name> , MAX_QUEUE_READERS = 20, EXECUTE AS N''dbo'') , POISON_MESSAGE_HANDLING (STATUS = ON)

  4. El procedimiento ejecutará un código específico y un temporizador remanechable para disparar nuevamente.

Puede encontrar una solución completa (T-SQL) escrita por Michał Gołoś llamada Task Scheduler

Puntos clave del blog:

Pros:

  • Compatible con cada versión (de Express a Enterprise). El trabajo del Agente SQL Server no está disponible para SQL Server Express
  • Alcance al nivel de la base de datos. Podrías mover fácilmente la base de datos con las tareas asociadas (especialmente cuando tienes que mover alrededor de 100 trabajos de un entorno a otro)
  • Se necesitan privilegios más bajos para ver / manipular tareas (nivel de base de datos)

Distinción propuesta:

Agente SQL Server (mantenimiento):

  • copias de seguridad
  • reconstruye índice / estadística
  • replicación

Programador de tareas (procesos comerciales):

  • eliminando datos viejos
  • preagregados / recálculos cíclicos
  • desnormalización

Cómo configurarlo:

  • obtener el código fuente de la sección: "Do pobrania" - Para descargar (habilitando broker / configuración de tsks de esquema / tabla de configuración + desencadenantes + procedimiento almacenado) / configurar cosas de intermediario)
  • configure la tabla de configuración [tsks].[tsksx_task_scheduler] para agregar nuevas tareas (los nombres de las columnas son autodescriptivos, la tarea de muestra incluida)

Advertencia: el blog está escrito en polaco, pero el código fuente asociado está en inglés y es fácil de seguir.

Advertencia 2: antes de usarlo, asegúrese de haberlo probado en un entorno que no sea de producción.


Sí, en MS SQL Server, puede crear trabajos programados. En SQL Management Studio, navegue hasta el servidor, luego expanda el elemento del Agente de SQL Server y finalmente la carpeta de Trabajos para ver, editar y agregar trabajos programados.


Sí, si usa el Agente SQL Server.

Abra su Administrador Empresarial y vaya a la carpeta de Administración en la instancia de SQL Server que le interese. Allí verá el Agente SQL Server, y debajo verá una sección de Trabajos.

Aquí puede crear un nuevo trabajo y verá una lista de pasos que deberá crear. Cuando crea un nuevo paso, puede especificar el paso para ejecutar realmente un procedimiento almacenado (escriba TSQL Script). Elija la base de datos, y luego para la sección de comando ponga algo así como:

exec MyStoredProcedure

Esa es la descripción general, publique aquí si necesita más consejos.

[De hecho, pensé que podría entrar primero en este, chico, estaba equivocado :)]


Si se está utilizando MS SQL Server Express Edition, el Agente SQL Server no estará disponible. Encontré que lo siguiente funcionó para todas las ediciones:

USE Master GO IF EXISTS( SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N''[dbo].[MyBackgroundTask]'') AND type in (N''P'', N''PC'')) DROP PROCEDURE [dbo].[MyBackgroundTask] GO CREATE PROCEDURE MyBackgroundTask AS BEGIN -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; -- The interval between cleanup attempts declare @timeToRun nvarchar(50) set @timeToRun = ''03:33:33'' while 1 = 1 begin waitfor time @timeToRun begin execute [MyDatabaseName].[dbo].[MyDatabaseStoredProcedure]; end end END GO -- Run the procedure when the master database starts. sp_procoption @ProcName = ''MyBackgroundTask'', @OptionName = ''startup'', @OptionValue = ''on'' GO

Algunas notas:


Uso de Management Studio: puede crear un trabajo (unter Agente SQL Server) Un trabajo puede incluir varios pasos desde los scripts T-SQL hasta los paquetes SSIS.

Jeb fue más rápido;)