Adfer llwyth o SQL Server i Oracle ar ôl i’r VPN ostwng
Mae VPN sydd wedi gostwng yn gadael y galwr yn ansicr a yw’r commit yn Oracle wedi digwydd. Mae ID swp gwydn yn caniatáu i echdynnu, cymhwyso a chysoni gael eu hateb un ar y tro.
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:
- Echdynnwch swp ffynhonnell a nodwyd ac annewidiol gyda chynllun a ffin wedi’u cofnodi.
- Trosglwyddwch ef i ardal baratoi’r targed a chanfod cynnwys anghyflawn neu wrthgyferbyniol cyn ei ddatgan yn barod.
- Cymhwyswch ef o dan reolau unigrywiaeth neu gloi’r targed ei hun a chofnodi’r cwblhad yn yr un trafodyn lleol.
- 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.