sql >> Database >  >> RDS >> Sqlserver

Automatiseer databasetestherstel in SQL Server

Dit artikel gaat over het automatiseren van het databaseherstelproces, dat vaak handmatig wordt gedaan door de DBA of het infrastructuurteam dat verantwoordelijk is voor het beheer van databaseserver(s) en database(s).

Dit artikel benadrukt ook het belang van het automatiseren van databasebeheertaken, zoals databaseback-up en herstel, om ervoor te zorgen dat de consistentie en betrouwbaarheid van productiedatabase(s) intact blijven.

Daarnaast zullen er enkele tips zijn over het plannen en implementeren van taakautomatisering voor databaseherstel in een realistisch scenario.

Databasetestherstel en CheckDB (DBA-perspectief)

Het belang van back-up en herstel van SQL Server-databases vanuit het oogpunt van de databasebeheerder of het infrastructuurteam (verantwoordelijk voor het beheer van de databaseserver) is veel meer dan alleen het uitvoeren van back-up en herstel, aangezien dit een van de manieren is om ervoor te zorgen dat de Disaster Recovery Strategy (DR) is goed op zijn plaats.

Dit betekent ook dat back-up- en herstelbewerkingen van databases effectiever zijn als ze worden ondersteund door een ander mechanisme voor consistentiecontrole.

Het DBCC CHECKDB-commando gebruiken

SQL Server komt met een handig commando om de consistentie van een database te controleren.

Volgens de Microsoft-documentatie wordt de opdracht DBCC CHECKDB gebruikt om de logische en fysieke integriteit van alle objecten in de database te controleren door een aantal verschillende bewerkingen uit te voeren.

De succesvolle uitvoering van de opdracht zonder fouten geeft aan dat de database zich in een stabiele en consistente staat bevindt.

Deze opdracht kan eenvoudig als volgt worden uitgevoerd, op voorwaarde dat de gewenste database is aangesloten:

Scenario voor databasetestherstel

Laten we eens kijken naar een realistisch scenario waarin een DBA consequent back-ups maakt van de productiedatabase.

Het maken van back-ups garandeert echter niet dat het noodherstel van de database, ook wel DR genoemd, aanwezig is, tenzij de database met succes is hersteld.

De database moet dus worden hersteld vanaf de back-up om ervoor te zorgen dat in het geval van een database-incident de gegevens met succes kunnen worden hersteld.

De back-up van de productiedatabase mag nooit worden hersteld op de productieserver voor testdoeleinden.

Dus hoe zorgt een DBA ervoor dat de back-up in orde is? Simpelweg door de laatste back-up van de database op een andere testserver te herstellen.

Nadat de databaseback-up met succes is hersteld, moet de opdracht DBCC CHECKDB worden uitgevoerd om ervoor te zorgen dat de herstelde database consistent en stabiel is.

Dit is een belangrijke maar tijdrovende taak die ook veel zorg vraagt. Idealiter zou het geautomatiseerd moeten zijn, tenzij de regels en voorschriften van uw organisatie de automatisering van deze specifieke taak beperken.

Automatisering van databasetestherstel

Laten we nu kijken hoe we databasetestherstel in detail kunnen automatiseren.

Planning Database Test Herstellen

Het is erg belangrijk om uw stappen te plannen, zodat u ze gemakkelijk kunt automatiseren. Planning vereist ook dat u voldoet aan de randvoorwaarden van automatisering van SQL-taken.

Voorwaarden

Zorg ervoor dat aan de volgende voorwaarden is voldaan voordat u op de traditionele manier databasehersteltaken in SQL Server automatiseert:

  1. Uw automatisering is niet in strijd met organisatorische regels en voorschriften
  2. U bent gemachtigd om deze taak te automatiseren
  3. SQL Agent is actief
  4. De databaseserver waarop het herstel zal plaatsvinden, moet actief zijn
  5. Het back-upproces van de database is al geautomatiseerd en de back-up wordt naar een back-upschijf verzonden
  6. De back-upschijf is toegankelijk voor de testserver

Samenvatting van stappen

  1. Database-back-up wordt uitgevoerd op een server
  2. Deze back-up wordt opgeslagen op een back-upschijf die toegankelijk is voor een andere testserver
  3. Er is een SQL-taak gepland op de testserver om het herstel van de back-up uit te voeren
  4. De eenmaal uitgevoerde SQL-taak kan worden gevolgd door DBCC CheckDB handmatig uit te voeren op de herstelde database, maar kan ook worden geautomatiseerd

Referentieartikel

Raadpleeg het artikel Basisprincipes van automatisering van SQL Server-taken om de back-uptaak ​​van de database te automatiseren, aangezien dit artikel ervan uitgaat dat de back-uptaak ​​van de database al is geautomatiseerd en de back-up wordt opgeslagen op een back-upschijf die toegankelijk is voor een testserver.

De databaseback-uptaak ​​repliceren

Laten we aannemen dat de back-uptaak ​​is uitgevoerd en dat er een back-up is gemaakt op een back-upschijf.

Om deze taak te repliceren, gaan we een voorbeelddatabase maken met de naam UniversityV7 als volgt:

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

USE UniversityV7

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

INSERT INTO [dbo].[Student]
           ([Name]
           ,[Course]
           ,[Marks]
           ,[ExamDate])
     VALUES
           ('Asif'
           ,'Power BI Fundamentals'
           ,85
           ,'01 Jan 2019'),
		   ('Mike'
           ,'Power BI Fundamentals'
           ,80
           ,'01 Jan 2019'),
		   ('Sadaf'
           ,'Power BI Fundamentals'
           ,75
           ,'01 Jan 2019')
		   
GO

Door dit script uit te voeren, wordt de voorbeelddatabase gemaakt en gevuld.

Controleer de database door het volgende script uit te voeren:

SELECT [StudentId]
      ,[Name]
      ,[Course]
      ,[Marks]
      ,[ExamDate]
  FROM [UniversityV7].[dbo].[Student]

De uitvoer zou als volgt moeten zijn:

Laten we aannemen dat de back-uptaak ​​geautomatiseerd is. Om deze stap over te slaan, moeten we echter nog steeds handmatig de databaseback-up maken en deze opslaan op een back-upschijf die toegankelijk is voor de testserver.

Repliceer de back-uptaak ​​van de database door het volgende T-SQL-script uit te voeren:

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

Databaseback-upcontrole

Controleer de databaseback-up door naar de map te gaan waar we zojuist de back-up hebben gemaakt en bekijk het back-upbestand:

Verbinden met een andere SQL-instantie

Laten we nu verbinding maken met een andere SQL-instantie om een ​​testserver te emuleren. Het eerste dat u moet controleren, is of de SQL Agent actief is of niet.

Start SQL Agent (indien niet actief)

Klik met de rechtermuisknop op SQL Server Agent en klik op Start zoals hieronder weergegeven:

Maak een nieuwe baan

Klik vervolgens met de rechtermuisknop op Vacatures , klik op Nieuwe baan... en typ vervolgens de taaknaam als "Databasetestherstel ”:

Selecteer vervolgens Stappen klik in het linkernavigatiemenu op Nieuw , en typ vervolgens "Databasetestherstel ” als de naam van de stap:

Typ het volgende T-SQL-script in het invoervak ​​Opdracht nadat u ervoor heeft gezorgd dat het T-SQL-type is geselecteerd in de bijbehorende vervolgkeuzelijst.

-- Restore the UniversityV7 sample database 
RESTORE DATABASE UniversityV7 FROM DISK=N'C:\Backup\UniversityV7-2019-08-27.bak'
WITH
MOVE 'UniversityV7' TO 'C:\Program Files\Microsoft SQL Server\MSSQL12.SQLTAB\MSSQL\DATA\UniversityV7_Data.mdf',
MOVE 'UniversityV7_Log' TO 'C:\Program Files\Microsoft SQL Server\MSSQL12.SQLTAB\MSSQL\DATA\UniversityV7_Log.ldf'
,RECOVERY,REPLACE,STATS=10;
GO

Houd er rekening mee dat het pad C:\Program Files\Microsoft SQL Server\MSSQL12.SQLNAME\MSSQL\DATA\UniversityV7_Data.mdf in dit script is alleen voor demo-doeleinden. J u moet dit vervangen door de werkelijk pad van uw test-SQL-serverinstantie.

Klik ten slotte op OK.

Plan de taak zodat deze over 2 minuten wordt uitgevoerd

Klik met de rechtermuisknop op Databasetestherstel baan onder Vacatures en klik op Eigenschappen:

Klik op Nieuw , typ "Elke 2 minuten (testen) ”, en stel het schema in om na twee minuten te lopen:

Maak na een paar minuten verbinding met de testserver en vouw de Databases . uit knooppunt om te zien dat de UniversityV7 database is met succes hersteld door een geautomatiseerde SQL Server-taak (taak).

Aarzel niet om DBCC CheckDB uit te voeren om ervoor te zorgen dat het herstelproces van de database in orde is.

Gefeliciteerd! U hebt het herstelproces voor databasetests met succes geautomatiseerd.

Dingen om te doen

Nu u databaseback-up en testherstel kunt automatiseren, kunt u de volgende taken proberen om uw vaardigheden te verbeteren:

  1. Voeg DBCC CheckDB toe als onderdeel van het geautomatiseerde databaseherstelproces
  2. Automatiseer de back-up op de ene server en herstel deze op een andere testserver
  3. Automatiseer de databaseback-up en testhersteltaken voor meerdere databases


  1. Database Load Balancing met ProxySQL &AWS Aurora

  2. De geheimen van Domino's, of een Domino-spelgegevensmodel

  3. Langzame migratie naar de cloud

  4. Fix Error:"SELECT's links en rechts van UNION hebben niet hetzelfde aantal resultaatkolommen" in SQLite