sql >> Databasteknik >  >> RDS >> Sqlserver

Grunderna i SQL Server Task Automation

Det här är en introduktionsartikel om automatisering i SQL-server som främst fokuserar på de grundläggande begreppen. Vi kommer att diskutera några standardpraxis och några exempel för att hjälpa nybörjare att komma igång med SQL-serverautomatisering.

Den här artikeln belyser också vikten av att automatisera SQL-serveruppgifter för att spara tid och ansträngning som krävs för att utföra dessa uppgifter manuellt.

Dessutom kommer vi att titta på fall där det inte är en bra idé att automatisera SQL-serveruppgifter trots att automatisering sparar tid och ansträngning.

Om automatisering av SQL Server

Låt oss först bekanta oss med termen "automation" och vad exakt är SQL-serveruppgiftsautomation.

Vad är automation?

Automation är ett brett begrepp som täcker ett brett spektrum av saker, men det betyder i allmänhet programmeringsverktyg och enheter som gör det möjligt att utföra en uppsättning uppgifter automatiskt med liten eller ingen mänsklig inblandning.

Vad är SQL Server Automation?

SQL Server-automatisering kan också ha flera betydelser, men det handlar oftast om att automatisera SQL Server-administrativa uppgifter för att spara tid och ansträngning.

Databasadministratörer eller infrastrukturteam som ansvarar för hanteringen av SQL Server och värdbaserade databas(ar) spenderar ofta mycket tid på att utföra databasunderhållsuppgifter som kan automatiseras med olika metoder och schemaläggas att köras med bestämda intervaller.

I den här artikeln fokuserar vi huvudsakligen på automatisering av SQL Server-administrationsuppgifter.

När du bör automatisera SQL-uppgifter

Att automatisera en administrativ uppgift för SQL Server kräver noggrann planering innan den implementeras. Alla SQL-administrativa uppgifter som säkerhetskopiering, databasunderhåll eller databasövervakning bör helst automatiseras om det tjänar syftet utan att orsaka några andra problem.

När du inte bör automatisera SQL-uppgifter

Trots att automatisering är mycket användbar i de flesta fall finns det fortfarande vissa uppgifter som bör utföras manuellt.

Till exempel, om en databasadministrationsuppgift tar 5 minuter att slutföra och automatisering av den uppgiften kräver 15 timmars skrivande och testning av automatiseringsskript, är det mer effektivt att göra den här uppgiften manuellt.bacsql

Det finns vissa uppgifter som inte får automatiseras. Till exempel är det ofta en del av en DBA:s jobb att kontrollera databasändringarna innan den distribueras till en liveserver. Detta görs för att säkerställa att ändringarna är kompatibla med måldatabasen. Att automatisera denna uppgift har fler risker än fördelar, så det är bättre att lämna som det är.

Generellt sett, om någon databasuppgift kräver manuellt ingripande (dvs. den måste ses eller hanteras av en person/team för att kunna gå vidare till nästa steg/etapp) enligt ditt företags regler och föreskrifter, då är det att helt automatisera uppgiften inte genomförbart om det inte godkänns av ditt företags högsta ledning.

Exempel på SQL Automation

Låt oss nu titta på ett par exempel på SQL-automatisering.

Scenario för databasbackup (DBA-perspektiv)

Databasadministratörer (DBA) tar hand om företagsdatabaser och deras dagliga uppgifter inkluderar att servera databasrelaterade förfrågningar och hantera databasservern.

En DBA ägnar det mesta av sin tid åt att hantera och distribuera små ändringar i databaserna och ta hand om databasservern.

En DBA måste utföra följande konsekventa uppgifter:

  1. Skapa en daglig säkerhetskopia av databasen i slutet av varje arbetsdag
  2. Skapa en säkerhetskopia varje vecka i slutet av varje vecka
  3. Skapa en månatlig säkerhetskopia i slutet av varje månad.

En daglig säkerhetskopiering tar en halvtimme och det är det sista en DBA gör när de åker iväg för dagen. Även om de kan multitaska när den dagliga säkerhetskopieringsprocessen har startat, måste de fortfarande hålla ett öga på hur det kommer att säkerställa att säkerhetskopieringen är klar. Detta beror på att säkerhetskopian ska lagras på säkerhetskopian när den är klar.

Även om vi bortser från tiden som ägnas åt vecko- och månatliga säkerhetskopieringar, kommer tiden som krävs för att slutföra den dagliga säkerhetskopieringen att öka ju mer du utför denna process eftersom databasen kommer att ha mer och mer data. Även om det tar en halvtimme att utföra en daglig säkerhetskopiering i början, kan denna tidsperiod öka till ungefär en timme på ett par veckor eller månader beroende på datatillväxten i databassystemet.

Detta är en oföränderlig uppgift som ständigt måste upprepas, så det är möjligt för en DBA att bli uttråkad eller tappa koncentrationen och göra misstag eller missa en dag eller två.

Om en DBA automatiserar denna SQL-uppgift, kommer de inte bara att spara tid och ansträngning. Chansen att göra fel kommer att minimeras.

Den dagliga säkerhetskopieringen kan schemaläggas att starta under natten när det är låg databasinteraktion. Nästa dag kan DBA kontrollera säkerhetskopian och använda den sista timmen på arbetsdagen (som tidigare användes för säkerhetskopieringsprocessen) för viktigare och brådskande uppgifter.

Scenario för databasutveckling och distribution

Låt oss överväga ett mycket vanligt exempel på databasutveckling och distribution (jag utesluter medvetet testning för att hålla mig inom ramen för denna artikel). En databasutvecklare använder ett databasutvecklingsverktyg som SQL Server Data Tools (SSDT) ​​för att lägga till nya tabeller till en databas. När detta är gjort sparar de ändringar i SQL-databasprojektet. Dessa ändringar skickas sedan till DBA eller infrastrukturteamet som måste granska dessa ändringar och distribuera dem till liveservern.

De viktiga punkterna är följande:

  1. Databasutvecklare bör inte publicera sina databasändringar direkt till liveservern enligt standardpraxis
  2. Databasadministratörer eller infrastrukturteamet som hanterar liveservern kan inte publicera några ändringar i livedatabasen innan de har granskat dessa ändringar för att säkerställa att de inte ifrågasätter databasens konsistens.

Som du kan förstå av det vi diskuterade är det inte praktiskt att helt automatisera databasutvecklings- och distributionsuppgifterna och innebär många säkerhetsrisker.

Så det bästa beslutet skulle vara att automatisera stegen som beror på en DBA eller ett infrastrukturteam.

Underhållsuppgifter för databasindex

Databasindex spelar en viktig roll för att snabbare hämta resultatuppsättningen (raderna) från databasen/databaserna. Dessa index kräver dock underhåll med tiden. Underhåll av databasindex kan göras manuellt under lågtrafik eller automatiserat. Det kan vara en mycket tidskrävande uppgift, så det är bättre att automatisera den här uppgiften, särskilt när det finns så många andra databasserverrelaterade saker att hantera.

Vissa av experterna argumenterar dock för denna synpunkt och rekommenderar att man begränsar indexunderhållet i viss utsträckning för att hålla ett öga på processen eller till och med göra detta helt manuellt.

När det gäller indexunderhåll kan följande saker förbättra databasindexprestanda:

  1. Återskapa index
  2. Omorganisera index
  3. Defragmentera index
  4. Uppdatera statistik

Hur man automatiserar SQL-uppgifter

Låt oss nu titta på de grundläggande kraven för att automatisera en SQL-uppgift följt av ett mycket enkelt exempel.

Konfigurera exempeldatabas

Denna genomgång kräver följande exempeldatabas med en tabell som heter UniversityV6 ställas in enligt följande:

-- (1) Create the UniversityV6 sample database
CREATE DATABASE UniversityV6;
GO

USE UniversityV6

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)
);
GO

Kör skriptet för att skapa exempeldatabasen:

Starta SQL Server Agent

Att automatisera en SQL-uppgift beror vanligtvis på en SQL Server-agent om du inte bestämmer dig för att välja en alternativ väg.

Det första du behöver är att se till att en SQL Server Agent körs. Om den inte är igång måste du starta den manuellt och hålla den igång.

Anslut till en SQL Server-instans och leta efter SQL Server Agent-noden i Objektutforskaren. Om det visas en röd "stopp"-ikon vid denna nod, har den inte startat ännu:

Högerklicka på SQL Server Agent nod och klicka på Start:

Därefter måste du bekräfta att du vill starta en SQL Server-agenttjänst på din server. Klicka på Ja för att göra detta:

När den väl har startat kommer SQL Server Agent att ha en liten grön ikon bredvid sig. Du kan också utöka noden nu:

Skapa ett nytt jobb

Högerklicka på Jobb mappen och klicka på Nytt jobb... :

Skriv "Backup UniversityV6 automated task ” och klicka på Steg i navigeringsfältet till vänster:

Lägg till ett nytt jobbsteg

Klicka sedan på Ny , skriv "Backup UniversityV6" som stegnamn, lägg till följande SQL-skript och klicka på OK :

-- Backup the UniversityV6 sample database using the date time stamp
DECLARE @BackupName VARCHAR(100)
SET @BackupName=CONCAT('C:\Backup\UniversityV6-',FORMAT(GETDATE(),'yyyy-MM-dd-hh-mm-tt'),'.bak')
BACKUP DATABASE UniversityV6 TO [email protected] WITH COMPRESSION, INIT;
GO

Klicka på OK för att slutföra konfigureringen av jobbet.

Visa det skapade jobbet

Rulla ned till SQL Server Agent och leta reda på det nyskapade jobbet:

Testkör jobbet (automatisk uppgift)

Högerklicka på Backup UniversityV6 automated task och klicka på Starta jobb vid steg...:

Jobbet börjar och slutar:

Kontrollera säkerhetskopieringsplatsen

Gå nu till platsen där denna automatiserade uppgift skapade en ny säkerhetskopia:

Grattis! Du har framgångsrikt automatiserat uppgiften att skapa en databassäkerhetskopiering. Du kan nu lagra den på valfri backup-enhet genom att helt enkelt ändra enhetsbeteckningens namn.

Kom ihåg att du alltid bör spara en säkerhetskopia på en annan backupenhet än systemenheten C:. Du kan schemalägga den här uppgiften så att den körs med täta intervaller genom att högerklicka på jobbet, klicka på P egenskaper och klicka sedan på Schedules :

Saker att göra

Nu när du kan automatisera grundläggande säkerhetskopiering av databas, försök med följande för att förbättra dina färdigheter:

  1. Schemalägg den här uppgiften att köras varje dag på eftermiddagen i en vecka som ett test
  2. Skapa en ny tabell som heter Stats i exempeldatabasen med följande kolumner:
    1. StatID (INT)
    2. StatDatum (DATETIME2)
    3. TotalRows (INT)

Testa dig själv genom att skapa en automatisk uppgift (nytt jobb) för att logga radantalet för eleven tabellen tillsammans med datum/tid i Statistik tabell. Försök att fylla i elevtabellen ofta.

Schemalägg uppgiften att köras varje timme och kontrollera om Statistik tabellen återspeglar dina infogade data genom att visa dig radantalet i tabellen varje timme.


  1. Care To Know-klausuler:Allt om SELECT, FROM, WHERE, GROUP BY, HAVING, ORDER BY och LIMIT

  2. NodeJS MySQL Dump

  3. Hur man skickar boolesk parameter till Oracle-proceduren C#

  4. Jag behöver min PHP-sida för att visa min BLOB-bild från mysql-databasen