Partilhar via


Automatize tarefas de gerenciamento usando trabalhos do SQL Agent na Instância Gerenciada SQL do Azure

Aplica-se a:Instância Gerenciada SQL do Azure

Usando o SQL Server Agent no SQL Server e na Instância Gerenciada do SQL, você pode criar e agendar trabalhos que podem ser executados periodicamente em um ou vários bancos de dados para executar consultas Transact-SQL (T-SQL) e executar tarefas de manutenção. Este artigo aborda o uso do SQL Agent for SQL Managed Instance.

Nota

O SQL Agent não está disponível no Banco de Dados SQL do Azure ou no Azure Synapse Analytics. Em vez disso, recomendamos a automação de tarefas com trabalhos elásticos.

Quando usar trabalhos do SQL Agent

Há vários cenários em que você pode usar trabalhos do SQL Agent:

  • Automatize as tarefas de gestão e programe-as para serem executadas todos os dias da semana, fora de horas, etc.
    • Implemente alterações de esquema, gestão de credenciais, recolha de dados de desempenho ou recolha de telemetria do inquilino (cliente).
    • Atualize os dados de referência (informações comuns a todos os bancos de dados), carregue dados do armazenamento de Blob do Azure. A Microsoft recomenda usar a autenticação SHARED ACCESS SIGNATURE para autenticar no armazenamento de Blob do Azure.
    • Tarefas comuns de manutenção, inclusive DBCC CHECKDB para garantir a integridade dos dados ou a manutenção do índice para melhorar o desempenho da consulta. Configure tarefas para serem executadas numa coleção de bases de dados recorrentemente, como, por exemplo, fora das horas de ponta.
    • Recolha os resultados da consulta a partir de um conjunto de bases de dados numa tabela central de forma contínua. As consultas de desempenho podem ser continuamente executadas e configuradas para acionar tarefas adicionais para serem executadas.
  • Coletar dados para relatórios
    • Agregar dados de uma coleção de bancos de dados em uma única tabela de destino.
    • Execute consultas de processamento de dados de execução mais longa num grande conjunto de bases de dados, por exemplo, a coleção de telemetria de cliente. Os resultados são recolhidos para uma tabela de destino única para análise adicional.
  • Movimentos de dados
    • Crie trabalhos que repliquem as alterações feitas em seus bancos de dados para outros bancos de dados ou colete atualizações feitas em bancos de dados remotos e aplique alterações no banco de dados.
    • Crie trabalhos que carregam dados de ou para seus bancos de dados usando o SQL Server Integration Services (SSIS).

Trabalhos do SQL Agent na instância gerenciada do SQL

Os Trabalhos do SQL Agent são executados pelo serviço SQL Agent que continua a ser usado para automação de tarefas no SQL Server e na Instância Gerenciada do SQL.

SQL Agent Jobs são uma série especificada de scripts T-SQL em seu banco de dados. Use trabalhos para definir uma tarefa administrativa que pode ser executada uma ou mais vezes e monitorada quanto ao sucesso ou falha.

Um trabalho pode ser executado em um servidor local ou em vários servidores remotos. Os Trabalhos do SQL Agent são um componente interno do Mecanismo de Banco de Dados que é executado dentro do serviço de Instância Gerenciada do SQL.

Há vários conceitos-chave em trabalhos do SQL Agent:

  • Conjunto de etapas do trabalho de uma ou várias etapas que devem ser executadas dentro do trabalho. Para cada etapa de trabalho, você pode definir a estratégia de repetição e a ação que deve acontecer se a etapa de trabalho for bem-sucedida ou falhar.
  • As agendas definem quando o trabalho deve ser executado.
  • As notificações permitem que você defina regras que serão usadas para notificar os operadores por e-mail assim que o trabalho for concluído.

Etapas do trabalho

As etapas de trabalho do SQL Agent são sequências de ações que o SQL Agent deve executar. Cada etapa tem a seguinte etapa que deve ser executada se a etapa for bem-sucedida ou falhar, número de novas tentativas em caso de falha.

O SQL Agent permite criar diferentes tipos de etapas de trabalho, como etapas de trabalho Transact-SQL que executam um único lote Transact-SQL no banco de dados, ou etapas de comando/PowerShell do sistema operacional que podem executar script personalizado do sistema operacional, etapas de trabalho do SSIS que permitem carregar dados usando o tempo de execução do SSIS ou etapas de replicação que podem publicar alterações do banco de dados para outros bancos de dados.

Nota

Para obter mais informações sobre como aproveitar o Tempo de Execução de Integração do SSIS do Azure com o SSISDB hospedado pela Instância Gerenciada do SQL, consulte Usar a Instância Gerenciada do SQL do Azure com o SQL Server Integration Services (SSIS) no Azure Data Factory.

A replicação transacional pode replicar as alterações de suas tabelas em outros bancos de dados na Instância Gerenciada do SQL, no Banco de Dados SQL do Azure ou no SQL Server. Para obter informações, consulte Configurar a replicação na Instância Gerenciada SQL do Azure.

Atualmente, não há suporte para outros tipos de etapas de trabalho na Instância Gerenciada SQL, como replicação de mesclagem e leitor de filas.

Agendas de tarefas

Uma agenda especifica quando um trabalho é executado. Mais de um trabalho pode ser executado no mesmo cronograma e mais de um agendamento pode se aplicar ao mesmo trabalho.

Uma agenda pode definir as seguintes condições para o momento em que um trabalho é executado:

  • Sempre que o SQL Server Agent for iniciado. O trabalho é ativado após cada failover.
  • Uma vez, em uma data e hora específicas, o que é útil para a execução atrasada de algum trabalho.
  • Em uma programação recorrente.

Para obter mais informações sobre como agendar um trabalho do SQL Agent, consulte Agendar um trabalho.

Nota

Atualmente, a Instância Gerenciada SQL do Azure não permite que você inicie um trabalho quando a CPU está ociosa.

Notificações de emprego

Os trabalhos do SQL Agent permitem que você receba notificações quando o trabalho for concluído com êxito ou falhar. Você pode receber notificações por e-mail.

Se ainda não estiver habilitado, primeiro você precisará configurar o recurso Database Mail na Instância Gerenciada SQL:

GO
EXEC sp_configure 'show advanced options', 1;
GO
RECONFIGURE;
GO
EXEC sp_configure 'Database Mail XPs', 1;
GO
RECONFIGURE

Como exemplo de exercício, configure a conta de e-mail que será usada para enviar as notificações por e-mail. Atribua a conta ao perfil de e-mail chamado AzureManagedInstance_dbmail_profile. Para enviar email usando trabalhos do SQL Agent na Instância Gerenciada SQL, deve haver um perfil que deve ser chamado AzureManagedInstance_dbmail_profile. Caso contrário, a Instância Gerenciada do SQL não poderá enviar e-mails via SQL Agent.

Nota

Para o servidor de email, recomendamos que você use serviços de retransmissão SMTP autenticados para enviar email. Esses serviços de retransmissão normalmente se conectam através das portas TCP 25 ou 587 para conexões TLS, ou da porta 465 para conexões SSL, no entanto, o Database Mail pode ser configurado para usar qualquer porta. Essas portas exigem uma nova regra de saída no security group de rede da instância gerenciada. Esses serviços são usados para manter a reputação de IP e domínio para minimizar a possibilidade de domínios externos rejeitarem suas mensagens ou colocá-las na pasta de SPAM. Considere um serviço de retransmissão SMTP autenticado já em seus servidores locais. No Azure, o SendGrid é um desses serviços de retransmissão SMTP, mas há outros.

Use o seguinte script de exemplo para criar uma conta e um perfil do Database Mail e, em seguida, associe-os:

-- Create a Database Mail account
EXECUTE msdb.dbo.sysmail_add_account_sp
    @account_name = 'SQL Agent Account',
    @description = 'Mail account for Azure SQL Managed Instance SQL Agent system.',
    @email_address = '$(loginEmail)',
    @display_name = 'SQL Agent Account',
    @mailserver_name = '$(mailserver)' ,
    @username = '$(loginEmail)' ,
    @password = '$(password)';

-- Create a Database Mail profile
EXECUTE msdb.dbo.sysmail_add_profile_sp
    @profile_name = 'AzureManagedInstance_dbmail_profile',
    @description = 'E-mail profile used for messages sent by Managed Instance SQL Agent.';

-- Add the account to the profile
EXECUTE msdb.dbo.sysmail_add_profileaccount_sp
    @profile_name = 'AzureManagedInstance_dbmail_profile',
    @account_name = 'SQL Agent Account',
    @sequence_number = 1;

Teste a configuração do Database Mail via T-SQL usando o procedimento armazenado do sistema sp_send_db_mail :

DECLARE @body VARCHAR(4000) = 'The email is sent from ' + @@SERVERNAME;
EXEC msdb.dbo.sp_send_dbmail  
    @profile_name = 'AzureManagedInstance_dbmail_profile',  
    @recipients = 'ADD YOUR EMAIL HERE',  
    @body = 'Add some text',  
    @subject = 'Azure SQL Instance - test email';  

Você pode notificar o operador de que algo aconteceu com seus trabalhos do SQL Agent. Um operador define informações de contato para um indivíduo responsável pela manutenção de uma ou mais instâncias na Instância Gerenciada SQL. Às vezes, as responsabilidades do operador são atribuídas a um indivíduo.

Em sistemas com várias instâncias na Instância Gerenciada SQL ou no SQL Server, muitas pessoas podem compartilhar responsabilidades de operador. Um operador não contém informações de segurança e não define uma entidade de segurança. Idealmente, um operador não é um indivíduo cujas responsabilidades podem mudar, mas um grupo de distribuição de e-mail.

Você pode criar operadores usando o SQL Server Management Studio (SSMS) ou o script Transact-SQL mostrado no exemplo a seguir:

EXEC msdb.dbo.sp_add_operator
    @name=N'AzureSQLTeam',
    @enabled=1,
    @email_address=N'AzureSQLTeamn@contoso.com';

Confirme o sucesso ou a falha do e-mail por meio do log do Database Mail no SSMS.

Em seguida, você pode modificar qualquer trabalho do SQL Agent e atribuir operadores que serão notificados por email se o trabalho for concluído, falhar ou for bem-sucedido usando o SSMS ou o seguinte script T-SQL:

EXEC msdb.dbo.sp_update_job @job_name=N'Load data using SSIS',
    @notify_level_email=3, -- Options are: 1 on succeed, 2 on failure, 3 on complete
    @notify_email_operator_name=N'AzureSQLTeam';

Histórico de tarefas

Atualmente, a Instância Gerenciada do SQL não permite que você altere nenhuma propriedade do SQL Agent porque elas são armazenadas nos valores do Registro subjacentes. Isso significa que as opções para ajustar a política de retenção do Agente para registros de histórico de trabalho são fixadas no padrão de 1000 registros totais e máximo de 100 registros de histórico por trabalho.

Para obter mais informações, consulte Exibir histórico de trabalhos do SQL Agent.

Associação fixa à função de banco de dados

Se os usuários vinculados a logons não-sysadmin forem adicionados a qualquer uma das três funções de banco de dados fixas do SQL Agent no banco de dados do sistema, haverá um problema no qual permissões explícitas EXECUTE precisam ser concedidas a três procedimentos armazenados do msdbmaster sistema no banco de dados. Se esse problema for encontrado, a mensagem The EXECUTE permission was denied on the object <object_name> (Microsoft SQL Server, Error: 229) de erro será exibida.

Depois de adicionar usuários a uma função de banco de dados fixa do SQL Agent (SQLAgentUserRole, SQLAgentReaderRole ou SQLAgentOperatorRole) no msdb, para cada um dos logons do usuário adicionados a essas funções, execute o script T-SQL abaixo para conceder explicitamente permissões EXECUTE aos procedimentos armazenados do sistema listados. Este exemplo pressupõe que o nome de usuário e o nome de logon são os mesmos:

USE [master]
GO
CREATE USER [login_name] FOR LOGIN [login_name];
GO
GRANT EXECUTE ON master.dbo.xp_sqlagent_enum_jobs TO [login_name];
GRANT EXECUTE ON master.dbo.xp_sqlagent_is_starting TO [login_name];
GRANT EXECUTE ON master.dbo.xp_sqlagent_notify TO [login_name];

Limitações de trabalho do SQL Agent na instância gerenciada do SQL

Vale a pena observar as diferenças entre o SQL Agent disponível no SQL Server e como parte da Instância Gerenciada do SQL. Para obter mais informações sobre as diferenças de recursos com suporte entre o SQL Server e a Instância Gerenciada do SQL, consulte Diferenças T-SQL da Instância Gerenciada SQL do Azure do SQL Server.

Alguns dos recursos do SQL Agent disponíveis no SQL Server não têm suporte na Instância Gerenciada do SQL:

  • As configurações do SQL Agent são somente leitura.
    • O procedimento sp_set_agent_properties armazenado do sistema não é suportado.
  • Atualmente, não há suporte para habilitar/desabilitar o SQL Agent. O SQL Agent está sempre em execução.
  • Embora as notificações sejam parcialmente suportadas, o seguinte não é suportado:
    • Pager não é suportado.
    • NetSend não é suportado.
    • Os alertas não são suportados.
  • Não há suporte para proxies.
  • Não há suporte para o Eventlog.
  • Não há suporte para o gatilho de agendamento de trabalho baseado em uma CPU ociosa.
  • Não há suporte para etapas de trabalho de replicação de mesclagem.
  • O Queue Reader não é suportado.
  • Não há suporte para o Analysis Services.
  • Não há suporte para a execução de um script armazenado como um arquivo no disco.
  • A importação de módulos externos, como dbatools e dbachecks, não é suportada.
  • Não há suporte para o PowerShell Core.

Saber mais

Próximos passos