Tento článek pojednává o automatizaci procesu obnovy databáze, kterou často provádí ručně DBA nebo tým infrastruktury odpovědný za správu databázových serverů a databází.
Tento článek také zdůrazňuje důležitost automatizace úloh správy databáze, jako je zálohování a obnova databáze, aby byla zajištěna konzistence a spolehlivost produkčních databází.
Kromě toho zde bude několik tipů, jak plánovat a implementovat automatizaci úloh obnovy databáze v reálném scénáři.
Obnovení testu databáze a CheckDB (perspektiva DBA)
Důležitost zálohování a obnovy databáze SQL Server z pohledu správce databáze nebo týmu infrastruktury (odpovědného za správu databázového serveru) je mnohem více než jen spuštění zálohování a obnovy, protože je to jeden ze způsobů, jak zajistit, aby strategie obnovy po havárii (DR) je dobře zavedena.
To také znamená, že operace zálohování a obnovy databáze jsou efektivnější, pokud jsou podporovány jakýmkoli jiným mechanismem kontroly konzistence.
Použití příkazu DBCC CHECKDB
SQL Server přichází s praktickým příkazem pro kontrolu konzistence databáze.
Podle dokumentace společnosti Microsoft se příkaz DBCC CHECKDB používá ke kontrole logické a fyzické integrity všech objektů v databázi prováděním řady různých operací.
Úspěšné provedení příkazu bez jakýchkoli chyb znamená, že databáze je ve stabilním a konzistentním stavu.
Tento příkaz lze jednoduše provést následovně za předpokladu, že je připojena požadovaná databáze:
Scénář obnovení testu databáze
Podívejme se na scénář reálného světa, ve kterém správce DBA soustavně vytváří zálohy produkční databáze.
Vytváření záloh však nezaručuje, že dojde k obnovení po havárii databáze známé také jako DR, pokud nebude databáze úspěšně obnovena.
Databáze tedy musí být obnovena ze zálohy, aby bylo zajištěno, že v případě jakéhokoli incidentu databáze bude možné data úspěšně obnovit.
Záloha produkční databáze by nikdy neměla být obnovena na produkčním serveru pro účely testování.
Jak tedy DBA zajistí, že záloha je v pořádku? Jednoduše obnovením poslední zálohy databáze na jiném testovacím serveru.
Jakmile byla záloha databáze úspěšně obnovena, měl by být proveden příkaz DBCC CHECKDB, aby se zajistilo, že obnovená databáze je konzistentní a stabilní.
Jedná se o důležitý, ale časově náročný úkol, který také vyžaduje velkou péči. V ideálním případě by měl být automatizován – pokud vaše organizační pravidla a předpisy neomezují automatizaci tohoto konkrétního úkolu.
Automatické obnovení testu databáze
Podívejme se nyní, jak podrobně automatizovat obnovu testu databáze.
Plánování obnovení testu databáze
Je velmi důležité naplánovat si své kroky tak, abyste je mohli snadno automatizovat. Plánování také vyžaduje, abyste splnili předpoklady automatizace úloh SQL.
Předpoklady
Než začnete automatizovat úlohy obnovy databáze na serveru SQL tradičním způsobem, ujistěte se, že jsou splněny následující předpoklady:
- Vaše automatizace není v rozporu s organizačními pravidly a předpisy
- Máte oprávnění automatizovat tento úkol
- Agent SQL běží
- Databázový server, na kterém bude obnova probíhat, by měl být v provozu
- Proces zálohování databáze je již automatizovaný a záloha se odesílá na záložní disk
- Záložní jednotka je přístupná testovacímu serveru
Shrnutí kroků
- Zálohování databáze běží na serveru
- Tato záloha je uložena na záložní jednotku přístupnou z jiného testovacího serveru
- Na testovacím serveru byla naplánována úloha SQL pro spuštění obnovení zálohy
- Po spuštění úlohy SQL může následovat ruční spuštění DBCC CheckDB v obnovené databázi, ale lze ji také automatizovat
Referenční článek
Chcete-li automatizovat úlohu zálohování databáze, přečtěte si článek Základy automatizace úloh serveru SQL Server, protože tento článek předpokládá, že úloha zálohování databáze již byla automatizována, a zálohu uloží na záložní disk, který je přístupný testovacímu serveru.
Replikace úlohy zálohování databáze
Předpokládejme, že úloha zálohování byla spuštěna a záloha byla vytvořena na záložní jednotce.
Pro replikaci tohoto úkolu vytvoříme vzorovou databázi s názvem UniversityV7 takto:
-- (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
Spuštěním tohoto skriptu se vytvoří a naplní vzorová databáze.
Zkontrolujte databázi spuštěním následujícího skriptu:
SELECT [StudentId] ,[Name] ,[Course] ,[Marks] ,[ExamDate] FROM [UniversityV7].[dbo].[Student]
Výstup by měl být následující:
Předpokládejme, že úloha zálohování je automatizovaná. Abychom však tento krok přeskočili, musíme ještě ručně vytvořit zálohu databáze a uložit ji na záložní disk přístupný testovacímu serveru.
Replikujte úlohu zálohování databáze spuštěním následujícího skriptu T-SQL:
-- 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
Kontrola zálohování databáze
Zkontrolujte zálohu databáze tak, že přejdete do složky, kde jsme právě vytvořili zálohu, a zobrazte záložní soubor:
Připojte se k jiné instanci SQL
Nyní se připojíme k jiné instanci SQL, abychom emulovali testovací server. První věcí, kterou je třeba zkontrolovat, je, zda SQL Agent běží nebo ne.
Spusťte SQL Agent (pokud není spuštěn)
Klikněte pravým tlačítkem na SQL Server Agent a klikněte na Start jak je uvedeno níže:
Vytvořit novou úlohu
Dále klikněte pravým tlačítkem na Úlohy , klikněte na Nová úloha… a poté zadejte název úlohy jako „Obnovení testu databáze “:
Dále vyberte Kroky v levé navigační nabídce klikněte na Nový , a poté zadejte „Obnovení testu databáze ” jako název kroku:
Zadejte následující skript T-SQL do vstupního pole Příkaz poté, co se ujistěte, že je v odpovídajícím rozevíracím seznamu vybrán typ T-SQL.
-- 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
Upozorňujeme, že cesta C:\Program Files\Microsoft SQL Server\MSSQL12.SQLNAME\MSSQL\DATA\UniversityV7_Data.mdf uvedená v tento skript je pouze pro demo účely. Y toto musíte nahradit skutečné cesta vaší testovací instance serveru SQL.
Nakonec klikněte na OK.
Naplánujte spuštění úlohy za 2 minuty
Klikněte pravým tlačítkem na Obnovení testu databáze úlohu pod Úkoly a klikněte na Vlastnosti:
Klikněte na Nový , zadejte „Každé 2 minuty (testování) “ a nastavte plán spuštění po dvou minutách:
Po několika minutách se připojte k testovacímu serveru a rozbalte Databáze uzel, abyste viděli, že UniversityV7 databáze byla úspěšně obnovena pomocí automatizované úlohy SQL Server Task (Job).
Neváhejte prosím spustit DBCC CheckDB, abyste zajistili, že proces obnovy databáze je v pořádku.
Gratulujeme! Úspěšně jste zautomatizovali proces obnovení testu databáze.
Co dělat
Nyní, když můžete zautomatizovat zálohování databáze a testovací obnovení, zkuste provést následující úkoly, abyste zlepšili své dovednosti:
- Přidat DBCC CheckDB jako součást procesu automatického obnovení databáze
- Automatizujte zálohování na jednom serveru a jeho obnovení na jiném testovacím serveru
- Automatizujte úlohy zálohování a testování databáze pro více databází