D'Luede vu SQL Server op Oracle erëmhuelen, nodeems d'VPN fällt
Eng gefallenen VPN léisst den Opruffer onsécher, ob den Oracle-Commit ukomm ass. Eng dauerhaft Batch-ID erlaabt et, Extraktioun, Uwendung an Ofgläich een nom aneren ze beäntweren.
En Transfer tëschend Datebanke stierft, wann d'VPN fällt, an „et nach eng Kéier lafen“ ass kee Restauratiounsplang. D'Extraktioun vun der Quell kann fäerdeg sinn, d'Zil kann schonn commit gemaach hunn, oder d'Äntwert ka just um Réckwee verluer gaang sinn. Déi dräi Zoustänn brauchen ënnerschiddlech Aktiounen, an e Client, deen nëmmen „Feeler“ kennt, kann se net ënnerscheeden.
D'Léisung ass architektonesch: gitt all Laf eng dauerhaft Batch-Identitéit, a léisst d'Datebanke Froen beäntweren, amplaz de Client roden ze loossen.
Wat d'Datebank tatsächlech garantéiert
SQL Server an Oracle ginn allebéid Atomizitéit bannent enger Transaktioun. Keen vun deenen zwee gëtt Iech Atomizitéit iwwer béid. Eng verluer Verbindung beschiedegt d'Datebank net an erzwingt och kee manuelle Rollback, well de Server seng eege Transaktioun ouni Iech léist. Wat zerbricht, ass d'Wëssen vum Opruffer iwwer d'Resultat.
Separat commit heescht separat commit. Eng VPN, déi béid Verbindungen dréit, verschmëlzt zwee Commit net zu enger Aarbechtseenheet.
Den Commit, vun deem Dir ni héiert hutt
Ee Feelermodus bestrooft naiv Widderhuelungslogik: de Server commit, an d'Bestätegung erreecht den Opruffer ni. Oracle dokumentéiert dëst als de Problem vum onbekannte Resultat a bitt dofir Transaction Guard an der Transaktiounsdokumentatioun. E Kommunikatiounsfeeler ass kee Beweis, datt en iwwersendene Commit feelgeschloen ass, an en als Beweis ze behandelen ass de Wee, wéi e Batch zweemol publizéiert gëtt. Den Ënnerscheed ass am wichtegsten um Widderhuelungswee, wou den Operateur eng Feelermeldung huet an keen anert Signal, op deem hie kéint handelen.
Dofir muss de Restauratiounsschrëtt d'Resultat vum Zil liesen, amplaz et aus dem Feelertext ofzeleeden.
Gitt dem Transfer eng Batch-Identitéit
All Laf kritt eng onverännerlech Batch-ID, an d'Zil registréiert, wat et mat där ID gemaach huet: de Liewenszyklus huet véier Schrëtt, an hie gesäit gläich aus, egal wéi de Fournisseur.
- Extrahéiert en identifizéierte, onverännerleche Quellbatch mat registréierte Schema a Grenz.
- Transferéiert en an de Stagingberäich vum Zil an entdeckt onvollstännegen oder widerspriechlechen Inhalt, ier en als prett deklaréiert gëtt.
- Wendt en ënner den eegene Regelen vum Zil fir Eendeitegkeet oder Spär un a registréiert d'Fäerdegstellung an der selwechter lokaler Transaktioun.
- Gläicht d'dauerhaft Resultat iwwer dee vun der Datebank ënnerstëtzte Protokoll of, ier Dir bestätegt oder nach eng Kéier probéiert.
Widderhuelunge benotzen déiselwecht ID. Eng nei ID pro Versuch ënnerhieft d'Duplikatverhënnerung, déi Dir just gebaut hutt, wat selbstverständlech kléngt, bis en Widderhuelungswrapper automatesch eng generéiert.
D'ID gitt Iech och eppes, géint wat Dir méi spéit ofgläiche kënnt, laang nodeems de Clientprozess fort ass.
Beusprocht de Batch, an dann wend en un
De Uwendungsschratt muss d'Batch-ID beusproche, d'Geschäftsännerungen maachen an d'Fäerdegstellung an enger lokaler Transaktioun registréieren. D'Prüfung an d'Einfügung als separat Aussoen ze maachen, bréngt de Renne zréck, deen Dir versicht hutt ewechzehuelen. Wa sech zwee Aarbechter streiden, gewënnt genee eng Usproch an dem aneren gëtt et gesot.
E fehlende Fäerdegstellungsrekord ass kee Beweis, datt eng leeftransaktioun ni wäert commit. D'Usproch muss déi konkurréierend Versich serialiséieren, oder de Protokoll muss d'dauerhaft Resultat liesen, ier eppes decidéiert gëtt.
Benotzt dee vun der Datebank ënnerstëtzte Mechanismus fir déi Serialiséierung, amplaz en Iwwerpréif-an-Widderhuel-Schleef am Applikatiounscode.
Wat den Design nach ëmmer net versprieche kann
Staging mécht d'Aarbecht nei startbar a reduzéiert d'Ofhängegkeet vun enger eenzeger laanglieweger Sessioun. Et schaaft keen eenzegen atomaren Commit iwwer SQL Server, Oracle an all extern Säiteffekt, deen den Job ausféiert. Wann de Betrib dat würklech brauch, designen a qualifizéiert eng ënnerstëtzte verdeelt Transaktioun oder en Ofgläichsprozess, dorënner wien d'Aarbecht mat ongewëssem Resultat besëtzt. Alles wat méi schwaach ass, gehéiert an en Ofgläich-Runbook, net an den Transfercode.
Akzeptéiert d'Ënnerbriechung op dräi Plazen: wärend dem Transfer, wärend der Uwendung, an nom Commit awer virun der Bestätegung. Iwwerpréift duerno de Geschäftsresultat amplaz d'Message vum Client, a loosst de Batchjournal soen, ob d'Aarbecht onvollstänneg, commit oder nach ëmmer ongeléist ass.