Mae trosglwyddiad rhwng cronfeydd data yn marw pan fydd y VPN yn gostwng, ac nid yw „rhedeg eto“ yn gynllun adfer. Efallai bod echdynnu’r ffynhonnell wedi’i gwblhau, efallai bod y targed eisoes wedi commit, neu efallai bod yr ateb wedi’i golli ar y ffordd yn ôl. Mae angen camau gwahanol ar y tri chyflwr hyn, ac ni all cleient sy’n gwybod dim ond „gwall“ eu gwahaniaethu.

Mae’r atgyweiriad yn bensaernïol: rhowch hunaniaeth swp wydn i bob rhediad, a gadewch i’r cronfeydd data ateb cwestiynau yn lle gadael i’r cleient ddyfalu.

Yr hyn y mae’r gronfa ddata yn ei warantu mewn gwirionedd

Mae SQL Server ac Oracle ill dau yn rhoi atomigedd o fewn trafodyn. Nid yw’r naill na’r llall yn rhoi atomigedd ar draws y ddau. Nid yw cysylltiad coll yn llygru’r gronfa ddata, ac nid yw’n gorfodi adferiad â llaw chwaith, oherwydd mae’r gweinydd yn datrys ei drafodyn ei hun hebddot ti. Yr hyn sy’n torri yw gwybodaeth y galwr am y canlyniad.

Mae commit ar wahân yn golygu commit ar wahân. Nid yw VPN sy’n cario’r ddau gysylltiad yn uno dau commit yn un uned waith.

Y commit na chlywsoch chi erioed amdano

Mae un modd methu yn cosbi rhesymeg ailgynnig naïf: mae’r gweinydd yn commit, ac nid yw’r cydnabyddiaeth byth yn cyrraedd y galwr. Mae Oracle yn dogfennu hyn fel problem y canlyniad anhysbys ac yn darparu Transaction Guard ar ei chyfer yn y ddogfennaeth trafodion. Nid yw gwall cyfathrebu yn dystiolaeth bod commit a gyflwynwyd wedi methu, ac mae trin hynny fel tystiolaeth yn ffordd o bostio swp ddwywaith. Mae’r gwahaniaeth yn bwysicaf ar lwybr yr ailgynnig, lle mae gan y gweithredwr neges gwall a dim signal arall i weithredu arno.

Felly rhaid i’r cam adfer ddarllen y canlyniad o’r targed yn hytrach na’i gasglu o destun y gwall.

Rhowch hunaniaeth swp i’r trosglwyddiad

Mae pob rhediad yn cael ID swp annewidiol, ac mae’r targed yn cofnodi beth a wnaeth â’r ID hwnnw. Mae’r cylch bywyd yn bedwar cam, ac mae’n edrych yr un fath waeth beth yw’r gwerthwr:

  1. Echdynnwch swp ffynhonnell a nodwyd ac annewidiol gyda chynllun a ffin wedi’u cofnodi.
  2. Trosglwyddwch ef i ardal baratoi’r targed a chanfod cynnwys anghyflawn neu wrthgyferbyniol cyn ei ddatgan yn barod.
  3. Cymhwyswch ef o dan reolau unigrywiaeth neu gloi’r targed ei hun a chofnodi’r cwblhad yn yr un trafodyn lleol.
  4. Cysoniwch y canlyniad gwydn drwy’r protocol a gefnogir cyn cydnabod neu ailgynnig.

Mae ailgynigion yn ailddefnyddio’r ID. Mae ID newydd ar gyfer pob ymgais yn trechu’r atal dyblygu a adeiladwyd gennych yn awr, sy’n swnio’n amlwg nes bod troellwr ailgynnig yn cynhyrchu un yn awtomatig.

Mae’r ID hefyd yn rhoi rhywbeth i chi gysoni yn ei erbyn yn ddiweddarach, ymhell ar ôl i broses y cleient ddiflannu.

Hawliwch y swp, yna cymhwyswch

Rhaid i’r cam cymhwyso hawlio ID y swp, gwneud y newidiadau busnes, a chofnodi’r cwblhad mewn un trafodyn lleol. Mae gwneud y gwiriad a’r mewnosodiad fel datganiadau ar wahân yn ailosod y ras yr oeddech yn ceisio’i dileu. Os bydd dau weithiwr yn rasio, mae un hawl yn union yn ennill a dywedir wrth y llall.

Nid yw cofnod cwblhau absennol yn brawf na fydd trafodyn ar y gweill byth yn commit. Rhaid i’r hawl gyfresoli ymgeision cystadleuol, neu rhaid i’r protocol ddarllen y canlyniad gwydn cyn penderfynu unrhyw beth.

Defnyddiwch fecanwaith a gefnogir gan y gronfa ddata ar gyfer y cyfresoli hwnnw yn hytrach na dolen gwirio-ac-ailadrodd yng nghod y cymhwysiad.

Yr hyn na all y cynllun ei addo o hyd

Mae paratoi yn gwneud y gwaith yn ailgychwynadwy ac yn lleihau dibyniaeth ar un sesiwn hirhoedlog. Nid yw’n creu un commit atomig ar draws SQL Server, Oracle ac unrhyw sgil-effaith allanol y mae’r gwaith yn ei chyflawni. Os oes gwir angen hynny ar y busnes, dyluniwch a chymhwyswch drafodyn dosbarthedig a gefnogir neu broses gysoni, gan gynnwys pwy sy’n berchen ar waith sydd mewn ansicrwydd. Mae unrhyw beth gwannach na hynny yn perthyn mewn llyfr rhedeg cysoni, nid yng nghod y trosglwyddiad.

Derbyniwch ymyrraeth mewn tri lle: yn ystod trosglwyddo, yn ystod cymhwyso, ac ar ôl commit ond cyn cydnabyddiaeth. Yna gwiriwch ganlyniad y busnes yn hytrach na neges y cleient, a gadewch i lyfr y swp ddweud a yw’r gwaith yn anghyflawn, wedi’i commit, neu’n dal heb ei ddatrys.

Erthyglau cysylltiedig