-- =================================================================================================================== -- SQLI-DB-010: Korrupte sider registreret i suspect_pages -- =================================================================================================================== -- Regel-id: SQLI-DB-010 -- Titel: Korrupte sider registreret i suspect_pages -- Alvor: Critical -- Versioner: SQL Server 2005 og nyere (msdb.dbo.suspect_pages). -- -- Hvad tjekkes, og hvorfor: -- Om SQL Server har registreret korrupte sider (fejl 823/824/825) i msdb.dbo.suspect_pages. -- -- Vurdering (sker i C# ud fra de indsamlede data, ikke i SQL'en, medmindre andet er nævnt): -- Rækker, der ikke er løst (event_type 1, 2 og 3; 4 = gendannet, 5 = repareret og 7 = deallokeret tæller ikke), -- grupperes pr. database: ét fund pr. database med op til 20 sider som målinger. -- -- Grænseværdier (konfigurationsnøgle i agentens appsettings.json og standardværdi): -- Ingen. -- -- Rettigheder til agentens login (se db/permissions/grant-least-privilege.sql; [agent] = agentens login): -- USE msdb; GRANT SELECT ON dbo.suspect_pages TO [agent]; -- -- Data kommer fra (collector, fil : medlemmer, interval): -- SuspectPageCollector -- Fil: src/SQLInsight.Collectors/Instance/SuspectPageCollector.cs -- Medlemmer: SuspectPageCollector.Sql -- Interval: 15 min som standard (SQLInsight:CollectorIntervals:suspect-pages) -- Delt script: SQL Scripts/_collectors/SuspectPageCollector.sql -- Regelkode: src/SQLInsight.Rules/Databases/DatabaseRules.cs : SuspectPagesRule.Evaluate -- -- Read-only: Ja: kun SELECT samt SET-sessionsindstillinger. Intet ændrer data, indstillinger eller objekter. -- Kørsel: Kør i SSMS som agentens login (eller et login med samme rettigheder). Hver variant er sin egen batch -- (GO); en variant for en anden SQL Server-version end din kan fejle - det er forventet. -- Per-database-forespørgsler er vist for databasen msdb, som findes overalt: ret navnet til den -- database, du vil se. -- =================================================================================================================== -- ------------------------------------------------------------------------------------------------------------------- -- Forbindelsen: Sessionsindstillinger, agenten sætter på hver forbindelse -- ------------------------------------------------------------------------------------------------------------------- -- Variant: Alle versioner: sættes på hver forbindelse, agenten åbner -- 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 -- ------------------------------------------------------------------------------------------------------------------- -- SuspectPageCollector: Sider, SQL Server har registreret som korrupte (msdb.dbo.suspect_pages). -- ------------------------------------------------------------------------------------------------------------------- -- Variant: SQL Server 2005 og nyere -- Kilde: SuspectPageCollector.Sql -- Kode: src/SQLInsight.Collectors/Instance/SuspectPageCollector.cs : SuspectPageCollector.Sql SELECT ISNULL(DB_NAME(database_id), CAST(database_id AS nvarchar(20))), file_id, page_id, event_type, error_count, last_update_date FROM msdb.dbo.suspect_pages GO