Databasekoppeling met foutafhandeling voor databases

Kritieke bedrijfsprocessen zijn afhankelijk van betrouwbare data, en databasebeheerders en andere data-analisten willen er zeker van zijn dat de integriteit van de informatie die in databasetabellen is opgeslagen, gewaarborgd is. Tijdens geautomatiseerde ETL-processen (Extract, Transform, Load) of andere database-importtaken kunnen ongeldige gegevens worden aangetroffen, wat het succes van de procedure in gevaar kan brengen. Altova MapForce bevat functies voor het afhandelen van databasefouten, waardoor de betreffende gegevens kunnen worden teruggedraaid wanneer een fout optreedt, en optioneel verder kan worden gegaan met de rest van de database-mapping.

Bijvoorbeeld, een fout in een enkel gegevensbestand hoeft de voortgang van een mapping niet te stoppen. Dit kan bijvoorbeeld voorkomen wanneer bepaalde databasebeperkingen voorkomen dat de mapping ongeldige gegevens invoegt of bijwerkt.

Het inschakelen van foutafhandeling voor databases omvat alle wijzigingen aan de databasecomponent binnen transacties die kunnen worden teruggedraaid in geval van een fout. Gebruikers kunnen ervoor kiezen om door te gaan met de rest van de mapping of om de verdere uitvoering te stoppen. Transacties kunnen worden ingeschakeld op het niveau van de databasecomponent, op tabelniveau of voor opgeslagen procedures.

Foutafhandeling kan zelfs worden gecombineerd met het loggen van database-uitvoer (traceerbaarheid) om een overzicht te creëren van fouten die optreden tijdens geautomatiseerde processen.

Laten we eens kijken hoe het werkt.

De map "MapForce Voorbeelden" bevat een databasemapping en een SQLite-database die transactieverwerking en het terugdraaien van wijzigingen illustreren. Uiteraard worden deze functies ondersteund voor alle gangbare relationele databases, voor veelvoorkomende taken zoals de conversie van PostgreSQL naar SQLite, het omzetten van XML naar SQL Server, het converteren van JSON naar Access, enzovoort.

Deze mapping kopieert gegevens van twee databasetabellen naar nieuwe tabellen met een vergelijkbare structuur, met uitzondering van één belangrijk verschil. In de tabel "new_addresses" van de doeldatabase zijn de velden "is_shipping" en "is_billing" niet toegestaan om null-waarden te bevatten, terwijl ze in de tabel "addresses" van de bron wel null-waarden mochten bevatten. Dit betekent dat er fouten zullen optreden tijdens de uitvoering van de mapping als er ontbrekende waarden worden aangetroffen.

We zullen drie scenario's bekijken, waarbij we verschillende opties voor foutafhandeling in databases gebruiken om fouten op verschillende manieren te beheren

  • Bij de eerste fout, annuleer alle wijzigingen en stop de uitvoering van de mapping

  • Annuleer alleen de transactie met de fout en ga verder

  • Annuleer de meest recente transactie en ga verder

Herstel alle wijzigingen

In de eerste situatie willen we database-foutafhandeling toepassen, zodat de doeldatabase volledig ongewijzigd blijft als er tijdens de mapping een fout optreedt. Om deze optie te implementeren, kunnen we het eigenschappenvenster voor het doeldatabasecomponent openen en transactiebeheer inschakelen:

We kunnen nu de mapping uitvoeren door op de knop "Output" onderaan het mapping-venster te klikken om het SQL-uitvoeringsscript te genereren. Vervolgens kunt u de optie "SQL-script uitvoeren" selecteren in het menu "Output" boven het scriptvenster

Wanneer er tijdens de uitvoering een fout optreedt, verschijnt een dialoogvenster waarin we de transactie-instellingen die we eerder hebben gekozen kunnen bevestigen of overschrijven:

We klikken gewoon op "OK" om onze oorspronkelijke instellingen te bevestigen. De mapping-uitvoering stopt en het venster "Berichten" beschrijft de fout:

We kunnen het ingebouwde MapForce DB Query-venster gebruiken om de tabellen "new_users" en "new_addresses" te bekijken. We verwachten dat beide tabellen leeg zijn:

Dit bevestigt dat alle gegevens die vóór de fout zijn ingevoerd, zijn teruggedraaid, met andere woorden, zijn verwijderd uit de database.

Tijdens de geautomatiseerde uitvoering, onder controle van MapForce Server, worden de instellingen voor transacties van de component gebruikt zonder enige onderbreking.

Annuleer één transactie en ga verder

Stel je voor dat een groot bestand met externe data moet worden geïmporteerd in een database, bijvoorbeeld met tienduizend records of meer. We verwachten dat het externe bestand correct is, maar als een paar records incorrecte data bevatten, willen we alle correcte records importeren en de fouten registreren. Dit is situatie 2 van de hierboven genoemde database-foutafhandeling, gecombineerd met database-tracking, zoals beschreven in een eerdere post.

Om deze optie voor foutafhandeling in de database te implementeren voor de tabel "new_addresses", klikken we op de knop voor tabelacties en selecteren we de volgende eigenschappen:

Nu kunnen we een nieuw SQL-script genereren en dit uitvoeren met behulp van dezelfde "SQL-script uitvoeren"-opdracht die hierboven is getoond. Het venster "Berichten" zal verschillende fouten registreren. We kunnen de SQL-query opnieuw uitvoeren in het venster "Databasequery" om de gegevens te bekijken die succesvol zijn gemapt:

Daarnaast hebben we een XML-tracebestand gegenereerd. De afbeelding hieronder toont een gedeeltelijk overzicht in het XMLSpy XML-bewerkingsprogramma, met een voorbeeld van een fout, gemarkeerd op regel 54:

Een logbestand zoals dit maakt het eenvoudig om een paar foutieve gegevens te vinden en te corrigeren, zelfs als er sprake is van tienduizenden gegevens!

Annuleer de meest recente transactie en ga verder

Situatie 3 voor de afhandeling van databasefouten voldoet aan deze bedrijfsvereiste: als het invoegen van een adres mislukt, dan mag het bijbehorende gebruikersrecord ook niet worden ingevoegd, maar de rest van de dataverwerking moet wel doorgaan.

Dit voorbeeld wordt in detail beschreven in de online help van MapForce, die automatisch wordt geïnstalleerd met MapForce, en in alle demobestanden die hier worden getoond. We laten het aan u over om een gratis proefversie te downloaden en dit scenario door te lopen, of om direct aan de slag te gaan met het implementeren van foutafhandeling in uw eigen database-mappingen!