Este artigo trata da automatização de tarefas de manutenção do banco de dados SQL por meio do utilitário SQLCMD, que permite executar comandos T-SQL diretamente do prompt de comando sem usar o SSMS (SQL Server Management Studio).
Normalmente, automatizar tarefas de banco de dados requer SSMS (SQL Server Management Studio) para agendar trabalhos que executam essas tarefas, mas neste artigo, uma abordagem alternativa é usada para automatizar tarefas de banco de dados sem ter que usar o tão necessário SSMS.
O utilitário SQLCMD pode economizar tempo real para desenvolvedores de banco de dados e DBAs, pois eles podem executar imediatamente os scripts SQL necessários a partir da linha de comando, e automatizar tarefas de manutenção de banco de dados com o utilitário SQLCMD é uma vantagem.
Noções básicas de automação de tarefas do banco de dados SQL
Vejamos alguns conceitos básicos para automatizar as tarefas de manutenção do banco de dados SQL com o utilitário SQLCMD.
O que é uma tarefa de manutenção de banco de dados?
Uma tarefa de manutenção de banco de dados, como o nome indica, é uma tarefa que auxilia no gerenciamento ou manutenção de um banco de dados para garantir seu bom funcionamento.
Por exemplo, criar backups de banco de dados diariamente é uma tarefa de manutenção do banco de dados que garante o backup do banco de dados, para que em caso de qualquer incidente, que acabe corrompendo o banco de dados ou tornando-o instável, ele possa ser restaurado com sucesso sem perder quaisquer dados.
Quem executa as tarefas de manutenção do banco de dados?
Normalmente, os profissionais responsáveis pela manutenção do sistema de banco de dados, como administradores de banco de dados, realizam tarefas de manutenção de banco de dados, no entanto, isso pode mudar em determinadas circunstâncias.
Como é feita uma tarefa de manutenção de banco de dados?
Uma tarefa de manutenção de banco de dados normalmente é executada manualmente por um administrador de banco de dados de tempos em tempos, ou também pode ser agendada para execução automática.
O que significa automatizar uma tarefa de manutenção de banco de dados?
Automatizar uma tarefa de manutenção de banco de dados significa agendar uma tarefa de manutenção de banco de dados para ser executada automaticamente sem qualquer intervenção manual.
Quais são os benefícios de automatizar tarefas de manutenção de banco de dados?
Automatizar tarefas de manutenção de banco de dados economiza tempo e esforço, ajuda a padronizar o processo e facilita a execução regular dele, e alertas oportunos configurados para uma falha de trabalho automatizada também podem acelerar o processo de identificação da causa de um problema se o tarefa falha.
Como você pode automatizar a tarefa de manutenção do banco de dados?
Um dos usos avançados do utilitário SQLCMD é a automação das tarefas de manutenção do banco de dados. Vamos automatizar as tarefas de manutenção do banco de dados sem usar o SSMS (SQL Server Management Studio) neste artigo.
Agendador de tarefas do Windows
Vamos aproveitar o Agendador de Tarefas do Windows para automatizar tarefas de manutenção de banco de dados que não requerem SSMS (SQL Server Management Studio).
Pré-requisitos
Este artigo pressupõe que você tenha conhecimento básico das tarefas de manutenção do banco de dados executadas pela execução de instruções T-SQL junto com um entendimento básico do utilitário SQLCMD.
Consulte o artigo Noções básicas de execução de instruções T-SQL da linha de comando usando SQLCMD para obter uma compreensão sólida dos fundamentos do SQLCMD, antes de prosseguir para seu uso avançado.
Consulte também o artigo Executando tarefas de manutenção do banco de dados SQL usando SQLCMD para saber como executar tarefas de manutenção do banco de dados SQL.
Este artigo também pressupõe que um banco de dados de exemplo da Universidade foi criado.
Consulte outro artigo Noções básicas de execução de instruções T-SQL da linha de comando usando SQLCMD para criar um banco de dados de exemplo ou use o seguinte código T-SQL para configurar o banco de dados de exemplo chamado Universidade:
-- (1) Create University sample database CREATE DATABASE University; GO USE University -- (2) Create Course table IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES T WHERE T.TABLE_NAME='Course') DROP TABLE dbo.Course CREATE TABLE [dbo].[Course] ( [CourseId] INT IDENTITY (1, 1) NOT NULL, [Name] VARCHAR (30) NOT NULL, [Detail] VARCHAR (200) NULL, CONSTRAINT [PK_Course] PRIMARY KEY CLUSTERED ([CourseId] ASC) ); -- (3) Create Student table IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES T WHERE T.TABLE_NAME='Student') DROP TABLE dbo.Student CREATE TABLE [dbo].[Student] ( [StudentId] INT IDENTITY (1, 1) NOT NULL, [Name] VARCHAR (30) NULL, [Course] VARCHAR (30) NULL, [Marks] INT NULL, [ExamDate] DATETIME2 (7) NULL, CONSTRAINT [PK_Student] PRIMARY KEY CLUSTERED ([StudentId] ASC) ); -- (4) Populate Course table SET IDENTITY_INSERT [dbo].[Course] ON INSERT INTO [dbo].[Course] ([CourseId], [Name], [Detail]) VALUES (1, N'DevOps for Databases', N'This is about DevOps for Databases') INSERT INTO [dbo].[Course] ([CourseId], [Name], [Detail]) VALUES (2, N'Power BI Fundamentals', N'This is about Power BI Fundamentals') INSERT INTO [dbo].[Course] ([CourseId], [Name], [Detail]) VALUES (3, N'T-SQL Programming', N'About T-SQL Programming') INSERT INTO [dbo].[Course] ([CourseId], [Name], [Detail]) VALUES (4, N'Tabular Data Modeling', N'This is about Tabular Data Modeling') INSERT INTO [dbo].[Course] ([CourseId], [Name], [Detail]) VALUES (5, N'Analysis Services Fundamentals', N'This is about Analysis Services Fundamentals') SET IDENTITY_INSERT [dbo].[Course] OFF -- (5) Populate Student table SET IDENTITY_INSERT [dbo].[Student] ON INSERT INTO [dbo].[Student] ([StudentId], [Name], [Course], [Marks], [ExamDate]) VALUES (1, N'Asif', N'Database Management System', 80, N'2016-01-01 00:00:00') INSERT INTO [dbo].[Student] ([StudentId], [Name], [Course], [Marks], [ExamDate]) VALUES (2, N'Peter', N'Database Management System', 85, N'2016-01-01 00:00:00') INSERT INTO [dbo].[Student] ([StudentId], [Name], [Course], [Marks], [ExamDate]) VALUES (3, N'Sam', N'Database Management System', 85, N'2016-01-01 00:00:00') INSERT INTO [dbo].[Student] ([StudentId], [Name], [Course], [Marks], [ExamDate]) VALUES (4, N'Adil', N'Database Management System', 85, N'2016-01-01 00:00:00') INSERT INTO [dbo].[Student] ([StudentId], [Name], [Course], [Marks], [ExamDate]) VALUES (5, N'Naveed', N'Database Management System', 90, N'2016-01-01 00:00:00') SET IDENTITY_INSERT [dbo].[Student] OFF GO
Automatizando a tarefa de fazer backup do banco de dados da universidade
Vamos dar uma olhada no cenário em que o backup do banco de dados precisa ser automatizado.
Requisito:automatizar o backup do banco de dados da universidade
Um DBA foi solicitado a automatizar os backups de banco de dados mostrando a data e a hora do backup para economizar tempo e evitar confusão sobre o backup mais recente e acelerar o processo geral.
Para atender a esses requisitos de negócios, um script SQLCMD que cria backup de banco de dados precisa ser executado no Agendador de Tarefas do Windows.
Criando pastas para backup e script de banco de dados
Primeiro, crie uma pasta chamada Demo na unidade C e, em seguida, crie as seguintes subpastas na Demo pasta:
- Backups
- Scripts
Observe que usamos a unidade C apenas para fins de demonstração, use uma unidade de backup em cenário de tempo real.
Criando script de backup do banco de dados SQL
Crie o script de backup do banco de dados SQL e salve-o como 01-Backup-University-sql-script.sql em C:\Demo\Scripts que também contém as informações sobre a data e hora do backup da seguinte forma:
-- Creating University database backup with date and time DECLARE @Backup NVARCHAR(400) SET @Backup=CONCAT('C:\Demo\Backups\University-',(FORMAT(GETDATE(),'yyyy-MM-dd-hh-mm-ss-tt')),'.bak') BACKUP DATABASE [University] TO DISK = @Backup WITH NOFORMAT, NOINIT, NAME = N'University-Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10 GO
Salvando script SQL na pasta Scripts
Salve o script de backup do SQL em C:\Demo\Scripts pasta.
Criando script de backup SQLCMD
O script de backup do banco de dados referente ao script SQL usando SQLCMD é criado da seguinte forma:
Sqlcmd –S . –i c:\Demo\Scripts\01-Bakup-University-sql-script.sql
Onde “.” (ponto) é a instância SQL sem nome padrão aqui, que pode ser substituída por uma instância SQL nomeada, como .\
Testar executando o script de backup SQLCMD
Execute o script SQLCMD acima na linha de comando para testar o script de backup:
O script foi executado com sucesso, então estamos prontos.
Vá para os Backups pasta e exclua o backup que é criado como resultado da execução de teste.
Criando um arquivo em lote para referenciar o script SQLCMD
Crie um arquivo em lote com o nome 02-Run-Sqlcmd-Backup-script.bat usando o Bloco de Notas e salve-o como .bat:
@Echo off sqlcmd -E -S . -i c:\Demo\Scripts\01-Bakup-University-sql-script.sql
Observe que há uma pequena alteração no script SQLCMD :-E adicionado , que na verdade é a opção de autenticação padrão e não precisa ser especificada de acordo com a documentação da Microsoft.
Isso é ilustrado a seguir:
Agendar a tarefa de backup do banco de dados no Agendador de tarefas do Windows
Abra o Agendador de Tarefas do Windows digitando Agendador de Tarefas na pesquisa do Windows e clique em Agendador de Tarefas :
Depois que o Agendador de Tarefas do Windows for aberto, clique em Criar Tarefa Básica… nas opções à direita e digite Tarefa de backup do banco de dados da universidade no Nome caixa de entrada e clique em Avançar :
Em seguida, configure a frequência da tarefa deixando as configurações padrão, que são diárias:
Defina o horário diário em que esta tarefa será ativada (recomenda-se definir o tempo de dois a três minutos mais o seu tempo atual para verificar instantaneamente se está funcionando):
Também precisamos selecionar Iniciar um programa quando perguntado o que queremos que essa tarefa execute:
Em seguida, aponte para o arquivo em lote que chama SQLCMD para criar um backup do banco de dados da Universidade e clique em Avançar :
Clique em Concluir para concluir o processo.
É possível que você tenha gasto mais tempo no que foi configurado no agendamento do trabalho para concluir a configuração do trabalho, o que significa que você precisa aguardar o dia seguinte para ver se a tarefa está em execução ou não.
Existe uma solução alternativa, você precisa reagendar a tarefa novamente 2-3 minutos antes do seu tempo atual para vê-la sendo executada em 2-3 minutos, em vez de esperar o dia inteiro:
Agora espere a tarefa ser executada automaticamente e após o tempo especificado, verifique a pasta de backup que criamos na Demo pasta na unidade C:
Parabéns, a tarefa de manutenção do banco de dados foi automatizada com sucesso usando o Agendador de Tarefas do Windows, que chama um arquivo em lotes que executa o script SQLCMD para criar um arquivo de backup.
Exclua a tarefa automatizada que foi criada para fins de demonstração quando terminar o passo a passo e não estiver interessado em executá-la mais.
Coisas para fazer
Agora que você está pronto para automatizar as tarefas de manutenção de banco de dados, como fazer backup de um banco de dados usando o utilitário SQLCMD e o Agendador de Tarefas do Windows, depois de ler este artigo, você pode melhorar ainda mais suas habilidades tentando as seguintes coisas:
- Tente configurar e automatizar o backup de um banco de dados de amostra SQLBookShop mencionado no artigo Simplificando o procedimento armazenado principal do teste de unidade que também chama um procedimento de utilitário.
- Tente criar vários bancos de dados e automatizar seus backups usando o utilitário SQLCMD com o Agendador de Tarefas do Windows.
- Tente automatizar os processos de backup e restauração do banco de dados criando dois arquivos em lote, um para backup e outro para restaurar o banco de dados referente a scripts SQLCMD e agendando o trabalho no Agendador de Tarefas do Windows para execução diária.
Ferramenta útil:
dbForge Studio for SQL Server – IDE poderoso para gerenciamento, administração, desenvolvimento, relatório e análise de dados do SQL Server.