Lesson Learned: recompile views en procedures na wijziging in tabelstructuren

Dat je DBA bent, wil niet zeggen dat je alles weet (oke, wel veel). Vaak is het ook een kwestie van "vergeten". Als professional mag je dat natuurlijk niet overkomen, maar we blijven mensen. In deze serie wat zaken die ik vergat of (nog) niet wist. Doe er je voordeel mee!

Nadat een collega van mij een nieuwe versie van ons Axapta business model had geinstalleerd op de server, ik had gecontroleerd dat een backup naar een disk werd geschreven (tbv de ontwikkeling van de volgende versie) en dat de tabellen in diverse BI databases de komende run werden ververst sloot ik mijn laptop met een tevreden gevoel af.
De volgende morgen controleerde ik het nachtelijke BI proces (met een rapportje in Report Server) en zag dat alles zonder fouten had gelopen. Niks aan de hand zou je zeggen. Todat ik meldingen kreeg van gebruikers dat "ze data misten". Vreemd, want het complete proces zou goed gelopen moeten hebben. Gelukkig had ik onlangs een controle ingebouwd, die afwijkingen in tabellen signaleerde. Deze gaf inderdaad wat meldingen terug. Het BI process zit ongeveer als volgt in elkaar:
  1. Er wordt een snapshot gemaakt van een gemirrorde database
  2. Voor elk bedrijf dat BI rapportages gebruikt is er een staging database en een report database
  3. De staging database bevat voornamelijk views die tegen de snapshot database aankijken met wat restricties
  4. ETL bewerkingen vinden plaats in de staging database. Dit gebeurt op tabellen die ontstaan uit de views
  5. Het eindresultaat komt in de Report database voor dat bedrijf
  6. Voor een aantal bedrijven wordt vanuit deze report database nog een Analytische Cube gemaakt
De fout zat in de views in de staging database; alhoewel een selectie van een view regels terug gaf, waren een aantal kolommen van de view gevuld met data uit andere kolommen, of waren leeg. Dit was het gevolg van het feit dat de onderliggende tabel gewijzigd was in structuur. De oplossing was eenvoudig: hercompileer alle views en stored procedures in de staging database en draai het proces opnieuw. Het script is bijgesloten.

Bij wijziging in de tabelstructuur moeten de afhankelijke views en stored procedures opnieuw gecompileerd worden. Voor views kan dit met de procedure sp_refresview, voor procedures kan dit met de procedure sp-recompile(of gebruik bijgevoegd script)