Execução agendada do procedimento armazenado no servidor SQL
é possível configurar de alguma forma o servidor SQL da Microsoft para executar um procedimento armazenado regularmente?
8 answers
SIM, no servidor de MS SQL, você pode criar empregos agendados. Em Sql Management Studio, navegue até o servidor, em seguida, expandir o item de agente do servidor SQL, e, finalmente, a pasta de tarefas para ver, editar, adicionar tarefas agendadas.
Se a edição MS SQL Server Express estiver a ser usada, então o agente do servidor SQL não está disponível. Encontrei o seguinte trabalho para todas as edições:
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
Algumas notas:
- Vale a pena escrever um item de auditoria em algum lugar para que você possa ver que a consulta realmente funcionou.
- o servidor precisa de reiniciar uma vez para garantir que o script é executado pela primeira vez.
- uma questão relacionada é: Como executar um procedimento armazenado todos os dias no SQL Server Express Edição?
Sim, se usar o agente do servidor SQL.
Abra o seu gestor da empresa e vá para a pasta de gestão sob a instância do servidor SQL em que está interessado. Lá você vai ver o agente do servidor SQL, e por baixo disso você vai ver uma seção de trabalhos.
Aqui você pode criar um novo emprego e você vai ver uma lista de passos que você vai precisar criar. Quando criar um novo passo, poderá indicar o passo para executar de facto um procedimento armazenado (escreva TSQL Script). Escolha a base de dados, e depois, para a secção de comandos, coloque algo como:
exec MyStoredProcedure
Essa é a visão geral, poste aqui se precisar de mais conselhos.
Na verdade, pensei que podia entrar primeiro nesta, rapaz estava errado.
Provavelmente não é a resposta que procura, mas acho mais útil simplesmente usar o escalonador de Tarefas do servidor de Windows
Pode usar directamente o comando sqlcmd.exe -S "." -d YourDataBase -Q "exec SP_YourJob"
Ou mesmo criar um ficheiro .bat
. Para que você possa até 2x clique sobre a tarefa sob demanda.
-
Temos alguns programas de consola que também precisam de ser executados todas as noites. Desta forma, todas as tarefas agendadas podem estar em um só lugar. É claro que isso cria um único ponto de fracasso, mas se os postos de trabalho do console não fujas, vamos perder um dia de trabalho no dia seguinte.
- o programa que inicia as tarefas captura mensagens de impressão e erros do servidor e escreve-os para um registo de Aplicação comum para todos os nossos processos em lote. Torna o logging dos trabalhos sql muito mais simples.
- Se alguma vez precisarmos de actualizar o servidor (e esperamos fazê-lo em breve) não precisamos de nos preocupar em mudar os trabalhos. Redirecciona a aplicação uma vez.
Usando o Management Studio - você pode criar um emprego (unter SQL Server Agent) Uma tarefa pode incluir várias etapas dos programas T-SQL até aos pacotes SSIS
O Jeb era mais rápido.Podias usar SQL Server Service Broker para criar um mecanismo personalizado.
Ideia (simplificada):
-
Escreva um procedimento/gatilho armazenado que inicia uma conversa ( a janela de Início ) como loopback (do my_service ao my_service) - get conversation handler
DECLARE @dialog UNIQUEIDENTIFIER; BEGIN DIALOG CONVERSATION @dialog FROM SERVICE [name] TO SERVICE 'name' ...;
-
Inicie o temporizador de conversa
DECLARE @time INT; BEGIN CONVERSATION TIMER (@dialog) TIMEOUT = @time;
-
Após um determinado número de segundos, uma mensagem será enviada para um serviço. Será colocado em fila de espera com a fila associada.
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)
O procedimento irá executar um código específico e um temporizador reanalisável para disparar novamente.
Pode encontrar uma solução totalmente cozida (T-SQL) escrita por Michał Gołoś chamada Escalonador de Tarefas
Pontos-Chave do blog:
Prós:
- suportado em cada versão (do Expresso à empresa). A tarefa de agente do servidor SQL não está disponível para o servidor SQL Expresso
- Scoped to database level. Você poderia facilmente mover a base de dados com tarefas associadas (especialmente quando você tem que mover cerca de 100 trabalhos de um ambiente para outro)
- privilégios mais baixos necessários para ver / manipular tarefas (nível da base de Dados)
Distinção proposta:
Agente do servidor SQL (Manutenção):
- cópias de segurança
- índice/estatísticas reconstrói
- replicação
Escalonador de Tarefas (negócios processos):
- remover dados antigos
- pré-agregações / recalculações cíclicas
- desnormalização
Como configurar:
- obter o código-fonte da secção: "Do pobrania" - para transferir (activar o broker/configurar o esquema tsks/configuration table + gatilhos + procedimento armazenado)/configurar as coisas de corretagem)
- configurar a tabela de configuração
[tsks].[tsksx_task_scheduler]
para adicionar novas tarefas (os nomes das colunas são auto-descritivos, a tarefa de exemplo incluido)
Atenção: O Blog está escrito em polonês, mas o código fonte associado é em inglês e é fácil de seguir.
Aviso 2: antes de o utilizar, certifique-se de que o testou em ambiente de não produção.
Você deve olhar para uma tarefa agendada usando o agente do servidor SQL .