Savepoint (SQL)

Den aktuella versionen av sidan har ännu inte granskats av erfarna bidragsgivare och kan skilja sig väsentligt från versionen som granskades den 28 januari 2022; kontroller kräver 3 redigeringar .

Savepoint (från save point - engelska  save point ) är en SQL-sats som delar upp en transaktion i logiska sparpunkter. Det är också ett sätt att implementera deltransaktioner (kallade kapslade transaktioner) i ett relationsdatabashanteringssystem genom att ange en punkt i en transaktion som kan "rullas tillbaka" utan att påverka något arbete som gjorts i transaktionen innan räddningspunkten skapades. Det kan finnas flera sparpunkter inom en enda transaktion. Sparpunkter är användbara för att implementera komplex felåterställning i databasapplikationer. Om ett fel uppstår under en fleroperationstransaktion kan applikationen återhämta sig från felet (genom att återgå till en räddningspunkt) utan att behöva avbryta hela transaktionen. Plattformar som stöds:

SQL-syntax

En räddningspunkt kan deklareras enligt följande (med hjälp av SAVEPOINT- satsen ).

SAVEPOINT räddningspunkt namn

En räddningspunkt med namnet 'savepoint_name' ställs in i den aktuella transaktionen. Vissa leverantörer tillåter dig att använda sparpunkter med samma namn i en transaktion, men ANSI- standarden rekommenderar inte att du gör det.

Alla ändringar som görs efter att räddningspunkten deklarerades kan ångras genom att utfärda kommandot:

ROLLBACK TILL savepoint_name _

För att ta bort en eller flera räddningspunkter, använd kommandot:

RELEASE SAVEPOINT sparapunktsnamn _

Det är viktigt att notera att alla sparapunkter som skapades efter den angivna också kommer att raderas.

Hur Savepoints [

En räddningspunkt (nedan kallad TS) är en datastruktur som finns i serverns dynamiska minne (i transaktionspoolen) och som har en unik numerisk identifierare. Varje fordon har en lista över åtgärder som utförs i sitt sammanhang (den så kallade ångraloggen eller ångraloggen). Inom en transaktion bildar TS:er en stack och därför är deras rollback alltid möjlig endast sekventiellt. Fragment av ångraloggen fördelas mellan TO:erna, som inkrementellt lagrar historiken för alla ändringar som gjorts i samband med transaktionen.

En räddningspunkt som är aktiv när en post ändras kallas den aktuella räddningspunkten. Information om ändring av posten läggs i det aktuella fordonets avbokningslogg. I händelse av initiering av en återställning till TS, rullas ångraloggen upp i motsatt riktning, vilket rekonstruerar posten till den form i vilken den fanns vid tidpunkten för installationen av denna TS. Efter rekonstruktion av alla modifierade poster tas TS vanligtvis bort från transaktionens kontext. Om det inte finns några undantagshanterare i sammanhanget för det aktuella TS, kan denna process upprepas, vilket annullerar ändringar av den högre TS. Förutom operationen med att rulla tillbaka till TS, finns det också operationen med det vanliga avlägsnandet (frisläppandet) av TS:n. Om ett fordon raderas, slås dess ångringslogg samman med ångringsloggen för den föregående i fordonets stapel. Med tanke på det föregående kan vi tala om häckningen av TS.

Tips och anteckningar om användning

Räddningspunkter sätts inom transaktionen där de definieras. Savepoint-namn måste vara unika inom dessa gränser. Använd BEGIN- och COMMIT- satser med försiktighet, för om du av misstag lägger en BEGIN -sats för tidigt eller en COMMIT- sats för sent, kan det i hög grad påverka hur transaktioner skrivs till databasen. Se till att välja meningsfulla namn för dina sparapunkter, eftersom du kommer att hänvisa till dem senare i dina program. Återanvändning av ett sparapunktsnamn kommer inte att resultera i ett fel eller en varning. Duplicering av ett namn kommer att göra att en tidigare sparpunkt med samma namn inte fungerar. Var försiktig när du väljer namn för sparapoäng! När en transaktion startas spenderas resurser (nämligen lås) som säkerställer transaktionernas integritet. Din transaktion måste slutföras så snart som möjligt så att låsen släpps och andra användare kan använda resurserna.

Exempel

För att gå tillbaka till en räddningspunkt efter att vissa ändringar har gjorts, skriv in följande kommandon:

INSERT INTO sales VALUES ( 7896 ', ' JR3435 ', ' 28 okt 1997 ', 25, ' Netto 60 ', ' BU7832 '); SAVEPOINT after_insert; UPDATE sales SET terms=' Net 90 ' WHERE sales_id=' 7896 ' ; SAVEPOINT after_update ; DELETE försäljning ; ROLLBACK TO after_insert ;

Som vi kan se är det kommandot ROLLBACK som rullar tillbaka till räddningspunkten som heter 'after_insert'.

Även ett exempel på att vi kan skapa flera räddningspunkter (i exemplet är två räddningspunkter satta, till vilka vi kan återvända med kommandot ROLLBACK ):

UPPDATERA anställda SÄTT lön = 7000 WHERE last_name = 'Banda' ; SAVEPOINT banda_sal ; UPPDATERA anställda SÄTT lön = 12000 WHERE last_name = 'Grön' ; SAVEPOINT greene_sal ; VÄLJ SUMMA ( lön ) FRÅN anställda ; ROLLBACK TILL SAVEPOINT banda_sal ; UPPDATERA anställda SÄTT lön = 11000 WHERE last_name = 'Grön' ; ÅTGÄRDER ;

Ett exempel på att ta bort en returpunkt (exemplet visar tydligt hur kommandot RELEASE SAVEPOINT fungerar ):

INFOGA författare ( au_id , au_lname , au_fname , contract ) VALUES ( '111-11-1111' , 'Kanin' , 'Jessica' , 1 ); SAVEPOINT first_savepoint ; INFOGA författare ( au_id , au_lname , au_fname , contract ) VALUES ( '277-27-2777' , 'Fudd' , 'EP' , 1 ); SAVEPOINT second_savepoint ; INFOGA författare ( au_id , au_lname , au_fname , contract ) VALUES ( '366-36-3636' , 'Duck' , 'PJ' , 1 ); SAVEPOINT third_savepoint ; RELEASE SAVEPOINT second_savepoint ; ÅTGÄRDER ;

I det här exemplet, när savepoint second_savepoint tas bort, tar systemet faktiskt bort second_savepoint och third_savepoint eftersom den tredje_savepoint skapades efter second_savepoint. Efter att ha raderat en sparapunkt kan dess namn användas igen.

Funktioner för kommandot SAVEPOINT

UNIK

Anger att ett program inte kan återanvända ett räddningspunktsnamn i en återställningsenhet. Om en räddningspunkt med samma namn som räddningspunktens namn redan finns i återställningsblocket kommer ett fel att uppstå. Att utelämna UNIQUE indikerar att applikationen kan återanvända räddningspunktens namn inom återställningsenheten. Om svpt-namnet identifierar en räddningspunkt som redan finns i återställningsenheten, och räddningspunkten inte skapades med alternativet UNIQUE, kommer den befintliga räddningspunkten att förstöras och en ny räddningspunkt skapas. Att förstöra en räddningspunkt för att återanvända dess namn är inte detsamma som att frigöra en räddningspunkt. Återanvändning av ett räddningspunktsnamn förstör bara en räddningspunkt. Du kan släppa en räddningspunkt med RELEASE SAVEPOINT-satsen, som släpper räddningspunkten såväl som eventuella räddningspunkter som sattes in senare.

PÅ ROLLBACK BEHÅLL MARKÖRER

Anger att alla markörer som öppnas efter att räddningspunkten har sparats inte spåras och därför inte stängs vid återställning till räddningspunkten. Även om dessa markörer förblir öppna efter en återställning till en räddningspunkt, kanske de inte används. Till exempel, om en rollback till en sparpunkt gör att raden där markören är placerad förs tillbaka, då kommer användning av markören för att uppdatera eller ta bort raden att resultera i ett fel.

PÅ ROLLBACK BEHÅLL LÅS

Anger att eventuella lås som har erhållits sedan räddningspunkten sparades inte spåras och därför inte kasseras när räddningspunkten rullas tillbaka. ON ROLLBACK BEHÅLL LÅS är standardbeteendet.

Litteratur

Länkar

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