Въведение
С всички подобрения в SQL Server и данните е страхотно, че такива естествени SQL инструменти като предупреждения и оператори все още са налични. Те са ключовите функции на SQL Server Agent, които са свързани с всичко в автоматизацията на SQL Server.
Ролите им са ясни:
- Сигналите, когато са конфигурирани, уведомяват администраторите на базата данни кога е настъпило определено събитие.
- Операторът е обект, дефиниран в SQL Server, който картографира всеки или група, която може да получава известия, когато настъпят тези събития.
Типове събития
SQL Server записва събития в дневника на приложенията на Windows – ние имаме достъп до него чрез Windows Event Viewer на ниво операционна система. Агентът на SQL Server може да чете регистрационния файл на приложението и да задейства сигнали, когато има съвпадение между 2 категории неща:1) събития, записани в дневника на приложението 2) сигнал, дефиниран от администратор.
Има три основни типа събития:
- Събития на SQL Server
- Условия за производителност на SQL Server
- WMI събития
Създаване на събитие на SQL Server
Започваме да създаваме сигнал за SQL Server Agent, като щракваме с десния бутон върху възела Alerts в изследователя на обекти под SQL Server Agent. Това отваря прозореца, показан на фиг. 2, където задавате името на сигнала, неговия тип (SQL Server Event Alert в този случай), обхват на базата данни и условия на предупреждение.
Най-простият начин да посочите условие е да използвате нивото на сериозност. И за да получите пълен списък със съобщения за грешки в SQL Server, трябва да потърсите sys.messages. Обърнете внимание, че този изглед съдържа 309 408 реда, така че използването на филтър е страхотна идея – ето защо в моята заявка филтрирах за английски чрез команда.
Фиг. 1. Възел за предупреждения
-- Списък 1:Съобщения за грешка на SQL сървъризползвайте msdbgoSELECT * FROM sys.messages където language_id=1033подреждане по сериозност;
Фиг. 2. Създаване на предупреждение за събитие на SQL Server
Забележете, че мога да използвам и конкретно съобщение за грешка, за да задействам предупреждение. Както бе споменато по-рано, всички съобщения за грешки са изброени в каталожния изглед на SQL Server sys.messages. На екрана на Фиг. 2 просто избрах условията на събитието – страницата за отговор ми позволи да избера какво ще се случи, ако това събитие бъде заснето. Както можете да видите, мога да избера да автоматизирам отговора си, като изпълня задание, или просто да уведомя операторите. Ще разгледаме изпълнението на задача по-късно, но засега нека да видим защо се изисква оператор, за да продължи с алтернативната опция. Ще създадем оператор в същия прозорец, но ако имахме съществуващи оператори, бихме могли просто да ги изберем от списъка.
Фиг. 3. Избор на отговор
Фиг. 4. Дефиниране на оператор
Фиг. 5. Избор на канал за предупреждение
На фигура 5 избираме имейл като носител за изпращане на известия. Трябва да конфигурирате правилно Database Mail, в противен случай генерираните сигнали ще останат в опашката. На третата страница на прозореца за ново предупреждение можем да изберем дали съобщението за грешка е включено в известието по имейл и дали искаме да изпратим допълнително съобщение (например инструкциите до младши DBA за по-нататъшни действия). Ние също така определяме интервала между задействаните сигнали. Важно е, защото ако го оставите по подразбиране (0), пощенската кутия на оператора ще бъде пълна със сигнали за кратък период от време.
Фиг.6. Опции за конфигуриране
-- Листинг 2:Създаване на сигнал за SQL Server с помощта на sp_add_alertUSE [msdb]GOEXEC msdb.dbo.sp_add_alert @name=N'Alert_Insufficient_Resources_017',@message_id=0,@severity=17,@enabled=we 900,@include_event_description_in=1,@job_id=N'00000000-0000-0000-0000-000000000000'GOEXEC msdb.dbo.sp_add_notification @alert_name=N'Alert7'Add_notification @alert_name=N'Alert7'Add_Name' предварително>Списък 2 показва еквивалентния код за прилагане на това предупреждение. След като завършим процеса, като щракнем върху OK, ще можем да видим както сигнала, така и оператора в възела на SQL Server Agent в Object Explorer.
Фиг. 7. Сигналът е създаден
Създаване на сигнал за състояние на производителност на SQL сървър
Можем също да преминем по алтернативния маршрут и да създадем предупреждение за състояние на производителност. Като пример избираме Бази данни> Процент на използван брояч на журнала. Казваме на SQL Server да генерира събитие, когато използването на регистрационния файл надвиши 75%. В този случай избираме „да изпълни задача“ като отговор. Списък 3 показва основните задачи, изпълнявани от тази работа, а листинг 4 показва пълната дефиниция на работата.
Фиг. 8. Сигнал за състояние на производителност
-- Списък 3:Съобщения за грешки в SQL ServerBACKUP LOG [DB1] НА ДИСК =N'E:\MSSQL\Backup\DBTransactionLog.bak'WITH RETAINDAYS =90, NOFORMAT, NOINIT, NAME =N'DB1-TransactionLog Backup' ,SKIP, NOREWIND, NOUNLOAD, STATS =10GOUSE [DB1]GODBCC SHRINKFILE (N'DB1_log' , 0, TRUNCATEONLY)GO-- Листинг 4:Пълна дефиниция на SQL Agent Backup JobUSE [msdb]GO/****** обект :Job [DB1_BackupTransactionLog] Дата на скрипт:27/11/2019 19:20:22 ******/BEGIN TRANSACTIONDECLARE @ReturnCode INTSELECT @ReturnCode =0/****** Обект:JobCategory [[Uncategorized (Local )]] Дата на скрипта:27/11/2019 19:20:23 ******/АКО НЕ СЪЩЕСТВУВА (ИЗБЕРЕТЕ име ОТ msdb.dbo.syscategories WHERE name=N'[Uncategorized (Local)]' И категория_клас =1)BEGINEXEC @ReturnCode =msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'[Uncategorized (Local)]'IF (@@ГРЕШКА <> 0 ИЛИ @ ReturnCode <> 0) ОТИДИТЕ QuitWithRollbackENDDECLARE @jobId BINARY(16)EXEC @ReturnCode =msdb.dbo.sp_add_job @job_name=N'DB1_BackupTransactionLog',@enabled=1, @notify_level_eventlog=0,@notify_level_email=3,@notify_level_netsend=0,@notify_level_page=0,@delete_level=0,@description=N'Архивирайте регистрационния файл на транзакциите за DB1, когато използването на регистрационния файл на транзакциите надвиши@ 75%'Ntegory_, [Uncategorized (Local)]',@owner_login_name=N'DESKTOP-CT8K40N\kenne',@notify_email_operator_name=N'DatabaseAdmin', @job_id =@jobId OUTPUTIF (@@ERROR <> 0 ИЛИ @ReturnCode)
/****** Обект:Стъпка [Backup_Transaction_Log] Дата на скрипта:27/11/2019 19:20:23 ******/EXEC @ReturnCode =msdb.dbo.sp_add_jobstep @[email protected], @step_name=N'Backup_Transaction_Log',@step_id=1,@cmdexec_success_code=0,@on_success_action=3,@on_success_step_id=0,@on_fail_action=2,@on_fail_step_id=0,@inter_otry_val@n_2 =0, @subsystem=N'TSQL',@command=N'-- Листинг 3:Съобщения за грешки в SQL сървъра РЕЖЕВЕН РЕЖИМ [DB1] НА ДИСК =N''E:\MSSQL\Backup\DBTransactionLog.bak''WITH RETAINDAYS =90, NOFORMAT, NOINIT, NAME =N''DB1-TransactionLog Backup'',SKIP, NOREWIN D, NOUNLOAD, STATS =10GO',@database_name=N'master',@flags=0IF (@@ERROR <> 0 ИЛИ @ReturnCode <> 0) ОТИДИТЕ QuitWithRollback/****** Обект:Стъпка [DB1_Shrink_Transaction_Log_File] Дата на скрипта:27/11/2019 19:20:23 ******/EXEC @ReturnCode =msdb.dbo.sp_add_jobstep @[email protected], @step_name=N'DB1_Shrink_Transaction_Log_File',@, @cmdexec_success_code=0,@on_success_action=1,@on_success_step_id=0,@on_fail_action=2,@on_fail_step_id=0,@retry_attempts=2,@retry_interval=15,@os_run_sQubsystem=0,' @os_run_sQubsystem=0,' =N'USE [DB1]GODBCC SHRINKFILE (N''DB1_log'' , 0, TRUNCATEONLY)GO',@database_name=N'master',@flags=0IF (@@ERROR <> 0 ИЛИ @ReturnCode <> 0) ОТИДЕТЕ НА QuitWithRollbackEXEC @ReturnCode =msdb.dbo.sp_update_job @job_id =@jobId, @start_step_id =1IF (@@ERROR <> 0 ИЛИ @ReturnCode <> 0) ОТИДЕТЕ НА QuitWithRollbackEXEC <> 0) ОТМИНЕТЕ НА QuitWithRollbackEXEC <> 0). @server_name =N'(local)'IF (@@ГРЕШКА <> 0 ИЛИ @ReturnCode <> 0) ОТИДИТЕ QuitWithRollbackCOMMIT TRANSACTIONGOTO EndSaveQui tWithRollback:IF (@@TRANCOUNT> 0) ОТМЕНЯНЕ НА TRANSACTIONEndSave:GO
Фиг. 9. Създаване на задание към изпълненото
Тъй като нашият отговор в този случай е изпълнението на заданието, ние също така включваме известие в самото задание. След като приключим със създаването на задание, можем да прегледаме свойствата на предупреждението в Object Explorer. Можем да проверим в страницата История колко пъти се е случило събитието.
Фиг. 10. Опции за предупреждение
Фиг. 11. Страница с история на предупрежденията
Заключение
В тази статия проучихме създаването на сигнали и оператори. Можете да се възползвате от тази мощна възможност в SQL Server и да настроите вашата среда за наблюдение на основни събития, без да купувате инструмент на трета страна. Възможността за използване на задания за коригиране на дребни проблеми ни помага да постигнем проактивно управление на нашата среда на SQL Server.