sql >> Database >  >> RDS >> Database

Onderhoudstaken voor SQL-databases automatiseren met SQLCMD

Dit artikel gaat over het automatiseren van onderhoudstaken voor SQL-databases via het hulpprogramma SQLCMD waarmee u T-SQL-opdrachten rechtstreeks vanaf de opdrachtprompt kunt uitvoeren zonder SSMS (SQL Server Management Studio) te gebruiken.

Het automatiseren van databasetaken vereist doorgaans SSMS (SQL Server Management Studio) voor het plannen van taken die deze taken uitvoeren, maar in dit artikel wordt een alternatieve benadering gebruikt om databasetaken te automatiseren zonder het broodnodige SSMS te hoeven gebruiken.

Het hulpprogramma SQLCMD kan een realtime besparing zijn voor databaseontwikkelaars en DBA's, aangezien ze de benodigde SQL-scripts onmiddellijk vanaf de opdrachtregel kunnen uitvoeren, en het automatiseren van database-onderhoudstaken met het hulpprogramma SQLCMD is een pluspunt.

Basisprincipes van het automatiseren van SQL-databasetaken

Laten we enkele basisconcepten doornemen voor het automatiseren van onderhoudstaken voor SQL-databases met het hulpprogramma SQLCMD.

Wat is een database-onderhoudstaak?

Een database-onderhoudstaak, zoals de naam al aangeeft, is een taak die helpt bij het beheren of onderhouden van een database om de goede werking ervan te garanderen.

Het dagelijks maken van databaseback-ups is bijvoorbeeld een onderhoudstaak voor de database die ervoor zorgt dat er een back-up van de database wordt gemaakt, zodat deze in geval van een incident dat de database corrumpeert of instabiel maakt, met succes kan worden hersteld zonder verlies alle gegevens.

Wie voert databaseonderhoudstaken uit?

Doorgaans voeren professionals die verantwoordelijk zijn voor het onderhoud van het databasesysteem, zoals databasebeheerders, databaseonderhoudstaken uit, maar dit kan onder bepaalde omstandigheden veranderen.

Hoe wordt een databaseonderhoudstaak uitgevoerd?

Een database-onderhoudstaak wordt normaal gesproken van tijd tot tijd handmatig uitgevoerd door een databasebeheerder, of het kan ook worden gepland om automatisch te worden uitgevoerd.

Wat betekent het automatiseren van een database-onderhoudstaak?

Het automatiseren van een database-onderhoudstaak betekent dat een database-onderhoudstaak wordt gepland om automatisch te worden uitgevoerd zonder enige handmatige tussenkomst.

Wat zijn de voordelen van het automatiseren van databaseonderhoudstaken?

Het automatiseren van database-onderhoudstaken bespaart tijd en moeite, helpt het proces te standaardiseren en maakt het gemakkelijker om het regelmatig uit te voeren, en tijdige waarschuwingen die zijn geconfigureerd voor een geautomatiseerde taakfout kunnen ook het proces van het identificeren van de oorzaak van een probleem versnellen als de taak mislukt.

Hoe kunt u de databaseonderhoudstaak automatiseren?

Een van de geavanceerde toepassingen van het hulpprogramma SQLCMD is de automatisering van database-onderhoudstaken. In dit artikel gaan we database-onderhoudstaken automatiseren zonder SSMS (SQL Server Management Studio) te gebruiken.

Windows Taakplanner

We gaan gebruik maken van Windows Taakplanner om database-onderhoudstaken te automatiseren waarvoor geen SSMS (SQL Server Management Studio) nodig is.

Vereisten

In dit artikel wordt ervan uitgegaan dat u basiskennis hebt van databaseonderhoudstaken die worden uitgevoerd door T-SQL-instructies uit te voeren, samen met een basiskennis van het hulpprogramma SQLCMD.

Raadpleeg het artikel Basisprincipes van het uitvoeren van T-SQL-instructies vanaf de opdrachtregel met behulp van SQLCMD om een ​​goed begrip te krijgen van de basisprincipes van SQLCMD, voordat u doorgaat met het geavanceerde gebruik ervan.

Raadpleeg ook het artikel Onderhoudstaken voor SQL-databases uitvoeren met SQLCMD om te leren hoe u onderhoudstaken voor SQL-databases uitvoert.

Dit artikel gaat er ook van uit dat er een voorbeelduniversiteitsdatabase is gemaakt.

Raadpleeg een ander artikel Basisprincipes van het uitvoeren van T-SQL-statements vanaf de opdrachtregel met SQLCMD om een ​​voorbeelddatabase te maken of gebruik de volgende T-SQL-code om de voorbeelddatabase met de naam University: in te stellen.

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

De taak van het maken van een back-up van de universitaire database automatiseren

Laten we eens kijken naar het scenario waarin databaseback-up moet worden geautomatiseerd.

Vereiste:Automatiseer de back-up van de universitaire database

Een DBA werd gevraagd om databaseback-ups te automatiseren met datum en tijd van de back-up om tijd te besparen en verwarring over de nieuwste back-up te voorkomen en het algehele proces te versnellen.

Om aan deze zakelijke vereisten te voldoen, moet een SQLCMD-script dat een databaseback-up maakt, worden uitgevoerd in de Windows Taakplanner.

Mappen maken voor databaseback-up en script

Maak eerst een map met de naam Demo op station C en maak vervolgens de volgende submappen in de Demo map:

  1. Back-ups
  2. Scripts

Houd er rekening mee dat we schijf C alleen voor demo-doeleinden gebruiken. Gebruik een back-upschijf in realtime scenario.

SQL Database back-upscript maken

Maak een back-upscript voor de SQL-database en sla het op als 01-Backup-University-sql-script.sql in C:\Demo\Scripts die ook de informatie over de back-updatum en -tijd als volgt bevat:

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

SQL-script opslaan in de map Scripts

Sla het SQL-back-upscript op in C:\Demo\Scripts map.

SQLCMD-back-upscript maken

Het databaseback-upscript dat verwijst naar het SQL-script dat SQLCMD gebruikt, wordt als volgt gemaakt:

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

Waar “.” (dot) is hier de standaard naamloze SQL-instantie die kan worden vervangen door een genoemde SQL-instantie zoals .\.

Test met SQLCMD-back-upscript

Voer het bovenstaande SQLCMD-script uit vanaf de opdrachtregel om het back-upscript te testen:

Het script is succesvol uitgevoerd, dus we zijn klaar om te gaan.

Ga naar de Back-ups map en verwijder de back-up die is gemaakt als resultaat van de testrun.

Een batchbestand maken om naar het SQLCMD-script te verwijzen

Maak een batchbestand met de naam 02-Run-Sqlcmd-Backup-script.bat met Kladblok en sla het op als .bat:

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

Houd er rekening mee dat er een kleine wijziging is in het SQLCMD-script :-E is toegevoegd , wat eigenlijk . is de standaard authenticatie-optie en hoeft niet gespecificeerd te worden volgens de Microsoft-documentatie.

Dit wordt als volgt geïllustreerd:

Plan databaseback-uptaak ​​in Windows Taakplanner

Open de Windows Taakplanner door Taakplanner te typen in de Windows-zoekopdracht en klik vervolgens op Taakplanner :

Zodra de Windows Taakplanner is geopend, klikt u op Create Basic Task… uit de opties aan de rechterkant en typ Backup University Database Task in de Naam invoervak ​​en klik op Volgende :

Stel vervolgens de frequentie van de taak in door de standaardinstellingen te verlaten, die dagelijks zijn:

Stel de dagelijkse tijd in waarop deze taak wordt geactiveerd (het wordt aanbevolen om de tijd in te stellen van twee tot drie minuten plus uw huidige tijd om direct te controleren of het werkt):

We moeten ook Een programma starten . selecteren op de vraag wat we willen dat deze taak uitvoert:

Wijs vervolgens naar het batchbestand dat SQLCMD aanroept om een ​​back-up van de universiteitsdatabase te maken en klik op Volgende :

Klik op Voltooien om het proces te voltooien.

Het is mogelijk dat u meer tijd hebt besteed aan wat er in het taakschema was ingesteld om de taakinstelling te voltooien, wat betekent dat u de volgende dag moet wachten om te zien of de taak wordt uitgevoerd of niet.

Er is een tijdelijke oplossing:u moet de taak 2-3 minuten eerder dan uw huidige tijd opnieuw plannen om te zien dat deze binnen 2-3 minuten wordt uitgevoerd in plaats van de hele dag te wachten:

Wacht nu tot de taak automatisch wordt uitgevoerd en controleer na de opgegeven tijd de back-upmap die we hebben gemaakt in de Demo map op station C:

Gefeliciteerd, de database-onderhoudstaak is met succes geautomatiseerd met behulp van de Windows Taakplanner, die een batchbestand aanroept dat het SQLCMD-script uitvoert om een ​​back-upbestand te maken.

Verwijder de geautomatiseerde taak die voor demo-doeleinden is gemaakt zodra u klaar bent met de walkthrough en niet geïnteresseerd bent om deze verder uit te voeren.

Dingen om te doen

Nu u klaar bent om database-onderhoudstaken te automatiseren, zoals het maken van een back-up van een database met behulp van het hulpprogramma SQLCMD en Windows Taakplanner nadat u dit artikel hebt doorgenomen, kunt u uw vaardigheden verder verbeteren door de volgende dingen te proberen:

  1. Probeer de back-up van een voorbeelddatabase in te stellen en te automatiseren SQLBookShop genoemd in het artikel Vereenvoudiging van het testen van de belangrijkste opgeslagen procedure die ook een hulpprogramma-procedure aanroept.
  2. Probeer meerdere databases te maken en hun back-ups te automatiseren met behulp van het hulpprogramma SQLCMD met Windows Taakplanner.
  3. Probeer de back-up- en hersteldatabaseprocessen te automatiseren door twee batchbestanden te maken, één voor back-up en de andere voor het herstellen van de database met verwijzing naar SQLCMD-scripts en de taak in de Windows Taakplanner te plannen om dagelijks te worden uitgevoerd.

Handig hulpmiddel:

dbForge Studio voor SQL Server – krachtige IDE voor beheer, administratie, ontwikkeling, gegevensrapportage en analyse van SQL Server.


  1. Hoe u de datum van gisteren in PostgreSQL kunt krijgen

  2. Haal de ID van een object uit de naam in SQL Server:OBJECT_ID()

  3. Configuraties opslaan in Android

  4. Vergelijking van hoge beschikbaarheid van database - MySQL / MariaDB-replicatie versus Oracle Data Guard