-- =================================================================================================================== -- Collector: SyntheticCheckRunner (syntetiske SQL-tjek, fra 1.5) -- =================================================================================================================== -- Hvad: Et syntetisk SQL-tjek logger på den instans, tjekket peger på, som tjekkets login (agentens Windows-konto -- eller et SQL-login, hvis adgangskode er krypteret til agenten), og kører tjekkets forespørgsel i en -- transaktion, der altid rulles tilbage. Svartiden og om det lykkedes bruges af SQLI-SYN-001 og SQLI-SYN-002. -- Fil: src/SQLInsight.Servers/Synthetic/SyntheticCheckRunner.cs (kaldt af src/SQLInsight.Agent/Servers/SyntheticCheckService.cs) -- Interval: Tjekkets eget interval (standard 300 sek, mindst 60), og når der bedes om "Kør nu" -- Versioner: SQL Server 2005 og nyere. -- -- Rettigheder: Login'et i tjekket skal kunne logge ind og køre forespørgslen. Til standardforespørgslen (SELECT 1) er -- det nok at kunne logge ind (og CONNECT til databasen, hvis tjekket har en). -- -- Bruges af: SQLI-SYN-001, SQLI-SYN-002. -- Read-only: Ja. Forespørgslen valideres som én skrivebeskyttet SELECT, når tjekket gemmes og før hver kørsel -- (src/SQLInsight.Core/CustomRules/ReadOnlyQuery.cs: ingen andre sætninger, ingen INTO, EXEC, sekvenser -- eller låse-hints), og køres i en transaktion, der altid rulles tilbage. Højst 10.000 rækker læses. -- Kørsel: Kør i SSMS som tjekkets login. Hver GO er en separat kommando på samme forbindelse; ret [msdb] til -- tjekkets database, eller udelad USE, hvis tjekket ingen database har. -- =================================================================================================================== -- Variant: Alle versioner: sættes på hver forbindelse, agenten åbner (også tjekkets) -- Kilde: SqlConnectionFactory.SessionSettings -- Kode: src/SQLInsight.Connectivity/SqlConnectionFactory.cs : SqlConnectionFactory.SessionSettings SET LOCK_TIMEOUT 5000; SET DEADLOCK_PRIORITY LOW; SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED; GO -- Variant: Kun når tjekket har en database (vist for msdb) -- Kilde: SyntheticCheckRunner.UseDatabaseSql -- Kode: src/SQLInsight.Servers/Synthetic/SyntheticCheckRunner.cs : SyntheticCheckRunner.UseDatabaseSql(database) USE [msdb]; GO -- Variant: Alle versioner fra SQL Server 2005: før forespørgslen -- Kilde: SyntheticCheckRunner.BeginTransactionSql -- Kode: src/SQLInsight.Servers/Synthetic/SyntheticCheckRunner.cs : SyntheticCheckRunner.BeginTransactionSql BEGIN TRANSACTION; GO -- Variant: Standardforespørgslen, når tjekket ikke har sin egen (en egen forespørgsel køres her i stedet, højst 10.000 rækker læses) -- Kilde: SyntheticCheckSettings.DefaultQuery -- Kode: src/SQLInsight.Core/SyntheticChecks/SyntheticCheckDefinitions.cs : SyntheticCheckSettings.DefaultQuery SELECT 1 GO -- Variant: Alle versioner fra SQL Server 2005: altid efter forespørgslen, også når den fejler -- Kilde: SyntheticCheckRunner.RollbackSql -- Kode: src/SQLInsight.Servers/Synthetic/SyntheticCheckRunner.cs : SyntheticCheckRunner.RollbackSql IF @@TRANCOUNT > 0 ROLLBACK TRANSACTION; GO