Database
 sql >> Base de données >  >> RDS >> Database

Comment automatiser les tâches de maintenance de la base de données SQL à l'aide de SQLCMD

Cet article concerne l'automatisation des tâches de maintenance de la base de données SQL via l'utilitaire SQLCMD qui vous permet d'exécuter des commandes T-SQL directement à partir de l'invite de commande sans utiliser SSMS (SQL Server Management Studio).

En règle générale, l'automatisation des tâches de base de données nécessite SSMS (SQL Server Management Studio) pour planifier les travaux qui exécutent ces tâches, mais dans cet article, une approche alternative est utilisée pour automatiser les tâches de base de données sans avoir à utiliser le SSMS indispensable.

L'utilitaire SQLCMD peut être un véritable gain de temps pour les développeurs de bases de données et les administrateurs de base de données, car ils peuvent exécuter immédiatement les scripts SQL nécessaires à partir de la ligne de commande, et l'automatisation des tâches de maintenance de la base de données avec l'utilitaire SQLCMD est un plus.

Principes de base de l'automatisation des tâches de base de données SQL

Passons en revue quelques concepts de base pour automatiser les tâches de maintenance de la base de données SQL avec l'utilitaire SQLCMD.

Qu'est-ce qu'une tâche de maintenance de base de données ?

Une tâche de maintenance de base de données, comme son nom l'indique, est une tâche qui aide à gérer ou à maintenir une base de données pour assurer son bon fonctionnement.

Par exemple, la création quotidienne de sauvegardes de base de données est une tâche de maintenance de la base de données qui garantit que la base de données est sauvegardée, de sorte qu'en cas d'incident, qui finit par corrompre la base de données ou la rendre instable, elle peut être restaurée avec succès sans perdre toutes les données.

Qui effectue les tâches de maintenance de la base de données ?

En règle générale, les professionnels responsables de la maintenance du système de base de données, tels que les administrateurs de base de données, effectuent des tâches de maintenance de la base de données, mais cela peut changer dans certaines circonstances.

Comment se déroule une tâche de maintenance de base de données ?

Une tâche de maintenance de base de données est normalement effectuée manuellement par un administrateur de base de données de temps en temps, ou elle peut également être planifiée pour s'exécuter automatiquement.

Que signifie l'automatisation d'une tâche de maintenance de base de données ?

Automatiser une tâche de maintenance de base de données signifie planifier une tâche de maintenance de base de données pour qu'elle s'exécute automatiquement sans aucune intervention manuelle.

Quels sont les avantages de l'automatisation des tâches de maintenance de la base de données ?

L'automatisation des tâches de maintenance de la base de données permet d'économiser du temps et des efforts, aide à normaliser le processus et facilite son exécution régulière. Des alertes opportunes configurées pour un échec de travail automatisé peuvent également accélérer le processus d'identification de la cause d'un problème si le la tâche échoue.

Comment pouvez-vous automatiser la tâche de maintenance de la base de données ?

L'une des utilisations avancées de l'utilitaire SQLCMD est l'automatisation des tâches de maintenance de la base de données. Nous allons automatiser les tâches de maintenance de la base de données sans utiliser SSMS (SQL Server Management Studio) dans cet article.

Planificateur de tâches Windows

Nous allons profiter du planificateur de tâches de Windows pour automatiser les tâches de maintenance de la base de données qui ne nécessitent pas SSMS (SQL Server Management Studio).

Prérequis

Cet article suppose que vous avez une connaissance de base des tâches de maintenance de base de données effectuées en exécutant des instructions T-SQL ainsi qu'une compréhension de base de l'utilitaire SQLCMD.

Veuillez vous référer à l'article Principes de base de l'exécution d'instructions T-SQL à partir de la ligne de commande à l'aide de SQLCMD pour acquérir une solide compréhension des bases de SQLCMD, avant de passer à son utilisation avancée.

Veuillez également consulter l'article Exécution des tâches de maintenance de la base de données SQL à l'aide de SQLCMD pour savoir comment effectuer les tâches de maintenance de la base de données SQL.

Cet article suppose également qu'un exemple de base de données universitaire a été créé.

Veuillez consulter un autre article Principes de base de l'exécution d'instructions T-SQL à partir de la ligne de commande à l'aide de SQLCMD pour créer un exemple de base de données ou utilisez le code T-SQL suivant pour configurer l'exemple de base de données appelé University :

-- (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

Automatiser la tâche de sauvegarde de la base de données de l'université

Examinons le scénario dans lequel la sauvegarde de la base de données doit être automatisée.

Exigence :Automatiser la sauvegarde de la base de données de l'université

Un administrateur de base de données a été invité à automatiser les sauvegardes de la base de données en indiquant la date et l'heure de la sauvegarde pour gagner du temps et éviter toute confusion concernant la dernière sauvegarde et accélérer le processus global.

Pour répondre à ces exigences commerciales, un script SQLCMD qui crée une sauvegarde de base de données doit être exécuté dans le planificateur de tâches Windows.

Création de dossiers pour la sauvegarde de la base de données et le script

Tout d'abord, créez un dossier nommé Demo sur le lecteur C puis créez les sous-dossiers suivants dans la démo dossier :

  1. Sauvegardes
  2. Scripts

Veuillez noter que nous utilisons le lecteur C à des fins de démonstration uniquement, veuillez utiliser un lecteur de sauvegarde dans un scénario en temps réel.

Création d'un script de sauvegarde de base de données SQL

Créez un script de sauvegarde de base de données SQL et enregistrez-le sous 01-Backup-University-sql-script.sql dans C:\Demo\Scripts qui contient également les informations sur la date et l'heure de la sauvegarde comme suit :

-- 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

Enregistrement du script SQL dans le dossier Scripts

Enregistrez le script de sauvegarde SQL dans C:\Demo\Scripts dossier.

Création d'un script de sauvegarde SQLCMD

Le script de sauvegarde de la base de données faisant référence au script SQL utilisant SQLCMD est créé comme suit :

Sqlcmd –S . –i c:\Demo\Scripts\01-Bakup-University-sql-script.sql

Où "." (point) est l'instance SQL sans nom par défaut ici qui peut être remplacée par une instance SQL nommée telle que .\.

Tester l'exécution du script de sauvegarde SQLCMD

Exécutez le script SQLCMD ci-dessus à partir de la ligne de commande pour tester le script de sauvegarde :

Le script s'est exécuté avec succès, nous sommes donc prêts à partir.

Allez dans les Sauvegardes dossier et supprimez la sauvegarde créée à la suite de l'exécution du test.

Création d'un fichier de commandes pour référencer le script SQLCMD

Créez un fichier batch avec le nom 02-Run-Sqlcmd-Backup-script.bat en utilisant le Bloc-notes et enregistrez-le sous .bat :

@Echo off
sqlcmd -E -S . -i c:\Demo\Scripts\01-Bakup-University-sql-script.sql

Veuillez noter qu'il y a un léger changement dans le script SQLCMD  :-E est ajouté , qui est en fait l'option d'authentification par défaut et n'a pas besoin d'être spécifiée selon la documentation Microsoft.

Ceci est illustré comme suit :

Planifier la tâche de sauvegarde de la base de données dans le planificateur de tâches Windows

Ouvrez le Planificateur de tâches Windows en tapant Planificateur de tâches dans la recherche Windows, puis cliquez sur Planificateur de tâches :

Une fois le planificateur de tâches Windows ouvert, cliquez sur Créer une tâche de base… dans les options de droite et tapez Tâche de sauvegarde de la base de données universitaire dans le Nom zone de saisie et cliquez sur Suivant :

Paramétrez ensuite la fréquence de la tâche en laissant les paramètres par défaut, qui sont quotidiens :

Définissez l'heure quotidienne à laquelle cette tâche sera activée (il est recommandé de définir le temps entre deux et trois minutes plus votre heure actuelle pour vérifier instantanément que cela fonctionne) :

Nous devons également sélectionner Démarrer un programme lorsqu'on lui a demandé ce que nous voulons que cette tâche exécute :

Ensuite, pointez sur le fichier de commandes qui appelle SQLCMD pour créer une sauvegarde de la base de données de l'université et cliquez sur Suivant :

Cliquez sur Terminer pour terminer le processus.

Il est possible que vous ayez passé plus de temps sur ce qui a été configuré dans la planification de la tâche pour terminer la configuration de la tâche, ce qui signifie que vous devez attendre le lendemain pour voir si la tâche est en cours d'exécution ou non.

Il existe une solution de contournement, vous devez reprogrammer la tâche 2-3 minutes avant votre heure actuelle pour la voir s'exécuter en 2-3 minutes plutôt que d'attendre toute la journée :

Attendez maintenant que la tâche s'exécute automatiquement et après l'heure spécifiée, veuillez vérifier le dossier de sauvegarde que nous avons créé dans la démo dossier sur le lecteur C :

Félicitations, la tâche de maintenance de la base de données a été automatisée avec succès à l'aide du planificateur de tâches Windows, qui appelle un fichier batch qui exécute le script SQLCMD pour créer un fichier de sauvegarde.

Veuillez supprimer la tâche automatisée qui a été créée à des fins de démonstration une fois que vous avez terminé la procédure pas à pas et que vous ne souhaitez plus l'exécuter.

Choses à faire

Maintenant que vous êtes prêt à automatiser les tâches de maintenance de la base de données, telles que la sauvegarde d'une base de données à l'aide de l'utilitaire SQLCMD et du planificateur de tâches Windows après avoir parcouru cet article, vous pouvez encore améliorer vos compétences en essayant les choses suivantes :

  1. Veuillez essayer de configurer et d'automatiser la sauvegarde d'un exemple de base de données SQLBookShop mentionné dans l'article Simplifier la procédure stockée principale des tests unitaires qui appelle également une procédure utilitaire.
  2. Veuillez essayer de créer plusieurs bases de données et d'automatiser leurs sauvegardes à l'aide de l'utilitaire SQLCMD avec le planificateur de tâches Windows.
  3. Veuillez essayer d'automatiser les processus de sauvegarde et de restauration de la base de données en créant deux fichiers de commandes, l'un pour la sauvegarde et l'autre pour la restauration de la base de données en faisant référence aux scripts SQLCMD et en planifiant la tâche dans le planificateur de tâches Windows pour qu'elle s'exécute quotidiennement.

Outil utile :

dbForge Studio for SQL Server – puissant IDE pour la gestion, l'administration, le développement, la création de rapports et l'analyse de données de SQL Server.