Dit is een inleidend artikel over automatisering in SQL-server dat voornamelijk is gericht op de basisconcepten. We zullen enkele standaardpraktijken en enkele voorbeelden bespreken om beginners te helpen aan de slag te gaan met SQL-serverautomatisering.
Dit artikel benadrukt ook het belang van het automatiseren van SQL-servertaken om tijd en moeite te besparen die nodig zijn om deze taken handmatig uit te voeren.
Daarnaast zullen we kijken naar gevallen waarin het geen goed idee is om SQL-servertaken te automatiseren, ondanks het feit dat automatisering tijd en moeite bespaart.
Over het automatiseren van SQL Server
Laten we eerst vertrouwd raken met de term 'automatisering' en wat precies SQL server taakautomatisering is.
Wat is automatisering?
Automatisering is een brede term die een breed scala aan dingen dekt, maar het betekent over het algemeen programmeertools en apparaten waarmee een reeks taken automatisch kan worden uitgevoerd met weinig of geen menselijke tussenkomst.
Wat is SQL Server-automatisering?
SQL Server-automatisering kan ook verschillende betekenissen hebben, maar het houdt zich meestal bezig met het automatiseren van SQL Server-beheertaken om tijd en moeite te besparen.
Databasebeheerders of infrastructuurteams die verantwoordelijk zijn voor het beheer van SQL Server en gehoste database(s) besteden vaak veel tijd aan het uitvoeren van databaseonderhoudstaken die via verschillende methoden kunnen worden geautomatiseerd en gepland om met gespecificeerde intervallen te worden uitgevoerd.
In dit artikel richten we ons vooral op het automatiseren van SQL Server-beheertaken.
Wanneer u SQL-taken moet automatiseren
Het automatiseren van een SQL Server-beheertaak vereist een zorgvuldige planning voordat deze wordt geïmplementeerd. Elke administratieve SQL-taak, zoals back-up, databaseonderhoud of databasemonitoring, zou idealiter moeten worden geautomatiseerd als het het doel dient zonder enig ander probleem te veroorzaken.
Wanneer u SQL-taken niet moet automatiseren
Ondanks dat automatisering in de meeste gevallen erg handig is, zijn er toch enkele taken die beter handmatig kunnen worden uitgevoerd.
Als een databasebeheertaak bijvoorbeeld 5 minuten duurt om te voltooien en het automatiseren van die taak 15 uur aan het schrijven en testen van automatiseringsscripts vereist, dan is het effectiever om deze taak handmatig uit te voeren.bacsql
Er zijn bepaalde taken die niet geautomatiseerd mogen worden. Het is bijvoorbeeld vaak een onderdeel van de taak van een DBA om de databasewijzigingen te controleren voordat deze op een live server worden geïmplementeerd. Dit wordt gedaan om ervoor te zorgen dat de wijzigingen compatibel zijn met de doeldatabase. Het automatiseren van deze taak heeft meer risico's dan voordelen, dus het is beter om het te laten zoals het is.
Over het algemeen geldt dat als een databasetaak handmatige tussenkomst vereist (d.w.z. deze moet worden gezien of beheerd door een persoon/team om naar de volgende stap/fase te gaan) volgens de regels en voorschriften van uw bedrijf, dan is het volledig automatiseren van die taak niet haalbaar tenzij het is goedgekeurd door het topmanagement van uw bedrijf.
Voorbeelden van SQL-automatisering
Laten we nu eens kijken naar een paar voorbeelden van SQL-automatisering.
Databaseback-upscenario (DBA-perspectief)
Databasebeheerders (DBA's) zorgen voor bedrijfsdatabases en hun dagelijkse taken omvatten het afhandelen van databasegerelateerde verzoeken en het beheren van de databaseserver.
Een DBA besteedt het grootste deel van zijn tijd aan het beheren en implementeren van kleine wijzigingen in de databases en het zorgen voor de databaseserver.
Een DBA moet de volgende consistente taken uitvoeren:
- Maak aan het einde van elke werkdag een dagelijkse back-up van de database
- Maak een wekelijkse back-up aan het einde van elke week
- Maak aan het einde van elke maand een maandelijkse back-up.
Een dagelijkse back-up duurt een half uur en is het laatste wat een DBA doet als hij voor een dag vertrekt. Hoewel ze kunnen multitasken zodra het dagelijkse back-upproces is gestart, moeten ze nog steeds in de gaten houden hoe het ervoor zorgt dat de back-up wordt voltooid. Dit komt omdat de back-up op de back-upschijf moet worden opgeslagen wanneer deze gereed is.
Zelfs als we de tijd die wordt besteed aan wekelijkse en maandelijkse back-ups negeren, zal de tijd die nodig is om de dagelijkse back-up te voltooien toenemen naarmate u dit proces vaker uitvoert, omdat de database steeds meer gegevens zal bevatten. Zelfs als het in het begin een half uur duurt om een dagelijkse back-up uit te voeren, kan deze hoeveelheid tijd binnen een paar weken of maanden oplopen tot ongeveer een uur, afhankelijk van de gegevensgroei in het databasesysteem.
Dit is een onveranderlijke taak die constant moet worden herhaald, dus het is mogelijk dat een DBA zich gaat vervelen of zijn concentratie verliest en fouten maakt of een dag of twee mist.
Als een DBA deze SQL-taak automatiseert, besparen ze niet alleen tijd en moeite. De kans op het maken van een fout wordt geminimaliseerd.
Het dagelijkse back-upproces kan worden gepland om 's nachts te starten wanneer er weinig database-interactie is. De volgende dag kan de DBA de back-up controleren en het laatste uur van de werkdag (dat voorheen werd gebruikt voor het back-upproces) gebruiken voor belangrijkere en urgentere taken.
Scenario voor databaseontwikkeling en -implementatie
Laten we eens kijken naar een veelvoorkomend voorbeeld van database-ontwikkeling en -implementatie (ik sluit testen bewust uit om binnen het bestek van dit artikel te blijven). Een databaseontwikkelaar gebruikt een database-ontwikkelingstool zoals SQL Server Data Tools (SSDT) om nieuwe tabellen aan een database toe te voegen. Zodra dit is gebeurd, slaan ze wijzigingen op in het SQL-databaseproject. Deze wijzigingen worden vervolgens verzonden naar de DBA of het infrastructuurteam die deze wijzigingen moeten beoordelen en implementeren op de live server.
De belangrijke punten zijn als volgt:
- Databaseontwikkelaars zouden hun databasewijzigingen niet rechtstreeks op de live server moeten publiceren, volgens de standaardprocedures
- Databasebeheerders of het infrastructuurteam dat de live-server beheert, kunnen geen wijzigingen in de live-database publiceren voordat ze deze wijzigingen hebben beoordeeld om ervoor te zorgen dat ze de consistentie van de database niet in gevaar brengen.
Zoals u kunt begrijpen uit wat we hebben besproken, is het volledig automatiseren van de databaseontwikkeling en -implementatie niet praktisch en brengt het veel beveiligingsrisico's met zich mee.
De beste beslissing zou dus zijn om de stappen te automatiseren die afhankelijk zijn van een DBA of een infrastructuurteam.
Onderhoudstaken database-index
Database-indexen spelen een cruciale rol bij het sneller ophalen van de resultatenset (rijen) uit de database(s). Deze indexen hebben echter na verloop van tijd onderhoud nodig. Het onderhoud van de database-index kan handmatig worden gedaan tijdens de daluren of geautomatiseerd. Het kan een zeer tijdrovende taak zijn, dus het is beter om deze taak te automatiseren, vooral wanneer er zoveel andere databaseserver-gerelateerde zaken moeten worden beheerd.
Sommige experts betogen echter dit standpunt en bevelen aan om het indexonderhoud tot op zekere hoogte te beperken om het proces in de gaten te houden of zelfs volledig handmatig te doen.
Als het gaat om indexonderhoud, kunnen de volgende dingen de prestaties van de database-index verbeteren:
- Index opnieuw opbouwen
- Index reorganiseren
- Defrag-index
- Statistieken bijwerken
SQL-taken automatiseren
Laten we nu kijken naar de basisvereisten voor het automatiseren van een SQL-taak, gevolgd door een heel eenvoudig voorbeeld.
Voorbeelddatabase instellen
Deze walkthrough vereist de volgende voorbeelddatabase met één tabel genaamd UniversityV6 als volgt in te stellen:
-- (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
Voer het script uit om de voorbeelddatabase te maken:
De SQL Server Agent starten
Het automatiseren van een SQL-taak is meestal afhankelijk van een SQL Server-agent, tenzij u besluit een alternatieve route te kiezen.
Het eerste dat u nodig hebt, is ervoor zorgen dat er een SQL Server Agent wordt uitgevoerd. Als het niet actief is, moet u het handmatig starten en draaiende houden.
Maak verbinding met een SQL Server-instantie en zoek naar het SQL Server Agent-knooppunt in de Objectverkenner. Als er een rood 'stop'-pictogram wordt weergegeven op dit knooppunt, is het nog niet gestart:
Klik met de rechtermuisknop op de SQL Server-agent knooppunt en klik op Start:
Vervolgens moet u bevestigen dat u een SQL Server-agentservice op uw server wilt starten. Klik op Ja om dit te doen:
Als SQL Server Agent eenmaal is gestart, wordt ernaast een klein groen pictogram weergegeven. U kunt het knooppunt nu ook uitbreiden:
Maak een nieuwe baan
Klik met de rechtermuisknop op de Vacatures map en klik op Nieuwe taak… :
Typ "Backup UniversityV6 geautomatiseerde taak ” en klik op Stappen in de navigatiebalk aan de linkerkant:
Een nieuwe taak toevoegen Stap
Klik vervolgens op Nieuw , typ "Backup UniversityV6" als de stapnaam, voeg het volgende SQL-script toe en klik op 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
Klik op OK om het instellen van de taak te voltooien.
Bekijk de gemaakte taak
Scroll naar beneden naar de SQL Server Agent en zoek de nieuw aangemaakte Job:
Probeer de taak uit (geautomatiseerde taak)
Klik met de rechtermuisknop op Backup UniversityV6 geautomatiseerde taak en klik op Start taak bij stap…:
De taak begint en eindigt:
Controleer de back-uplocatie
Ga nu naar de locatie waar deze geautomatiseerde taak een nieuwe back-up heeft gemaakt:
Gefeliciteerd! U hebt de taak van het maken van een databaseback-up met succes geautomatiseerd. U kunt het nu op elke back-upschijf opslaan door simpelweg de naam van de stationsletter te wijzigen.
Houd er rekening mee dat u een back-up altijd op een ander back-upstation dan systeemstation C:moet opslaan. U kunt deze taak zo plannen dat deze met regelmatige tussenpozen wordt uitgevoerd door met de rechtermuisknop op de taak te klikken en op P . te klikken roperties en klik vervolgens op Schema's :
Dingen om te doen
Nu u de basistaken voor databaseback-ups kunt automatiseren, kunt u het volgende proberen om uw vaardigheden te verbeteren:
- Plan deze taak een week lang elke dag in de middag als test
- Maak een nieuwe tabel met de naam Statistieken in de voorbeelddatabase met de volgende kolommen:
- StatID (INT)
- StatDate (DATETIME2)
- TotalRows (INT)
Test jezelf nu door een geautomatiseerde taak (nieuwe taak) te maken voor het loggen van het aantal rijen voor de leerling tabel samen met de datum/tijd in de Statistieken tafel. Probeer de studententabel regelmatig te vullen.
Plan de taak om elk uur uit te voeren en controleer of de Statistieken tabel weerspiegelt uw gegevensinvoegingen door u elk uur het aantal rijen van de tabel te tonen.