sql >> Databáze >  >> RDS >> Database

Jak automatizovat úlohy údržby databáze SQL pomocí SQLCMD

Tento článek je o automatizaci úloh údržby databáze SQL pomocí nástroje SQLCMD, který vám umožní spouštět příkazy T-SQL přímo z příkazového řádku bez použití SSMS (SQL Server Management Studio).

Automatizace databázových úloh obvykle vyžaduje SSMS (SQL Server Management Studio) pro plánování úloh, které tyto úlohy spouštějí, ale v tomto článku je použit alternativní přístup k automatizaci databázových úloh, aniž byste museli používat tolik potřebný SSMS.

Nástroj SQLCMD může vývojářům databází a správcům databází šetřit v reálném čase, protože mohou okamžitě spouštět potřebné skripty SQL z příkazového řádku a automatizace úloh údržby databáze pomocí nástroje SQLCMD je výhodou.

Základy automatizace úloh databáze SQL

Pojďme si projít některé základní koncepty pro automatizaci úloh údržby databáze SQL pomocí nástroje SQLCMD.

Co je to úloha údržby databáze?

Úloha údržby databáze, jak název napovídá, je úloha, která pomáhá při správě nebo údržbě databáze, aby byl zajištěn její hladký provoz.

Například vytváření záloh databáze na denní bázi je úkol údržby databáze, který zajišťuje zálohování databáze, takže v případě jakéhokoli incidentu, který skončí buď poškozením databáze, nebo její nestabilitou, ji lze úspěšně obnovit bez ztráty. jakákoli data.

Kdo provádí úlohy údržby databáze?

Úlohy údržby databáze obvykle provádějí profesionálové odpovědní za údržbu databázového systému, jako jsou administrátoři databází, což se však za určitých okolností může změnit.

Jak se provádí úloha údržby databáze?

Úlohu údržby databáze obvykle čas od času provádí manuálně správce databáze, nebo lze také naplánovat její automatické spuštění.

Co znamená automatizace úlohy údržby databáze?

Automatizace úlohy údržby databáze znamená naplánování úlohy údržby databáze tak, aby se spouštěla ​​automaticky bez jakéhokoli ručního zásahu.

Jaké jsou výhody automatizace úloh údržby databáze?

Automatizace úloh údržby databáze šetří čas a úsilí, pomáhá standardizovat proces a usnadňuje jeho pravidelné provádění a včasná upozornění nakonfigurovaná pro selhání automatizované úlohy mohou také urychlit proces identifikace příčiny problému, pokud úkol se nezdaří.

Jak můžete automatizovat úlohy údržby databáze?

Jedním z pokročilých použití obslužného programu SQLCMD je automatizace úloh údržby databáze. V tomto článku budeme automatizovat úlohy údržby databáze bez použití SSMS (SQL Server Management Studio).

Plánovač úloh systému Windows

Využijeme Plánovač úloh systému Windows k automatizaci úloh údržby databáze, které nevyžadují SSMS (SQL Server Management Studio).

Předpoklady

Tento článek předpokládá, že máte základní znalosti o úlohách údržby databáze prováděných spouštěním příkazů T-SQL spolu se základními znalostmi o nástroji SQLCMD.

Než přistoupíte k jeho pokročilému použití, přečtěte si prosím článek Základy spouštění příkazů T-SQL z příkazového řádku pomocí SQLCMD, abyste získali dobré pochopení základů SQLCMD.

Přečtěte si také článek Spouštění úloh údržby databáze SQL pomocí SQLCMD, kde se dozvíte, jak provádět úlohy údržby databáze SQL.

Tento článek také předpokládá, že byla vytvořena ukázková univerzitní databáze.

Přečtěte si prosím jiný článek Základy spouštění příkazů T-SQL z příkazového řádku pomocí SQLCMD k vytvoření ukázkové databáze nebo použijte následující kód T-SQL k nastavení ukázkové databáze s názvem Univerzita:

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

Automatizace úlohy zálohování univerzitní databáze

Podívejme se na scénář, kdy je potřeba automatizovat zálohování databáze.

Požadavek:Automatizace zálohování univerzitní databáze

DBA byl požádán, aby zautomatizoval zálohování databáze zobrazující datum a čas zálohování, aby se ušetřil čas a předešlo se zmatkům ohledně poslední zálohy a urychlil se celkový proces.

Aby byly splněny tyto obchodní požadavky, je třeba v Plánovači úloh systému Windows spustit skript SQLCMD, který vytváří zálohu databáze.

Vytvoření složek pro zálohování databáze a skript

Nejprve vytvořte složku s názvem Demo na disku C a poté vytvořte následující podsložky v Ukázce složka:

  1. Zálohy
  2. Skripty

Upozorňujeme, že disk C používáme pouze pro účely ukázky, použijte prosím záložní disk ve scénáři v reálném čase.

Vytvoření skriptu zálohování databáze SQL

Vytvořte skript zálohování databáze SQL a uložte jej jako 01-Backup-University-sql-script.sql v C:\Demo\Scripts který také obsahuje následující informace o datu a čase zálohy:

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

Uložení skriptu SQL do složky skriptů

Uložte záložní skript SQL do C:\Demo\Scripts složka.

Vytvoření SQLCMD Backup Script

Záložní skript databáze odkazující na skript SQL pomocí SQLCMD je vytvořen následovně:

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

Kde „.“ (tečka) je zde výchozí nepojmenovaná instance SQL, kterou lze nahradit pojmenovanou instancí SQL, například .\.

Test spuštění SQLCMD Backup Script

Spuštěním výše uvedeného skriptu SQLCMD z příkazového řádku otestujte záložní skript:

Skript proběhl úspěšně, takže můžeme začít.

Přejděte na Zálohy a odstraňte zálohu, která byla vytvořena jako výsledek testovacího běhu.

Vytvoření dávkového souboru odkazujícího na skript SQLCMD

Vytvořte dávkový soubor s názvem 02-Run-Sqlcmd-Backup-script.bat pomocí programu Poznámkový blok a uložte jej jako .bat:

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

Upozorňujeme, že došlo k mírné změně ve skriptu SQLCMD :Přidá se -E , což je ve skutečnosti výchozí možnost ověřování a není nutné ji specifikovat podle dokumentace společnosti Microsoft.

To je znázorněno následovně:

Naplánujte úlohu zálohování databáze v Plánovači úloh systému Windows

Otevřete Plánovač úloh systému Windows zadáním příkazu Plánovač úloh do vyhledávání systému Windows a poté klikněte na Plánovač úloh :

Po otevření Plánovače úloh systému Windows klikněte na Vytvořit základní úlohu… z možností napravo a zadejte Zálohování úlohy univerzitní databáze v Název vstupního pole a klikněte na Další :

Dále nastavte frekvenci úlohy ponecháním výchozího nastavení, které je denně:

Nastavte denní čas, kdy bude tato úloha aktivována (doporučuje se nastavit čas od dvou do tří minut plus aktuální čas, abyste okamžitě ověřili, že funguje):

Musíme také vybrat Spustit program na otázku, co chceme, aby tento úkol provedl:

Dále ukažte na dávkový soubor, který volá SQLCMD k vytvoření zálohy univerzitní databáze, a klikněte na Další :

Klikněte na Dokončit k dokončení procesu.

Je možné, že jste strávili více času tím, co bylo nastaveno v plánu úlohy, abyste dokončili nastavení úlohy, což znamená, že musíte počkat na další den, abyste viděli, zda úloha běží nebo ne.

Existuje náhradní řešení – musíte úkol znovu naplánovat 2–3 minuty před aktuálním časem, abyste viděli, že běží za 2–3 minuty, místo abyste čekali celý den:

Nyní počkejte, až se úloha spustí automaticky, a po zadané době zkontrolujte záložní složku, kterou jsme vytvořili v Ukázce složku na disku C:

Gratulujeme, úloha údržby databáze byla úspěšně automatizována pomocí Plánovače úloh systému Windows, který volá dávkový soubor, který spustí skript SQLCMD za účelem vytvoření záložního souboru.

Jakmile s tímto návodem skončíte a nebudete mít zájem o další spuštění, smažte prosím automatizovanou úlohu, která byla vytvořena pro účely ukázky.

Co dělat

Nyní, když jste po prostudování tohoto článku připraveni automatizovat úlohy údržby databáze, jako je zálohování databáze pomocí nástroje SQLCMD a Windows Task Scheduler, můžete své dovednosti dále zlepšit tím, že vyzkoušíte následující věci:

  1. Zkuste prosím nastavit a automatizovat zálohování ukázkové databáze SQLBookShop zmíněný v článku Zjednodušení testování jednotek hlavní uložená procedura, která také nazývá obslužnou proceduru.
  2. Zkuste prosím vytvořit více databází a automatizovat jejich zálohování pomocí nástroje SQLCMD s Plánovačem úloh systému Windows.
  3. Zkuste zautomatizovat procesy zálohování a obnovy databáze vytvořením dvou dávkových souborů, jednoho pro zálohování a druhého pro obnovu databáze s odkazem na skripty SQLCMD a naplánováním úlohy v Plánovači úloh systému Windows tak, aby se spouštěla ​​denně.

Užitečný nástroj:

dbForge Studio pro SQL Server – výkonné IDE pro správu, administraci, vývoj, reportování a analýzu SQL Serveru.


  1. Automatické upgrady PostgreSQL clusterů v cloudu s téměř nulovým výpadkem (část II)

  2. Veselé tweety o životě DBA

  3. Jak provést uloženou proceduru Oracle?

  4. Nesprávná syntaxe poblíž ')' volání uložené procedury s GETDATE