sql >> Databáze >  >> RDS >> Sqlserver

Použití výstrah a operátorů na serveru SQL

Úvod

Se všemi pokroky v SQL Serveru a datech je skvělé, že jsou stále k dispozici takové nativní nástroje SQL, jako jsou Alerts a Operators. Jsou to klíčové funkce SQL Server Agent, které souvisejí s čímkoli v automatizaci SQL Serveru.

Jejich role jsou jasné:

  • Výstrahy, jsou-li nakonfigurovány, informují administrátory databáze, když dojde k určité události.
  • Operátor je objekt definovaný v SQL Serveru, který mapuje kohokoli nebo skupinu, která může přijímat upozornění, když nastanou tyto události.

Typy událostí

SQL Server zaznamenává události do protokolu aplikací Windows – můžeme k němu přistupovat přes Windows Event Viewer na úrovni operačního systému. SQL Server Agent může číst protokol aplikace a spouštět výstrahy, když existuje shoda mezi 2 kategoriemi věcí:1) události zaznamenané v protokolu aplikace 2) výstraha definovaná správcem.

Existují tři hlavní typy událostí:

  • Události SQL Server
  • Podmínky výkonu serveru SQL Server
  • Události WMI

Vytvoření události SQL Server

Začneme vytvářet výstrahu SQL Server Agent kliknutím pravým tlačítkem myši na uzel Výstrahy v průzkumníku objektů pod SQL Server Agent. Otevře se okno zobrazené na obr. 2, kde zadáte název výstrahy, její typ (v tomto případě SQL Server Event Alert), rozsah databáze a podmínky výstrahy.

Nejjednodušším způsobem, jak určit podmínku, je použít úroveň závažnosti. Chcete-li získat úplný seznam chybových zpráv na serveru SQL Server, musíte zadat dotaz na sys.messages. Všimněte si, že toto zobrazení obsahuje 309408 řádků, takže použití filtru je skvělý nápad – proto jsem v mém dotazu filtroval angličtinu pomocí příkazu.


Obr. 1. Uzel upozornění

-- Výpis 1:Chybová zpráva SQL Serverspoužijte msdbgoSELECT * FROM sys.messages kde language_id=1033uspořádejte podle závažnosti;

Obr. 2. Vytvoření výstrahy události SQL Server

Všimněte si, že ke spuštění výstrahy mohu také použít konkrétní chybovou zprávu. Jak bylo zmíněno dříve, všechny chybové zprávy jsou uvedeny v zobrazení katalogu serveru SQL Server sys.messages. Na obrazovce Obr. 2 jsem pouze vybral podmínky události – stránka odezvy mi umožnila vybrat, co se stane, pokud bude tato událost zachycena. Jak vidíte, mohu se rozhodnout buď automatizovat svou odpověď provedením úlohy, nebo jednoduše upozornit operátory. Provedení úlohy prozkoumáme později, ale nyní se podívejme, proč musí operátor pokračovat s alternativní možností. Vytvoříme operátora ve stejném okně, ale pokud bychom měli existující operátory, mohli bychom je jednoduše vybrat ze seznamu.

Obr. 3. Výběr odpovědi

Obr. 4. Definování operátora

Obr. 5. Výběr kanálu upozornění

Na obr. 5 jsme jako médium pro zasílání upozornění zvolili Email. Databázovou poštu byste měli nakonfigurovat správně, jinak vygenerovaná upozornění zůstanou ve frontě. Na třetí stránce okna New Alert si můžeme vybrat, zda je chybová zpráva zahrnuta do e-mailového upozornění a zda chceme odeslat další zprávu (například pokyny pro Junior DBA o dalších akcích). Určujeme také interval mezi spuštěnými výstrahami. Je to důležité, protože pokud to necháte na výchozí (0), poštovní schránka operátora bude během krátké doby plná upozornění.


Obr.6. Možnosti konfigurace

-- Výpis 2:Vytvoření výstrahy SQL Server pomocí sp_add_alertUSE [msdb]GOEXEC msdb.dbo.sp_add_alert @name=N'Alert_Insufficient_Resources_017',@message_id=0,@severity=17,@enabled_between_sponsesredelay 900,@include_event_description_in=1,@job_id=N'00000000-0000-0000-0000-000000000000'GOEXEC msdb.dbo.sp_add_notification @alert_name 

Výpis 2 ukazuje ekvivalentní kód pro implementaci této výstrahy. Jakmile dokončíme proces kliknutím na OK, budeme moci zobrazit výstrahu i operátor v uzlu SQL Server Agent v Průzkumníku objektů.

Obr. 7. Upozornění vytvořeno

Vytvoření výstrahy stavu výkonu serveru SQL Server

Můžeme také jít alternativní cestou a vytvořit upozornění na stav výkonu. Jako příklad zvolíme Databáze> Počítadlo procent použitého protokolu. Říkáme SQL Serveru, aby vygeneroval událost, když využití souboru protokolu přesáhne 75 %. V tomto případě zvolíme jako odpověď „vykonat úlohu“. Výpis 3 ukazuje hlavní úkoly prováděné touto zakázkou a Výpis 4 ukazuje úplnou definici zakázky.

Obr. 8. Upozornění na podmínku výkonu

-- Výpis 3:Chybové zprávy SQL Server ZÁLOHOVÁNÍ LOG [DB1] NA DISK =N'E:\MSSQL\Backup\DBTransactionLog.bak'WITH RETAINDAYS =90, NOFORMAT, NOINIT, NAME =N'DB1-Záloha TransactionLog' ,SKIP, NOREWIND, NOUNLOAD, STATS =10GOUSE [DB1]GODBCC SHRINKFILE (N'DB1_log' , 0, TRUNCATEONLY)GO-- Výpis 4:Kompletní definice SQL Agent Backup JobUSE [msdb]GO/****** Objekt :Job [DB1_BackupTransactionLog] Datum skriptu:27. 11. 2019 19:20:22 ******/BEGIN TRANSACTIONDECLARE @ReturnCode INTSELECT @ReturnCode =0/****** Objekt:JobCategory [[Uncategorized (Local )]] Datum skriptu:27/11/2019 19:20:23 ******/IF NOT EXISTS (VYBRAT název Z msdb.dbo.syscategories WHERE name=N'[Uncategorized (Local)]' AND category_class =1)BEGINEXEC @ReturnCode =msdb.dbo.sp_add_category @class=N'JOB', @type=N'LOCAL', @name=N'[Uncategorized (Local)]'IF (@@ERROR <> 0 NEBO @ ReturnCode <> 0) GOTO 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'Zálohujte protokol transakcí pro DB1, když využití protokolu transakcí překročí 75 %',@název_kategorie=N' [Uncategorized (Local)]',@owner_login_name=N'DESKTOP-CT8K40N\kenne',@notify_email_operator_name=N'DatabaseAdmin', @job_id =@jobId OUTPUTIF (@@ERROR <> 0 NEBO @ReturnCode GOTOll QuitWith) /****** Objekt:Krok [Backup_Transaction_Log] Datum skriptu: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,@retry,_1retemptsor=2 =0, @subsystem=N'TSQL',@command=N'-- Výpis 3:Chybové zprávy SQL Server PROTOKOL ZÁLOHY [DB1] NA DISK =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 NEBO @ReturnCode <> 0) GOTO QuitWithRollback/****** Objekt:Krok [DB1_Shrink_Transaction_Log_File] Datum skriptu:27/11/2019 19:20:23 ******/EXEC @ReturnCode =msdb.dbo.sp_add_jobstep @[email protected], @step_name=N'DB1_Shrink_Transaction_Log_File',@step_id=2 @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_priority=0, @subsystem, @subsystem=N =N'USE [DB1]GODBCC SHRINKFILE (N''DB1_log'' , 0, TRUNCATEONLY)GO',@database_name=N'master',@flags=0IF (@@ERROR <> 0 NEBO @ReturnCode <> 0) GOTO QuitWithRollbackEXEC @ReturnCode =msdb.dbo.sp_update_job @job_id =@jobId, @start_step_id =1IF (@@ERROR <> 0 NEBO @ReturnCode <> 0) GOTO QOTO QuitWithRollback @ReturnCode =msobj_j_d=server =msdob. @server_name =N'(local)'IF (@@ERROR <> 0 NEBO @ReturnCode <> 0) GOTO QuitWithRollback COMMIT TRANSACTIONGOTO EndSaveQui tWithRollback:IF (@@TRANCOUNT> 0) ROLLBACK TRANSACTIONEndSave:GO

Obr. 9. Vytvořit úlohu do provedeného

Vzhledem k tomu, že naší odpovědí je v tomto případě provedení úlohy, zahrneme také upozornění do úlohy samotné. Jakmile skončíme s vytvořením úlohy, můžeme zkontrolovat vlastnosti výstrah v Průzkumníku objektů. Na stránce Historie můžeme zkontrolovat, kolikrát k události došlo.

Obr. 10. Možnosti upozornění

Obr. 11. Stránka historie výstrah

Závěr

V tomto článku jsme prozkoumali vytváření výstrah a operátorů. Můžete využít této výkonné schopnosti v SQL Serveru a nastavit své prostředí pro monitorování základních událostí, aniž byste museli kupovat nástroj třetí strany. Možnost použití úloh k opravě menších problémů nám pomáhá dosáhnout proaktivní správy našeho prostředí SQL Server.


  1. Jak snadno nasadit TimescaleDB

  2. SQL INSERT INTO… SELECT Příklady

  3. Jak zjistím, která transakce způsobuje stav zámku Čekání na metadata tabulky?

  4. Kopírování databáze PostgreSQL na jiný server