Automatizar tarefas de banco de dados para escalabilidade

Concluído

Ao trabalhar com a automação no SQL Server, é comum usar o SQL Agent para agendar trabalhos para fins de automação. Embora a Instância Gerenciada de SQL do Azure e o SQL Server em execução em uma Máquina Virtual do Azure ainda tenham essa opção, o Banco de Dados SQL do Azure não tem. Ou seja, talvez seja necessário usar métodos de automação alternativos para obter resultados semelhantes.

Automação do Azure

A Automação do Azure permite a automação do processo, o gerenciamento de configuração e a integração completa com opções de plataformas do Azure (como o controle de acesso baseado em função e o Microsoft Entra ID). Além disso, você pode gerenciar recursos locais e do Azure.

Com a Automação do Azure, você pode controlar com facilidade os recursos nas VMs locais e do Azure. Por exemplo, use runbooks híbridos para automatizar tarefas como iniciar uma VM, executar um backup do SQL Server e desligar a VM, tornando-a econômica e eficiente.

Outro cenário comum é usar Automação do Azure para operações de manutenção periódica, como a limpeza de dados obsoletos ou antigos, ou reindexar um banco de dados SQL.

Componentes

A Automação do Azure dá suporte a atividades de automação e gerenciamento de configuração. Vamos nos concentrar nos componentes de automação, mas você também pode usar a Automação do Azure para gerenciar configurações e atualizações do servidor.

Componente Descrição
Runbook Os Runbooks são a unidade de execução na Automação do Azure. Os runbooks são definidos como um de três tipos: um runbook gráfico baseado no PowerShell, um script do PowerShell ou um script do Python. Os runbooks do PowerShell são usados com mais frequência para gerenciar recursos do SQL do Azure.
Módulo A Automação do Azure define um contexto de execução para o código do PowerShell ou do Python em execução no runbook. É preciso importar módulos de suporte para executar o código. Por exemplo, se você precisar executar o cmdlet Get-AzSqlDatabase do PowerShell, será necessário importar o módulo Az.SQL do PowerShell na sua conta de automação.
Credencial As credenciais armazenam informações confidenciais que os runbooks ou as configurações podem usar em runtime.
Agendar Os agendamentos são vinculados a runbooks e disparam um runbook em um horário específico.

Para saber mais sobre a CLI do Azure e os comandos do PowerShell disponíveis para gerenciar os recursos do Banco de Dados SQL do Azure e da Instância Gerenciada de SQL do Azure, consulte os seguintes links: Módulo do PowerShell para o SQL do Azure e CLI do Azure para o SQL do Azure.

Trabalhos elásticos

Um dos motivos pelos quais vários DBAs se tornaram tão familiarizados com o serviço de Automação do Azure é o fato do Banco de Dados SQL do Azure não ter tido no início funcionalidades para executar trabalhos agendados.

Essa limitação significava que os DBAs precisavam encontrar soluções alternativas para lidar com essas tarefas essenciais de maneira eficiente. A Automação do Azure surgiu como uma ferramenta valiosa nesse cenário, oferecendo os meios para criar e gerenciar trabalhos agendados, automatizar processos de migração de banco de dados e executar tarefas de manutenção de rotina.

Arquitetura

O recurso de trabalhos elásticos permite executar um conjunto de scripts T-SQL em uma coleção de servidores ou bancos de dados como um trabalho único ou por meio de um agendamento definido. Os trabalhos elásticos funcionam de modo semelhante aos trabalhos do SQL Server Agent, exceto pelo fato de que eles estão limitados a executar o T-SQL. Os trabalhos funcionam em todos os níveis do Banco de Dados SQL do Azure.

Screenshot of the elastic job architecture diagram.

Para configurar Trabalhos Elásticos, será preciso obter um Agente de Trabalho e um banco de dados dedicados ao gerenciamento dos trabalhos. O nível de serviço recomendado para o banco de dados de trabalhos é S1 ou superior, e o nível de serviço ideal dependerá do número de trabalhos que você está executando e da frequência desses trabalhos.

Vamos examinar os componentes de trabalhos elásticos:

  • Agente de trabalho elástico – Seu recurso do Azure para executar e gerenciar trabalhos.
  • Banco de dados de trabalho – um banco de dados dedicado a gerenciar seus trabalhos.
  • Grupo de destino – uma coleção de servidores, pools elásticos e bancos de dados individuais nos quais um trabalho será executado.
  • Trabalho – um ou mais scripts T-SQL que compõem uma etapa de trabalho.

Caso um servidor ou pool elástico seja o destino, uma credencial deverá ser criada dentro do banco de dados mestre do servidor ou pool para que o agente de trabalho possa enumerar bancos de dados dentro dele. Somente uma credencial do banco de dados será necessária para obter um banco de dados individual. As credenciais devem ter os privilégios mínimos necessários para executar a etapa do trabalho.

Screenshot of the elastic job agent creation page.

Você pode criar um agente de trabalho elástico por meio do portal do Azure. Na página Agente de trabalho elástico, forneça um nome para seu agente e especifique um banco de dados SQL para seu banco de dados de trabalho.

O script do PowerShell a seguir cria um trabalho elástico chamado MyFirstElasticJob, adiciona uma etapa de trabalho a ele e executa um comando SQL para criar uma tabela, caso ela não exista no banco de dados.

Write-Output "Creating a new job..."
$jobName = "MyFirstElasticJob"
$job = $jobAgent | New-AzSqlElasticJob -Name $jobName -RunOnce

Write-Output "Creating job steps for $($jobName) job..."
$sqlText1 = "IF NOT EXISTS (SELECT * FROM sys.tables WHERE object_id = object_id('MyTable')) CREATE TABLE [dbo].[MyTable]([Id] [int] NOT NULL);"

$job | Add-AzSqlElasticJobStep -Name "Step1" -TargetGroupName $serverGroup.TargetGroupName -CredentialName $jobCred.CredentialName -CommandText $sqlText1

Por fim, execute o trabalho elástico MyFirstElasticJob.

Write-Output "Start the job..."
$jobExecution = $job | Start-AzSqlElasticJob
$jobExecution

Cenários de caso de uso

Trabalhos elásticos podem ser usados nos seguintes cenários:

  • Automação de tarefas de gerenciamento a serem executadas de acordo com um agendamento específico.
  • Implantação de alterações de esquema.
  • Movimentações de dados.
  • Coleta e agregação de dados para fins de relatórios ou outras finalidades.
  • Carregamento de dados do Armazenamento de Blobs do Azure.
  • Configure trabalhos para serem executados em um conjunto de bancos de dados de modo recorrente, por exemplo, fora dos horários de pico.
  • Processamento de dados em um grande número de bancos de dados, por exemplo, coleta de telemetria. Os resultados são então coletados em uma única tabela de destino para análise posterior.

Migrar trabalhos do SQL Agent para trabalhos elásticos

Embora seja possível criar scripts próprios para migrar seus trabalhos do SQL Agent para os trabalhos elásticos, há uma opção mais conveniente disponível. Há um script para download que facilita a cópia de trabalhos existentes do SQL Agent para os trabalhos elásticos.

O script é uma ferramenta que automatiza o processo de conversão desses trabalhos, economizando o tempo e o esforço necessários para recriá-los manualmente no novo ambiente.

O arquivo é uma pasta compactada que contém o script e a documentação associada. Para usá-lo, baixe o arquivo e siga as instruções.

Depois que você inserir todos os parâmetros listados nas instruções, a lista de trabalhos será exibida. Em seguida, o script criará cada trabalho individualmente em um estado desabilitado, supondo que ele ainda não exista. Após a criação de um trabalho, as etapas são adicionadas com as mesmas IDs, Texto de Comando, Tentativas de Repetição e Segundos de Intervalo de Repetição Inicial. O banco de dados vinculado à etapa de trabalho será o grupo de destino. Se o grupo de destino não existir, ele será criado automaticamente. A cópia não inclui agendamentos, alertas e notificações.

Migrar trabalhos do SQL Agent para o SQL Agent no Azure

A migração de trabalhos de um SQL Server local para a Instância Gerenciada de SQL do Azure ou o SQL Server em execução em uma Máquina Virtual segue um processo que deve ser conhecido para a maioria dos DBAs.

Em nosso cenário, suponha que migremos o SQL Server local para a Instância Gerenciada de SQL do Azure. Precisamos migrar e ajustar vários trabalhos do SQL Agent para fazê-los funcionar perfeitamente no ambiente do Azure.

  • Avaliar dependências: identifique o trabalho do SQL Agent que deseja migrar. Liste todas as dependências, como servidores vinculados, credenciais e bancos de dados, das quais o trabalho depende

  • Criar o script do trabalho do SQL Agent: crie o script do trabalho do SQL Agent no SQL Server como um script SQL. Faça isso clicando com o botão direito do mouse no trabalho no SSMS (SQL Server Management Studio) e selecionando "Criar Script do Trabalho como" -> "CRIAR em" -> "Nova Janela do Editor de Consultas".

  • Modificar as dependências de trabalho: examine o script SQL e modifique as dependências de trabalho que podem ter sido alteradas devido à migração. Por exemplo, se o trabalho referenciar um servidor vinculado ou um caminho de arquivo no servidor local, atualize-o para que ele corresponda ao novo ambiente.

  • Criação de trabalho da MI de SQL do Azure: abra o SSMS ou o Azure Data Studio e conecte-se à Instância Gerenciada de SQL do Azure. Crie um trabalho do SQL Agent usando o script gerado anteriormente.

  • Criar dependências na MI de SQL do Azure: se o trabalho do SQL Agent depender de servidores vinculados ou credenciais, crie-os no ambiente da MI de SQL do Azure. Verifique se eles correspondem à configuração do SQL Server local.

  • Agendar o trabalho: configure o agendamento de trabalho na MI de SQL do Azure usando o SQL Server Agent. Você pode criar um agendamento e vinculá-lo ao trabalho.

  • Teste: teste o trabalho do SQL Agent na íntegra no ambiente da MI de SQL do Azure para verificar se ele é executado conforme o esperado. Verifique se há erros ou problemas que possam surgir devido a diferenças entre o SQL Server local e a MI de SQL do Azure.

  • Monitoramento e manutenção: monitore o desempenho do trabalho e verifique se ele continua atendendo aos seus requisitos no ambiente da MI de SQL do Azure. Ajuste as configurações ou os agendamentos, conforme necessário.