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
  • Jouw eigen AI-sleutel
  • 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
93
rijen, 403,6 MB
4,6 mln
relaties, uitgeschreven als zinnen
109
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 93 gescande objecten, 3 auditbevindingen en 109 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 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 nodig. Voor indexgebruik komt daar VIEW DATABASE STATE bij. Ontbreken die rechten, dan zegt het rapport welke check is overgeslagen en waarom, in plaats van stil een gat te laten.

Jouw sleutel, jouw tenant

De AI-calls gaan naar je eigen Azure OpenAI-resource. Schema en procedurecode verlaten je abonnement niet. Zet de AI helemaal uit en alle elf checks werken nog, je krijgt alleen geen lopende tekst.

Geen rijdata, tenzij je erom vraagt

De scan leest de catalogus en de definities. Voorbeeldwaarden staan standaard uit.

Er wordt niets geïnstalleerd

Geen agent, geen service, geen geplande taak in jouw omgeving.

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: 3 gelijk, 0 verschillend, 15 die een sandbox nodig hebben. 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.

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.

De tweede run op dezelfde database kostte 1 verse modelcall in plaats van 109. 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 elke maand gedraaid zijn, plus de verificatiestap die ving dat een herschrijving 2.699 in plaats van 2.848 rijen gaf.

Drie 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. Drie 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 gaat geen rijdata heen. Wel schema en procedure-definities, en die gaan naar jouw eigen Azure OpenAI-resource met jouw sleutel. Draai je met de AI uit, dan blijven alle elf 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.