Shughuli. Muamala wa kadi ya benki ni nini? Kukataa operesheni Kukomesha muamala

Kila mwaka idadi ya watumiaji wa simu inaongezeka. Ukuaji kama huo haukuweza lakini kusababisha kuibuka kwa uuzaji wa simu, barua taka, utangazaji na "huduma" zingine. Katika nakala hii tutazungumza kwa ufupi juu ya aina mpya ya ulaghai wa simu - kutuma ujumbe na maandishi "Muamala unaendelea." Utagundua ni kwanini haswa ulipokea SMS kama hiyo, inamaanisha nini na madhumuni ya barua kama hizo ni nini.

Umepokea SMS ya aina gani?

Kwa hivyo, ujumbe wa SMS kama: "Shughuli ya kiasi cha 12210RUB inatekelezwa // Maelezo: 8-800-511-09-25". Kiasi cha "debit" kilichoonyeshwa kwenye ujumbe kinaweza kuwa tofauti sana, na nambari za simu ambazo hutuma barua pia zinaweza kuwa tofauti (8-800-511-62-82, 8-800-555-46-74, nk. )

SMS zote hizo ni kashfa ya banal, udanganyifu, udanganyifu (iite unayotaka) na wote ni kinyume cha sheria. Hakuna shughuli inayofanywa, na kiasi kinachukuliwa kutoka kwa kichwa. Kusudi kuu la barua kama hiyo ni kupata watu wawasiliane nawe kwa maoni. Hapa kuna mambo mawili ambayo unaweza kukutana nayo ikiwa utarudisha nambari iliyoainishwa katika SMS:

  1. Mpango wa kawaida ni kutoa pesa kwa kurudi kwa simu. Kwa wastani, wanaweza kujiondoa kutoka rubles 30 hadi 50. Msajili hupiga nambari - unganisho hufanywa, baada ya hapo muziki hucheza au mashine ya kujibu inaamuru maandishi - basi hutupwa na pesa hutolewa kutoka kwa akaunti.
  2. Jambo lingine ni jaribio la "mendeshaji" ambaye alipokea simu ili kutoa maelezo ya kibinafsi na maelezo ya malipo kutoka kwako. Kwa mfano, opereta anapokea simu na, baada ya kusikiliza tatizo, anaomba data yako kwa uchambuzi zaidi. Inafaa kumbuka kuwa waendeshaji pia ni wajanja na wanachambua mazungumzo na mteja. Ikiwa wanaona kwamba mtu amepotea na hofu kwa sababu ya kuandika, basi wanajaribu kutoa taarifa zote muhimu kutoka kwake. Mkakati huu unafanya kazi na wazee ambao kwa kiasi fulani wako mbali na teknolojia ya kisasa.

Kwa njia, soma nakala hii pia: Soko la Google Play: Hakuna muunganisho wa mtandao, angalia muunganisho wako wa WiFi

Kwa njia, watumiaji pia hupokea ujumbe mwingine bandia wa aina hii - kwa mfano, "Kadi yako imezuiwa na Benki Kuu ya Shirikisho la Urusi" au "Kadi yako imeathirika". Ujumbe huu wote wa SMS ni wa asili sawa na ulaghai.

Nini cha kufanya ikiwa unapokea ujumbe?

Ikiwa unapokea SMS iliyo na maandishi ya takriban "Muamala unaendelea kwa kiasi cha rubles 11,210 //" haupaswi kurudi - huu ni kashfa ya banal. Kumbuka - unaweza kupiga simu benki yako kila wakati kwa nambari ya simu iliyoorodheshwa kwenye tovuti yao rasmi au kwenye kadi yako. Nambari hizi pekee ndizo zinazofaa kutumika kufafanua masuala kuhusu kufuta na malipo. Ikiwa humwamini mtu yeyote, nenda moja kwa moja kwenye idara.

Kwa njia, hivi karibuni kulikuwa na kutuma kwa wingi kwa ujumbe wa uwongo kupitia Viber na WhatsApp kutoka "Mfuko wa Pensheni" Na "Magnit anatoa vocha kwa rubles 11,527.6". Kama matokeo ya "hatua" hii, watapeli waliweza kudanganya watu wengi na kutoa mamia ya maelfu ya rubles.


Watapeli walipata wapi nambari yako?

Hili ndilo suala chungu zaidi leo, kwa sababu kuna njia nyingi za walaghai kupata nambari yako ya simu. Chanzo kikuu cha nambari kama hizo ni hifadhidata zilizonunuliwa na nambari zinazotumika. Hifadhidata kama hizo zinaweza kununuliwa kwa urahisi mtandaoni; kwa kulipa kidogo zaidi utapokea orodha zilizochujwa kulingana na eneo, umri na jinsia. Kwa mfano, mashirika mbalimbali ya mikopo midogo midogo hununua hifadhidata iliyovunjwa na takriban mapato ya waliojisajili.

Wavamizi wanaweza pia kupata nambari yako ya simu kutoka:

  • Mitandao ya kijamii - mara nyingi wasifu wa mtumiaji hufunguliwa, na mtu yeyote anaweza kutazama data yake. Kwa kweli, VK na OK huficha data kama hiyo, lakini tovuti mbalimbali za uchumba na rasilimali zingine hazijumuishi chaguo hili.
  • Ubao wa matangazo na tovuti za kazi - nambari zote za simu hapa ziko wazi. Kila siku mamia ya maelfu ya watu hupakia nambari zao hapa, na programu maalum huzisukuma kwenye hifadhidata zao.
  • Haupaswi kukataa uwezekano wa shughuli za virusi kwenye simu yenyewe. Virusi zimejifunza kwa muda mrefu sio tu kuonyesha matangazo, lakini pia kupakua vitabu vya simu na historia ya simu na SMS kutoka kwa vifaa.

Kama ulivyoelewa tayari, haupaswi kuacha data yako ya kibinafsi (simu, barua pepe, anwani) inapatikana kwa umma. Jaribu kufuta nambari zako mara moja ikiwa tangazo lako halifai tena.

Hitimisho

Kwa hivyo, ikiwa unapokea ujumbe na maandishi "Shughuli inaendelea kwa kiasi cha ...", basi huna haja ya kufanya chochote - hii ni kashfa nyingine, ambayo kuna wengi sasa. Ningependa kutambua kuwa karibu haiwezekani kufuatilia nambari za simu za walaghai zilizoorodheshwa katika ujumbe wa SMS. Nambari hizi zote zinunuliwa kutoka kwa opereta mmoja, na hakuna mtu anayepanga wanunuzi kuwa nzuri na mbaya. Upeo ambao kampuni inaweza kufanya ni kuzuia nambari baada ya malalamiko yaliyothibitishwa, lakini hii haitoshi, kwa sababu walaghai huzinunua kwa mamia.

1. Shughulina kuzuia

2. Dhana ya muamala

Wakati wa kufanya kazi na hifadhidata, makosa na kushindwa kunawezekana. Wanaweza kusababishwa na makosa ya watumiaji kuingiliana na DBMS, au uendeshaji usio na uhakika wa kompyuta. Kwa hiyo, DBMS hutumia njia maalum za kufuta vitendo vilivyosababisha makosa hayo. Amri ya SQL inayoathiri yaliyomo na muundo wa hifadhidata haiwezi kutenduliwa. Mtumiaji anaweza kuamua kitakachotokea baada ya mwisho wa vitendo vyake: ikiwa mabadiliko yaliyofanywa kwenye hifadhidata yatasalia au yatapuuzwa. Ili kufanya hivyo, mlolongo wa shughuli kwenye hifadhidata umejumuishwa katika vikundi - shughuli.

Shughulini mlolongo wa shughuli zinazofanywa kwenye hifadhidata na kuihamisha kutoka hali moja thabiti hadi hali nyingine thabiti.

Muamala unazingatiwa kama hatua isiyoweza kugawanywa kwenye hifadhidata, yenye maana kutoka kwa maoni ya mtumiaji, ambayo ni, kitengo cha mantiki cha uendeshaji wa mfumo. Muamala huanza kila kipindi cha hifadhidata kinapotokea.

Mfano wa shughuli itakuwa kuhamisha pesa kupitia ATM. Kiasi cha tr 100. kuhamishwa kutoka akaunti ya sasa hadi akaunti ya kadi. Mpango huo huondoa kiasi kutoka kwa akaunti ya sasa na kisha kuiongeza kwenye akaunti ya kadi. Wakati programu inaendesha, baada ya marekebisho ya kwanza, kushindwa kwa nguvu hutokea na akaunti ya kadi haina kuongezeka. Ili kuzuia hali kama hiyo, amri zote mbili lazima ziunganishwe kuwa shughuli. Ikiwa amri zote katika muamala hazitekelezwi, muamala unarudishwa nyuma.

Hebu tufafanue muamala wa kuingiza data kuhusu vitabu vilivyopokelewa hivi karibuni na maktaba. Operesheni hii inaweza kugawanywa katika zile 2 zinazofuatana: kwanza, kuingiza data kuhusu kitabu ni safu mlalo mpya kwenye jedwali. Vitabu. Kisha unahitaji kuingiza data kuhusu nakala zote za kitabu - hii ni kuingiza seti ya safu mpya kwenye meza. Mifano. Ikiwa mlolongo huu wa vitendo umeingiliwa, hifadhidata haitalingana na kitu halisi, kwa hivyo inashauriwa kuifanya kama operesheni moja ya hifadhidata.

3. Sifa za muamala. Njia za kukamilisha shughuli

Kuna miundo mbalimbali ya muamala ambayo inaweza kuainishwa kulingana na sifa mbalimbali ikiwa ni pamoja na muundo wa muamala, upatanisho wa fedha za ndani ya muamala, muda, n.k.

Hivi sasa, aina zifuatazo za shughuli zinajulikana: shughuli za gorofa au za kawaida, shughuli za mnyororo na shughuli zilizowekwa.

Shughuli tambarare zina sifa ya sifa za kawaida za atomiki, uthabiti, kutengwa, na uimara.

· Mali ya atomiki inaonyeshwa kwa ukweli kwamba shughuli lazima ikamilike kwa ujumla au la.

· Sifa ya uthabiti huhakikisha kwamba shughuli inavyoendelea, data husogezwa kutoka hali moja hadi nyingine thabiti—muamala hauharibu uwiano wa data.

· Sifa ya kutengwa inamaanisha kuwa miamala inayoshindana kwa ufikiaji wa hifadhidata inachakatwa kimwili kwa mpangilio, kutengwa kutoka kwa kila mmoja, lakini kwa watumiaji inaonekana kana kwamba inatekelezwa kwa sambamba.

· Sifa za kudumu zinamaanisha kwamba ikiwa shughuli imekamilika kwa mafanikio, basi mabadiliko ya data ambayo yalifanywa nayo hayawezi kupotea chini ya hali yoyote, hata katika tukio la makosa yafuatayo.

Kuna chaguzi 2 za kukamilisha muamala:

· Ikiwa taarifa zote zitatekelezwa kwa mafanikio na hakuna hitilafu za programu au maunzi hutokea wakati wa muamala, shughuli hiyo inafanywa. (Ahadi ni maandishi kwa diski ya mabadiliko kwenye hifadhidata ambayo yalifanywa wakati wa utekelezaji wa shughuli.) Maadamu muamala haujatekelezwa, mabadiliko haya yanaweza kutenduliwa na hifadhidata inaweza kurejeshwa katika hali iliyokuwa wakati shughuli hiyo ilipoanza. Kufanya muamala kunamaanisha kuwa matokeo yote ya muamala huwa ya kudumu. Zitaonekana kwa miamala mingine tu baada ya muamala wa sasa kufanywa.

· Ikiwa muamala hautafaulu, hifadhidata lazima irudishwe katika hali yake ya asili. Kurejesha nyuma muamala ni kitendo cha kutendua mabadiliko yote ya data ambayo yalifanywa na taarifa za SQL katika sehemu kuu ya shughuli inayosubiri kutekelezwa.

4. WaendeshajiShughuliSQLkwa kufanya kazi na shughuli

Katika kiwango cha ANSI/ISO waendeshaji hufafanuliwa JITOE Na RUSHWA katika kiwango, mwanzo wa shughuli umebainishwa kabisa na opereta wa kwanza wa kurekebisha data; Opereta JITOE inamaanisha kukamilika kwa mafanikio ya shughuli, matokeo ya shughuli yameandikwa kwenye kumbukumbu ya nje; wakati mwendeshaji anamaliza shughuli RUSHWA matokeo ya shughuli ni kinyume. Kukamilika kwa mpango ambapo shughuli hiyo ilianzishwa inamaanisha kukamilika kwa muamala kwa mafanikio (kana kwamba taarifa imetumika.JITOE ), kukamilishwa bila kufaulu - kunafuta muamala (kana kwamba taarifa imetumikaRUSHWA ) Katika mfano huu, kila taarifa inayobadilisha hali ya data inachukuliwa kuwa shughuli. Mtindo huu ulitekelezwa katika matoleo ya kwanza ya DBMS za kibiashara. Baadaye, muundo wa muamala uliopanuliwa ulitekelezwa katika SYBASE DBMS.

Muundo uliopanuliwa wa muamala (kwa mfano, katika SQL SERVER DBMS) hutoa idadi ya shughuli za ziada:

· mwendeshaji ANZA SHUGHULI inaripoti kuanza kwa shughuli;

· mwendeshaji FANYA MAPENZI inaripoti kukamilika kwa muamala kwa mafanikio. Opereta huyu, kama vile COMMIT katika modeli ya kawaida ya ANSI/ISO, hurekodi mabadiliko yote ambayo yalifanywa katika hifadhidata wakati wa muamala;

· mwendeshaji HIFADHI MALIPO huunda sehemu ya kuhifadhi ndani ya muamala, ambayo inalingana na hali ya kati ya hifadhidata iliyohifadhiwa wakati wa utekelezaji wa taarifa hii. Katika operator HIFADHI MALIPO kunaweza kuwa na jina la kuokoa, hivyo wakati wa utekelezaji wa shughuli pointi kadhaa za kuokoa zinazofanana na majimbo kadhaa ya kati zinaweza kukumbukwa;

· mwendeshaji RUSHWA ina marekebisho 2. Ikiwa inatumiwa bila parameta ya ziada, basi inatafsiriwa kama taarifa ya kurudi nyuma kwa shughuli nzima, lakini ikiwa ina parameta. ROLLBACK n, basi inafasiriwa kama taarifa ya kurudisha nyuma shughuli ili kuokoa nukta n.

Savepoints ni muhimu katika miamala mirefu na changamano ili kuruhusu mabadiliko yaliyofanywa na taarifa fulani kutenduliwa.

Katika hali nyingi, unaweza kuweka parameter inayoitwa KUJITOKEZA , ambayo itakumbuka moja kwa moja amri zote zilizotekelezwa, na vitendo vilivyosababisha hitilafu vitafutwa moja kwa moja. Kawaida hali hii imewekwa kwa kutumia amri kama:

WEKA KUJITOKEZA WASHA ;

na urudi kwa usindikaji wa kawaida wa mazungumzo ya maombi:

WEKA KUJITOKEZA IMEZIMWA ;

Kwa kuongeza, inawezekana kufunga KUJITOKEZA , ambayo DBMS itafanya moja kwa moja wakati wa usajili Ikiwa kipindi cha mtumiaji kitaisha kwa njia isiyo ya kawaida, kwa mfano, kushindwa kwa mfumo hutokea, basi shughuli ya sasa itarejesha mabadiliko kiotomatiki. Haipendekezi kuandaa kazi ili shughuli moja iwe na amri nyingi, hasa zisizohusiana na kila mmoja. Hii inaweza kusababisha ukweli kwamba wakati wa kufuta mabadiliko, vitendo vingi sana vitafanyika, ikiwa ni pamoja na yale ambayo ni muhimu na hayakusababisha makosa. Chaguo bora ni wakati shughuli ina amri moja au amri kadhaa zinazohusiana kwa karibu.

Kichochezi hutekeleza kama muamala uliofafanuliwa kwa uwazi, kwa hivyo amri za udhibiti wa miamala zinaweza kutumika ndani ya kichochezi. Hasa, ukiukaji wa kizuizi cha uadilifu unapogunduliwa, amri lazima itumike kukomesha kichochezi na kutendua mabadiliko yoyote ambayo mtumiaji alijaribu kufanya. UTEKELEZAJI WA KURUDISHA . Ikiwa kichochezi kinakamilika kwa mafanikio, unaweza kutumia amri JITOE SHUGHULI .
Utekelezaji wa amri UTEKELEZAJI WA KURUDISHA au JITOE SHUGHULI haikatishi kichochezi, kwa hivyo unapaswa kufuatilia kwa uangalifu majaribio ya kurejesha muamala mara nyingi wakati masharti tofauti yanatimizwa.

Mfano wa muamala:

ANZA TRAN

UPDATE akaunti

SET usawa= salio- 100

Ikiwa @@ error=0

ANZA

ROLLBACK TRAN

RUDISHA

MWISHO

SASISHA kadi_akaunti

WEKA salio=salio+100

WAPI account_number=@s_account

Ikiwa @@ error=0

ANZA

ROLLBACK TRAN

RUDISHA

MWISHO

JITOE TRAN

Timu ANZA TRAN inaarifu seva kwamba shughuli imeanza. Hii ina maana kwamba kabla ya seva kupokea amriJITOE TRAN mabadiliko yote ni ya muda. Kwa hivyo, ikiwa seva itaacha kufanya kazi baada ya sasisho la kwanza, muamala utarejeshwa. Hakuna mchakato utaweza kufikia data hadi muamala ukamilike.

5. Kumbukumbu ya shughuli.

Utekelezaji wa kanuni ya kuokoa majimbo ya kati, kuthibitisha au kurudisha nyuma shughuli hutolewa na utaratibu maalum, kusaidia ambayo muundo wa mfumo unaoitwa logi ya shughuli imeundwa. Rekodi ya muamala ina mlolongo wa rekodi kuhusu mabadiliko kwenye hifadhidata. Imeundwa ili kuhakikisha uhifadhi wa kuaminika wa data katika hifadhidata. Hii inachukua uwezekano wa kurejesha hali ya hifadhidata thabiti baada ya aina yoyote ya hitilafu za maunzi na programu. Kanuni za jumla za ukataji miti na urejeshaji:

· matokeo ya shughuli zilizofanywa lazima zihifadhiwe katika hali iliyorejeshwa ya hifadhidata;

· matokeo ya miamala ambayo haijatekelezwa yasiwepo katika hali iliyorejeshwa ya hifadhidata.

Hii ina maana kwamba hali ya hivi karibuni thabiti ya hifadhidata imerejeshwa.

Hali zifuatazo zinawezekana ambazo ni muhimu kurejesha hali ya hifadhidata:

· Urejeshaji kutoka kwa upotezaji wa ghafla wa yaliyomo kwenye RAM (kuanguka kwa laini). Hali hii inaweza kutokea katika kesi zifuatazo: wakati wa kukatika kwa umeme au wakati kushindwa kwa processor mbaya hutokea. Hali hiyo inaonyeshwa na upotezaji wa sehemu hiyo ya hifadhidata iliyokuwa kwenye buffers za RAM wakati wa kutofaulu.

· Urejeshaji baada ya kutofaulu kwa media kuu ya hifadhi ya hifadhidata ya nje (kushindwa kwa bidii).

Mfumo lazima uweze kurejesha kutoka kwa usumbufu mdogo (kwa mfano, shughuli zilizoshindwa) na kushindwa kubwa (kwa mfano, kushindwa kwa nguvu, kushindwa kwa bidii).

Katika tukio la kushindwa kwa laini, ni muhimu kurejesha yaliyomo ya database kwa kutumia yaliyomo ya kumbukumbu za shughuli zilizohifadhiwa kwenye disks. Katika tukio la kushindwa kwa bidii, ni muhimu kurejesha yaliyomo kwenye hifadhidata kwa kutumia nakala zilizohifadhiwa na kumbukumbu za shughuli ambazo zimehifadhiwa kwenye vyombo vya habari vya nje visivyoharibika.

Kuna chaguzi mbili kuu za habari ya kuingia. Katika chaguo la 1, kwa kila shughuli, logi tofauti ya ndani ya mabadiliko ya hifadhidata inadumishwa na shughuli hii. Kumbukumbu kama hizo huitwa magogo ya ndani. Zinatumika kwa urejeshaji wa shughuli za ndani. Kwa kuongeza, logi ya mabadiliko ya database ya jumla huhifadhiwa, ambayo hutumiwa kurejesha database baada ya kushindwa kwa laini na ngumu.

Mbinu hii hukuruhusu kufanya urejeshaji nyuma wa shughuli za kibinafsi kwa haraka, lakini husababisha kurudiwa kwa maelezo katika kumbukumbu za ndani na zilizoshirikiwa. Kwa hivyo, chaguo la pili hutumiwa mara nyingi zaidi - kudumisha logi ya jumla ya mabadiliko ya hifadhidata, ambayo pia hutumiwa wakati wa kufanya urejeshaji wa kibinafsi.

Muundo wa jumla wa logi unaweza kuwakilishwa kama faili mfuatano ambayo inarekodi kila mabadiliko ya hifadhidata ambayo hutokea wakati wa utekelezaji wa shughuli. Shughuli zote zina nambari za ndani, kwa hivyo logi ya muamala hurekodi mabadiliko yote yaliyofanywa na shughuli zote.

Kila ingizo la logi limewekwa alama na nambari ya manunuzi ambayo inahusiana na maadili ya sifa ambayo inabadilika, kwa kuongeza, kwa kila shughuli, amri ya kuanza na kumaliza shughuli imeandikwa kwenye logi.

Kwa kuaminika zaidi, logi ya shughuli mara nyingi inarudiwa na zana za mfumo wa DBMS, ndiyo sababu kiasi cha kumbukumbu ya nje ni mara nyingi zaidi kuliko kiasi halisi cha data katika hifadhidata.

Kuna chaguo 2 za ukataji wa miamala: itifaki iliyo na masasisho yaliyochelewa na itifaki iliyo na masasisho ya haraka.

Kuweka kumbukumbu kulingana na kanuni ya masasisho yaliyoahirishwa huchukua utaratibu ufuatao wa kutekeleza miamala:

1. Wakati shughuli T1 inapoanza, kiingilio kinafanywa katika itifaki

T1 Anza Shughuli

2. Wakati wa utekelezaji wa shughuli, thamani mpya imeandikwa katika itifaki kwa kila rekodi iliyobadilishwa

T1. ID _ REKODI , sifa, thamani mpya

(ID _ REKODI - nambari ya rekodi ya kipekee)

3. Ikiwa vitendo vyote vinavyofanya muamala vimekamilika kwa mafanikio, basi shughuli hiyo inarekodiwa kwa sehemu na kuingizwa kwenye itifaki:

T 1 COMMT

4. Mara tu shughuli itakapofanywa, rekodi za kumbukumbu zinazohusiana na T1 hutumiwa kufanya mabadiliko kwenye hifadhidata.

5. Ikiwa kutofaulu kunatokea, DBMS inaangalia logi na inagundua ni shughuli gani zinahitaji kufanywa upya. Muamala T1 lazima ufanyike upya ikiwa itifaki ina maingizo yote mawili T1 Anza Shughuli Na T 1 COMMT . Hifadhidata inaweza kuwa katika hali isiyolingana, lakini thamani zozote mpya za vipengee vya data vilivyobadilishwa zimo kwenye kumbukumbu, na hivyo kuhitaji muamala kutekelezwa tena. Kwa kufanya hivyo, tumia utaratibu wa mfumoTENA UPYA(), ambayo inachukua nafasi ya maadili ya kipengele cha data na mpya, skanning itifaki kwa utaratibu wa mbele.

6. Ikiwa itifaki haina amri ya kufanya shughuli NA OMMIT, basi hakuna hatua inayohitajika, na shughuli inaanza tena.

Utaratibu mbadala na utekelezaji wa haraka unajumuisha kufanya mabadiliko mara moja kwenye hifadhidata, na sio mpya tu, lakini pia maadili yote ya zamani ya sifa zinazobadilishwa huingizwa kwenye itifaki, kwa hivyo kila rekodi inaonekana kama hii:

T1. ID _ REKODI , sifa, thamani mpya thamani ya zamani

Katika kesi hii, kuandika kwa logi hutangulia utekelezaji wa haraka wa operesheni kwenye hifadhidata. Wakati shughuli imefanywa, yaani, amri inakabiliwa T1 JITOE, na inatekelezwa, basi mabadiliko yote tayari yamefanywa kwenye hifadhidata na hakuna hatua zaidi zinazohitajika kuhusiana na shughuli hii.

Wakati shughuli inarudishwa nyuma, utaratibu wa mfumo unatekelezwa TENDWA (), ambayo inarudisha maadili yote ya zamani katika shughuli iliyofutwa, ikipitia itifaki, kuanzia na amri. ANZA SHUGHULI.

Ili kupona kutokana na kushindwa, utaratibu ufuatao hutumiwa:

· Ikiwa shughuli ina amri ya kuanza shughuli, lakini haina amri ya ahadi na uthibitisho wa utekelezaji wake, basi mlolongo wa vitendo unafanywa kama wakati wa kurejesha shughuli, yaani, maadili ya zamani yanarejeshwa.

Kwa kweli, urejesho hutokea kwa kutumia algorithms ngumu zaidi, kwa sababu mabadiliko, katika logi na katika hifadhidata, hayajaingizwa mara moja, lakini yanabafa. Uwekaji kumbukumbu wa mabadiliko unahusiana kwa karibu sio tu na usimamizi wa shughuli, lakini pia na kuhifadhi kurasa za hifadhidata katika RAM. Ikiwa rekodi ya mabadiliko ya hifadhidata, ambayo inapaswa kurekodiwa wakati wowote operesheni ya urekebishaji wa hifadhidata inafanywa, iliandikwa mara moja kwa kumbukumbu ya nje, hii ingesababisha kushuka kwa kasi kwa mfumo. Kwa hiyo, maingizo kwenye logi pia yanapigwa: wakati wa operesheni ya kawaida, ukurasa unaofuata unasukumwa kwenye kumbukumbu ya nje ya logi tu wakati imejaa kabisa maingizo.

6. Kufuli.

Katika mifumo ya watumiaji wengi iliyo na hifadhidata moja, watumiaji au programu nyingi zinaweza kufanya kazi kwa wakati mmoja. Mojawapo ya kazi kuu za DBMS ni kuhakikisha kutengwa kwa mtumiaji, ambayo ni, kuunda hali ya kufanya kazi ambayo kila mtumiaji anahisi kana kwamba anafanya kazi na hifadhidata pekee. Jukumu hili la DBMS kwa kawaida huitwa usawa wa shughuli.

Kuna shida tatu kuu na usindikaji wa hifadhidata sambamba:

§ Mabadiliko hayapo . Hali hii hutokea katika hali ambapo shughuli 2 wakati huo huo hubadilisha rekodi sawa katika hifadhidata. Kwa mfano, waendeshaji 2 wanafanya kazi ili kupokea maagizo; Alipowasiliana na ghala, kulikuwa na wachunguzi 40 waliotajwa hapo, na, baada ya kupokea uthibitisho kutoka kwa mteja, alirasimisha uuzaji wa wachunguzi 30 kati ya 40. Sambamba, operator wa pili anafanya kazi naye, ambaye anakubali amri kwa 20 ya wachunguzi sawa, na kwa upande wake, akiwasiliana na ghala, anapokea thamani sawa ya 40, na kuweka amri kwa mteja wake. Baada ya kumaliza kufanya kazi na data, inatekeleza amri Sasisha, ambayo inaingia 20 kama usawa wa wachunguzi kwenye ghala. Baada ya hayo, mwendeshaji wa kwanza anamaliza kufanya kazi na mteja wake na pia kutekeleza amri Sasisha, ambayo hurekodi salio 10 kama idadi ya wachunguzi waliopo. Kwa jumla, waliuza wachunguzi 50 kati ya 40 waliopo, na watakuwa na wachunguzi 10 katika hisa.

§ Matatizo ya data ya kati . Inahusishwa na uwezo wa kufikia data ya kati. Hebu sema operator wa kwanza, akijadiliana na mteja wake, alianzisha wachunguzi 30 walioagizwa, lakini kabla ya kukamilisha utaratibu, mteja alitaka kujua sifa zingine zaidi za bidhaa. Programu ambayo operator 1 anafanya kazi nayo tayari imebadilisha wachunguzi wengine kwenye ghala, na taarifa kuhusu wachunguzi 10 waliobaki sasa imehifadhiwa hapo. Kwa wakati huu, operator wa pili anajaribu kukubali amri kutoka kwa mteja wake kwa wachunguzi 20, lakini maombi yake yanaonyesha kuwa kuna wachunguzi 10 tu walioachwa kwenye ghala na operator analazimika kukataa mteja wake. Kwa wakati huu, mteja wa operator wa kwanza anaamua kutonunua wachunguzi, operator hurudisha nyuma shughuli na kuna wachunguzi 40 kwenye ghala tena. Hali hii iliwezekana kwa sababu programu ya pili ya opereta ilikuwa na ufikiaji wa data ya kati ambayo programu ya kwanza ilitoa.

§ Matatizo ya data yasiyolingana. Kuhusishwa na uwezekano wa kubadilisha data x, tayari imesoma x maombi mengine. Waendeshaji wote wawili huanza kufanya kazi karibu wakati huo huo, kupokea hali ya ghala ya awali ya wachunguzi 40, na kisha operator wa kwanza anauza wachunguzi 30 kwa mteja wake. Anafunga maombi yake na inatoa amri ya muamala ya COMMIT. Hali ya hifadhidata ni thabiti. Kwa wakati huu, mteja wa operator wa pili anaamua kuweka amri na operator wa pili, kupata data tena, anaona kwamba idadi ya wachunguzi imebadilika. Opereta wa pili anaamini kuwa uadilifu wa shughuli hiyo umekiukwa, kwa sababu Wakati wa utekelezaji wa kazi moja, alipokea majimbo 2 tofauti ya ghala. Hali hii ilitokea kwa sababu programu ya opereta wa 1 iliweza kurekebisha nakala ya data ambayo programu ya opereta wa pili ilikuwa tayari imesoma.

Kwa muhtasari wa shida zilizo hapo juu, tunaweza kutofautisha aina zifuatazo za migogoro kati ya shughuli mbili zinazofanana:

· W-W - shughuli 2 inajaribu kubadilisha kitu ambacho kilibadilishwa na shughuli 1 ambayo haikuisha;

· R-W - muamala wa 2 unajaribu kubadilisha kitu kilichosomwa na muamala 1 ambao haujakamilika;

· Muamala wa 2 wa W-R hujaribu kusoma kitu kilichorekebishwa na muamala 1 ambao haukukamilika;

7. Urekebishaji wa shughuli

Ili kuepuka migogoro hiyo, ni muhimu kuendeleza baadhi ya utaratibu kwa ajili ya utekelezaji wa uratibu wa shughuli sambamba. Utaratibu huu lazima ukidhi sheria zifuatazo:

1. Wakati wa muamala, mtumiaji huona data iliyokubaliwa pekee. Mtumiaji hapaswi kuona data ya kati isiyolingana.

2. Wakati shughuli za malipo zinatekelezwa sambamba katika DB 2, matokeo ya kutekeleza miamala yanapaswa kuwa sawa na ikiwa shughuli ya 1 ilitekelezwa na kisha shughuli ya 2, au kinyume chake.

Utaratibu unaotekeleza kanuni hizi unaitwa ujumuishaji wa shughuli. Inahakikisha kwamba kila mtumiaji anayepata hifadhidata hufanya kazi nayo kana kwamba hakuna watumiaji wengine wanaopata data sawa kwa wakati mmoja. Matokeo ya utekelezaji wa pamoja wa muamala ni sawa na matokeo ya baadhi ya utekelezaji mfuatano wa miamala hiyo hiyo.

Suluhisho rahisi zaidi litakuwa kutekeleza shughuli kwa mfuatano, lakini suluhisho kama hilo sio sawa kwa suala la wakati; kuna njia rahisi zaidi za kudhibiti ufikiaji sambamba kwa hifadhidata. Utaratibu wa kawaida wa kutatua matatizo haya ni kufunga kitu (kwa mfano, meza) kwa muda wa shughuli. Ikiwa shughuli itafikia kitu kilichofungwa, inabaki katika hali ya kusubiri hadi kitu kitakapofunguliwa, ambapo inaweza kuanza kuichakata. Hata hivyo, kuzuia kunaleta matatizo mapya - ucheleweshaji wa shughuli kutokana na kuzuia.

Kwa hivyo, kufuli, pia huitwa kufuli za maingiliano ya kitu, zinaweza kutumika kwa aina tofauti za vitu. Kitu kikubwa zaidi cha kufunga kinaweza kuwa hifadhidata nzima, lakini aina hii ya kufunga itafanya hifadhidata isifikiwe na programu zingine zote zinazofanya kazi na hifadhidata hii. Aina inayofuata ya kitu cha kufunga ni meza. Muamala unaofanya kazi kwenye jedwali huifungia kwa muda wa muamala. Aina hii ya kufunga ni bora kuliko ile ya awali kwa sababu inaruhusu utekelezaji sambamba wa miamala inayofanya kazi kwenye jedwali zingine.

Idadi ya DBMS hutekeleza kufunga kwa kiwango cha ukurasa. Katika kesi hii, DBMS inafunga tu kurasa za kibinafsi kwenye diski wakati shughuli inazifikia. Aina hii ya kufunga ni laini zaidi, na inaruhusu miamala tofauti kufanya kazi kwenye jedwali moja ikiwa watafikia kurasa tofauti za data.

Katika baadhi ya DBMS, kufunga kwa kiwango cha safumlalo kunawezekana, lakini utaratibu kama huo wa kufunga unahitaji gharama za ziada ili kuhimili. Seva ya SQL inajitahidi kutekeleza kufunga kwa kiwango cha rekodi ili kuhakikisha ulinganifu wa juu zaidi. Kadiri idadi ya kufuli kwa safu mlalo inavyoongezeka, seva inaweza kubadili kufuli za ukurasa ikiwa idadi ya rekodi inazidi kiwango cha juu.

8. Kubatilisha kufuli katika kiwango cha ombi. Aina za kufuli

Ikiwa baada ya jina la jedwali katika kifungu KUTOKA hufuata moja ya maneno muhimu yafuatayo, ombi linaingilia kidhibiti cha kufuli na aina maalum ya kufuli inatumika:

· NOLOCK - inaruhusu kusoma chafu;

· PAGLOCK - kufuli kwa kiwango cha ukurasa;

· ROWLOCK - kufuli kwa kiwango cha rekodi;

· TABLOCK - kufuli ya meza iliyoshirikiwa;

· TABLOCKX - ufungaji wa meza ya kipekee

Hivi sasa, tatizo la kuzuia ni somo la idadi kubwa ya masomo.

Kuna aina mbili za msingi za kufuli (kufuli za maingiliano):

Kufuli zilizoshirikiwa (zisizo ngumu) - Njia hii inamaanisha kufunga kwa pamoja kwa kitu na hutumiwa kufanya operesheni ya kusoma kwenye kitu. Vitu vilivyofungwa kwa njia hii havibadilika wakati wa utekelezaji wa shughuli na vinapatikana kwa shughuli nyingine, lakini tu katika hali ya kusoma;

Kufuli za kipekee (ngumu) - usiruhusu mtu yeyote isipokuwa mmiliki wa kufuli hii kufikia data. Kufuli hizi hutumiwa kwa amri zinazobadilisha yaliyomo au muundo wa jedwali na kudumu hadi mwisho wa shughuli.

Upataji wa kitu kwa shughuli nyingi za kusoma unaendana, yaani, shughuli nyingi zinaruhusiwa kusoma kitu kimoja. Upataji wa kitu kwa muamala mmoja uliosomwa hauendani na upataji kwa muamala mwingine wa kitu sawa kwa maandishi. Upigaji picha wa kitu kimoja kwa miamala tofauti ya uandishi hauoani.

Walakini, kutumia aina tofauti za kufuli husababisha shida ya kufuli. Tatizo la msuguano lilitokea wakati wa kuzingatia utekelezaji wa michakato ya sambamba katika mazingira ya uendeshaji na pia ilihusishwa na usimamizi wa vitu vya pamoja. Mfano wa mkwamo: Ruhusu muamala Jedwali gumu 1, na kisha jedwali gumu 2. Muamala B, kinyume chake, jedwali gumu 2, na kisha jedwali gumu 1.

Ikiwa shughuli hizi zote mbili zilianza kwa wakati mmoja, basi baada ya kufanya shughuli za urekebishaji kwenye jedwali la kwanza, zote mbili zitaishia kungojea kwa muda usiojulikana: shughuli A itasubiri shughuli B ikamilike na jedwali la 2 kufunguliwa, na shughuli B itasubiri. bure kwa shughuli A kukamilisha na jedwali 1 kufunguliwa.

Hali inaweza kuwa ngumu zaidi. Idadi ya miamala iliyozuiwa pande zote inaweza kuwa kubwa zaidi. Kila shughuli haiwezi kugundua hali hii peke yake. DBMS lazima isuluhishe. DBMS nyingi za kibiashara zina utaratibu wa kugundua mikwamo kama hiyo.

Msingi wa kugundua mkwamo ni ujenzi (au matengenezo ya mara kwa mara) ya grafu ya kusubiri shughuli. Grafu ya kusubiri inaweza kuwa grafu iliyoelekezwa yenye majina ya miamala kwenye vipeo vyake. Ikiwa muamala T1 unasubiri muamala T2 umalizike, basi mshale unatoka kwenye kipeo T1 hadi kipeo T2. Zaidi ya hayo, mishale inaweza kuandikwa kwa majina ya vitu vilivyozuiwa na aina ya kuzuia.

Utaratibu wa kufunga hutumia dhana ya kiwango cha kutengwa kwa kufuli, ambayo huamua ni meza ngapi zitafungwa. Kijadi, viwango vitatu vya kutengwa hutumiwa:

· Kiwango cha kutengwa kinachoitwa kusoma tena hutekeleza mkakati kwamba ndani ya shughuli fulani, rekodi zote zinazoletwa kwa hoja haziwezi kurekebishwa. Rekodi hizi haziwezi kubadilishwa hadi muamala ukamilike.

· Kiwango cha kutengwa, kinachoitwa kiashiria cha uthabiti, huzuia kila rekodi kurekebishwa inaposomwa, au kusomwa wakati inarekebishwa.

· Ngazi ya tatu ya utulivu inaitwa kusoma tu. Kusoma pekee hufunga jedwali zima na kwa hivyo haiwezi kutumiwa na amri za urekebishaji. Kwa hivyo, kusoma tu huhakikisha kuwa matokeo ya hoja yanawiana ndani na data ya jedwali.

Kwa hivyo, chombo cha udhibiti wa sarafu katika DBMS huamua ni kiasi gani amri zilizotolewa wakati huo huo zitaingilia kati. Katika DBMS za kisasa, ni zana inayoweza kubadilika ambayo hupata suluhu mojawapo kiotomatiki, ikizingatiwa kuhakikisha utendakazi wa hifadhidata wa juu zaidi na upatikanaji wa data kwa timu zilizopo.

9. MASWALI YA KUDHIBITI

1. Bainisha muamala. Toa mifano ya miamala.

2. Orodhesha na ueleze sifa za miamala.

3. Je, ni chaguzi gani zinazowezekana za kukamilisha miamala?

4. Waendeshaji wa lugha gani SQL kutumika kufanya kazi na miamala katika muundo uliopanuliwa wa muamala?

5. Je, ninaweza kutumia amri za udhibiti wa shughuli katika vichochezi?

6. Je, madhumuni ya logi ya muamala ni nini?

7. Ni katika hali gani urejeshaji wa hifadhidata unafanywa kwa kutumia logi ya ununuzi?

8. Je, kuna chaguzi gani za kuweka kumbukumbu za miamala?

9. Kuna tofauti gani kati ya chaguo za ukataji wa miamala: itifaki iliyo na masasisho yaliyochelewa na itifaki iliyo na masasisho ya haraka.

10. Ni shida gani zinazotokea wakati watumiaji wanafanya kazi sambamba na hifadhidata?

11. Ni vitu gani vya hifadhidata vinaweza kufungwa ili kutekeleza kanuni ya kutengwa kwa watumiaji?

12. Inawezekana kuweka aina ya kuzuia katika maswali?

13. Je, ni aina gani za upataji wa kitu kwa miamala mingi zilizopo? Ni zipi zinazolingana?

14. Tatizo ni nini na miisho iliyokufa?

Kuna miundo mbalimbali ya muamala ambayo inaweza kuainishwa kulingana na sifa mbalimbali ikiwa ni pamoja na muundo wa muamala, upatanisho wa fedha za ndani ya muamala, muda, n.k.

Hivi sasa, aina zifuatazo za shughuli zinajulikana: shughuli za gorofa au za kawaida, shughuli za mnyororo na shughuli zilizowekwa.

Shughuli za gorofa, au za jadi, zina sifa ya mali nne za classical: atomicity, uthabiti, kutengwa, kudumu (nguvu) - ACID (Atomicity, Consistency, Isolation, Durability). Shughuli za kitamaduni wakati mwingine huitwa miamala ya ACID. Sifa zilizotajwa hapo juu zinamaanisha yafuatayo:

Mali ya atomicity (Atomicity) inaonyeshwa kwa ukweli kwamba shughuli lazima itekelezwe kwa ujumla au isitekelezwe kabisa.

Sifa ya Uthabiti huhakikisha kwamba miamala inapotekelezwa, data husogezwa kutoka hali moja hadi nyingine - shughuli hiyo haiharibu uwiano wa data.

Sifa ya Kutengwa inamaanisha kuwa shughuli zinazoshindana za ufikiaji wa hifadhidata huchakatwa kimwili kwa mpangilio, kutengwa kutoka kwa kila mmoja, lakini kwa watumiaji inaonekana kana kwamba zinatekelezwa kwa sambamba.

Mali ya Kudumu inafasiriwa kama ifuatavyo: ikiwa shughuli imekamilika kwa mafanikio, basi mabadiliko ya data ambayo yalifanywa nayo hayawezi kupotea kwa hali yoyote (hata katika tukio la makosa ya baadae).

Kuna chaguzi mbili za kukamilisha muamala. Ikiwa taarifa zote zimekamilika kwa mafanikio na hakuna hitilafu za programu au maunzi hutokea wakati wa shughuli, shughuli hiyo inafanywa.

Kufanya muamala ni kitendo cha kuandika ili kuweka diski mabadiliko katika hifadhidata ambayo yalifanywa wakati wa utekelezaji wa shughuli.

Alimradi muamala haujatekelezwa, inaruhusiwa kutendua mabadiliko haya, kurejesha hifadhidata katika hali ilivyokuwa mwanzoni mwa muamala. Kufanya muamala kunamaanisha kuwa matokeo yote ya muamala huwa ya kudumu. Zitaonekana kwa miamala mingine tu baada ya muamala wa sasa kufanywa. Hadi wakati huu, data yote iliyoathiriwa na muamala "itaonekana" kwa mtumiaji katika jimbo hilo mwanzoni mwa shughuli ya sasa.

Ikiwa kitu kitatokea wakati wa muamala unaofanya isiweze kukamilika kama kawaida, hifadhidata lazima irudishwe katika hali yake ya asili. Kurejesha nyuma muamala ni kitendo cha kutendua mabadiliko yote ya data ambayo yalifanywa na taarifa za SQL katika sehemu kuu ya shughuli inayosubiri kutekelezwa.



Kila taarifa katika muamala hufanya sehemu yake ya kazi, lakini ili kazi nzima ikamilike kwa mafanikio, taarifa zao zote lazima zikamilike bila masharti. Kupanga taarifa katika muamala huiambia DBMS kwamba kikundi kizima kinapaswa kutekelezwa kama kitengo kimoja, na kwamba utekelezaji kama huo unapaswa kuungwa mkono kiotomatiki.

Kiwango cha ANSI/ISO SQL kinafafanua muundo wa muamala na utendakazi wa taarifa za COMMIT na ROLLBACK. Kiwango kinafafanua kuwa shughuli huanza na taarifa ya kwanza ya SQL, iliyoanzishwa na mtumiaji au iliyomo katika programu, ambayo inabadilisha hali ya sasa ya hifadhidata. Taarifa zote zinazofuata za SQL zinajumuisha kiini cha muamala. Muamala unaisha kwa mojawapo ya njia nne zinazowezekana (Mchoro 11.1):

Taarifa ya COMMIT inamaanisha shughuli iliyokamilishwa kwa mafanikio; matumizi yake hufanya mabadiliko ya kudumu yaliyofanywa kwa hifadhidata ndani ya shughuli ya sasa;

Taarifa ya ROLLBACK inabatilisha muamala, ikitengua mabadiliko yaliyofanywa kwenye hifadhidata kama sehemu ya shughuli hiyo; shughuli mpya huanza mara baada ya ROLLBACK kutumika;

kukamilika kwa mafanikio kwa programu ambayo shughuli ya sasa ilianzishwa inamaanisha kukamilika kwa shughuli kwa mafanikio (kana kwamba taarifa ya COMMIT imetumika);

usitishaji wa mpango wenye makosa hubatilisha muamala (kana kwamba taarifa ya ROLLBACK imetumika).

Katika mfano huu, kila taarifa inayobadilisha hali ya hifadhidata inachukuliwa kuwa shughuli, kwa hivyo baada ya kukamilika kwa taarifa hii, hifadhidata huenda kwa hali mpya thabiti.

Matoleo ya kwanza ya DBMS za kibiashara yalitekeleza muundo wa muamala wa ANSI/ISO. Baadaye, muundo uliopanuliwa wa ununuzi ulitekelezwa katika SYBASE DBMS, ambayo inajumuisha idadi ya shughuli za ziada. Mfano wa SYBASE hutumia taarifa nne zifuatazo:

Taarifa ya BEGIN TRANSATION inaashiria kuanza kwa muamala. Tofauti na muundo wa ANSI/ISO, ambapo kuanza kwa shughuli kunabainishwa kwa njia isiyo wazi na taarifa ya kwanza ya urekebishaji data, katika modeli ya SYBASE mwanzo wa muamala umebainishwa kwa uwazi kwa kutumia taarifa ya muamala wa kuanza.

Taarifa ya COMMIT TRANSACTION inaonyesha kukamilika kwa muamala kwa mafanikio. Ni sawa na taarifa ya COMMIT katika muundo wa kawaida wa ANSI/ISO. Taarifa hii, kama taarifa ya COMMIT, hurekodi mabadiliko yote ambayo yalifanywa katika hifadhidata wakati wa muamala.

Taarifa ya SAVE TRANSATION huunda sehemu ya kuhifadhi ndani ya muamala, ambayo inalingana na hali ya kati ya hifadhidata iliyohifadhiwa wakati wa utekelezaji wa taarifa hii. Taarifa ya HIFADHI MADILIKO inaweza kuwa na jina la mahali pa kuhifadhi. Kwa hiyo, wakati wa utekelezaji wa shughuli, pointi kadhaa za kuokoa zinaweza kukumbukwa, zinazofanana na majimbo kadhaa ya kati.

Opereta ya ROLLBACK ina marekebisho mawili. Taarifa hii ikitumiwa bila kigezo cha ziada, inafasiriwa kama taarifa ya kurudisha nyuma shughuli nzima, yaani, katika kesi hii ni sawa na taarifa ya ROLLBACK katika modeli ya ANSI/ISO. Ikiwa mwendeshaji wa urejeshaji ana kigezo na kimeandikwa kwa njia ya ROLLBACK B, basi inafasiriwa kama mwendeshaji wa urejeshaji wa sehemu ya shughuli ili kuokoa nukta B.

Kanuni za utekelezaji wa miamala katika muundo wa muamala uliopanuliwa zimewasilishwa kwenye Mtini. 11.2. Katika takwimu, waendeshaji wametiwa alama na nambari ili iwe rahisi kwetu kufuatilia maendeleo ya shughuli katika kesi zote halali.

Shughuli huanza na opereta wazi wa kuanza kwa shughuli, ambayo ina nambari 1 katika mpango wetu Inayofuata inakuja opereta 2, ambayo ni mwendeshaji wa utaftaji na haibadilishi hali ya sasa ya hifadhidata, na waendeshaji wafuatao 3 na 4 huhamisha hifadhidata kwa. jimbo jipya. Taarifa ya 5 huhifadhi hali hii mpya ya kati ya hifadhidata na kuiweka alama kama hali ya kati katika hatua A. Taarifa ya 6 na 7 kufuata, ambayo huhamisha hifadhidata hadi hali mpya. Na operator 8 huhifadhi hali hii kama hali ya kati kwa uhakika B. Opereta 9 huingiza data mpya, na operator 10 anaangalia hali ya 1; ikiwa hali ya 1 imefikiwa, basi opereta 11 anatekelezwa, ambayo inarudisha nyuma shughuli hiyo kwa hali ya kati B. Hii inamaanisha kuwa matokeo ya vitendo vya mwendeshaji 9, kama ilivyokuwa, yanafutwa na hifadhidata inarudi kwa hali ya kati B, ingawa baada ya kutekeleza operator 9 ilikuwa tayari katika hali mpya Na baada ya shughuli hiyo kurudishwa nyuma, badala ya operator 9, ambayo hapo awali ilitekelezwa kutoka Katika hali ya DB, operator 13 kwa kuingiza data mpya hutekelezwa, na kisha udhibiti huhamishiwa kwa operator. 14. Opereta 14 huangalia hali tena, lakini sasa hali mpya 2, ikiwa hali hiyo imefikiwa, basi udhibiti huhamishiwa kwa opereta 15, ambayo inarudisha shughuli hiyo kwa hali ya kati A, ambayo ni, waendeshaji wote waliobadilisha hifadhidata, kuanzia 6 hadi 13, inachukuliwa kuwa haijatekelezwa, ambayo ni, matokeo ya utekelezaji wao yamepotea na tuko tena katika hali A, kama baada ya kutekeleza operesheni 4 Udhibiti unaofuata huhamishiwa kwa operator 17, ambayo husasisha yaliyomo kwenye hifadhidata. , baada ya hapo udhibiti huhamishiwa kwa operator 18, ambayo inahusishwa na hali ya kuangalia 3. Cheki inaisha ama kwa kuhamisha udhibiti kwa operator 20, ambaye anafanya shughuli, na database huenda katika hali mpya imara, na kuibadilisha ndani ya sasa. shughuli haiwezekani Au, ikiwa udhibiti umehamishiwa kwa opereta 19, basi shughuli hiyo inarudishwa hadi mwanzo na hifadhidata inarudi katika hali yake ya awali, na majimbo yote ya kati hapa tayari yameangaliwa, na haiwezekani kufanya operesheni ya kurudisha nyuma. majimbo haya ya kati baada ya kutekeleza operesheni 19

Bila shaka, modeli ya muamala iliyopanuliwa ya SYBASE inaauni utaratibu unaonyumbulika zaidi wa kutekeleza shughuli za Savepoints hukuruhusu kuweka alama ndani ya muamala ili sehemu tu ya kazi iliyofanywa katika muamala iweze kutenduliwa shughuli changamano ili kuhakikisha uwezo wa kutendua mabadiliko kwa waendeshaji fulani Hata hivyo, hii inahitaji rasilimali za ziada za mfumo - opereta hufanya kazi na mabadiliko yanatenguliwa, kwa kawaida uboreshaji wa mantiki ya usindikaji inaweza kuwa suluhisho bora.

Kuna miundo mbalimbali ya muamala ambayo inaweza kuainishwa kulingana na sifa mbalimbali ikiwa ni pamoja na muundo wa muamala, upatanisho wa fedha za ndani ya muamala, muda, n.k.

Hivi sasa, aina zifuatazo za shughuli zinajulikana: shughuli za gorofa au za kawaida, shughuli za mnyororo na shughuli zilizowekwa.

Shughuli za gorofa, au za jadi, zina sifa ya mali nne za classical: atomicity, uthabiti, kutengwa, kudumu (nguvu) - ACID (Atomicity, Consistency, Isolation, Durability). Shughuli za kitamaduni wakati mwingine huitwa miamala ya ACID. Sifa zilizotajwa hapo juu zinamaanisha yafuatayo:

· Mali ya atomiki(Atomicity) inaonyeshwa kwa ukweli kwamba shughuli lazima ikamilike kwa ukamilifu au la.

· Mali ya uthabiti(Uthabiti) huhakikisha kwamba miamala inapotekelezwa, data husogezwa kutoka hali moja hadi nyingine - shughuli hiyo haiharibu uwiano wa data.

· Mali ya kutengwa Kutengwa kunamaanisha kuwa miamala inayoshindana kwa ufikiaji wa hifadhidata inachakatwa kimwili kwa mpangilio, kutengwa kutoka kwa kila mmoja, lakini kwa watumiaji inaonekana kana kwamba inatekelezwa kwa sambamba.

· Mali ya kudumu(Durability) inafasiriwa kama ifuatavyo: ikiwa shughuli imekamilika kwa mafanikio, basi mabadiliko ya data ambayo yalifanywa nayo hayawezi kupotea chini ya hali yoyote (hata katika tukio la makosa ya baadae).

Kuna chaguzi mbili za kukamilisha muamala. Ikiwa taarifa zote zimekamilika kwa mafanikio na hakuna hitilafu za programu au maunzi hutokea wakati wa shughuli, shughuli hiyo inafanywa.

Kufanya muamala ni kitendo cha kuandika ili kuweka diski mabadiliko katika hifadhidata ambayo yalifanywa wakati wa utekelezaji wa shughuli.

Alimradi muamala haujatekelezwa, inaruhusiwa kutendua mabadiliko haya, kurejesha hifadhidata katika hali iliyokuwa mwanzoni mwa muamala. Kufanya muamala kunamaanisha kuwa matokeo yote ya muamala huwa ya kudumu. Zitaonekana kwa miamala mingine tu baada ya muamala wa sasa kufanywa. Hadi wakati huu, data yote iliyoathiriwa na muamala "itaonekana" kwa mtumiaji katika jimbo hilo mwanzoni mwa shughuli ya sasa.

Ikiwa kitu kitatokea wakati wa muamala unaofanya isiweze kukamilika kama kawaida, hifadhidata lazima irudishwe katika hali yake ya asili. Kurejesha nyuma muamala ni kitendo cha kutendua mabadiliko yote ya data ambayo yalifanywa na taarifa za SQL katika sehemu kuu ya shughuli inayosubiri kutekelezwa.

Kila taarifa katika muamala hufanya sehemu yake ya kazi, lakini ili kazi nzima ikamilike kwa mafanikio, taarifa zao zote lazima zikamilike bila masharti. Kupanga taarifa katika muamala huiambia DBMS kwamba kikundi kizima kinapaswa kutekelezwa kama kitengo kimoja, na kwamba utekelezaji kama huo unapaswa kuungwa mkono kiotomatiki.

Kiwango cha ANSI/ISO SQL kinafafanua muundo wa muamala na utendakazi wa taarifa za COMMIT na ROLLBACK. Kiwango kinafafanua kuwa shughuli huanza na taarifa ya kwanza ya SQL, iliyoanzishwa na mtumiaji au iliyomo katika programu, ambayo inabadilisha hali ya sasa ya hifadhidata. Taarifa zote zinazofuata za SQL zinajumuisha kiini cha muamala. Muamala unaisha kwa mojawapo ya njia nne zinazowezekana (Mchoro 11.1):

1. Taarifa ya COMMIT inamaanisha kukamilika kwa shughuli kwa mafanikio; matumizi yake hufanya mabadiliko ya kudumu yaliyofanywa kwa hifadhidata ndani ya shughuli ya sasa;

2. Taarifa ya ROLLBACK inabatilisha muamala, ikitengua mabadiliko yaliyofanywa kwenye hifadhidata kama sehemu ya shughuli hiyo; shughuli mpya huanza mara baada ya ROLLBACK kutumika;

3. kukamilika kwa mafanikio kwa programu ambayo shughuli ya sasa ilianzishwa inamaanisha kukamilika kwa ufanisi wa shughuli (kana kwamba taarifa ya COMMIT imetumika);

4. Kusitishwa kimakosa kwa programu kunafuta muamala (kana kwamba taarifa ya ROLLBACK imetumika).

Katika mfano huu, kila taarifa inayobadilisha hali ya hifadhidata inachukuliwa kuwa shughuli, kwa hivyo baada ya kukamilika kwa taarifa hii, hifadhidata huenda kwa hali mpya thabiti.

Matoleo ya kwanza ya DBMS za kibiashara yalitekeleza muundo wa muamala wa ANSI/ISO. Baadaye, muundo uliopanuliwa wa ununuzi ulitekelezwa katika SYBASE DBMS, ambayo inajumuisha idadi ya shughuli za ziada. Mfano wa SYBASE hutumia taarifa nne zifuatazo:

· Taarifa ya ANZA SHUGHULI inaashiria kuanza kwa muamala. Tofauti na muundo wa ANSI/ISO, ambapo kuanza kwa shughuli kunabainishwa kwa njia isiyo wazi na taarifa ya kwanza ya urekebishaji data, katika modeli ya SYBASE mwanzo wa muamala umebainishwa kwa uwazi kwa kutumia taarifa ya muamala wa kuanza.

· Taarifa ya COMMIT TRANSACTION inaonyesha kukamilika kwa muamala kwa mafanikio. Ni sawa na taarifa ya COMMIT katika muundo wa kawaida wa ANSI/ISO. Taarifa hii, kama taarifa ya COMMIT, hurekodi mabadiliko yote ambayo yalifanywa katika hifadhidata wakati wa muamala.

· Taarifa ya HIFADHI MUARAMIA huunda sehemu ya kuhifadhi ndani ya muamala, ambayo inalingana na hali ya kati ya hifadhidata iliyohifadhiwa wakati wa utekelezaji wa taarifa hii. Taarifa ya HIFADHI MUARAMIA inaweza kuwa na jina la mahali pa kuhifadhi. Kwa hiyo, wakati wa utekelezaji wa shughuli, pointi kadhaa za kuokoa zinaweza kukumbukwa, zinazofanana na majimbo kadhaa ya kati.

· Opereta ya ROLLBACK ina marekebisho mawili. Taarifa hii ikitumiwa bila kigezo cha ziada, inafasiriwa kama taarifa ya kurudisha nyuma shughuli nzima, yaani, katika kesi hii ni sawa na taarifa ya ROLLBACK katika modeli ya ANSI/ISO. Ikiwa mwendeshaji wa urejeshaji ana kigezo na kimeandikwa kwa njia ya ROLLBACK B, basi inafasiriwa kama mwendeshaji wa urejeshaji wa sehemu ya shughuli ili kuokoa nukta B.

Mchele. 11.1.Muundo wa muamala wa ANSI/ISO

Kanuni za utekelezaji wa miamala katika muundo wa muamala uliopanuliwa zimewasilishwa kwenye Mtini. 11.2. Katika takwimu, waendeshaji wametiwa alama na nambari ili iwe rahisi kwetu kufuatilia maendeleo ya shughuli katika kesi zote halali.

Mchele. 11.2.Mifano ya kufanya shughuli katika muundo uliopanuliwa

Shughuli huanza na opereta wazi wa kuanza kwa shughuli, ambayo ina nambari 1 katika mpango wetu Inayofuata inakuja opereta 2, ambayo ni mwendeshaji wa utaftaji na haibadilishi hali ya sasa ya hifadhidata, na waendeshaji wafuatao 3 na 4 huhamisha hifadhidata kwa. jimbo jipya. Taarifa ya 5 huhifadhi hali hii mpya ya kati ya hifadhidata na kuiweka alama kama hali ya kati katika hatua A. Taarifa ya 6 na 7 kufuata, ambayo huhamisha hifadhidata hadi hali mpya. Na operator 8 huhifadhi hali hii kama hali ya kati kwa uhakika B. Opereta 9 huingiza data mpya, na operator 10 anaangalia hali ya 1; ikiwa hali ya 1 imefikiwa, basi opereta 11 anatekelezwa, ambayo inarudisha shughuli hiyo kwa hali ya kati B. Hii inamaanisha kuwa matokeo ya vitendo vya opereta 9, kama ilivyokuwa, yanafutwa na hifadhidata inarudi kwa hali ya kati B. , ingawa baada ya kutekeleza operator 9 ilikuwa tayari katika hali mpya. Na baada ya shughuli hiyo kurudishwa nyuma, badala ya operator 9, ambayo hapo awali ilitekelezwa kutoka katika hali ya DB, operator 13 kwa kuingiza data mpya inatekelezwa, na kisha udhibiti huhamishiwa kwa operator 14. Opereta 14 tena huangalia hali hiyo, lakini hii wakati wa hali mpya 2; ikiwa hali hiyo imefikiwa, basi udhibiti huhamishiwa kwa opereta 15, ambayo inarudisha shughuli hiyo kwa hali ya kati A, ambayo ni, waendeshaji wote waliobadilisha hifadhidata, kuanzia 6 hadi 13, wanachukuliwa kuwa hawajatekelezwa, ambayo ni, matokeo ya utekelezaji wao umetoweka na tuko tena katika serikali Na, kama baada ya utekelezaji wa operator 4. Kisha, udhibiti huhamishiwa kwa operator 17, ambayo inasasisha yaliyomo kwenye hifadhidata, baada ya hapo udhibiti huhamishiwa kwa operator 18, ambayo inahusishwa. na hali ya kuangalia 3. Hundi inaisha ama kwa kuhamisha udhibiti kwa operator 20, ambayo hufanya shughuli, na hifadhidata inahamia kwenye hali mpya thabiti na haiwezi kubadilishwa ndani ya shughuli ya sasa. Au, ikiwa udhibiti umehamishiwa kwa opereta 19, basi shughuli hiyo inarudishwa nyuma hadi mwanzo na hifadhidata inarudi katika hali yake ya awali, na majimbo yote ya kati hapa tayari yameangaliwa, na haiwezekani kufanya operesheni ya kurudisha nyuma kwa hizi za kati. majimbo baada ya kutekeleza operesheni 19.

Bila shaka, modeli ya muamala iliyopanuliwa ya SYBASE inasaidia utaratibu wa muamala unaonyumbulika zaidi. Savepoints hukuruhusu kuweka alama ndani ya muamala ili sehemu tu ya kazi iliyofanywa katika muamala iweze kutenduliwa. Ni muhimu kutumia vihifadhi katika miamala mirefu na changamano ili kutoa uwezo wa kutendua mabadiliko ya taarifa fulani. Hata hivyo, hii inasababisha matumizi ya ziada ya rasilimali za mfumo - operator hufanya kazi, na mabadiliko yanafutwa; kwa kawaida maboresho katika mantiki ya usindikaji yanaweza kuwa suluhisho bora.

Kumbukumbu ya shughuli

Utekelezaji katika DBMS wa kanuni ya kuokoa majimbo ya kati, kudhibitisha au kurudisha nyuma shughuli inahakikishwa na utaratibu maalum, kusaidia ambao muundo fulani wa mfumo huundwa, unaoitwa. Kumbukumbu ya shughuli.

Hata hivyo, madhumuni ya logi ya shughuli ni pana zaidi. Imeundwa ili kuhakikisha uhifadhi wa kuaminika wa data katika hifadhidata.

Na mahitaji haya yanamaanisha, hasa, uwezekano wa kurejesha hali thabiti ya database baada ya aina yoyote ya kushindwa kwa vifaa na programu. Ni wazi, maelezo mengine ya ziada yanahitajika kufanya, uundaji upya. Katika idadi kubwa ya DBMS za kisasa za uhusiano, habari kama hiyo isiyohitajika hutunzwa katika mfumo wa logi ya mabadiliko ya hifadhidata, ambayo mara nyingi huitwa. Kumbukumbu ya shughuli.

Kwa hivyo, madhumuni ya jumla ya mabadiliko ya hifadhidata ya kumbukumbu ni kuhakikisha kuwa hifadhidata inaweza kurejeshwa kwa hali thabiti baada ya kutofaulu yoyote. Kwa kuwa msingi wa kudumisha uadilifu wa hifadhidata ni utaratibu wa shughuli, ukataji miti na urejeshaji unahusiana kwa karibu na dhana ya shughuli. Kanuni za jumla za kupona ni kama ifuatavyo.

· matokeo ya miamala iliyofanywa lazima yahifadhiwe katika hali iliyorejeshwa ya hifadhidata;

· Matokeo ya miamala ambayo haijatekelezwa yasiwepo katika hali iliyorejeshwa ya hifadhidata.

Hii, kwa kweli, ina maana kwamba hali ya hivi karibuni thabiti ya hifadhidata imerejeshwa.

Hali zifuatazo zinawezekana ambazo ni muhimu kurejesha hali ya hifadhidata.

· Urejeshaji wa shughuli za kibinafsi. Urejeshaji huu unapaswa kutumika katika kesi zifuatazo:

o hali ya kawaida ya kurejesha muamala ni kukamilika kwake kwa uwazi kwa taarifa ya ROLLBACK;

o Kusitishwa kusiko kwa kawaida kwa programu ya maombi, ambayo kimantiki ni sawa na kutekeleza taarifa ya ROLLBACK, lakini kimwili ina utaratibu tofauti wa utekelezaji;

o kulazimishwa kurejesha shughuli katika kesi ya mkwamo wakati wa utekelezaji sambamba wa miamala. Katika hali kama hii, ili kuvunja msuguano, shughuli hii inaweza kuchaguliwa kama "mwathirika" na utekelezaji wake unaweza kusitishwa kwa nguvu na kernel ya DBMS.

· Kupona kutoka kwa upotezaji wa ghafla wa yaliyomo kwenye RAM (kuanguka laini). Hali hii inaweza kutokea katika kesi zifuatazo:

o katika kesi ya kuzima kwa dharura kwa nguvu za umeme;

o wakati kushindwa kwa processor mbaya kunatokea (kwa mfano, udhibiti wa RAM umeanzishwa), nk. Hali hiyo ina sifa ya kupoteza sehemu hiyo ya hifadhidata iliyokuwa kwenye vibafa vya RAM wakati wa kushindwa.

· Ufufuzi baada ya kushindwa kwa vyombo vya habari kuu vya hifadhi ya nje ya hifadhi (kushindwa kwa bidii). Hali hii, kwa kuzingatia uaminifu mkubwa wa vifaa vya kisasa vya kumbukumbu ya nje, inaweza kutokea mara chache, lakini hata hivyo, DBMS inapaswa kuwa na uwezo wa kurejesha hifadhidata hata katika kesi hii. Msingi wa kurejesha ni nakala ya chelezo na logi ya mabadiliko ya hifadhidata.

Ili kurejesha hali ya hifadhidata thabiti wakati shughuli ya kibinafsi inarejeshwa, lazima utendue taarifa za urekebishaji wa hifadhidata ambazo zilitekelezwa katika muamala huo. Ili kurejesha hali ya database thabiti katika tukio la kushindwa kwa laini, ni muhimu kurejesha yaliyomo kwenye hifadhidata kwa kutumia yaliyomo kwenye kumbukumbu za manunuzi zilizohifadhiwa kwenye diski. Ili kurejesha hali ya database thabiti katika tukio la kushindwa kwa bidii, ni muhimu kurejesha yaliyomo kwenye hifadhidata kwa kutumia nakala zilizohifadhiwa na kumbukumbu za shughuli ambazo zimehifadhiwa kwenye vyombo vya habari vya nje visivyoharibika.

Katika visa vyote vitatu, msingi wa uokoaji ni uhifadhi mwingi wa data. Data hii isiyohitajika huhifadhiwa kwenye logi iliyo na mlolongo wa rekodi za mabadiliko ya hifadhidata.

Kuna chaguzi mbili kuu za habari ya kuingia. Katika chaguo la kwanza, kila shughuli hudumisha logi tofauti ya ndani ya mabadiliko ya hifadhidata kwa muamala huo. Magogo haya yanaitwa magogo ya ndani. Zinatumika kwa urejeshaji nyuma wa shughuli za kibinafsi na zinaweza kudumishwa katika kumbukumbu ya RAM (kwa usahihi zaidi, kwenye mtandao). Kwa kuongeza, logi ya mabadiliko ya database iliyoshirikiwa inadumishwa, ambayo hutumiwa kurejesha hali ya database baada ya kushindwa kwa laini na ngumu.

Mbinu hii hukuruhusu kufanya urejeshaji nyuma wa shughuli za kibinafsi kwa haraka, lakini husababisha kurudiwa kwa maelezo katika kumbukumbu za ndani na zilizoshirikiwa. Kwa hivyo, chaguo la pili hutumiwa mara nyingi zaidi - kudumisha logi ya jumla ya mabadiliko ya hifadhidata, ambayo pia hutumiwa wakati wa kufanya urejeshaji wa kibinafsi. Ifuatayo, tutazingatia chaguo hili.

Muundo wa jumla wa logi unaweza kuwasilishwa kwa masharti kwa namna ya faili ya mfululizo, ambayo inarekodi kila mabadiliko katika hifadhidata ambayo hutokea wakati wa utekelezaji wa shughuli. Shughuli zote zina nambari zao za ndani, kwa hivyo logi moja ya muamala hurekodi mabadiliko yote yaliyofanywa na shughuli zote.

Kila ingizo la kumbukumbu ya muamala lina lebo ya nambari ya muamala ambayo inahusiana nayo na maadili ya sifa ambayo inabadilika. Kwa kuongeza, kwa kila shughuli, amri ya kuanza na kumaliza shughuli imeandikwa kwenye logi (ona Mchoro 11.3).

Kwa kuaminika zaidi, logi ya shughuli mara nyingi inarudiwa na zana za mfumo wa DBMS za kibiashara, ndiyo sababu kiasi cha kumbukumbu ya nje ni mara nyingi zaidi kuliko kiasi halisi cha data iliyohifadhiwa kwenye hifadhi.

Kuna chaguo mbili mbadala za kuweka kumbukumbu za muamala: itifaki ya sasisho iliyochelewa na itifaki ya sasisho la mara moja.

Ukataji miti kwa uvivu huchukua utaratibu ufuatao wa utekelezaji wa muamala:

1. Wakati shughuli T1 inapoanza, kiingilio kinafanywa katika itifaki

<Т1 Begin transaction>

2. Wakati wa utekelezaji wa shughuli, thamani mpya imeandikwa katika itifaki kwa kila rekodi iliyobadilishwa: . Hapa ID_RECORD ndio nambari ya kipekee ya rekodi.

3. Ikiwa vitendo vyote vinavyounda shughuli T1 vimekamilika kwa mafanikio, basi shughuli hiyo inarekodiwa kwa sehemu na kuingizwa kwenye itifaki.<Т1 СОММIТ>.

4. Mara tu shughuli inapofanywa, rekodi za kumbukumbu zinazohusiana na T1 hutumiwa kufanya mabadiliko yanayofaa kwenye hifadhidata.

5. Ikiwa kushindwa hutokea, DBMS inaangalia logi na inatafuta ni shughuli gani zinazohitajika kufanywa upya. Muamala T1 lazima ufanyike upya ikiwa itifaki ina maingizo yote mawili<Т1 BEGIN TRANSACTION и <Т1 СОММIТ>. Hifadhidata inaweza kuwa katika hali isiyolingana, lakini thamani zozote mpya za vipengee vya data vilivyobadilishwa zimo kwenye kumbukumbu, na hivyo kuhitaji muamala kutekelezwa tena. Ili kufanya hivyo, utaratibu fulani wa mfumo REDOQ hutumiwa, ambayo inachukua nafasi ya maadili yote ya vipengele vya data na mpya, skanning itifaki kwa utaratibu wa moja kwa moja.

6. Ikiwa itifaki haina amri ya ahadi ya muamala ya COMMIT, basi hakuna hatua inayohitajika, na shughuli itaanza tena.

Mchele. 11.3.Kumbukumbu ya shughuli

Utaratibu mbadala na utekelezaji wa haraka unajumuisha kufanya mabadiliko mara moja kwenye hifadhidata, na sio mpya tu, bali pia maadili yote ya zamani ya sifa zinazobadilishwa huingizwa kwenye itifaki, kwa hivyo kila rekodi inaonekana kama.<Т1, ID_RECORD, атрибут новое значение старое значение...>. Katika kesi hii, kuandika kwa logi hutangulia utekelezaji wa haraka wa operesheni kwenye hifadhidata. Wakati shughuli imefanywa, yaani, amri inakabiliwa<Т1 СОММIТ>na inatekelezwa, basi mabadiliko yote tayari yamefanywa kwenye hifadhidata na hakuna hatua zaidi zinazohitajika kuhusiana na shughuli hii.

Wakati muamala unarudishwa nyuma, utaratibu wa mfumo wa UNDO() unatekelezwa, ambao hurejesha maadili yote ya zamani katika shughuli iliyoghairiwa, kupitia itifaki inayoanza na amri ya BEGIN TRANSACTION.

Ili kupona kutokana na kushindwa, utaratibu ufuatao hutumiwa:

· Ikiwa shughuli ina amri ya kuanza shughuli, lakini haina amri ya ahadi na uthibitisho wa utekelezaji wake, basi mlolongo wa vitendo unafanywa kama wakati wa kurejesha shughuli, yaani, maadili ya zamani yanarejeshwa.

· Ikiwa kushindwa kulitokea baada ya amri ya mwisho ya urekebishaji wa hifadhidata kutekelezwa, lakini kabla ya amri ya ahadi kutekelezwa, amri ya ahadi inatekelezwa, lakini hakuna mabadiliko yanayotokea kwenye hifadhidata. Kazi hufanyika tu kwa kiwango cha itifaki.

· Hata hivyo, ni lazima ieleweke kwamba matatizo ya uokoaji yanaonekana kuwa ngumu zaidi kuliko algorithms iliyoelezwa hapo awali, kwa kuzingatia ukweli kwamba mabadiliko katika logi na katika hifadhidata hayaingizwi mara moja, lakini yanapigwa. Sehemu inayofuata imejitolea kwa hili.

Uandishi wa Habari na Kuhifadhi

Uwekaji kumbukumbu wa mabadiliko unahusiana kwa karibu sio tu na usimamizi wa shughuli, lakini pia na kuhifadhi kurasa za hifadhidata katika RAM.

Ikiwa rekodi ya mabadiliko ya hifadhidata ambayo inapaswa kurekodiwa wakati operesheni yoyote ya urekebishaji hifadhidata inafanywa iliandikwa kwa kumbukumbu ya nje mara moja, hii ingesababisha kushuka kwa kasi kwa mfumo. Kwa hiyo, maingizo kwenye logi pia yanapigwa: wakati wa operesheni ya kawaida, ukurasa unaofuata unasukumwa kwenye kumbukumbu ya nje ya logi tu wakati imejaa kabisa maingizo.

Shida ni kuunda sera ya jumla ya kushinikiza ambayo ingehakikisha kuwa hali ya hifadhidata inaweza kurejeshwa baada ya kushindwa.

Tatizo halitokei kwa urejeshaji nyuma wa muamala wa mtu binafsi, kwa sababu katika hali hizi maudhui ya RAM hayapotei na yaliyomo katika bafa ya kumbukumbu na vibafa vya ukurasa wa hifadhidata vinaweza kutumika. Lakini ikiwa kuna hitilafu laini na yaliyomo kwenye bafa yamepotea, hali fulani thabiti ya logi na hifadhidata katika kumbukumbu ya nje lazima ipatikane ili kufanya urejeshaji wa hifadhidata.

Kanuni ya msingi nyuma ya sera thabiti ya kusukuma ya bafa ya kumbukumbu na vibafa vya ukurasa wa hifadhidata ni kwamba mabadiliko ya kitu cha hifadhidata lazima yarekodiwe katika kumbukumbu ya kumbukumbu ya nje kabla ya kitu kilichorekebishwa kuwa katika kumbukumbu ya hifadhidata ya nje. Itifaki inayolingana ya ukataji miti (na kudhibiti buffering) inaitwa Andika Ahead Log (WAL) na inajumuisha ukweli kwamba ikiwa unataka kuandika kitu cha hifadhidata kilichobadilishwa kwa kumbukumbu ya nje, lazima kwanza uhakikishe kuwa logi ya shughuli imeandikwa kwa kumbukumbu za kumbukumbu za nje. ya mabadiliko yake.

Kwa maneno mengine, ikiwa katika kumbukumbu ya nje ya hifadhidata kuna kitu fulani cha database kuhusiana na ambayo operesheni ya marekebisho imefanywa, basi katika kumbukumbu ya nje ya logi kuna lazima rekodi inayohusiana na operesheni hii. Kinyume chake si kweli, yaani, ikiwa logi ya kumbukumbu ya nje ina rekodi ya utendakazi fulani wa urekebishaji wa kitu cha hifadhidata, basi kitu kilichorekebishwa yenyewe kinaweza kisiwe kwenye kumbukumbu ya hifadhidata ya nje.

Sharti la ziada la kusukuma vihifadhi nje ni hitaji kwamba kila shughuli iliyokamilishwa kwa ufanisi lazima iwekwe kwenye kumbukumbu ya nje. Chochote kushindwa hutokea, mfumo lazima uweze kurejesha hali ya hifadhidata iliyo na matokeo ya shughuli zote zilizofanywa wakati wa kushindwa.

Suluhisho rahisi litakuwa kufuta bafa ya kumbukumbu, ikifuatwa na msukumo mwingi wa bafa za ukurasa wa hifadhidata iliyorekebishwa na muamala. Mara nyingi hii inafanywa, lakini husababisha uboreshaji mkubwa wakati wa kufanya operesheni ya ahadi ya muamala.

Inabadilika kuwa mahitaji ya chini ya kuhakikisha kuwa hali ya mwisho thabiti ya hifadhidata inaweza kurejeshwa ni kwamba wakati shughuli inafanywa, rekodi zote za mabadiliko kwenye hifadhidata na shughuli hiyo zinasukumwa kwenye kumbukumbu ya logi ya nje. Katika kesi hii, ingizo la mwisho la jarida lililofanywa kwa niaba ya muamala huu ni ingizo maalum kuhusu mwisho wa muamala.

Hebu sasa tuangalie jinsi shughuli za kurejesha hifadhidata zinaweza kufanywa katika hali mbalimbali ikiwa mfumo unadumisha kumbukumbu ya kawaida ya shughuli zote zilizo na uakibishaji wa rekodi za pamoja, zinazoungwa mkono na itifaki ya WAL.

Urejeshaji wa shughuli za kibinafsi

Ili kuweza kufanya urejeshaji wa shughuli za kibinafsi kwa kutumia kumbukumbu ya jumla, maingizo yote ya kumbukumbu ya shughuli fulani yameunganishwa kwenye orodha ya kinyume. Mwanzo wa orodha ya miamala inayosubiri ni rekodi ya mabadiliko ya mwisho ya hifadhidata yaliyofanywa na muamala huu. Kwa shughuli zilizokamilishwa (rejesho za kibinafsi ambazo haziwezekani tena), mwanzo wa orodha ni rekodi kuhusu mwisho wa manunuzi, ambayo ni lazima kusukuma kwenye kumbukumbu ya kumbukumbu ya nje Mwisho wa orodha daima ni rekodi ya kwanza mabadiliko ya hifadhidata yaliyofanywa na muamala huu. Kwa kawaida, kila rekodi hupewa kitambulisho cha kipekee cha muamala ili orodha ya moja kwa moja ya rekodi za mabadiliko ya hifadhidata kwa shughuli fulani iweze kujengwa upya.

Kwa hivyo, urejeshaji wa muamala wa mtu binafsi (tunasisitiza tena kwamba hii inawezekana tu kwa shughuli ambazo hazijakamilika) hufanywa kama ifuatavyo:

· Rekodi inayofuata imechaguliwa kutoka kwenye orodha ya shughuli hii.

· Operesheni ya kinyume inafanywa: badala ya operesheni ya INSERT, operesheni inayofanana ya DELETE inafanywa, badala ya operesheni ya DELETE, INSERT inafanywa, na badala ya operesheni ya UPDATE ya moja kwa moja, operesheni ya UPDATE ya reverse inafanywa, kurejesha hali ya awali ya kitu cha hifadhidata.

· Yoyote ya shughuli hizi za kurudi nyuma pia zimeingia. Kwa kweli, hii sio lazima kwa urejeshaji wa mtu binafsi, lakini wakati wa kufanya urejeshaji wa mtu binafsi wa shughuli, kutofaulu kwa laini kunaweza kutokea, wakati wa urejeshaji ambayo itakuwa muhimu kurudisha nyuma shughuli ambayo urejeshaji wa mtu binafsi haujakamilika kabisa. .

· Wakati urejeshaji ukamilika kwa mafanikio, ingizo la mwisho wa muamala litaandikwa kwenye kumbukumbu. Kwa mtazamo wa logi, shughuli kama hiyo inafanywa.

Kuokoa kutoka kwa kushindwa laini

Changamoto kubwa ya kupata nafuu kutokana na hitilafu laini ni kwamba operesheni moja ya kimantiki ya kusasisha hifadhidata inaweza kubadilisha vizuizi vingi vya hifadhidata halisi, kama vile ukurasa wa data na kurasa nyingi za faharasa. Kurasa za hifadhidata zimehifadhiwa kwenye RAM na hutolewa kivyake. Licha ya matumizi ya itifaki ya WAL, baada ya kushindwa kwa laini, seti ya kurasa za kumbukumbu za nje za database zinaweza kutofautiana, yaani, baadhi ya kurasa za kumbukumbu za nje zinahusiana na kitu kabla ya mabadiliko, na baadhi - baada ya mabadiliko. Uendeshaji wa kiwango cha kimantiki hautumiki kwa hali ya kitu kama hicho.

Hali ya kumbukumbu ya hifadhidata ya nje inasemekana kuwa sawa kimwili ikiwa seti za kurasa za vitu vyote ni sawa, yaani, zinalingana na hali ya kitu ama kabla ya kubadilishwa au baada ya kubadilishwa.

Tutafikiria kuwa logi inaashiria alama za msimamo wa mwili wa hifadhidata - pointi kwa wakati ambapo kumbukumbu ya nje ina matokeo thabiti ya shughuli zilizokamilika kabla ya hatua inayolingana kwa wakati, na hakuna matokeo ya shughuli ambazo hazijakamilika, na. bafa ya kumbukumbu inasukumwa kwenye kumbukumbu ya nje. Tutaangalia jinsi mshikamano wa kimwili unaweza kupatikana baadaye kidogo. Hebu tuite pointi hizo tpc (wakati wa msimamo wa kimwili) - pointi za uratibu wa kimwili.

Halafu, wakati wa kutofaulu laini, hali zifuatazo za shughuli zinawezekana:

· muamala umekamilika kwa ufanisi, yaani, operesheni ya uthibitishaji wa muamala wa COMMIT imekamilika na uthibitisho wa utekelezaji wake katika kumbukumbu ya nje umepokelewa kwa shughuli zote za muamala;

· shughuli ilikamilishwa kwa ufanisi, lakini kwa baadhi ya shughuli uthibitisho wa utekelezaji wao katika kumbukumbu ya nje haukupokelewa;

· shughuli iliyopokelewa na kutekeleza amri ya ROLLBACK;

· muamala haujakamilika.

Uthabiti wa Hifadhidata ya Kimwili

Mtu anawezaje kuhakikisha uwepo wa pointi za uwiano wa kimwili wa database, yaani, jinsi ya kurejesha hali ya database wakati wa tpc? Kuna mbinu mbili kuu zinazotumiwa kwa hili: mbinu ya utaratibu wa kivuli na mbinu ya kubadilisha hifadhidata ya kila ukurasa.

Wakati wa kufungua faili, meza inayopanga nambari za vitalu vyake vya kimantiki kwa anwani za vizuizi vya kimwili vya kumbukumbu ya nje inasomwa kwenye RAM. Wakati kizuizi chochote cha faili kinarekebishwa, kizuizi kipya kinatolewa kwenye kumbukumbu ya nje. Katika kesi hii, meza ya sasa ya ramani (katika RAM) inabadilishwa, na meza ya kivuli bado haibadilika. Ikiwa kushindwa hutokea wakati wa kufanya kazi kwenye faili wazi, kumbukumbu ya nje huhifadhi moja kwa moja hali ya faili kabla ya kufunguliwa. Ili kurejesha faili kwa uwazi, inatosha kusoma meza ya ramani ya kivuli kwenye RAM tena.

Wazo la jumla la utaratibu wa kivuli linaonyeshwa kwenye Mtini. 11.4.

Mchele. 11.4.Kutumia meza za vivuli ili kuonyesha habari

Katika muktadha wa hifadhidata, utaratibu wa kivuli hutumiwa kama ifuatavyo. Operesheni hufanywa mara kwa mara ili kuanzisha alama za uthabiti wa hifadhidata (vituo vya ukaguzi). Ili kufanya hivyo, shughuli zote za kimantiki zimekamilika, buffers zote za RAM ambazo maudhui yake hailingani na yaliyomo kwenye kurasa za kumbukumbu za nje zinazofanana zinatolewa. Jedwali la kivuli la faili za hifadhidata za ramani hubadilishwa na la sasa (kwa usahihi zaidi, jedwali la sasa la ramani limeandikwa badala ya kivuli).

Kurejesha kwa tpc ni mara moja: meza ya sasa ya ramani inabadilishwa na kivuli (wakati wa kurejesha, meza ya ramani ya kivuli inasomwa tu). Matatizo yote ya kurejesha yanatatuliwa, lakini kwa gharama ya kumbukumbu nyingi za nje. Katika kikomo, unaweza kuhitaji mara mbili ya kumbukumbu ya nje kama inavyohitajika kuhifadhi hifadhidata. Utaratibu wa kivuli ni chombo cha kuaminika, lakini kichafu sana. Hali thabiti ya kumbukumbu ya nje inahakikishwa kwa wakati mmoja wa kawaida kwa vitu vyote. Kwa kweli, inatosha kuwa na mkusanyiko wa seti thabiti za kurasa, ambayo kila moja inaweza kuwa na kumbukumbu zake za wakati.

Ili kukidhi mahitaji haya hafifu, mabadiliko ya ukurasa baada ya ukurasa yanawekwa pamoja na uwekaji kumbukumbu wa shughuli za mabadiliko ya hifadhidata. Hatua ya kwanza ya urejeshaji kutoka kwa kutofaulu laini inajumuisha urejeshaji wa ukurasa kwa ukurasa wa shughuli za kimantiki zinazosubiri. Kama ilivyo kwa rekodi za kimantiki za miamala, rekodi ya mwisho ya mabadiliko ya ukurasa kutoka kwa operesheni moja ya kimantiki ni mwisho wa rekodi ya utendakazi.

Katika mbinu hii, kuna njia mbili za kutatua tatizo. Wakati wa kutumia njia ya kwanza, logi ya kawaida ya shughuli za mantiki na ukurasa huhifadhiwa. Kwa kawaida, uwepo wa aina mbili za rekodi, zinazotafsiriwa tofauti kabisa, huchanganya muundo wa jarida. Kwa kuongeza, rekodi za mabadiliko ya ukurasa, umuhimu ambao ni wa asili, kwa kiasi kikubwa (na sio maana sana) huongeza logi.

Kwa hiyo, kudumisha logi tofauti (fupi) ya mabadiliko ya ukurasa inazidi kuwa maarufu. Mbinu hii hutumiwa, kwa mfano, katika bidhaa inayojulikana ya Informix Online.

Hebu tufikiri kwamba kwa namna fulani iliwezekana kurejesha kumbukumbu ya nje ya hifadhidata kwa hali wakati tpc (jinsi hii inaweza kufanywa ni baadaye kidogo). Kisha:

· Kwa muamala T1 hakuna hatua inayohitajika. Iliisha kabla ya tpc, na matokeo yake yote yanaonyeshwa kwenye kumbukumbu ya nje ya hifadhidata.

· Kwa muamala T2, unahitaji kufanya upya shughuli zilizosalia (fanya upya). Hakika, katika kumbukumbu ya nje hakuna kabisa athari za shughuli ambazo zilifanywa katika shughuli T2 baada ya muda tpc. Kwa hivyo, kutafsiri tena kwa moja kwa moja shughuli za T2 tena ni sahihi na itasababisha hali ya hifadhidata thabiti (tangu shughuli ya T2 ilikamilishwa kwa mafanikio kabla ya kushindwa kwa laini, logi ina rekodi ya mabadiliko yote yaliyofanywa na shughuli hiyo).

· Kwa muamala wa TK, unahitaji kufanya sehemu ya kwanza ya shughuli (tengua) katika mwelekeo tofauti. Hakika, kumbukumbu ya nje ya hifadhidata haina kabisa matokeo ya shughuli za TK ambazo zilifanywa baada ya muda wa tpc. Kwa upande mwingine, kumbukumbu ya nje imehakikishiwa kuwa na matokeo ya kazi za kiufundi ambazo zilifanywa kabla ya wakati wa tpc. Kwa hiyo, tafsiri ya reverse ya shughuli za TK ni sahihi na itasababisha hali thabiti ya database (kwani shughuli ya TK haikukamilika wakati wa kushindwa kwa laini, matokeo yote ya utekelezaji wake lazima yahifadhiwe wakati wa kurejesha).

· Kwa shughuli T4, ambayo imeweza kuanza baada ya muda wa tpc na kumalizika kabla ya wakati wa kushindwa kwa laini, unahitaji kufanya tafsiri kamili ya shughuli (redo).

· Hatimaye, kwa shughuli T5 iliyoanza baada ya muda wa tpc na hakuwa na muda wa kukamilisha wakati wa kushindwa kwa laini, hakuna hatua inayohitajika. Matokeo ya shughuli za muamala huu hayapo kabisa kwenye kumbukumbu ya hifadhidata ya nje.

Kupona kutokana na Ajali Ngumu

Ni wazi kwamba logi ya mabadiliko ya hifadhidata haitoshi kurejesha hali ya mwisho thabiti ya hifadhidata baada ya kushindwa kwa bidii. Msingi wa kurejesha katika kesi hii ni logi na nakala ya kumbukumbu ya hifadhidata.

Urejeshaji huanza na nakala ya nyuma ya hifadhidata kutoka kwa nakala rudufu. Kisha, kwa shughuli zote zilizokamilishwa, redo inafanywa, yaani, shughuli zinafanywa tena kwa utaratibu wa moja kwa moja.

Kwa usahihi zaidi, yafuatayo hufanyika:

· shughuli zote zinafanywa kulingana na logi katika mwelekeo wa mbele;

· Kwa shughuli ambazo hazijakamilishwa wakati wa kushindwa, urejeshaji unafanywa.

Kwa kweli, kwa kuwa ajali ngumu haisababishi upotezaji wa buffers za kumbukumbu, inawezekana kurejesha hifadhidata hadi kiwango ambacho hata shughuli zinazosubiri zinaweza kuendelea. Lakini kwa kawaida hii haifanyiki, kwa sababu kupona kutoka kwa kushindwa kwa bidii ni mchakato mrefu zaidi.

Ingawa kuna mahitaji maalum ya kudumisha logi kwa suala la kuegemea, kimsingi, inawezekana kuipoteza. Kisha njia pekee ya kurejesha hifadhidata ni kurudi kwenye nakala ya chelezo. Bila shaka, katika kesi hii hutaweza kupata hali ya mwisho thabiti ya hifadhidata, lakini ni bora kuliko chochote.

Toleo la mwisho ambalo tutaangalia kwa ufupi linahusu utengenezaji wa chelezo za hifadhidata. Njia rahisi ni kuhifadhi hifadhidata wakati logi imejaa. Kinachojulikana kama "eneo la njano" kinaletwa kwenye jarida, baada ya kufikia ambayo uundaji wa shughuli mpya umezuiwa kwa muda. Wakati shughuli zote zimekamilika na, kwa hiyo, hifadhidata iko katika hali thabiti, unaweza kuiweka kwenye kumbukumbu, na kisha kuanza kujaza logi tena.

Unaweza kuhifadhi hifadhidata yako mara chache kuliko logi hujaa. Wakati logi imejaa na shughuli zote zilizoanza zimekamilika, unaweza kuweka kumbukumbu yenyewe. Kwa kuwa kumbukumbu kama hiyo ya kumbukumbu inahitajika tu kuunda tena nakala iliyohifadhiwa ya hifadhidata, maelezo ya kumbukumbu yanaweza kubanwa sana wakati wa kuhifadhi.

Miundo ya muamala imeainishwa kulingana na sifa mbalimbali:

muundo wa shughuli;

makubaliano ndani ya shughuli;

muda.

Aina za shughuli:

1. Gorofa (ya kawaida)

2. Mnyororo

3. Nested

Shughuli za gorofa zina sifa ya mali 4 za kawaida:

atomiki;

uthabiti;

kujitenga;

kudumu (nguvu).

Wakati mwingine shughuli hizi huitwa shughuli za ACID.

ACID - Atomicity, Consistency, Kutengwa, Durability.

Sifa zilizotajwa hapo juu zinamaanisha yafuatayo:

Atomicity inaonyeshwa kwa ukweli kwamba shughuli lazima itekelezwe kwa ujumla au isitekelezwe kabisa.

Uthabiti - huhakikisha kwamba miamala inapotekelezwa, data husogezwa kutoka hali moja hadi nyingine, yaani, shughuli hiyo haiharibu uthabiti wa data.

Kutengwa kunamaanisha kuwa miamala inayoshindana kwa ufikiaji wa hifadhidata inachakatwa kimwili kwa mpangilio, kutengwa kutoka kwa kila mmoja, lakini kwa watumiaji inaonekana kana kwamba inatekelezwa kwa sambamba.

Kudumu - ikiwa shughuli imekamilika kwa mafanikio, basi mabadiliko ya data ambayo yalifanywa nayo hayawezi kupotea kwa hali yoyote.

Chaguzi za kukamilisha muamala:

1. Ikiwa taarifa zote zinatekelezwa kwa ufanisi na hakuna kushindwa kwa programu au vifaa vilivyotokea wakati wa shughuli, basi shughuli hiyo inafanywa.

Kufanya shughuli ni hatua inayohakikisha kwamba mabadiliko katika hifadhidata ambayo yalifanywa wakati wa utekelezaji wa shughuli yameandikwa kwenye diski. Kufanya muamala kunamaanisha kuwa matokeo yote ya utekelezaji wake yatakuwa ya kudumu, na yataonekana kwa miamala mingine baada tu ya shughuli ya sasa kufanywa.



2. Ikiwa kitu kitatokea wakati wa utekelezaji wa shughuli ambayo inafanya kuwa haiwezekani kuikamilisha kawaida, hifadhidata lazima irudishwe katika hali yake ya asili.

Kurejesha nyuma muamala ni kitendo cha kutendua mabadiliko yote ya data ambayo yalifanywa na taarifa za SQL katika sehemu kuu ya shughuli inayosubiri kutekelezwa. Kila taarifa katika shughuli hufanya sehemu yake ya kazi, lakini kwa kukamilika kwa mafanikio ya kazi nzima kwa ujumla, kukamilika bila masharti ya taarifa zao zote inahitajika.

Katika kiwango cha ANSI/ISO SQL, muamala huisha kwa mojawapo ya njia 4 zinazowezekana (Mchoro 1):

Mchele. 1. Muundo wa muamala wa ANSI/ISO

1. Taarifa ya COMMIT inamaanisha kukamilika kwa shughuli kwa mafanikio; matumizi yake hufanya mabadiliko ya kudumu yaliyofanywa kwenye hifadhidata kama sehemu ya shughuli ya sasa;

2. Opereta wa ROLLBACK anakatiza muamala, na kughairi mabadiliko yaliyofanywa kwenye hifadhidata kama sehemu ya muamala huu; shughuli mpya huanza mara baada ya ROLLBACK kutumika;

3. kukamilika kwa mafanikio kwa programu ambayo shughuli ya sasa ilianzishwa inamaanisha kukamilika kwa ufanisi wa shughuli (kana kwamba taarifa ya COMMIT imetumika);

4. Kusitishwa kimakosa kwa programu kunafuta muamala (kana kwamba taarifa ya ROLLBACK imetumika).

Logi ya muamala imeundwa ili kutoa hifadhi ya kuaminika ya data katika hifadhidata. Na mahitaji haya yanamaanisha, hasa, uwezekano wa kurejesha hali thabiti ya database baada ya aina yoyote ya kushindwa kwa vifaa na programu. Kwa wazi, baadhi ya maelezo ya ziada yanahitajika kufanya marejesho, ambayo yanadumishwa kwa njia ya logi ya mabadiliko ya database, inayoitwa logi ya shughuli.

Kupona kutokana na Ajali Ngumu

Msingi wa kurejesha hali ya mwisho thabiti ya hifadhidata baada ya kushindwa kwa bidii ni kumbukumbu na nakala ya hifadhidata.

Urejeshaji huanza na nakala ya nyuma ya hifadhidata kutoka kwa nakala rudufu. Kisha, kwa shughuli zote zilizokamilishwa, redo inafanywa, yaani, shughuli zinafanywa tena kwa utaratibu wa moja kwa moja.

Utekelezaji sambamba wa shughuli

Ikiwa watumiaji kadhaa wanafanya kazi na hifadhidata kwa wakati mmoja, basi DBMS haipaswi tu kufanya shughuli za kibinafsi kwa usahihi na kurejesha hali thabiti ya hifadhidata baada ya kushindwa, lakini imeundwa ili kuhakikisha kazi sahihi ya sambamba ya watumiaji wote kwenye data sawa. Kulingana na nadharia, kila mtumiaji na kila shughuli inapaswa kuwa na mali ya kutengwa, ambayo ni kwamba, inapaswa kutekelezwa kana kwamba ni mtumiaji mmoja tu anayefanya kazi na hifadhidata. Na zana za kisasa za DBMS hukuruhusu kuwatenga watumiaji kutoka kwa kila mmoja kwa njia hii. Hata hivyo, katika kesi hii kuna matatizo na kupunguza kasi ya uzoefu wa mtumiaji.