Tallennuspiste (SQL)

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 28. tammikuuta 2022 tarkistetusta versiosta . tarkastukset vaativat 3 muokkausta .

Savepoint ( alennuspisteestä - englanniksi save point ) on SQL -lause , joka jakaa tapahtuman loogisiin tallennuspisteisiin. Se on myös tapa toteuttaa alitapahtumia (kutsutaan sisäkkäisiksi tapahtumiksi) relaatiotietokannan hallintajärjestelmässä määrittämällä tapahtumassa kohta, joka voidaan "palauttaa" vaikuttamatta tapahtumassa ennen tallennuspisteen luomista tehtyyn työhön. Yhdessä tapahtumassa voi olla useita tallennuspisteitä. tallennuspiste hyödyllinen päästä päähän virheenpalautuksen toteuttamiseen tietokantasovelluksissa. Jos monitoimitapahtuman aikana tapahtuu virhe, sovellus voi toipua virheestä (palaamalla tallennuspisteeseen) ilman, että koko tapahtumaa tarvitsee keskeyttää. Tuetut alustat:

SQL-syntaksi

Tallennuspiste voidaan ilmoittaa seuraavasti (käyttäen SAVEPOINT -käskyä ).

SAVEPOINT -tallennuspisteen nimi

Tallennuspiste nimeltä "tallennuspisteen_nimi" on asetettu nykyiseen tapahtumaan. Jotkut toimittajat sallivat samannimisen tallennuspisteen käyttämisen tapahtumassa, mutta ANSI -standardi ei suosittele niin.

Kaikki tallennuspisteen ilmoittamisen jälkeen tehdyt muutokset voidaan kumota antamalla komento:

PALAUTA tallennuspisteeseen_nimi _ _

Voit poistaa yhden tai useamman tallennuspisteen komennolla:

RELEASE SAVEPOINT tallennuspisteen nimi

On tärkeää huomata, että myös kaikki määritetyn jälkeen luodut tallennuspisteet poistetaan.

Kuinka tallennuspisteet [

Tallennuspiste (jäljempänä TS) on tietorakenne, joka sijaitsee palvelimen dynaamisessa muistissa (tapahtumapoolissa) ja jolla on yksilöllinen numeerinen tunniste. Jokaisella ajoneuvolla on luettelo sen yhteydessä suoritetuista toimista (ns. undo log tai undo log). Tapahtuman sisällä TS:t muodostavat pinon, ja siksi niiden palautus on aina mahdollista vain peräkkäin. Kumouslokin fragmentit jaetaan vastaanottajien kesken, jotka tallentavat asteittain kaikkien tapahtuman yhteydessä tehtyjen muutosten historian.

Tallennuspistettä, joka on aktiivinen tietueen muuttamishetkellä, kutsutaan nykyiseksi tallennuspisteeksi. Tieto merkinnän muuttamisesta sijoitetaan nykyisen ajoneuvon peruutuslokiin. Jos palautus TS:ään käynnistetään, kumoamisloki rullataan auki vastakkaiseen suuntaan, jolloin tietue rekonstruoidaan muotoon, jossa se oli tämän TS:n asennushetkellä. Kun kaikki muokatut tietueet on rekonstruoitu, TS yleensä poistetaan tapahtuman kontekstista. Jos nykyisen TS:n yhteydessä ei ole poikkeuskäsittelijöitä, tämä prosessi voidaan toistaa peruuttamalla muutokset korkeampaan TS:ään. TS:lle takaisinrullauksen lisäksi on myös TS:n säännöllinen poisto (vapautus). Jos ajoneuvo poistetaan, sen peruutusloki yhdistetään edellisen peruutuslokiin ajoneuvon pinossa. Edellä olevan perusteella voidaan puhua TS:n sisäkkäisyydestä.

Käyttövinkkejä ja huomautuksia

Tallennuspisteet asetetaan tapahtumassa, jossa ne määritetään. Tallennuspisteiden nimien on oltava yksilöllisiä näissä rajoissa. Käytä BEGIN- ja COMMIT -käskyjä varoen, koska jos laitat vahingossa BEGIN -käskyn liian aikaisin tai COMMIT -käskyn liian myöhään, se voi vaikuttaa suuresti siihen, miten tapahtumat kirjoitetaan tietokantaan. Muista valita merkitykselliset nimet tallennuspisteillesi, sillä viittaat niihin myöhemmin ohjelmissasi. Tallennuskohdan nimen uudelleenkäyttö ei aiheuta virhettä tai varoitusta. Nimen kopioiminen aiheuttaa sen, että edellinen samanniminen tallennuspiste ei toimi. Ole varovainen valitessasi nimiä tallennuspisteille! Kun tapahtuma aloitetaan, käytetään resursseja (eli lukot), jotka varmistavat tapahtumien eheyden. Tapahtumasi on saatettava päätökseen mahdollisimman pian, jotta lukot vapautuvat ja muut käyttäjät voivat käyttää resursseja.

Esimerkki

Palataksesi tallennuspisteeseen joidenkin muutosten jälkeen anna seuraavat komennot:

LISÄÄ myyntiarvoihin ( 7896 ', ' JR3435 ', ' 28. lokakuuta 1997 ', 25, ' Net 60 ' , ' BU7832 ' ); SAVEPOINT after_insert; PÄIVITYS myynti SET termit=' Net 90 ' WHERE myyntitunnus=' 7896 ' ; SAVEPOINT after_update ; POISTA myynti ; PALAUTUS TOIMINNAN after_insert ;

Kuten näemme, ROLLBACK -komento palaa tallennuspisteeseen nimeltä "after_insert".

Myös esimerkki siitä, että voimme luoda useita tallennuspisteitä (esimerkissä on asetettu kaksi tallennuspistettä, joihin voimme palata ROLLBACK -komennolla ):

PÄIVITYS työntekijät SET palkka = 7000 WHERE last_name = 'Banda' ; SAVEPOINT banda_sal ; PÄIVITYS työntekijät SET palkka = 12000 WHERE last_name = 'Vihreä' ; SAVEPOINT greene_sal ; SELECT SUM ( palkka ) työntekijöiltä ; _ PALAUTUS SAVEPOINTIHIN banda_sal ; _ PÄIVITYS työntekijät SET palkka = 11000 WHERE last_name = 'Vihreä' ; SITOUTUMINEN ;

Esimerkki paluupisteen poistamisesta (esimerkki näyttää selvästi RELEASE SAVEPOINT -komennon toiminnan ):

LISÄÄ kirjoittajat ( au_id , au_lname , au_fname , sopimus ) ARVOT ( '111-11-1111' , 'Kani' , 'Jessica' , 1 ); SAVEPOINT ensimmäinen_tallennuspiste ; INSERT tekijät ( au_id , au_lname , au_fname , sopimus ) ARVOT ( '277-27-2777' , 'Fudd' , 'EP' , 1 ); SAVEPOINT toinen_tallennuspiste ; INSERT kirjoittajat ( au_id , au_lname , au_fname , sopimus ) ARVOT ( '366-36-3636' , 'Ankka' , 'PJ' , 1 ); SAVEPOINT kolmas_tallennuspiste ; RELEASE SAVEPOINT second_savepoint ; SITOUTUMINEN ;

Tässä esimerkissä, kun tallennuspiste toinen_tallennuspiste poistetaan, järjestelmä itse asiassa poistaa toisen_tallennuspisteen ja kolmannen_tallennuspisteen, koska kolmas_tallennuspiste luotiin toisen_tallennuspisteen jälkeen. Kun tallennuspiste on poistettu, sen nimeä voidaan käyttää uudelleen.

SAVEPOINT-komennon ominaisuudet

UNIQUE

Määrittää, että sovellus ei voi käyttää uudelleen tallennuspisteen nimeä palautusyksikössä. Jos palautuslohkossa on jo tallennuspiste, jolla on sama nimi kuin tallennuspisteen nimi, tapahtuu virhe. Jos UNIQUE jätetään pois, sovellus voi käyttää tallennuspisteen nimeä uudelleen palautusyksikössä. Jos svpt-nimi tunnistaa tallennuspisteen, joka on jo olemassa palautusyksikössä, eikä tallennuspistettä luotu YKSILÖLLÄ-vaihtoehdolla, olemassa oleva tallennuspiste tuhotaan ja uusi tallennuspiste luodaan. Tallennuspisteen tuhoaminen sen nimen uudelleenkäyttöä varten ei ole sama asia kuin tallennuspisteen vapauttaminen. Tallennuspisteen nimen uudelleenkäyttö tuhoaa vain yhden tallennuspisteen. Voit vapauttaa tallennuspisteen käyttämällä RELEASE SAVEPOINT -käskyä, joka vapauttaa tallennuspisteen sekä kaikki myöhemmin määritetyt tallennuspisteet.

ON ROLLBACK RETAIN CURSORS

Määrittää, että kohdistimia, jotka avataan tallennuspisteen tallentamisen jälkeen, ei seurata, eikä niitä siten suljeta, kun palautuspisteeseen palautetaan. Vaikka nämä osoittimet pysyvät auki palautuspisteeseen palautuksen jälkeen, niitä ei ehkä käytetä. Jos esimerkiksi palautus tallennuspisteeseen aiheuttaa sen rivin lisäyksen, johon kohdistin on sijoitettu, niin rivin päivittäminen tai poistaminen kursorilla johtaa virheeseen.

ON ROLLBACK RETAIN LOCKS

Määrittää, että tallennuspisteen tallentamisen jälkeen hankittuja lukkoja ei seurata, eikä niitä siten hylätä, kun tallennuskohta palautetaan. ON ROLLBACK RETAIN LOCKS on oletustoiminto.

Kirjallisuus

  • Gunderloy, M.; Jordan, JL; Tschanz, D.W. Microsoft SQL Server 2005 :n hallitseminen . - Wiley, 2006. - S.  200 -201. — ISBN 9780471792239 .
  • Darie, C. ja Watson, K. Ohjelmoijan opas SQL:ään. - Apress, 2008. - S. 271-274. — ISBN 9781430208006 .
  • Alapati, S. Expert Oracle Database 11g -hallinta . - Apress, 2009. - S.  338 -339. — ISBN 9781430210160 .

Linkit

  • [1] , Database SQL Reference, Oracle
  • [2] , DB2 SQL, IBM