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:
- 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.
- 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.
- 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.
Debería ver un trabajo programado utilizando el Agente SQL Server .
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):
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'' ...;
Comience el temporizador de conversación
DECLARE @time INT; BEGIN CONVERSATION TIMER (@dialog) TIMEOUT = @time;
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)
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:
- Vale la pena escribir una entrada de auditoría en alguna parte para que pueda ver que la consulta realmente se ejecutó.
- El servidor debe reiniciarse una vez para garantizar que la secuencia de comandos se ejecuta por primera vez.
- Una pregunta relacionada es: ¿Cómo ejecutar un procedimiento almacenado todos los días en SQL Server Express Edition?
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;)