Naar de inhoud
CataloomGratis audit aanvragen

Je warehouse draait. Dat is niet hetzelfde als dat het klopt.

Cataloom leest read-only mee met je SQL Server- of Azure SQL-warehouse, ontleedt de echte procedure- en view-code, en rapporteert wat er stil misgaat. Je krijgt een map HTML-bestanden terug die je opent, doorzoekt en doorstuurt.

  • Alleen leesrechten
  • AI kan volledig uit
  • Losse HTML, geen login
  • Niets geïnstalleerd

Wat het schema belooft

dbo.DimArtikel
  • ArtikelKeyPK
  • Prijsdecimal
  • GewijzigdOpdatetime2
stg.PrijsFeed
  • ArtikelKeyint
  • Prijsdecimal

Op het blad is dit een nette koppeling. Eén rij per sleutel, één prijs per artikel. Er staat geen unique constraint op stg.PrijsFeed, maar dat valt op een schema niet op.

Wat de code doet

UPDATE d
SET    d.Prijs = s.Prijs
FROM   dbo.DimArtikel d
JOIN   stg.PrijsFeed s ON s.ArtikelKey = d.ArtikelKey;
HOOG

nondeterministic_update_from
De bron levert niet aantoonbaar één rij per join-sleutel. SQL Server kiest er zwijgend een.

Staan er in stg.PrijsFeed twee regels voor één ArtikelKey, dan faalt SQL Server niet en waarschuwt hij niet. Hij pakt er één. Welke, is ongedefinieerd.

Meestal valt het dezelfde kant op, dus niemand merkt het. Tot de dag dat het anders valt en een rapport een bedrag toont dat niemand kan verklaren.

Cataloom vindt dit statisch in de code en bevestigt het daarna live met een telquery die alleen leest. Nul conflicten vandaag betekent latent. Meer dan nul betekent dat je prijzen nu al afhangen van de volgorde die de engine toevallig koos.

Zes vragen over je eigen warehouse

Beantwoord ze zonder SSMS te openen.

  1. 01Welke tabellen zijn de afgelopen maand door niets gelezen?
  2. 02Welke views of procedures verwijzen naar een object dat niet meer bestaat?
  3. 03Welke stored procedure schrijft naar een tabel die niet in zijn naam staat?
  4. 04Welke Power BI-rapporten breken als je die ene stagingtabel weggooit?
  5. 05Naar welke van je `_bak`-tabellen wordt nog steeds geschreven?
  6. 06Wanneer klopte de documentatie voor het laatst?

Moest je bij meer dan twee gokken, dan is dat het gat. Het is geen kennisprobleem. Niemand houdt dit in zijn hoofd.

Wat het bij anderen vond

Drie vondsten uit echte opdrachten. Tabelnamen zijn aangepast, het naampatroon en de datumstempels zijn echt.

6

vergeten tabellen in een productiewarehouse dat als goed onderhouden gold

  • Fact_Omzet_dd20241114
  • Dim_Rapportage_Frozen_temp
  • Dim_Contract_Aanname_Backup20250401
  • Fact_Omzet_Backup20250228
  • Dim_Rapportage_Frozen_BAK
  • Fact_Periode_Frozen_BAK

De eerste is een snapshot uit november 2024 die er veertien maanden later nog stond. Eén scan, geen AI aan te pas. Niemand in dat team kon zeggen waarom ze er nog waren.

107

semantic models en 156 rapporten hingen aan één database

  • 7 van de 8 databases: nul consumenten
  • 13 HIGH-bevindingen
  • modellen die een verdwenen object lezen

Zeven van de acht databases in die tenant werden door geen enkel rapport gelezen. Dertien bevindingen waren modellen die nog een object opvragen dat er niet meer is. Vóór de scan was dat van binnenuit niet te zien.

2.848

rijen voor de herschrijving, 2.699 erna

  • origineel 2.848 rijen
  • herschreven 2.699 rijen
  • verschil 149 rijen

Het model leverde een herschrijving die er bij review correct uitzag. De verificatiestap draaide beide versies read-only en vergeleek de resultaatsets. Daarom komt een herschrijving met een oordeel en niet met een belofte.

Dit draait op echte warehouses, niet op een testopstelling: de grootste die tot nu toe gescand is telde 765 objecten.

Wat je terugkrijgt

Een map HTML-bestanden. Geen login, geen CDN, geen enkele externe request. Open hem in 2030 en hij werkt nog.

objecten over 8 schema's
95
rijen, 403,6 MB
4,6 mln
relaties, uitgeschreven als zinnen
111
aan modelkosten voor de hele run
< € 1

De cijfers hierboven komen uit WideWorldImporters, de publieke voorbeelddatabase van Microsoft. Daarom kan ik je elk bestand laten zien in plaats van een uitgeveegde screenshot.

Open het echte rapport
Het oplever-portaal van Cataloom voor WideWorldImporters, met het diagnosepaneel dat 95 gescande objecten, 5 auditbevindingen en 111 feitzinnen toont.
het echte portaal, klik om te openen

Schema-tools tonen je structuur. Cataloom leest je logica.

Dataedo, SchemaSpy en Redgate zetten je kolommen op een rij en geven je een veld om de beschrijving in te typen. Dat is nuttig, en het is een ander werk.

Cataloom ontleedt de T-SQL: de joins die een view echt maakt, de tabel waar een procedure en passant naartoe schrijft, de update die niet kan bewijzen dat hij één rij raakte.

Een procedure die UpdateEmployeeHireInfo heet, blijkt ook een regel toe te voegen aan de salarishistorie. Dat haal je nooit uit de naam en wel uit de code.

De optie waar de meeste teams voor kiezen is een Confluence-pagina die in 2023 klopte.

Hoe het gaat

  1. stap 1

    Je draait één script

    cataloom-collect.ps1 leest de systeemcatalogus en de objectdefinities. Je DBA leest hem in vijf minuten door. Hij schrijft een zip en verder niets.

  2. stap 2

    Je mailt me die zip

    Of je geeft me een login met db_datareader en VIEW DEFINITION en ik verbind read-only. Jouw keuze. De scriptroute bestaat omdat de meeste mensen op dag één geen login mogen uitdelen.

  3. stap 3

    Ik draai de analyse

    Ongeveer 800 objecten kosten 1,7 seconde aan de deterministische kant. De AI-stap duurt langer en kost minder dan een euro.

  4. stap 4

    Je krijgt het rapport terug

    Een map HTML-bestanden. Van jou, om te houden, door te sturen of te negeren.

Wat er wel en niet gebeurt

Alle details, inclusief de queries die het script draait

Read-only is een eigenschap van de verbinding

De connector heeft db_datareader en VIEW DEFINITION nodig. Voor indexgebruik komt daar VIEW DATABASE STATE bij. Ontbreekt een recht, dan zegt het rapport welk onderdeel is overgeslagen en waarom, in plaats van stil een gat te laten.

Welke AI, en op wiens kosten

In de gratis audit draait de AI-stap op mijn eigen Azure OpenAI-resource, op mijn kosten. In de doorlopende dienst draait hij op die van jou, met jouw sleutel. Zet de AI helemaal uit en alle twaalf SQL-checks en de vier Power BI-checks werken nog, je krijgt alleen geen lopende tekst.

Geen losse rijen naar het model

De scan leest de catalogus en de definities. Voorbeeldrijen staan standaard uit. Bij een live verbinding gaan er voor het businessverhaal wel samenvattingen mee naar het model, zoals de waarden van een statuskolom met hun aantallen.

Wat er achterblijft

Na de gratis audit niets: geen agent, geen service, geen geplande taak in jouw omgeving. De zip en mijn kopie van het rapport verwijder ik 30 dagen na oplevering.

De grenzen

  • Cataloom repareert niets. Er is geen schrijfpad.
  • Herschrijvingen zijn voorstellen. De verificatiestap zegt welke een identieke resultaatset opleveren en welke hij niet kon controleren. Op WideWorldImporters: 4 gelijk, 0 verschillend, 15 die een sandbox nodig hebben. En van die 4 zijn er 3 gemeten op lege resultaatsets, wat het rapport als zwak signaal markeert en niet als bewijs. Hij zegt dus "sandbox nodig" in plaats van te gokken.
  • Het zegt niets over de vraag of een getal in een rapport zakelijk juist is. Het zegt of de SQL eronder verdedigbaar is.
  • Alleen SQL Server, Azure SQL en Synapse. Geen Fabric-warehouses, geen Snowflake, geen Postgres.
  • Versleutelde procedures kan niemand lezen, Cataloom ook niet. Het rapport noemt ze apart, zodat je ze niet verwart met objecten waar alleen het leesrecht ontbrak.
  • Power BI-rapporten die via een live connection op Analysis Services hangen, volgt het niet tot in je SQL-tabellen. Die tussenlaag leest het niet.

Een audit is een foto. Je warehouse verandert elke sprint.

Bij een tweede run vergelijkt Cataloom met de vorige opname: nieuw, gewijzigd, hernoemd, verdwenen, plus welke Power BI-modellen dat raakt. Een sp_rename verschijnt als hernoemd en niet als verwijderd-plus-nieuw.

Op een productiewarehouse dat sinds augustus elke week draait, kwam de documentatie bij een herhaalde run volledig uit de cache: 0 verse modelcalls, 717 hergebruikt. Van de herschrijvingen was er 1 vers, tegen 118 hergebruikt. De doorlopende kosten zijn daarmee bijna nul. Waar je voor betaalt is dat iemand naar het verschil kijkt.

Hoe de doorlopende dienst werkt

Wat het kost

De gratis audit op één database kost niets en heeft geen staartje. Wil je dat het blijft draaien, dan is de opzet vanaf € 1.250 eenmalig en daarna € 500 per maand. De Power BI-laag reken ik apart, omdat die toegang op tenantniveau nodig heeft die de meeste organisaties op hun eigen tempo goedkeuren.

Vragen die ik vaker krijg

Die checks kan ik zelf ook schrijven

Klopt. Ze staan met naam en al op deze site. Wat je koopt is dat ze gebouwd, getest en doorlopend gedraaid worden, plus de verificatiestap die ving dat een herschrijving 2.699 in plaats van 2.848 rijen gaf.

Vijf bevindingen op je eigen voorbeeld. Dan vindt het dus niets?

WideWorldImporters is een schone voorbeelddatabase. Microsoft bouwde hem om functies te demonstreren, niet om acht jaar deadlines te overleven. Eén hoog en vier ter informatie is het eerlijke resultaat en het verkeerde getal om Cataloom op af te rekenen. De audit is het meest waard waar het onderhoud het slechtst was.

Wij hebben al documentatie

Wanneer klopte die voor het laatst? Bij elke sprint schuift er iets. Daarom is de tweede run het eigenlijke product en niet de eerste.

Onze data mag niet naar een AI

Er gaan geen losse rijen heen. Wel schema, procedure-definities en, bij een live verbinding, een paar samenvattingen voor het businessverhaal, zoals de waarden van een statuskolom. In de gratis audit gaat dat naar mijn eigen Azure OpenAI-resource, in de doorlopende dienst naar die van jou. Draai je met de AI uit, dan blijven alle twaalf SQL-checks en de vier Power BI-checks werken.

Ik mag geen tool op productie richten

Dan doe je dat niet. Je DBA leest cataloom-collect.ps1 in vijf minuten door, het doet alleen SELECT's op de systeemcatalogus, en jij mailt de zip. De databaseverbinding is de snellere route, niet de enige.

AI verzint dingen. Waarom zou ik die beschrijvingen vertrouwen?

Terechte vraag. Relaties en lineage worden deterministisch uit de code gemined, met het bewijs eronder. Het businessverhaal toetst zijn eigen onderbouwing en zakt in zekerheid als het bewijs niet draagt. Herschrijvingen zijn expliciet voorstellen met een geverifieerd oordeel.

Hoeveel tijd kost dit mijn team?

Ongeveer twintig minuten van jouw tijd. Het script draait in een minuut, de scan doet 800 objecten in 1,7 seconde. De analyse doe ik.

Werkt dit op Fabric of Snowflake?

Nee. SQL Server, Azure SQL en Synapse.

Kies je minst begrepen database. Ik draai hem en stuur het rapport terug.

Geen gesprek nodig vooraf en geen verplichting achteraf. Wil je dat het blijft draaien, dan praten we daarna.