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.
Horário 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 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 SQL do Azure e CLI do Azure para 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 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 usando 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.

Captura de tela do diagrama de arquitetura de trabalho elástico.

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 para gerenciar seus trabalhos.
  • Grupo de destino – uma coleção de servidores, pools elásticos e bancos de dados individuais em que 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 de trabalho.

Captura de tela da página de criação do agente de trabalho elástico.

Você pode criar um agente de trabalho elástico por meio do portal do Azure. Na página do agente do Elastic Job, forneça um nome para seu agente e especifique um banco de dados SQL para o banco de dados do seu 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 se ela não existir 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. Existe um script para download que facilita a cópia de tarefas existentes do SQL Agent para Elastic Jobs.

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 você deseja migrar. Liste todas as dependências, como servidores vinculados, credenciais e bancos de dados, das quais o trabalho depende

  • Faça script do trabalho do SQL Agent: Faça 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 dependências de trabalho: Examine o script SQL e modifique as dependências de trabalho que possam 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 de MI do 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 do SQL do Azure: Se o trabalho do SQL Agent depender de servidores ou credenciais vinculados, crie-os no ambiente de MI do SQL do Azure. Verifique se eles correspondem à configuração do SQL Server local.

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

  • Teste: Teste o trabalho do SQL Agent minuciosamente no ambiente de MI do SQL do Azure para garantir que ele seja 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 a atender aos seus requisitos no ambiente de MI do SQL do Azure. Ajuste as configurações ou os agendamentos, conforme necessário.