Een consistente back-up? Nergens voor nodig.
Over het algemeen wordt veel aandacht besteed aan het maken van een consistente back-up. Specifieke back-up tools en -agents worden geconfigureerd die ervoor zorgen dat databases naar disk worden geflushed zodat ze consistent worden geback-upt.
Uiteraard is dit heel belangrijk. Inconsistente databases kunnen leiden tot het niet goed opstarten van de database na een restore. Een voorbeeld hiervan is een indexbestand dat niet overeenkomt met de onderliggende tabellen. Ook moeten database transacties correct worden afgehandeld voordat een back-up wordt gemaakt om te voorkomen dat de database wel goed start na een restore, maar dat de applicatie die de database gebruikt niet meer consistent werkt. Een voorbeeld is een inkooporder die vermeldt dat een product is binnengekomen, maar waarvan een tegenboeking in de administratie ontbreekt.
De vraag is of het nuttig is om op een hoger niveau consistentie in back-ups af te dwingen. Ik denk dat dit veel moeite kost (als het überhaupt al mogelijk is), maar dat het weinig oplevert.
Systemen staan tegenwoordig zelden alleen. Ze maken meestal deel uit van een keten van interne en externe systemen. Inkooporders komen binnen door orderinvoer in een SAP systeem, maar kunnen ook binnenkomen via resellers via webservices of via een verkoop site via Internet.
Deze systemen zijn gekoppeld en het ligt voor de hand om ze integraal te back-uppen. In de praktijk is dit bijna onmogelijk. Om een integrale back-up mogelijk te maken moeten alle systemen in een consistente staat worden gebracht. Niet alleen intern, maar ook onderling. Dit kan eigenlijk alleen als alle gekoppelde systemen worden gestopt. Niet alleen is dit meestal niet haalbaar (een internet pagina kan niet worden afgesloten voor een back-up actie), het is bovendien tijdrovend. Als één van de systemen in de keten niet kan worden gestopt omdat een langlopende transactie bezig is, moeten alle andere systemen hierop wachten voordat een back-up kan worden gemaakt. En dan heb ik het nog niet over ketens die over meerdere partijen lopen. Als er transacties tussen verschillende bedrijven of instellingen lopen, kunnen die bedrijven en instellingen moeilijk allemaal worden stilgelegd als over de hele keten een consistente back-up moet worden gemaakt.
Misschien is het belangrijk eerst vast te stellen waarvoor een back-up eigenlijk wordt gebruikt bij grote systemen (ik heb het nu niet over het restoren van een verloren file op een user directory). Een back-up wordt gebruikt om systemen te restoren die op geen andere manier te repareren zijn. Dat betekent dat een keuze om een restore uit te voeren een grote business impact heeft. Een restore moet dan ook met grote zorg worden uitgevoerd. Van belang hierbij is het om een back-up te hebben die consistent is binnen één systeem, zodat bovengenoemde problemen van transacties en technische database integriteit niet optreden.
Meestal zijn back-ups één of meerdere dagen oud. Als na een restore van een back-up het systeem klakkeloos zou worden opgestart dan treden er verschijnselen op die grote gevolgen kunnen hebben. Bijvoorbeeld: Als op het moment van back-up een bericht van een business partners binnen kwam, maar de bevestiging nog in de queue stond, dan zal na een restore de besvestiging van dit oude bericht nogmaals naar de business partner worden verstuurd. Stel dat een betalingsachterstand van een klant is betaald, maar dat op de back-up de situatie staat dat hij nog niet heeft betaald. Als het system wordt restored, dan zal ineens een aanmaning worden geprint.
Dit soort voorbeelden geeft aan dat een restore altijd een delicaat proces is dat met grote zorg moet worden uitgevoerd, vooral waar het een keten betreft. Het is daarom niet nodig om een consistente back-up over een hele set applicaties te hebben: bij een restore gaat het toch wel fout.
Een consistente database en consistentie binnen de applicatie zelf is daarom genoeg.
This entry was posted on Maandag 01 Maart 2010