Тази статия е за автоматизиране на задачи за поддръжка на SQL база данни чрез помощната програма SQLCMD, която ви позволява да изпълнявате T-SQL команди директно от командния ред, без да използвате SSMS (SQL Server Management Studio).
Обикновено автоматизирането на задачите на базата данни изисква SSMS (SQL Server Management Studio) за планиране на задачи, които изпълняват тези задачи, но в тази статия се използва алтернативен подход за автоматизиране на задачи от база данни, без да се налага да се използва така необходимия SSMS.
Помощната програма SQLCMD може да спестява реално време за разработчиците на бази данни и администраторите на база данни, тъй като те могат незабавно да изпълняват необходимите SQL скриптове от командния ред, а автоматизирането на задачи за поддръжка на база данни с помощната програма SQLCMD е плюс.
Основи на автоматизирането на задачите на базата данни на SQL
Нека преминем през някои основни концепции за автоматизиране на задачи за поддръжка на SQL база данни с помощната програма SQLCMD.
Какво е задача за поддръжка на база данни?
Задачата за поддръжка на база данни, както показва името, е задача, която подпомага управлението или поддържането на база данни, за да се гарантира нейната гладка работа.
Например, ежедневното създаване на резервни копия на база данни е задача за поддръжка на базата данни, която гарантира, че базата данни е архивирана, така че в случай на инцидент, който в крайна сметка или повреди базата данни, или я направи нестабилна, тя може да бъде възстановена успешно без загуба всякакви данни.
Кой изпълнява задачи по поддръжка на база данни?
Обикновено професионалистите, отговорни за поддръжката на системата за бази данни, като администратори на бази данни, изпълняват задачи по поддръжката на база данни, но това може да се промени при определени обстоятелства.
Как се изпълнява задачата за поддръжка на база данни?
Задачата за поддръжка на база данни обикновено се изпълнява ръчно от администратор на база данни от време на време или може също да бъде планирана да се изпълнява автоматично.
Какво означава автоматизиране на задача за поддръжка на база данни?
Автоматизирането на задача за поддръжка на база данни означава насрочване на задача за поддръжка на база данни да се изпълнява автоматично без никаква ръчна намеса.
Какви са предимствата на автоматизирането на задачи за поддръжка на база данни?
Автоматизирането на задачите за поддръжка на базата данни спестява време и усилия, помага за стандартизиране на процеса и улеснява редовното му изпълнение, а навременните сигнали, конфигурирани за автоматизирана повреда на заданието, също могат да ускорят процеса на идентифициране на причината за проблема, ако задачата е неуспешна.
Как можете да автоматизирате задачата за поддръжка на база данни?
Едно от усъвършенстваните приложения на помощната програма SQLCMD е автоматизирането на задачите за поддръжка на база данни. В тази статия ще автоматизираме задачите за поддръжка на база данни, без да използваме SSMS (SQL Server Management Studio).
Windows Task Scheduler
Ще се възползваме от Windows Task Scheduler, за да автоматизираме задачи за поддръжка на база данни, които не изискват SSMS (SQL Server Management Studio).
Предварителни условия
Тази статия предполага, че имате основни познания за задачите по поддръжка на база данни, изпълнявани чрез изпълнение на T-SQL изрази, заедно с основното разбиране на помощната програма SQLCMD.
Моля, вижте статията Основи за изпълнение на T-SQL изявления от командния ред с помощта на SQLCMD, за да получите солидно разбиране на основите на SQLCMD, преди да продължите към разширената му употреба.
Моля, вижте също статията Изпълнение на задачи за поддръжка на база данни на SQL Използване на SQLCMD, за да научите как да изпълнявате задачи за поддръжка на SQL база данни.
Тази статия също предполага, че е създадена примерна университетска база данни.
Моля, проверете друга статия Основи на изпълнение на T-SQL изявления от командния ред с помощта на SQLCMD, за да създадете примерна база данни или използвайте следния T-SQL код, за да настроите примерната база данни, наречена Университет:
-- (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
Автоматизиране на задачата за архивиране на университетската база данни
Нека да разгледаме сценария, при който архивирането на база данни трябва да бъде автоматизирано.
Изискване:Автоматизиране на архивирането на университетската база данни
DBA беше помолен да автоматизира архивирането на база данни, показвайки датата и часа на архивирането, за да спести време и да избегне объркване относно последното архивиране и да ускори цялостния процес.
За да се изпълнят тези бизнес изисквания, SQLCMD скрипт, който създава резервно копие на база данни, трябва да се стартира в Windows Task Scheduler.
Създаване на папки за архивиране на база данни и скрипт
Първо създайте папка с име Демо на диск C и след това създайте следните подпапки в Демо папка:
- Резервни копия
- Скриптове
Моля, имайте предвид, че използваме устройство C само за демонстрационни цели, моля, използвайте резервно устройство в реално време.
Създаване на скрипт за архивиране на SQL база данни
Създайте скрипт за архивиране на база данни на SQL и го запазете като 01-Backup-University-sql-script.sql в C:\Demo\Scripts която също съдържа информацията за датата и часа на архивирането, както следва:
-- 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
Запазване на SQL скрипт в папка скриптове
Запазете скрипта за архивиране на SQL в C:\Demo\Scripts папка.
Създаване на SQLCMD архивен скрипт
Скриптът за архивиране на база данни, отнасящ се до SQL скрипта, използващ SQLCMD, се създава, както следва:
Sqlcmd –S . –i c:\Demo\Scripts\01-Bakup-University-sql-script.sql
Къде „.” (точка) е тук по подразбиране неименуван SQL екземпляр, който може да бъде заменен от наименуван SQL екземпляр, като .\<Име на инстанция>.
Пробно изпълнение на SQLCMD архивен скрипт
Изпълнете горния SQLCMD скрипт от командния ред, за да тествате архивния скрипт:
Скриптът се изпълни успешно, така че сме готови.
Отидете на Резервни копия папка и изтрийте архива, който е създаден в резултат на тестовото изпълнение.
Създаване на пакетен файл за препратка към SQLCMD скрипта
Създайте пакетен файл с името 02-Run-Sqlcmd-Backup-script.bat като използвате Notepad и го запазете като .bat:
@Echo off sqlcmd -E -S . -i c:\Demo\Scripts\01-Bakup-University-sql-script.sql
Моля, имайте предвид, че има лека промяна в SQLCMD скрипта :-E се добавя , което всъщност е опцията за удостоверяване по подразбиране и не е необходимо да се посочва според документацията на Microsoft.
Това е илюстрирано по следния начин:
Планирайте задачата за архивиране на база данни в Windows Task Scheduler
Отворете Windows Task Scheduler, като въведете Task Scheduler в търсенето на Windows и след това щракнете върху Task Scheduler :
След като отворите Windows Task Scheduler, щракнете върху Създаване на основна задача... от опциите вдясно и въведете Задача за архивиране на университетска база данни в Име поле за въвеждане и щракнете върху Напред :
След това задайте честотата на задачата, като оставите настройките по подразбиране, която е ежедневна:
Задайте дневното време, в което ще се активира тази задача (препоръчително е да зададете времето от две до три минути плюс текущото си време, за да проверите незабавно дали работи):
Трябва също да изберем Стартиране на програма на въпроса какво искаме да изпълнява тази задача:
След това посочете пакетния файл, който извиква SQLCMD, за да създаде резервно копие на университетската база данни и щракнете върху Напред :
Кликнете върху Край за да завършите процеса.
Възможно е да сте прекарали повече време за това, което е зададено в графика на заданията, за да завършите настройката на заданието, което означава, че трябва да изчакате следващия ден, за да видите дали задачата се изпълнява или не.
Има заобиколно решение - трябва да пренасрочите задачата отново 2-3 минути преди текущото си време, за да видите как се изпълнява след 2-3 минути, вместо да чакате целия ден:
Сега изчакайте задачата да се стартира автоматично и след определеното време, моля, проверете папката за архивиране, която създадохме в Демо папка на диск C:
Поздравления, задачата за поддръжка на базата данни беше успешно автоматизирана с помощта на Windows Task Scheduler, който извиква пакетен файл, който изпълнява скрипта SQLCMD, за да създаде архивен файл.
Моля, изтрийте автоматизираната задача, която е създадена за демонстрационни цели, след като приключите с инструкциите и не се интересувате да я изпълнявате по-нататък.
Неща за правене
Сега, когато сте готови да автоматизирате задачи за поддръжка на база данни, като архивиране на база данни с помощта на помощната програма SQLCMD и Windows Task Scheduler, след като преминете през тази статия, можете да подобрите уменията си допълнително, като опитате следните неща:
- Моля, опитайте да настроите и автоматизирате архивирането на примерна база данни SQLBookShop споменато в статията Опростяване на модулното тестване на основната съхранена процедура, която също нарича процедура на помощна програма.
- Моля, опитайте да създадете множество бази данни и да автоматизирате архивирането им с помощта на помощната програма SQLCMD с Windows Task Scheduler.
- Моля, опитайте да автоматизирате процесите на архивиране и възстановяване на базата данни, като създадете два пакетни файла, единият за архивиране, а другият за възстановяване на базата данни, препращащ към SQLCMD скриптове и насрочване на задачата в Windows Task Scheduler да се изпълнява ежедневно.
Полезен инструмент:
dbForge Studio за SQL Server – мощна IDE за управление на SQL Server, администриране, разработка, отчитане и анализ на данни.