sql >> Database teknologi >  >> RDS >> Database

Sådan automatiseres SQL-databasevedligeholdelsesopgaver ved hjælp af SQLCMD

Denne artikel handler om automatisering af SQL-databasevedligeholdelsesopgaver gennem SQLCMD-værktøjet, som lader dig køre T-SQL-kommandoer direkte fra kommandoprompten uden at bruge SSMS (SQL Server Management Studio).

Typisk kræver automatisering af databaseopgaver SSMS (SQL Server Management Studio) til planlægning af job, der kører disse opgaver, men i denne artikel bruges en alternativ tilgang til at automatisere databaseopgaver uden at skulle bruge den hårdt tiltrængte SSMS.

SQLCMD-værktøjet kan være en realtidsbesparelse for databaseudviklere og DBA'er, da de straks kan køre de nødvendige SQL-scripts fra kommandolinjen, og automatisering af databasevedligeholdelsesopgaver med SQLCMD-værktøjet er et plus.

Grundlæggende om automatisering af SQL-databaseopgaver

Lad os gennemgå nogle grundlæggende koncepter til automatisering af SQL-databasevedligeholdelsesopgaver med SQLCMD-værktøjet.

Hvad er en databasevedligeholdelsesopgave?

En databasevedligeholdelsesopgave er, som navnet indikerer, en opgave, der hjælper med at administrere eller vedligeholde en database for at sikre dens gnidningsløse drift.

For eksempel er oprettelse af database-backups på daglig basis en databasevedligeholdelsesopgave, der sikrer, at databasen sikkerhedskopieres, så den i tilfælde af en hændelse, som enten ender med at ødelægge databasen eller gøre den ustabil, kan gendannes med succes uden at tabe nogen data.

Hvem udfører databasevedligeholdelsesopgaver?

Typisk udfører fagfolk med ansvar for databasesystemvedligeholdelse, såsom databaseadministratorer, databasevedligeholdelsesopgaver, men dette kan ændre sig under visse omstændigheder.

Hvordan udføres en databasevedligeholdelsesopgave?

En databasevedligeholdelsesopgave udføres normalt manuelt af en databaseadministrator fra tid til anden, eller den kan også planlægges til at køre automatisk.

Hvad betyder automatisering af en databasevedligeholdelsesopgave?

Automatisering af en databasevedligeholdelsesopgave betyder at planlægge en databasevedligeholdelsesopgave til at køre automatisk uden nogen manuel indgriben.

Hvad er fordelene ved at automatisere databasevedligeholdelsesopgaver?

Automatisering af databasevedligeholdelsesopgaver sparer tid og kræfter, hjælper med at standardisere processen og gør det nemmere at udføre den på regelmæssig basis, og rettidige advarsler konfigureret til en automatiseret jobfejl kan også fremskynde processen med at identificere årsagen til et problem, hvis opgave mislykkes.

Hvordan kan du automatisere databasevedligeholdelsesopgaven?

En af de avancerede anvendelser af SQLCMD-værktøjet er automatisering af databasevedligeholdelsesopgaver. Vi vil automatisere databasevedligeholdelsesopgaver uden at bruge SSMS (SQL Server Management Studio) i denne artikel.

Windows Task Scheduler

Vi vil udnytte Windows Task Scheduler til at automatisere databasevedligeholdelsesopgaver, som ikke kræver SSMS (SQL Server Management Studio).

Forudsætninger

Denne artikel forudsætter, at du har grundlæggende viden om databasevedligeholdelsesopgaver udført ved at køre T-SQL-sætninger sammen med en grundlæggende forståelse af SQLCMD-værktøjet.

Se venligst artiklen Grundlæggende om at køre T-SQL-sætninger fra kommandolinje ved hjælp af SQLCMD for at få en solid forståelse af det grundlæggende i SQLCMD, før du fortsætter til dets avancerede brug.

Se også artiklen Running SQL Database Maintenance Tasks Using SQLCMD for at lære, hvordan du udfører SQL-databasevedligeholdelsesopgaver.

Denne artikel forudsætter også, at der er oprettet et eksempel på en universitetsdatabase.

Se venligst en anden artikel Grundlæggende om at køre T-SQL-sætninger fra kommandolinje ved hjælp af SQLCMD for at oprette en eksempeldatabase, eller brug følgende T-SQL-kode til at opsætte prøvedatabasen kaldet Universitet:

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

Automatisering af opgaven med at sikkerhedskopiere universitetets database

Lad os tage et kig på scenariet, hvor databasesikkerhedskopiering skal automatiseres.

Krav:Automatiser sikkerhedskopieringen af ​​universitetsdatabasen

En DBA blev bedt om at automatisere databasesikkerhedskopiering, der viser dato og klokkeslæt for sikkerhedskopieringen for at spare tid og undgå forvirring over den seneste sikkerhedskopiering og fremskynde den overordnede proces.

For at opfylde disse forretningskrav skal der køres et SQLCMD-script, der opretter databasesikkerhedskopiering, i Windows Task Scheduler.

Oprettelse af mapper til databasesikkerhedskopiering og script

Først skal du oprette en mappe med navnet Demo på drev C og opret derefter følgende undermapper i demoen mappe:

  1. Sikkerhedskopier
  2. Scripts

Bemærk venligst, at vi kun bruger drev C til demoformål. Brug venligst et backup-drev i realtidsscenarie.

Oprettelse af SQL Database Backup Script

Opret SQL database backup script og gem det som 01-Backup-University-sql-script.sql i C:\Demo\Scripts som også indeholder oplysninger om sikkerhedskopieringsdato og -klokkeslæt som følger:

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

Gemmer SQL-script i Script-mappe

Gem SQL backup-scriptet i C:\Demo\Scripts mappe.

Oprettelse af SQLCMD Backup Script

Databasesikkerhedskopieringsscriptet, der henviser til SQL-scriptet ved hjælp af SQLCMD, oprettes som følger:

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

Hvor "." (punktum) er standard unavngivne SQL-instanser her, som kan erstattes af en navngivne SQL-instanser såsom .\.

Test kørsel af SQLCMD Backup Script

Kør ovenstående SQLCMD-script fra kommandolinjen for at teste backup-scriptet:

Scriptet kørte med succes, så vi er godt i gang.

Gå til Sikkerhedskopier mappe og slet den sikkerhedskopi, der er oprettet som et resultat af testkørslen.

Oprettelse af en batchfil for at referere til SQLCMD-scriptet

Opret en batchfil med navnet 02-Run-Sqlcmd-Backup-script.bat ved at bruge Notesblok og gem det som .bat:

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

Bemærk venligst, at der er en lille ændring i SQLCMD-scriptet :-E er tilføjet , hvilket faktisk er standardgodkendelsesindstillingen og behøver ikke angives i henhold til Microsofts dokumentation.

Dette er illustreret som følger:

Planlæg Database Backup-opgave i Windows Task Scheduler

Åbn Windows Task Scheduler ved at skrive Task Scheduler i Windows-søgningen og klik derefter på Task Scheduler :

Når Windows Task Scheduler er åbnet, skal du klikke på Create Basic Task... fra indstillingerne til højre, og skriv Backup University Database Task i Navn indtastningsfeltet, og klik på Næste :

Indstil derefter frekvensen af ​​opgaven ved at forlade standardindstillingerne, som er dagligt:

Indstil det daglige tidspunkt, hvor denne opgave skal aktiveres (det anbefales at indstille tiden fra to til tre minutter plus dit nuværende tidspunkt for øjeblikkeligt at kontrollere, at den virker):

Vi skal også vælge Start et program når vi bliver spurgt, hvad vil vi have denne opgave til at udføre:

Peg derefter på batchfilen, der kalder SQLCMD for at oprette en sikkerhedskopi af universitetets database, og klik på Næste :

Klik på Udfør for at fuldføre processen.

Det er muligt, at du har brugt mere tid på det, der var sat op i jobplanen for at fuldføre jobopsætningen, hvilket betyder, at du skal vente til næste dag for at se, om opgaven kører eller ej.

Der er en løsning - du skal omplanlægge opgaven igen 2-3 minutter før din nuværende tid for at se den køre om 2-3 minutter i stedet for at vente på hele dagen:

Vent nu på, at opgaven kører automatisk, og efter den angivne tid, tjek venligst backup-mappen, vi oprettede i demoen mappe på drev C:

Tillykke, databasevedligeholdelsesopgaven er blevet automatiseret ved hjælp af Windows Task Scheduler, som kalder en batchfil, der kører SQLCMD-scriptet for at oprette en sikkerhedskopifil.

Slet venligst den automatiserede opgave, som blev oprettet til demoformål, når du er færdig med gennemgangen og ikke er interesseret i at køre den videre.

Ting at gøre

Nu hvor du er klar til at automatisere databasevedligeholdelsesopgaver, såsom sikkerhedskopiering af en database ved hjælp af SQLCMD-værktøjet og Windows Task Scheduler efter at have gennemgået denne artikel, kan du forbedre dine færdigheder yderligere ved at prøve følgende ting:

  1. Prøv venligst at konfigurere og automatisere sikkerhedskopieringen af ​​en prøvedatabase SQLBookShop nævnt i artiklen Simplifying Unit Testing Main Stored Procedure, som også kalder en Utility Procedure.
  2. Prøv venligst at oprette flere databaser og automatisere deres sikkerhedskopier ved hjælp af SQLCMD-værktøjet med Windows Task Scheduler.
  3. Prøv venligst at automatisere backup- og gendannelsesdatabaseprocesserne ved at oprette to batchfiler, en til backup og den anden til at gendanne databasen med henvisning til SQLCMD-scripts og planlægge jobbet i Windows Task Scheduler til at køre dagligt.

Nyttigt værktøj:

dbForge Studio til SQL Server – kraftfuld IDE til SQL Server-administration, administration, udvikling, datarapportering og analyse.


  1. Sådan migrerer du databaser og datafiler

  2. Beregn tidsforskellen mellem to rækker

  3. Hvordan opretter og bruger man en midlertidig tabel i oracle-lagret procedure?

  4. Virtuelle kolonner og funktionelle indekser