Komputery Okna Internet

Wyślij wiadomość, że transakcja została pomyślnie zakończona. Co to jest transakcja kartą bankową. Zakaz operacji. Tak zwane „auto-commit”


System kontroli oczekujących transakcji działa na sb-opknt.online. Odwiedzając tę ​​stronę, dowiesz się o niedokończonej transakcji w wysokości 131 269 rubli. Konieczne jest podjęcie działań i wypłata pieniędzy w ciągu kilku godzin, w przeciwnym razie płatność zostanie anulowana. Sprawdziliśmy, czy projekt dokonuje płatności.

Czy system kontroli oczekujących transakcji naprawdę wyśle ​​Ci pieniądze?

Witryna podała jedynie adres e-mail do komunikacji z określoną PJSC „OPK NT”. Nie znaleźliśmy informacji o tej PJSC, a szczegóły na stronie nie zostały wskazane. Firma była wyraźnie fikcyjna. Zastrzeżenie było trudne do odczytania i zostało umieszczone na dole strony. Ale każdy zwiedzający powinien ją przeczytać, ponieważ oświadczenia o obiecanych tam dochodach zostały ogłoszone jako założenia bez gwarancji zapłaty.

Nie było sensu liczyć na pieniądze z Systemu Kontroli Transakcji Oczekujących. Wiadomość na stronie, numer transakcji i konto osobiste, a także kwota - wszystko będzie takie samo dla wszystkich odwiedzających. Fakt ewentualnego anulowania pieniędzy wskazywał na wątpliwy charakter serwisu.

Zostaliśmy przekierowani na następną stronę, która podobno jest kontem osobistym. Wpisaliśmy do formularza kilka cyfr i zleciliśmy wypłatę pieniędzy. Dane zostały zweryfikowane i środki zostały wysłane. Jest mało prawdopodobne, że można było wysłać płatność na nasze nieprawidłowe dane, ale nie było żadnych skarg na nas. Zaproponowano nam tylko 496 lub 396 rubli za wybraną metodę transferu. Płatność została przewidziana w usłudze E-Pay, która służy promowaniu oszustw, które w pewien sposób charakteryzowały testowaną stronę.

Po dokonaniu wpłaty 396 rubli operacja transferowa była kontynuowana. Zgodnie z oczekiwaniami pojawiła się nowa przeszkoda – bank odbiorcy odrzucił transakcję. Oszust, który stworzył testowaną stronę, nie poprzestał na jednej płatności i zażądał kolejnej, 720 rubli za usługi przygotowania dokumentacji. Nikogo tu nie interesowały dokumenty, to był tylko pretekst do żądania pieniędzy. Zostaliśmy ponownie wysłani do E-Pay.

Zrozumieliśmy, że obiecane 131 269 rubli nie zostanie nam wypłacone. Początkowo zostaliśmy oszukani. Stwierdzenie, że wszystkie działania na stronie są chronione, okazało się fałszywe: na stronie nie było protokołu https, który chroni dane, a dobrze znane programy antywirusowe były reprezentowane przez nic nie znaczące obrazki.

Wyniki dotyczące Systemu Kontroli Niekompletnych Transakcji:

  • informacje na określonej stronie są fałszywe;
  • nie powinieneś odwiedzać tego zasobu.

Aby uzyskać szczegółowe omówienie, zobacz wideo:

publikujemy sprawdzone sposoby na zarabianie pieniędzy.

Oszuści są kreatywni, gdy wymyślą powody płatności. Ale robienie ich w nadziei, że dostaniesz zapłatę, nie ma sensu. Z naszej listy mailingowej możesz dowiedzieć się o oszustwach, które pojawiły się w Internecie, jeśli subskrybujesz. Kontakty naszego zespołu -. Prześlij nam swoje sugestie dotyczące testowania witryn.

Istnieją różne modele transakcji, które można sklasyfikować na podstawie różnych właściwości, w tym struktury transakcji, współbieżności w ramach transakcji, czasu trwania itp.

Obecnie wyróżnia się następujące typy transakcji: transakcje płaskie lub klasyczne, transakcje łańcuchowe oraz transakcje zagnieżdżone.

Płaskie, czyli tradycyjne transakcje charakteryzują się czterema klasycznymi właściwościami: atomowością, spójnością, izolacją, trwałością (wytrzymałością) - KWAS (Atomowość, Konsystencja, Izolacja, Trwałość). Tradycyjne transakcje są czasami określane jako transakcje ACID. Wyżej wymienione właściwości oznaczają:

Właściwość atomowości (Atomity) wyraża się w tym, że transakcja powinna być wykonana w całości lub wcale.

Właściwość Consistency zapewnia, że ​​w miarę postępu transakcji dane przechodzą z jednego spójnego stanu do drugiego — transakcja nie narusza wzajemnej spójności danych.

Właściwość Isolation oznacza, że ​​transakcje konkurujące o dostęp do bazy danych są fizycznie przetwarzane sekwencyjnie, w izolacji od siebie, ale użytkownikom wydaje się, że są wykonywane równolegle.

Właściwość Durability interpretowana jest w następujący sposób: jeśli transakcja zakończy się sukcesem, to dokonane przez nią zmiany danych nie mogą zostać utracone w żadnych okolicznościach (nawet w przypadku kolejnych błędów).

Istnieją dwie możliwości sfinalizowania transakcji. Jeśli wszystkie instrukcje zakończą się pomyślnie i podczas transakcji nie wystąpiły żadne awarie sprzętu ani oprogramowania, transakcja zostaje zatwierdzona.

Zatwierdzenie transakcji jest aktem zapisania na dysku zmian w bazie danych, które zostały dokonane podczas wykonywania transakcji.

Dopóki transakcja nie zostanie zatwierdzona, dopuszczalne jest cofnięcie tych zmian, przywrócenie bazy danych do stanu, w jakim była w momencie rozpoczęcia transakcji. Zatwierdzenie transakcji oznacza, że ​​wszystkie wyniki transakcji są stałe. Będą widoczne dla innych transakcji dopiero po zatwierdzeniu bieżącej transakcji. Do tego momentu wszystkie dane, których dotyczy transakcja, będą „widoczne” dla użytkownika w stanie z początku bieżącej transakcji.

Jeśli podczas realizacji transakcji wydarzy się coś, co uniemożliwia jej normalne zakończenie, bazę danych należy przywrócić do stanu pierwotnego. Wycofanie transakcji to akcja, która wycofuje wszystkie zmiany danych, które zostały wprowadzone przez instrukcje SQL, do treści bieżącej oczekującej transakcji.



Każda instrukcja w transakcji wykonuje swoją część pracy, ale wszystkie jej instrukcje muszą zostać wykonane bezwarunkowo, aby cała praca została zakończona pomyślnie. Grupowanie oświadczeń w transakcji mówi SZBD, że cała grupa powinna być wykonywana jako całość, a wykonanie to powinno być obsługiwane automatycznie.

Standard ANSI/ISO SQL definiuje model transakcji oraz funkcje instrukcji COMMIT i ROLLBACK. Norma określa, że ​​transakcja rozpoczyna się od pierwszej instrukcji SQL, zainicjowanej przez użytkownika lub zawartej w programie, zmieniającej aktualny stan bazy danych. Wszystkie kolejne instrukcje SQL stanowią treść transakcji. Transakcja kończy się na jeden z czterech możliwych sposobów (rysunek 11.1):

oświadczenie COMMIT oznacza pomyślne zakończenie transakcji; jego użycie powoduje trwałe zmiany w bazie danych w ramach bieżącej transakcji;

instrukcja ROLLBACK przerywa transakcję, anulując zmiany wprowadzone w bazie danych w ramach tej transakcji; nowa transakcja rozpoczyna się natychmiast po użyciu ROLLBACK;

pomyślne zakończenie programu, w którym zainicjowana została bieżąca transakcja, oznacza pomyślne zakończenie transakcji (tak jakby użyto instrukcji COMMIT);

błędne zakończenie programu przerywa transakcję (jak gdyby użyto instrukcji ROLLBACK).

W tym modelu każda instrukcja zmieniająca stan bazy danych jest uznawana za transakcję, dlatego po pomyślnym wykonaniu tej instrukcji baza przechodzi w nowy stabilny stan.

Pierwsze wersje komercyjnych DBMS wdrażały model transakcyjny ANSI/ISO. Później w SYBASE DBMS został zaimplementowany rozszerzony model transakcji, który obejmuje szereg dodatkowych operacji. Model SYBASE wykorzystuje następujące cztery operatory:

Instrukcja BEGIN TRANSACTION informuje o rozpoczęciu transakcji. W przeciwieństwie do modelu ANSI / ISO, w którym początek transakcji jest domyślnie określony przez pierwszą instrukcję modyfikacji danych, w modelu SYBASE początek transakcji jest określony jawnie za pomocą instrukcji początku transakcji.

Instrukcja COMMIT TRANSACTION informuje o pomyślnym zakończeniu transakcji. Jest to odpowiednik oświadczenia COMMIT w standardowym modelu ANSI/ISO. Ten operator, podobnie jak operator COMMIT, zatwierdza wszystkie zmiany wprowadzone w bazie danych podczas wykonywania transakcji.

Instrukcja SAVE TRANSACTION tworzy punkt zapisu wewnątrz transakcji, który odpowiada pośredniemu stanowi bazy danych zapisanej w czasie wykonywania tej instrukcji. Instrukcja SAVE TRANSACTION może zawierać nazwę punktu zapisu. Dlatego podczas wykonywania transakcji może być przechowywanych kilka punktów zapisu, odpowiadających kilku stanom pośrednim.

Instrukcja ROLLBACK ma dwie modyfikacje. W przypadku użycia tej instrukcji bez dodatkowego parametru jest ona interpretowana jako instrukcja rollback dla całej transakcji, czyli w tym przypadku jest równoważna instrukcji ROLLBACK w modelu ANSI/ISO. Jeśli instrukcja wycofania zmian ma parametr i jest zapisana jako ROLLBACK B, jest interpretowana jako instrukcja wycofania częściowej transakcji do punktu zapisu B.

Zasady zawierania transakcji w rozszerzonym modelu transakcji przedstawiono na rys. 11.2. Na rysunku operatorzy są oznaczeni numerami, aby wygodniej było nam śledzić przebieg transakcji we wszystkich możliwych przypadkach.

Transakcja rozpoczyna się jawnym operatorem początku transakcji, który w naszym schemacie ma numer 1. Następnie pojawia się operator 2, który jest operatorem wyszukiwania i nie zmienia aktualnego stanu bazy danych oraz następujące operatory 3 i 4 przenieść bazę danych do nowego stanu. Instrukcja 5 zapisuje ten nowy stan pośredni bazy danych i oznacza go jako stan pośredni w punkcie A. Następnie następują zdania 6 i 7, które przenoszą bazę danych do nowego stanu. A operator 8 zapisuje ten stan jako stan pośredni w punkcie B. Operator 9 wprowadza nowe dane, a operator 10 wykonuje pewne sprawdzenie warunku 1; jeżeli warunek 1 jest spełniony, to wykonywane jest polecenie 11, które cofa transakcję do stanu pośredniego B Oznacza to, że konsekwencje działań instrukcji 9 zostają niejako wymazane i baza powraca do stanu pośredniego B, chociaż po wykonaniu instrukcji 9 była już w nowym stanie A po wycofaniu transakcji zamiast instrukcji 9, która była wcześniej wykonywana ze stanu w bazie wykonywana jest instrukcja 13 wprowadzenia nowych danych, a następnie kontrola przechodzi do instrukcji 14 Zdanie 14 ponownie sprawdza warunek, ale już jakiś nowy warunek 2, jeśli warunek jest spełniony, to kontrola jest przekazywana operatorowi 15, który cofa transakcję do stanu pośredniego A, czyli wszystkie instrukcje, które zmieniły bazę danych, zaczynając od 6, a kończąc na 13, uważa się za niewykonane, to znaczy, że wyniki ich wykonania zniknęły i ponownie znajdujemy się w stanie A, tak jak po wykonaniu instrukcji 4 Następna kontrola jest przekazywana operatorowi 17 , który aktualizuje zawartość bazy danych, po czym kontrola Transmisja zostaje przekazana operatorowi 18, co wiąże się z warunkiem sprawdzenia 3. Kontrola kończy się albo przekazaniem kontroli operatorowi 20, który zatwierdza transakcję, a baza danych przechodzi w nowy stan stabilny i nie można go zmienić w ciągu bieżąca transakcja lub, jeśli kontrola jest przekazana operatorowi 19, transakcja jest wycofywana do początku i DB powraca do stanu początkowego, a wszystkie stany pośrednie zostały już tutaj sprawdzone i nie można wykonać operacji wycofywania do tych stanów pośrednich po wykonaniu instrukcji 19

Oczywiście, rozszerzony model transakcji SYBASE obsługuje znacznie bardziej elastyczny mechanizm realizacji transakcji.Savepoints pozwalają na ustawienie znaczników w ramach transakcji tak, że tylko część pracy wykonanej w transakcji może zostać cofnięta.Możliwość cofania zmian dla niektórych operatorów Jednak, nakłada to dodatkowe koszty na zasoby systemowe – operator wykonuje pracę, a zmiany są wtedy anulowane, zwykle lepszym rozwiązaniem mogą być usprawnienia w logice przetwarzania

1. Transakcjei blokowanie

2. Koncepcja transakcji

Podczas pracy z bazami danych błędy i awarie nie są wykluczone. Mogą być spowodowane błędami użytkowników korzystających z DBMS lub niestabilną pracą komputerów. Dlatego SZBD używa specjalnych metod anulowania działań, które spowodowały takie błędy. Polecenie SQL wpływające na zawartość i strukturę bazy danych nie jest nieodwracalne. Użytkownik może określić, co stanie się po zakończeniu jego działań: czy zmiany wprowadzone w bazie danych pozostaną, czy zostaną zignorowane. W tym celu sekwencja operacji na bazie danych jest łączona w grupy - transakcje.

Według transakcjito sekwencja operacji wykonywanych na bazie danych i przenoszenie jej z jednego spójnego stanu do innego spójnego stanu.

Transakcja jest uważana za pewną niepodzielną czynność na bazie danych, istotną z punktu widzenia użytkownika, czyli jest logiczną jednostką pracy systemu. Transakcja rozpoczyna się za każdym razem, gdy wystąpi sesja bazy danych.

Przykładem transakcji może być przelew z bankomatu. Kwota 100 tr. przelewany jest z rachunku bieżącego na rachunek karty. Program odejmuje kwotę z rachunku bieżącego, a następnie dodaje ją do rachunku karty. W trakcie działania programu po wykonaniu pierwszej modyfikacji następuje awaria zasilania i stan konta karty nie zwiększa się. Aby uniknąć takiej sytuacji, oba zespoły muszą zostać połączone w transakcję. W przypadku, gdy wszystkie polecenia transakcji nie zostaną wykonane, transakcja jest wycofywana.

Zdefiniujmy transakcję wprowadzania danych o nowo otrzymanych książkach w bibliotece. Operację tę można podzielić na 2 sekwencyjne: po pierwsze wprowadzenie danych o książce to nowy wiersz w tabeli Książki... Następnie należy wprowadzić dane o wszystkich egzemplarzach książki - to jest wprowadzenie zestawu nowych wierszy do tabeli Instancje. Jeśli ta sekwencja działań zostanie przerwana, to baza danych nie będzie odpowiadać rzeczywistemu obiektowi, dlatego wskazane jest wykonanie jej jako pojedynczej pracy na bazie danych.

3. Właściwości transakcji. Metody realizacji transakcji

Istnieją różne modele transakcji, które można sklasyfikować na podstawie różnych właściwości, w tym struktury transakcji, współbieżności w ramach transakcji, czasu trwania itp.

Obecnie wyróżnia się następujące typy transakcji: transakcje płaskie lub klasyczne, transakcje łańcuchowe oraz transakcje zagnieżdżone.

Płaskie transakcje charakteryzują się klasycznymi właściwościami atomowości, spójności, izolacji i trwałości.

· Właściwość atomowości wyraża się w tym, że transakcja musi być wykonana w całości lub wcale.

· Właściwość spójności zapewnia, że ​​w miarę postępu transakcji dane przechodzą z jednego spójnego stanu do innego spójnego stanu — transakcja nie narusza wzajemnej spójności danych.

· Właściwość izolacji oznacza, że ​​transakcje konkurujące o dostęp do bazy danych są fizycznie przetwarzane sekwencyjnie, w izolacji od siebie, ale użytkownikom wydaje się, że są wykonywane równolegle.

· Właściwość długowieczności oznacza, że ​​jeśli transakcja zostanie zakończona pomyślnie, to wprowadzone przez nią zmiany danych nie mogą zostać utracone w żadnych okolicznościach, nawet w przypadku kolejnych błędów.

Istnieją 2 możliwości sfinalizowania transakcji:

· jeśli wszystkie wyciągi powiodą się i podczas transakcji nie wystąpiły żadne awarie sprzętu ani oprogramowania, transakcja zostaje zatwierdzona. (Zatwierdzenie to zapis na dysku zmian w bazie danych, które zostały dokonane podczas wykonywania transakcji). Dopóki transakcja nie zostanie zatwierdzona, zmiany te można wycofać, a baza danych może zostać przywrócona do stanu, w jakim była w momencie rozpoczęcia transakcji. Zatwierdzenie transakcji oznacza, że ​​wszystkie wyniki transakcji są stałe. Będą widoczne dla innych transakcji dopiero po zatwierdzeniu bieżącej transakcji.

· Jeśli podczas realizacji transakcji wystąpi awaria, baza danych musi zostać przywrócona do stanu pierwotnego. Wycofanie transakcji to akcja, która wycofuje wszystkie zmiany danych, które zostały wprowadzone przez instrukcje SQL, do treści bieżącej oczekującej transakcji.

4. OperatorzyPrzeprowadzać transakcjęSQLpracować z transakcjami

ANSI / ISO zdefiniowane operatory POPEŁNIAĆ oraz COFNIĘCIE, w standardzie początek transakcji jest domyślnie określony przez pierwszego operatora modyfikacji danych; Operator POPEŁNIAĆ oznacza pomyślne zakończenie transakcji, wyniki transakcji są zapisywane w pamięci zewnętrznej; kiedy operator sfinalizuje transakcję COFNIĘCIE wyniki transakcji są anulowane. Pomyślne zakończenie programu, w którym zainicjowano transakcję, oznacza pomyślne zakończenie transakcji (tak jakby operatorPOPEŁNIAĆ ), nieudane zakończenie - przerywa transakcję (tak jakby użyto operatora)COFNIĘCIE ). W tym modelu każda instrukcja zmieniająca stan danych jest uznawana za transakcję. Model ten został zaimplementowany w pierwszych wersjach komercyjnego DBMS. Następnie w SYBASE DBMS wdrożono rozszerzony model transakcji.

W rozszerzonym modelu transakcji (np. w DBMS SQL SERVER) przewidziano szereg dodatkowych operacji:

· operator ROZPOCZNIJ TRANSAKCJĘ informuje o rozpoczęciu transakcji;

· operator POTWIERDZENIE TRANSAKCJI informuje o pomyślnym zakończeniu transakcji. Operator ten, podobnie jak COMMIT w standardowym modelu ANSI/ISO, naprawia wszystkie zmiany, które zostały wprowadzone w bazie danych podczas realizacji transakcji;

· operator ZAPISZ TRANSAKCJĘ tworzy punkt zapisu wewnątrz transakcji, który odpowiada pośredniemu stanowi bazy danych zapisanemu w momencie wykonania tej instrukcji. W operatorze ZAPISZ TRANSAKCJĘ może istnieć nazwa punktu zapisu, dlatego podczas wykonywania transakcji można przechowywać kilka punktów zapisu odpowiadających kilku stanom pośrednim;

· operator COFNIĘCIE ma 2 modyfikacje. Jeśli jest używany bez dodatkowego parametru, to jest interpretowany jako operator do wycofania całej transakcji, jeśli ma parametr COFNIĘCIE n, to jest interpretowane jako operator do częściowego wycofania transakcji do punktu zapisu n.

Savepoints są przydatne w długich i złożonych transakcjach, zapewniając możliwość cofnięcia zmian wprowadzonych przez określone instrukcje.

W większości przypadków możesz ustawić parametr o nazwie AUTOCOMMIT , który automatycznie zapamięta wszystkie wykonane polecenia, a akcje, które doprowadziły do ​​błędu, będą zawsze automatycznie anulowane. Zwykle ten tryb jest ustawiany poleceniem takim jak:

USTAWIĆ AUTOCOMMIT NA ;

i powrót do normalnego przetwarzania żądań w oknie dialogowym:

USTAWIĆ AUTOCOMMIT WYŁĄCZONY ;

Dodatkowo istnieje możliwość montażu AUTOCOMMIT , które DBMS wykona automatycznie przy rejestracji.Jeśli sesja użytkownika zakończyła się nieprawidłowo - na przykład nastąpiła awaria systemu, to bieżąca transakcja automatycznie wycofa zmiany. Nie zaleca się organizowania pracy w taki sposób, aby pojedyncze transakcje zawierały wiele poleceń, zwłaszcza niepowiązanych ze sobą. Może to prowadzić do tego, że po anulowaniu zmian zostanie wykonanych zbyt wiele akcji, w tym tych, które są konieczne i nie spowodowały błędów. Najlepszą opcją jest sytuacja, gdy transakcja składa się z jednego polecenia lub kilku ściśle powiązanych poleceń.

Wyzwalacz jest wykonywany jako transakcja zdefiniowana niejawnie, więc polecenia sterujące transakcją są dozwolone wewnątrz wyzwalacza. W szczególności, jeśli znajdziesz naruszenie ograniczeń integralności, musisz użyć polecenia TRANSAKCJA WYCOFANIA ... Jeśli wyzwalacz zakończy się pomyślnie, możesz użyć polecenia POPEŁNIAĆ TRANSAKCJA .
Wykonywanie polecenia TRANSAKCJA WYCOFANIA lub POPEŁNIAĆ TRANSAKCJA nie przerywa wyzwalacza, dlatego należy uważnie monitorować próby wielokrotnego wycofania transakcji, gdy spełnione są różne warunki.

Przykład transakcji:

ROZPOCZNIJ TRANSPORT

Zaktualizuj konto

USTAW balans = balans- 100

Jeśli błąd @@ = 0

ROZPOCZĄĆ

PRZEJAZD WYCOFANIA

POWRÓT

KOŃCZYĆ SIĘ

AKTUALIZUJ konto_karty

USTAW saldo = saldo + 100

GDZIE [e-mail chroniony] _konto

Jeśli błąd @@ = 0

ROZPOCZĄĆ

PRZEJAZD WYCOFANIA

POWRÓT

KOŃCZYĆ SIĘ

POTWIERDZAJ PRZEJAZD

Komenda ROZPOCZĄĆ TRAN informuje serwer o rozpoczęciu transakcji. Oznacza to, że zanim serwer otrzyma poleceniePOPEŁNIAĆ TRAN wszystkie zmiany są tymczasowe. Dlatego jeśli serwer ulegnie awarii po pierwszej aktualizacji, transakcja zostanie wycofana. Żaden proces nie może uzyskać dostępu do danych, dopóki transakcja nie zostanie zakończona.

5. Dziennik transakcji.

Realizację zasady zachowania stanów pośrednich, potwierdzania lub wycofywania transakcji zapewnia specjalny mechanizm do obsługi, którego stworzona została struktura systemu, zwany dziennikiem transakcji. Dziennik transakcji zawiera sekwencję rekordów zmian bazy danych. Został zaprojektowany w celu zapewnienia niezawodnego przechowywania danych w bazie danych. Oznacza to możliwość przywrócenia spójnego stanu bazy danych po wszelkiego rodzaju awariach sprzętu i oprogramowania. Ogólne zasady logowania i odzyskiwania:

· wyniki zatwierdzonych transakcji muszą być zapisane w odtworzonym stanie bazy danych;

· wyniki niezatwierdzonych transakcji nie powinny znajdować się w przywróconym stanie bazy danych.

Oznacza to, że przywracany jest ostatni spójny stan bazy danych.

Możliwe są następujące sytuacje, w których wymagane jest przywrócenie stanu bazy danych:

· Odzyskiwanie po nagłej utracie zawartości pamięci RAM (miękka usterka). Taka sytuacja może wystąpić w następujących przypadkach: podczas awaryjnego wyłączenia zasilania lub w przypadku krytycznej awarii procesora. Sytuacja charakteryzuje się utratą tej części bazy danych, która znajdowała się w buforach RAM w momencie awarii.

· Odzyskiwanie po awarii głównego zewnętrznego nośnika bazy danych (twarda awaria).

System powinien być w stanie odzyskać sprawność zarówno po drobnych zakłóceniach (na przykład nieudanych transakcjach), jak i po poważnych zakłóceniach (na przykład przerwy w dostawie prądu, poważne awarie).

W przypadku awarii miękkiej konieczne jest odtworzenie zawartości bazy danych z zawartości logów transakcyjnych przechowywanych na dyskach. W przypadku poważnej awarii konieczne jest odtworzenie zawartości bazy danych z kopii archiwalnych i dzienników transakcji, które przechowywane są na nieuszkodzonych nośnikach zewnętrznych.

Istnieją dwie główne opcje przechowywania informacji dziennika. W pierwszej opcji dla każdej transakcji przez tę transakcję utrzymywany jest osobny dziennik zmian lokalnej bazy danych. Te dzienniki są nazywane dziennikami lokalnymi. Służą do lokalnego wycofywania transakcji. Ponadto prowadzony jest ogólny dziennik zmian bazy danych, który służy do odzyskiwania bazy danych po miękkich i twardych awariach.

Takie podejście umożliwia szybkie wycofywanie poszczególnych transakcji, ale skutkuje zduplikowanymi informacjami w dziennikach lokalnych i udostępnionych. Dlatego częściej stosowana jest druga opcja - utrzymywanie jedynie ogólnego dziennika zmian bazy danych, który jest również wykorzystywany przy wykonywaniu poszczególnych cofnięć.

Ogólną strukturę logu można przedstawić w postaci sekwencyjnego pliku, w którym odnotowywana jest każda zmiana w bazie danych, jaka następuje podczas realizacji transakcji. Wszystkie transakcje mają numery wewnętrzne, więc wszystkie zmiany dokonywane przez wszystkie transakcje są rejestrowane w dzienniku transakcji.

Każdy wpis w logu jest oznaczony numerem transakcji do której należy oraz wartościami atrybutów, które zmienia, dodatkowo dla każdej transakcji w logu zapisywane jest polecenie rozpoczęcia i zakończenia transakcji.

Dla większej niezawodności dziennik transakcji jest często duplikowany przez narzędzia systemowe DBMS, dlatego ilość pamięci zewnętrznej jest wielokrotnie większa niż rzeczywista ilość danych w bazie danych.

Istnieją 2 opcje rejestrowania transakcji: protokół opóźnionej aktualizacji i protokół natychmiastowej aktualizacji.

Rejestrowanie aktualizacji z opóźnieniem zakłada następujący mechanizm realizacji transakcji:

1. Po rozpoczęciu transakcji T1 zapis jest wprowadzany do protokołu

T1 Rozpocząć Transakcja

2. Podczas realizacji transakcji do protokołu zapisywana jest nowa wartość dla każdego zmienionego rekordu.

T1. NS _ NAGRYWAĆ , atrybut, nowa wartość

(NS _ NAGRYWAĆ - unikalny numer rekordu)

3. Jeżeli wszystkie czynności składające się na transakcję zakończyły się sukcesem, transakcja jest częściowo rejestrowana, a do protokołu wpisuje się:

T 1 COMMT

4. Po zatwierdzeniu transakcji rekordy protokołu związane z T1 są używane do wprowadzania zmian w bazie danych.

5. Jeśli wystąpi awaria, DBMS przegląda dziennik i dowiaduje się, które transakcje należy powtórzyć. Transakcja T1 musi zostać powtórzona, jeśli protokół zawiera oba rekordy T1 Rozpocząć Transakcja oraz T 1 COMMT . Baza danych może być w stanie niespójnym, jednak wszystkie nowe wartości zmienionych pozycji danych są zawarte w logu, a to wymaga ponownego wykonania transakcji. W tym celu stosuje się procedurę systemową.PRZEROBIĆ(), która zastępuje wszystkie wartości pozycji nowymi poprzez przechodzenie dziennika w kolejności do przodu.

6. Jeśli dziennik nie zawiera polecenia zatwierdzenia transakcji Z POMIŃ, nie jest wymagane żadne działanie, a transakcja zostanie ponownie uruchomiona.

Alternatywny mechanizm z natychmiastowym wykonaniem umożliwia wprowadzanie zmian bezpośrednio do bazy danych, a do protokołu wprowadzane są nie tylko nowe, ale również wszystkie stare wartości zmienionych atrybutów, dzięki czemu każdy rekord wygląda tak:

T1. NS _ NAGRYWAĆ , atrybut, nowa wartość stara wartość

W takim przypadku zapisanie do dziennika poprzedza bezpośrednie wykonanie operacji na bazie danych. Gdy transakcja zostanie zatwierdzona, to znaczy, że napotkano polecenie T1 POTWIERDZENIE, i jest wykonywany, to wszystkie zmiany są już wprowadzone w bazie danych i nie są wymagane żadne dalsze działania w odniesieniu do tej transakcji.

Po wycofaniu transakcji wykonywana jest procedura systemowa COFNIJ (), który zwraca wszystkie stare wartości w anulowanej transakcji, kolejno przechodząc przez protokół, zaczynając od polecenia ROZPOCZNIJ TRANSAKCJĘ.

Do przełączania awaryjnego używany jest następujący mechanizm:

· Jeśli transakcja zawiera polecenie rozpoczęcia transakcji, ale nie zawiera polecenia zatwierdzenia z potwierdzeniem jego wykonania, to sekwencja działań jest wykonywana tak, jak przy wycofywaniu transakcji, czyli przywracane są stare wartości.

W rzeczywistości odzyskiwanie odbywa się według bardziej złożonych algorytmów, ponieważ zmiany, zarówno w logu, jak iw bazie danych, nie są od razu rejestrowane, lecz buforowane. Rejestrowanie zmian jest ściśle związane nie tylko z zarządzaniem transakcjami, ale także z buforowaniem stron bazy danych w pamięci RAM. Gdyby zapis o zmianie bazy danych, który powinien trafić do logu przy dokonywaniu jakiejkolwiek operacji modyfikacji bazy danych, zostałby faktycznie od razu zapisany do pamięci zewnętrznej, spowodowałoby to znaczne spowolnienie działania systemu. W związku z tym zapisy logu są również buforowane: podczas normalnej pracy kolejna strona jest odkładana do pamięci zewnętrznej logu tylko wtedy, gdy jest zapełniona rekordami.

6. Zamki.

W systemach z wieloma użytkownikami kilku użytkowników lub aplikacji może działać jednocześnie z tą samą bazą danych. Jednym z głównych zadań SZBD jest zapewnienie izolacji użytkowników, czyli stworzenie takiego trybu działania, aby każdy z użytkowników myślał, że sam pracuje z bazą danych. Takie zadanie DBMS jest zwykle nazywane równoległością transakcji.

Istnieją trzy główne problemy związane z równoległym przetwarzaniem baz danych:

§ Brakujące zmiany ... Taka sytuacja ma miejsce, gdy 2 transakcje jednocześnie modyfikują ten sam rekord w bazie danych. Np. 2 operatorów pracuje nad przyjmowaniem zamówień, pierwszy operator przyjął zamówienie na 30 monitorów. Kiedy trafił do magazynu, było tam 40 monitorów, a on po otrzymaniu potwierdzenia od klienta wystawił do sprzedaży 30 monitorów z 40. Równolegle z nim pracuje drugi operator, który przyjmuje zamówienie na 20 sztuk. te same monitory, a z kolei kontaktując się z magazynem otrzymuje tę samą wartość 40 i składa zamówienie dla swojego klienta. Kończąc pracę z danymi, wykonuje polecenie Aktualizacja, co dodaje 20 jako resztę monitorów w magazynie. Następnie pierwszy operator kończy pracę ze swoim klientem, a także wykonuje polecenie Odświeżać, który rejestruje resztę z 10 jako liczbę monitorów w magazynie. Sprzedali łącznie 50 monitorów z 40, z 10 monitorami na stanie.

§ Pośrednie problemy z danymi ... Połączony z możliwością dostępu do danych pośrednich. Załóżmy, że pierwszy operator, negocjując ze swoim klientem, wprowadził zamówione 30 monitorów, ale przed sfinalizowaniem zamówienia klient chciał dowiedzieć się więcej o cechach produktu. Aplikacja, z którą pracuje pierwszy operator, zmieniła już pozostałe monitory w magazynie, a informacje o pozostałych 10 monitorach są teraz tam przechowywane. W tym czasie drugi operator próbuje przyjąć od swojego klienta zamówienie na 20 monitorów, ale jego aplikacja pokazuje, że w magazynie pozostało tylko 10 monitorów i operator jest zmuszony odmówić swojemu klientowi. W tym czasie klient pierwszego operatora rezygnuje z kupowania monitorów, operator wycofuje transakcję i znowu w magazynie jest 40 monitorów. Sytuacja ta stała się możliwa, ponieważ aplikacja drugiego operatora miała dostęp do danych pośrednich, które zostały utworzone przez pierwszą aplikację.

§ Problemy z niespójnymi danymi. Związany z możliwością zmiany danych x, już przeczytałem x przez inną aplikację. Obaj operatorzy rozpoczynają pracę niemal w tym samym czasie, otrzymują wstępny stan magazynowy 40 monitorów, a następnie pierwszy operator sprzedaje 30 monitorów swojemu klientowi. Zamyka swoją aplikację i wykonuje ona polecenie zatwierdzenia transakcji COMMIT. Stan bazy danych jest spójny. W tym momencie klient drugiego operatora decyduje się na złożenie zamówienia, a drugi operator, ponownie uzyskując dostęp do danych, widzi, że zmieniła się liczba monitorów. Drugi operator uważa, że ​​naruszona została integralność transakcji, ponieważ: w trakcie jednego zlecenia otrzymał 2 różne stany magazynowe. Taka sytuacja powstała, ponieważ aplikacja pierwszego operatora była w stanie zmienić krotkę danych, która została już odczytana przez aplikację drugiego operatora.

Podsumowując wymienione problemy, można wyróżnić następujące rodzaje konfliktów pomiędzy dwiema równoległymi transakcjami:

· W-W - transakcja 2 próbuje zmodyfikować obiekt zmodyfikowany przez transakcję 1, która się nie zakończyła;

· R-W - transakcja 2 próbuje zmodyfikować obiekt odczytany przez transakcję 1, która się nie zakończyła;

· Transakcja W-R 2 próbuje odczytać obiekt zmodyfikowany przez niezakończoną transakcję 1;

7. Serializowanie transakcji

Aby uniknąć takich konfliktów, konieczne jest opracowanie procedury spójnej realizacji transakcji równoczesnych. Ta procedura musi być zgodna z następującymi zasadami:

1. Podczas realizacji transakcji użytkownik widzi tylko spójne dane. Użytkownik nie powinien widzieć niespójnych danych pośrednich.

2. Gdy w DB 2 transakcje są wykonywane równolegle, to wyniki realizacji transakcji powinny być takie same, jak gdyby została zrealizowana transakcja 1, a następnie transakcja 2 lub odwrotnie.

Procedura implementacji tych zasad nazywana jest serializacją transakcji. Gwarantuje to, że każdy użytkownik uzyskujący dostęp do bazy danych pracuje z nią tak, jakby nie było innych użytkowników uzyskujących dostęp do tych samych danych w tym samym czasie. Wynik wspólnej realizacji transakcji jest równoznaczny z wynikiem sekwencyjnej realizacji tych samych transakcji.

Najprostszym wyjściem byłoby sekwencyjne wykonywanie transakcji, ale takie wyjście nie jest optymalne czasowo, istnieją bardziej elastyczne metody kontrolowania równoległego dostępu do bazy danych. Najczęstszym mechanizmem rozwiązywania tych problemów jest zablokowanie obiektu (na przykład tabeli) na cały czas trwania transakcji. Jeśli transakcja uzyskuje dostęp do zablokowanego obiektu, pozostaje w toku, dopóki obiekt nie zostanie odblokowany, po czym może rozpocząć przetwarzanie. Jednak blokowanie stwarza nowe problemy - opóźnienia transakcji spowodowane blokowaniem.

Tak więc blokady, zwane również zsynchronizowanymi przechwytywaniami obiektów, mogą być stosowane do różnych typów obiektów. Największym obiektem blokującym może być cała baza danych, ale ten rodzaj blokowania sprawi, że baza danych będzie niedostępna dla wszystkich innych aplikacji współpracujących z tą bazą danych. Kolejnym typem obiektu blokady są tabele. Transakcja działająca na stole blokuje go na cały czas trwania transakcji. Ten rodzaj blokowania jest lepszy od poprzedniego, ponieważ umożliwia współbieżne transakcje, które działają na innych tabelach.

Wiele DBMS implementuje blokowanie na poziomie strony. W tym przypadku DBMS blokuje pojedyncze strony na dysku tylko wtedy, gdy transakcja uzyskuje do nich dostęp. Ten rodzaj blokowania jest jeszcze bardziej miękki i pozwala różnym transakcjom działać na tej samej tabeli, jeśli uzyskują dostęp do różnych stron danych.

W niektórych DBMS możliwe jest blokowanie na poziomie wiersza, ale taki mechanizm blokowania wymaga dodatkowych kosztów za jego obsługę. SQL Server dąży do ustawienia blokad na poziomie rekordów, aby zmaksymalizować współbieżność. Wraz ze wzrostem liczby blokad wierszy serwer może przejść do blokowania stron, jeśli liczba rekordów przekroczy próg.

8. Przesłoń blokady na poziomie żądania. Rodzaje blokowania

Jeśli po nazwie tabeli w zdaniu Z następuje jedno z następujących słów kluczowych, żądanie koliduje z menedżerem blokad i stosowany jest określony typ blokady:

· NOLOCK - umożliwia brudny odczyt;

· PAGLOCK - blokowanie na poziomie strony;

· ROWLOCK - blokowanie na poziomie rekordów;

· TABLOCK - blokada wspólnego stołu;

· TABLOCKX - ekskluzywny zamek stołowy

Obecnie problem blokowania jest przedmiotem wielu badań.

Istnieją dwa podstawowe rodzaje zamków (uchwyty synchronizacyjne):

Blokady współdzielone (nietwarde) — ten tryb oznacza wspólne przechwytywanie obiektu i służy do wykonywania operacji odczytu na obiekcie. Zablokowane w ten sposób obiekty nie ulegają zmianie w trakcie realizacji transakcji i są dostępne dla innych transakcji, ale tylko w trybie odczytu;

Wyłączne (twarde) blokady — nie zezwalaj w ogóle na dostęp do danych nikomu poza właścicielem tej blokady. Blokady te są używane do poleceń zmieniających zawartość lub strukturę tabeli i obowiązują do końca transakcji.

Przechwytywanie obiektów przez kilka transakcji odczytu jest zgodne, co oznacza, że ​​kilka transakcji może odczytać ten sam obiekt. Przechwycenie obiektu przez jedną transakcję odczytu nie jest zgodne z innym przechwyceniem przez inną transakcję tego samego obiektu przez zapis. Przechwytywania tego samego obiektu przez różne transakcje zapisu nie są zgodne.

Jednak stosowanie różnych rodzajów zamków prowadzi do problemu zakleszczeń. Problem zakleszczenia pojawił się przy rozważaniu wykonywania równoległych procesów w środowiskach operacyjnych i był również związany z zarządzaniem współdzielonymi (współdzielonymi) obiektami. Przykład zakleszczenia: Załóżmy, że transakcja A blokuje na stałe tabelę 1, a następnie na stałe blokuje tabelę 2. Z drugiej strony transakcja B blokuje na stałe tabelę 2, a następnie na stałe blokuje tabelę 1.

Jeśli obie te transakcje zaczęły działać w tym samym czasie, to po wykonaniu operacji modyfikacji na pierwszej tabeli, obie skończą w nieskończonym oczekiwaniu: transakcja A będzie oczekiwała na zakończenie transakcji B i odblokowanie tabeli 2, a transakcja B na próżno będzie czekać na zakończenie transakcji A i odblokowanie tabeli 1.

Sytuacje mogą być znacznie bardziej złożone. Liczba wzajemnie blokowanych transakcji może być znacznie wyższa. Każda transakcja nie może samodzielnie wykryć tej sytuacji. Musi zostać rozwiązany przez DBMS. Większość komercyjnych DBMS ma mechanizm wykrywania takich zakleszczeń.

Wykrywanie zakleszczeń opiera się na budowaniu (lub utrzymywaniu) wykresu oczekujących transakcji. Wykres oczekujący może być grafem skierowanym, na którego wierzchołkach znajdują się nazwy transakcji. Jeśli transakcja T1 czeka na zakończenie transakcji T2, to strzałka przechodzi od szczytu T1 do szczytu T2. Dodatkowo strzałki mogą być oznaczone nazwami blokowanych obiektów oraz rodzajem blokowania.

Mechanizm blokowania wykorzystuje koncepcję poziomu izolacji blokady, aby określić, ile tabel zostanie zablokowanych. Tradycyjnie stosuje się trzy poziomy izolacji:

· Poziom izolacji, zwany reread, implementuje strategię, dzięki której w ramach danej transakcji nie można zmienić wszystkich rekordów pobranych przez zapytania. Tych rekordów nie można zmienić, dopóki transakcja nie zostanie zakończona.

· Poziom izolacji, zwany wskaźnikiem stabilności, zapobiega zmianie każdego rekordu na czas jego odczytania lub odczytaniu podczas jego modyfikowania.

· Trzeci poziom stabilności nazywa się tylko do odczytu. Tylko do odczytu blokuje całą tabelę i dlatego nie można jej używać z poleceniami aktualizacji. W ten sposób tylko do odczytu zapewnia, że ​​dane wyjściowe zapytania są wewnętrznie spójne z danymi tabeli.

Tak więc narzędzie kontroli współbieżności w DBMS określa, w jakim stopniu jednocześnie wydawane polecenia będą ze sobą kolidować. W nowoczesnym DBMS jest to elastyczne narzędzie, które automatycznie znajduje optymalne rozwiązanie, biorąc pod uwagę zapewnienie maksymalnej wydajności bazy danych i dostępności danych dla zespołów operacyjnych.

9. PYTANIA KONTROLNE

1. Zdefiniuj transakcję. Podaj przykłady transakcji.

2. Wymień i scharakteryzuj właściwości transakcji.

3. Jakie są możliwe opcje realizacji transakcji.

4. Jakie są operatory języka? SQL służyć do pracy z transakcjami w rozszerzonym modelu transakcyjnym?

5. Czy mogę używać poleceń kontroli transakcji w wyzwalaczach?

6. Do czego służy dziennik transakcji?

7. W jakich przypadkach wykonywane jest odzyskiwanie bazy danych z dziennika transakcji?

8. Jakie są opcje logowania transakcji?

9. Jakie są różnice między opcjami rejestrowania transakcji: protokołem opóźnionej aktualizacji i protokołem natychmiastowej aktualizacji.

10. Jakie problemy pojawiają się, gdy użytkownicy pracują równolegle z bazą danych?

11. Jakie obiekty bazy danych można zablokować, aby wdrożyć zasadę izolacji użytkowników?

12. Czy można ustawić rodzaj blokowania w zapytaniach?

13. Jakie są rodzaje przechwytywania obiektów przez wiele transakcji? Które są kompatybilne?

14. Na czym polega problem ślepych zaułków?

Istnieją różne modele transakcji, które można sklasyfikować na podstawie różnych właściwości, w tym struktury transakcji, współbieżności w ramach transakcji, czasu trwania itp.

Obecnie wyróżnia się następujące typy transakcji: transakcje płaskie lub klasyczne, transakcje łańcuchowe oraz transakcje zagnieżdżone.

Płaskie, czyli tradycyjne transakcje charakteryzują się czterema klasycznymi właściwościami: atomowością, spójnością, izolacją, trwałością (wytrzymałością) - KWAS (Atomowość, Konsystencja, Izolacja, Trwałość). Tradycyjne transakcje są czasami określane jako transakcje ACID. Wyżej wymienione właściwości oznaczają:

· Własność atomowości(Atomity) wyraża się w tym, że transakcja powinna być zrealizowana w całości lub wcale.

· Właściwość spójności(Spójność) zapewnia, że ​​w miarę postępu transakcji dane przechodzą z jednego spójnego stanu do drugiego - transakcja nie narusza wzajemnej spójności danych.

· Nieruchomość izolacyjna(Izolacja) oznacza, że ​​transakcje konkurujące o dostęp do bazy danych są fizycznie przetwarzane sekwencyjnie, w oderwaniu od siebie, ale użytkownikom wydaje się, że są wykonywane równolegle.

· Właściwość trwałości(Trwałość) interpretujemy w następujący sposób: jeśli transakcja zakończy się sukcesem, to dokonane przez nią zmiany danych nie mogą zostać utracone w żadnych okolicznościach (nawet w przypadku kolejnych błędów).

Istnieją dwie możliwości sfinalizowania transakcji. Jeśli wszystkie instrukcje zakończą się pomyślnie i podczas transakcji nie wystąpiły żadne awarie sprzętu ani oprogramowania, transakcja zostaje zatwierdzona.

Zatwierdzenie transakcji jest aktem zapisania na dysku zmian w bazie danych, które zostały dokonane podczas wykonywania transakcji.

Dopóki transakcja nie zostanie zatwierdzona, dopuszczalne jest cofnięcie tych zmian, przywrócenie bazy danych do stanu, w jakim była w momencie rozpoczęcia transakcji. Zatwierdzenie transakcji oznacza, że ​​wszystkie wyniki transakcji są stałe. Będą widoczne dla innych transakcji dopiero po zatwierdzeniu bieżącej transakcji. Do tego momentu wszystkie dane, których dotyczy transakcja, będą „widoczne” dla użytkownika w stanie z początku bieżącej transakcji.

Jeśli podczas realizacji transakcji wydarzy się coś, co uniemożliwia jej normalne zakończenie, bazę danych należy przywrócić do stanu pierwotnego. Wycofanie transakcji to akcja, która wycofuje wszystkie zmiany danych, które zostały wprowadzone przez instrukcje SQL, do treści bieżącej oczekującej transakcji.

Każda instrukcja w transakcji wykonuje swoją część pracy, ale wszystkie jej instrukcje muszą zostać wykonane bezwarunkowo, aby cała praca została zakończona pomyślnie. Grupowanie oświadczeń w transakcji mówi SZBD, że cała grupa powinna być wykonywana jako całość, a wykonanie to powinno być obsługiwane automatycznie.

Standard ANSI/ISO SQL definiuje model transakcji oraz funkcje instrukcji COMMIT i ROLLBACK. Norma określa, że ​​transakcja rozpoczyna się od pierwszej instrukcji SQL, zainicjowanej przez użytkownika lub zawartej w programie, zmieniającej aktualny stan bazy danych. Wszystkie kolejne instrukcje SQL stanowią treść transakcji. Transakcja kończy się na jeden z czterech możliwych sposobów (rysunek 11.1):

1. oświadczenie COMMIT oznacza pomyślne zakończenie transakcji; jego użycie powoduje trwałe zmiany w bazie danych w ramach bieżącej transakcji;

2. oświadczenie ROLLBACK przerywa transakcję, anulując zmiany dokonane w bazie danych w ramach tej transakcji; nowa transakcja rozpoczyna się natychmiast po użyciu ROLLBACK;

3. pomyślne zakończenie programu, w którym zainicjowano bieżącą transakcję, oznacza pomyślne zakończenie transakcji (tak jakby użyto instrukcji COMMIT);

4. błędne zakończenie programu przerywa transakcję (tak jakby użyto instrukcji ROLLBACK).

W tym modelu każda instrukcja zmieniająca stan bazy danych jest uznawana za transakcję, dlatego po pomyślnym wykonaniu tej instrukcji baza przechodzi w nowy stabilny stan.

Pierwsze wersje komercyjnych DBMS wdrażały model transakcyjny ANSI/ISO. Później w SYBASE DBMS został zaimplementowany rozszerzony model transakcji, który obejmuje szereg dodatkowych operacji. Model SYBASE wykorzystuje następujące cztery operatory:

· Instrukcja BEGIN TRANSACTION wskazuje początek transakcji. W przeciwieństwie do modelu ANSI / ISO, w którym początek transakcji jest domyślnie określony przez pierwszą instrukcję modyfikacji danych, w modelu SYBASE początek transakcji jest określony jawnie za pomocą instrukcji początku transakcji.

· Oświadczenie COMMIT TRANSACTION informuje o pomyślnym zakończeniu transakcji. Jest to odpowiednik oświadczenia COMMIT w standardowym modelu ANSI/ISO. Ten operator, podobnie jak operator COMMIT, zatwierdza wszystkie zmiany wprowadzone w bazie danych podczas wykonywania transakcji.

· Instrukcja SAVE TRANSACTION tworzy punkt zapisu wewnątrz transakcji, który odpowiada pośredniemu stanowi bazy danych zapisanej w czasie wykonywania tej instrukcji. Instrukcja SAVE TRANSACTION może zawierać nazwę punktu zapisu. Dlatego podczas wykonywania transakcji może być przechowywanych kilka punktów zapisu, odpowiadających kilku stanom pośrednim.

· Operator ROLLBACK ma dwie modyfikacje. W przypadku użycia tej instrukcji bez dodatkowego parametru jest ona interpretowana jako instrukcja rollback dla całej transakcji, czyli w tym przypadku jest równoważna instrukcji ROLLBACK w modelu ANSI/ISO. Jeśli instrukcja wycofania zmian ma parametr i jest zapisana jako ROLLBACK B, jest interpretowana jako instrukcja wycofania częściowej transakcji do punktu zapisu B.

Ryż. 11.1.Model transakcji ANSI / ISO

Zasady zawierania transakcji w rozszerzonym modelu transakcji przedstawiono na rys. 11.2. Na rysunku operatorzy są oznaczeni numerami, aby wygodniej było nam śledzić przebieg transakcji we wszystkich możliwych przypadkach.

Ryż. 11.2.Przykłady realizacji transakcji w modelu rozszerzonym

Transakcja rozpoczyna się jawnym operatorem początku transakcji, który w naszym schemacie ma numer 1. Następnie pojawia się operator 2, który jest operatorem wyszukiwania i nie zmienia aktualnego stanu bazy danych oraz następujące operatory 3 i 4 przenieść bazę danych do nowego stanu. Instrukcja 5 zapisuje ten nowy stan pośredni bazy danych i oznacza go jako stan pośredni w punkcie A. Następnie następują zdania 6 i 7, które przenoszą bazę danych do nowego stanu. A operator 8 zapisuje ten stan jako stan pośredni w punkcie B. Operator 9 wprowadza nowe dane, a operator 10 wykonuje pewne sprawdzenie warunku 1; jeśli spełniony jest warunek 1, to wykonywane jest polecenie 11, które cofa transakcję do stanu pośredniego B. Oznacza to, że konsekwencje działań instrukcji 9 zostają niejako wymazane, a baza danych ponownie powraca do stanu pośredniego B, chociaż po wykonaniu oświadczenia 9 była już w nowym stanie. A po wycofaniu transakcji, zamiast instrukcji 9, która została wykonana wcześniej ze stanu W bazie wykonywane jest oświadczenie 13 wprowadzenia nowych danych, a następnie kontrola przekazywana jest na oświadczenie 14. Instrukcja 14 ponownie sprawdza warunek, ale już trochę nowy warunek 2; jeśli warunek jest spełniony, to kontrola jest przekazywana operatorowi 15, który cofa transakcję do stanu pośredniego A, czyli wszystkie operatory, które zmieniły bazę danych, zaczynając od 6, a kończąc na 13, są uważane za niespełnione, czyli , wyniki ich wykonania zniknęły i znów jesteśmy w stanie A tak jak po wykonaniu operatora 4. Następnie kontrola przekazywana jest operatorowi 17, który aktualizuje zawartość bazy danych, po czym kontrola przekazywana jest operatorowi 18, który jest powiązany z warunkiem sprawdzania 3. Sprawdzanie kończy się albo przekazaniem sterowania operatorowi 20, który zatwierdza transakcję, a baza danych przechodzi do nowego stanu ustalonego i nie można go zmienić w ramach bieżącej transakcji. Lub, jeśli kontrola jest przekazana operatorowi 19, to transakcja jest cofana do początku i baza wraca do stanu początkowego, a wszystkie stany pośrednie zostały już tutaj sprawdzone i nie można wykonać operacji wycofania do tych pośrednich stany po wykonaniu operatora 19.

Oczywiście rozszerzony model transakcji SYBASE obsługuje znacznie bardziej elastyczny mechanizm realizacji transakcji. Punkty zapisu umożliwiają ustawienie znaczników w ramach transakcji, dzięki czemu tylko część pracy wykonanej w ramach transakcji może zostać cofnięta. Zaleca się używanie punktów zapisu w długich i złożonych transakcjach, aby zapewnić funkcjonalność cofania dla określonych instrukcji. Prowadzi to jednak do dodatkowych kosztów zasobów systemowych – operator wykonuje pracę, a zmiany są wtedy anulowane; zazwyczaj lepszym rozwiązaniem mogą być usprawnienia w logice przetwarzania.

Dziennik transakcji

Implementację w SZBD zasady zachowania stanów pośrednich, potwierdzania lub wycofywania transakcji zapewnia specjalny mechanizm, dla którego wsparcia tworzona jest określona struktura systemu, tzw. Dziennik transakcji.

Jednak przeznaczenie dziennika transakcji jest znacznie szersze. Został zaprojektowany w celu zapewnienia niezawodnego przechowywania danych w bazie danych.

A ten wymóg oznacza w szczególności możliwość przywrócenia spójnego stanu bazy danych po wszelkiego rodzaju awariach sprzętu i oprogramowania. Oczywiście do wykonania odbudowy potrzebne są dodatkowe informacje. W zdecydowanej większości nowoczesnych relacyjnych DBMS taka nadmiarowa informacja dodatkowa jest utrzymywana w postaci dziennika zmian bazy danych, najczęściej nazywanego Dziennik transakcji.

Tak więc ogólnym celem rejestrowania zmian w bazie danych jest zapewnienie, że baza danych może zostać przywrócona do spójnego stanu po każdej awarii. Ponieważ podstawą zachowania integralności bazy danych jest mechanizm transakcji, rejestrowanie i odzyskiwanie są ściśle związane z koncepcją transakcji. Ogólne zasady odzyskiwania są następujące:

· Wyniki zatwierdzonych transakcji muszą być zapisane w przywróconym stanie bazy danych;

· Wyniki niezatwierdzonych transakcji nie mogą być obecne w przywróconym stanie bazy danych.

W rzeczywistości oznacza to, że przywracany jest najnowszy spójny stan bazy danych.

Możliwe są następujące sytuacje, w których konieczne jest przywrócenie stanu bazy danych.

· Indywidualne wycofanie transakcji. To wycofanie powinno być stosowane w następujących przypadkach:

o standardową sytuacją dla wycofania transakcji jest jej jawne uzupełnienie instrukcją ROLLBACK;

o nieprawidłowe zakończenie aplikacji, co jest logicznie równoważne wykonaniu instrukcji ROLLBACK, ale fizycznie ma inny mechanizm wykonania;

o wymuszone wycofanie transakcji w przypadku zakleszczenia w równoległym wykonywaniu transakcji. W takim przypadku, aby przełamać impas, transakcję tę można wybrać jako „ofiarę” i jej wykonanie przez jądro DBMS przymusowo przerwać.

· Odzyskiwanie po nagłej utracie zawartości pamięci RAM (miękka awaria). Taka sytuacja może wystąpić w następujących przypadkach:

o w przypadku awaryjnego wyłączenia zasilania;

o w przypadku nieodwracalnej awarii procesora (np. działanie kontroli pamięci RAM) itp. Sytuacja charakteryzuje się utratą tej części bazy danych, która w momencie awarii znajdowała się w buforach pamięci RAM.

· Odzyskiwanie po awarii głównych nośników zewnętrznych bazy danych (twarda awaria). Taka sytuacja, biorąc pod uwagę wystarczająco wysoką niezawodność nowoczesnych urządzeń pamięci zewnętrznej, może wystąpić stosunkowo rzadko, niemniej jednak SZBD powinien być w stanie odtworzyć bazę danych nawet w tym przypadku. Podstawą odtwarzania jest kopia archiwalna oraz dziennik zmian bazy danych.

Aby przywrócić spójny stan bazy danych podczas indywidualnego wycofywania transakcji, należy wyeliminować skutki instrukcji modyfikacji bazy danych, które zostały wykonane w tej transakcji. Aby przywrócić spójny stan bazy danych w przypadku awarii miękkiej, konieczne jest odtworzenie zawartości bazy z zawartości logów transakcji przechowywanych na dyskach. Aby przywrócić spójny stan bazy danych w przypadku wystąpienia twardej awarii, konieczne jest odtworzenie zawartości bazy z kopii archiwalnych i dzienników transakcji, które przechowywane są na nieuszkodzonych nośnikach zewnętrznych.

We wszystkich trzech przypadkach nadmiarowe przechowywanie danych jest podstawą odzyskiwania. Te nadmiarowe dane są przechowywane w dzienniku zawierającym sekwencję rekordów zmian w bazie danych.

Istnieją dwie główne opcje przechowywania informacji dziennika. W pierwszej opcji dla każdej transakcji w ramach tej transakcji utrzymywany jest osobny dziennik zmian lokalnej bazy danych. Te dzienniki są nazywane dziennikami lokalnymi. Służą do indywidualnego wycofywania transakcji i mogą być utrzymywane w pamięci RAM (a dokładniej w pamięci wirtualnej). Ponadto prowadzony jest ogólny dziennik zmian bazy danych, który służy do przywracania stanu bazy danych po miękkich i twardych awariach.

Takie podejście umożliwia szybkie wycofywanie poszczególnych transakcji, ale skutkuje zduplikowanymi informacjami w dziennikach lokalnych i udostępnionych. Dlatego częściej stosowana jest druga opcja - utrzymywanie jedynie ogólnego dziennika zmian w bazie danych, który jest również wykorzystywany przy wykonywaniu poszczególnych cofnięć. Następnie rozważymy tę konkretną opcję.

Ogólną strukturę logu można warunkowo przedstawić w postaci sekwencyjnego pliku, który rejestruje każdą zmianę w bazie danych, jaka ma miejsce podczas realizacji transakcji. Wszystkie transakcje mają swoje własne numery wewnętrzne, więc wszystkie zmiany dokonywane przez wszystkie transakcje są rejestrowane w jednym dzienniku transakcji.

Każdy wpis w dzienniku transakcji jest oznaczony numerem transakcji, do której należy oraz wartościami atrybutów, które zmienia. Dodatkowo dla każdej transakcji w dzienniku zapisywane jest polecenie rozpoczęcia i zakończenia transakcji (patrz Rysunek 11.3).

Dla większej niezawodności dziennik transakcji jest często duplikowany przez narzędzia systemowe komercyjnego DBMS, dlatego ilość pamięci zewnętrznej jest wielokrotnie większa niż rzeczywista ilość danych przechowywanych w pamięci masowej.

Istnieją dwie alternatywy dla rejestrowania transakcji: protokół opóźnionej aktualizacji i protokół natychmiastowej aktualizacji.

Rejestrowanie zmian oczekujących zakłada następujący mechanizm wykonywania transakcji:

1. W momencie rozpoczęcia transakcji T1 następuje zapis do protokołu

<Т1 Begin transaction>

2. W trakcie realizacji transakcji do protokołu zapisywana jest nowa wartość dla każdego zmienionego rekordu: ... Tutaj ID_RECORD jest unikalnym numerem rekordu.

3. Jeżeli wszystkie czynności składające się na transakcję T1 zostały pomyślnie zakończone, transakcja jest częściowo rejestrowana i wprowadzana do protokołu.<Т1 СОММIТ>.

4. Po zatwierdzeniu transakcji zapisy protokołu związane z T1 są wykorzystywane do wprowadzenia odpowiednich zmian w bazie danych.

5. Jeśli wystąpi awaria, DBMS przegląda dziennik i dowiaduje się, które transakcje należy powtórzyć. Transakcja T1 musi zostać powtórzona, jeśli protokół zawiera oba rekordy<Т1 BEGIN TRANSACTION и <Т1 СОММIТ>... Baza danych może być w stanie niespójnym, jednak wszystkie nowe wartości zmienionych pozycji danych są zawarte w logu, a to wymaga ponownego wykonania transakcji. W tym celu wykorzystywana jest pewna procedura systemowa REDOQ, która zastępuje wszystkie wartości pozycji danych nowymi, patrząc na protokół w bezpośredniej kolejności.

6. Jeśli protokół nie zawiera polecenia zatwierdzenia transakcji COMMIT, nie jest wymagane żadne działanie, a transakcja jest uruchamiana ponownie.

Ryż. 11.3.Dziennik transakcji

Alternatywny mechanizm z natychmiastowym wykonaniem zapewnia natychmiastowe dokonywanie zmian w bazie danych, a do protokołu wprowadzane są nie tylko nowe, ale również wszystkie stare wartości zmienionych atrybutów, dzięki czemu każdy rekord wygląda tak<Т1, ID_RECORD, атрибут новое значение старое значение...>... W takim przypadku zapisanie do dziennika poprzedza bezpośrednie wykonanie operacji na bazie danych. Gdy transakcja zostanie zatwierdzona, to znaczy, że napotkano polecenie<Т1 СОММIТ>i jest wykonywany, to wszystkie zmiany są już wprowadzone w bazie danych i nie są wymagane żadne dalsze działania w odniesieniu do tej transakcji.

Gdy transakcja zostanie wycofana, wykonywana jest procedura systemowa UNDO(), która zwraca wszystkie stare wartości w anulowanej transakcji, postępując sekwencyjnie przez protokół zaczynając od polecenia BEGIN TRANSACTION.

Do przełączania awaryjnego używany jest następujący mechanizm:

· Jeżeli transakcja zawiera polecenie rozpoczęcia transakcji, ale nie zawiera polecenia commit z potwierdzeniem jego wykonania, to wykonywana jest sekwencja działań jak przy wycofywaniu transakcji, czyli przywracane są stare wartości .

· Jeśli niepowodzenie wystąpiło po wykonaniu ostatniego polecenia zmiany bazy danych, ale przed wykonaniem polecenia zatwierdzenia, to polecenie zatwierdzenia jest wykonywane i nie są wprowadzane żadne zmiany w bazie danych. Praca odbywa się tylko na poziomie protokołu.

· Należy jednak zauważyć, że problemy z odzyskiwaniem wyglądają na znacznie bardziej złożone niż opisane wcześniej algorytmy, biorąc pod uwagę, że zmiany zarówno w dzienniku, jak iw bazie danych nie są natychmiast rejestrowane, ale buforowane. Poświęcony jest temu następny rozdział.

Rejestrowanie i buforowanie

Rejestrowanie zmian jest ściśle związane nie tylko z zarządzaniem transakcjami, ale także z buforowaniem stron bazy danych w pamięci.

Jeśli rekord zmiany bazy danych, który powinien trafić do dziennika dla dowolnej operacji modyfikacji bazy danych, zostałby faktycznie natychmiast zapisany do pamięci zewnętrznej, znacznie spowolniłoby to działanie systemu. W związku z tym zapisy logu są również buforowane: podczas normalnej pracy kolejna strona jest odkładana do pamięci zewnętrznej logu tylko wtedy, gdy jest zapełniona rekordami.

Wyzwaniem jest zaprojektowanie ogólnej polityki push, aby zapewnić możliwość odzyskania bazy danych po awarii.

Problem nie pojawia się w przypadku pojedynczych wycofań transakcji, ponieważ w takich przypadkach zawartość pamięci głównej nie jest tracona i można wykorzystać zarówno zawartość bufora logu, jak i buforów stron bazy danych. Jeśli jednak wystąpi awaria programowa i zawartość buforów zostanie utracona, w celu odzyskania bazy danych należy mieć spójny stan dziennika i bazy danych w pamięci zewnętrznej.

Podstawową zasadą spójnej polityki usuwania bufora dziennika i buforów stron bazy danych jest to, że zmiana obiektu bazy danych musi zostać zapisana w zewnętrznej pamięci dziennika, zanim zmodyfikowany obiekt znajdzie się w zewnętrznej pamięci bazy danych. Odpowiedni protokół logowania (i zarządzania buforowaniem) nosi nazwę Write Ahead Log (WAL) – „najpierw zapisz do logu” i polega na tym, że chcąc zapisać zmodyfikowany obiekt bazy danych do pamięci zewnętrznej, należy najpierw upewnić się, że dziennik transakcji jest zapisywany w zewnętrznej pamięci rekordów o jego zmianie.

Innymi słowy, jeżeli w pamięci zewnętrznej bazy danych znajduje się jakiś obiekt bazy danych, w stosunku do którego została wykonana operacja modyfikacji, to w pamięci zewnętrznej logu koniecznie znajduje się zapis odpowiadający tej operacji. Nie jest odwrotnie, to znaczy, jeśli w zewnętrznej pamięci dziennika znajduje się zapis o jakiejś operacji zmiany obiektu bazy danych, to sam zmieniony obiekt może nie być obecny w zewnętrznej pamięci bazy danych.

Dodatkowy warunek wypychania buforów jest narzucany przez wymaganie, że każda pomyślnie zakończona transakcja musi być faktycznie zatwierdzona w pamięci zewnętrznej. Niezależnie od tego, która awaria wystąpi, system musi mieć możliwość przywrócenia stanu bazy danych zawierającego wyniki wszystkich transakcji zatwierdzonych w momencie awarii.

Prostym rozwiązaniem byłoby wyskakujące okienko dziennika, po którym następuje masowe wyskakiwanie buforów stron bazy danych zmodyfikowanych przez transakcję. Odbywa się to dość często, ale wprowadza znaczne obciążenie podczas wykonywania operacji zatwierdzania.

Okazuje się, że minimalnym wymogiem zapewnienia możliwości przywrócenia ostatniego spójnego stanu bazy danych jest to, że po zatwierdzeniu transakcji wszystkie rekordy zmian bazy danych przez tę transakcję są umieszczane w zewnętrznej pamięci dziennika. W tym przypadku ostatnim zapisem w logu dokonanym w imieniu tej transakcji jest specjalny zapis o zakończeniu transakcji.

Przyjrzyjmy się teraz, jak można wykonywać operacje przywracania bazy danych w różnych sytuacjach, jeśli system utrzymuje wspólny dziennik buforowany dla wszystkich transakcji i jest utrzymywany zgodnie z protokołem WAL.

Indywidualne wycofanie transakcji

Aby móc wykonać wycofanie pojedynczej transakcji w dzienniku ogólnym, wszystkie rekordy dziennika dla tej transakcji są połączone w odwrotną listę. Szczyt listy transakcji zakończonych niepowodzeniem to ostatnia zmiana bazy danych dokonana przez tę transakcję. Dla zrealizowanych transakcji (których pojedyncze wycofania nie są już możliwe) początkiem listy jest zapis końca transakcji, który koniecznie jest wpychany do zewnętrznej pamięci logu.Końcem listy jest zawsze pierwszy zapis zmiany bazy danych dokonanej przez tę transakcję. Zazwyczaj każdemu rekordowi przypisywany jest unikalny identyfikator transakcji, dzięki czemu dana transakcja umożliwia przywrócenie bezpośredniej listy rekordów zmian w bazie danych.

Tak więc wycofywanie pojedynczej transakcji (podkreślamy raz jeszcze, że jest to możliwe tylko w przypadku transakcji niezatwierdzonych) odbywa się w następujący sposób:

· Następny rekord jest wybierany z listy tej transakcji.

· Wykonywana jest operacja odwrotna: zamiast operacji INSERT wykonywana jest odpowiednia operacja DELETE, wykonywana jest operacja INSERT zamiast operacji DELETE, a zamiast bezpośredniej operacji UPDATE odwrotna operacja UPDATE przywraca poprzedni stan bazy danych obiekt.

· Każda z tych operacji odwrotnych jest również rejestrowana. Właściwie nie jest to konieczne dla pojedynczego wycofania, ale podczas wykonywania pojedynczego wycofania transakcji może wystąpić awaria miękka, po odzyskaniu, z której konieczne będzie wycofanie transakcji, dla której indywidualne wycofanie nie zostało w pełni wykonane.

· Jeśli wycofanie zakończy się pomyślnie, w dzienniku zostanie zapisany zapis zakończenia transakcji. Z punktu widzenia logu taka transakcja jest popełniona.

Odzyskiwanie po miękkiej awarii

Jednym z głównych problemów związanych z odzyskiwaniem po awarii miękkiej jest to, że pojedyncza logiczna operacja zmiany bazy danych może modyfikować wiele fizycznych bloków bazy danych, takich jak strona danych i wiele stron indeksu. Strony bazy danych są buforowane w pamięci RAM i wyskakiwane niezależnie. Pomimo zastosowania protokołu WAL, po awarii miękkiej, zestaw stron w pamięci zewnętrznej bazy danych może okazać się niespójny, to znaczy niektóre strony pamięci zewnętrznej odpowiadają obiektowi przed zmianą, a niektóre - po zmianie. Operacje na poziomie logicznym nie mają zastosowania do tego stanu obiektu.

Stan pamięci zewnętrznej bazy danych nazywamy spójnym fizycznie, jeśli zestawy stron wszystkich obiektów są spójne, to znaczy odpowiadają stanowi obiektu przed lub po zmianie.

Przyjmiemy, że log wyznacza punkty fizycznej spójności bazy danych - momenty w czasie, w których pamięć zewnętrzna zawiera spójne wyniki operacji, które zakończyły się przed odpowiednim punktem w czasie, a nie ma wyników operacji, które miały nie zostało zakończone, a bufor dziennika jest umieszczany w pamięci zewnętrznej. Nieco później przyjrzymy się, jak można osiągnąć spójność fizyczną. Nazwijmy takie punkty tpc (czas fizycznej zgodności) - punkty fizycznej zgodności.

Wówczas do czasu awarii miękkiej możliwe są następujące stany transakcji:

· Transakcja została pomyślnie zakończona, tzn. operacja transakcji COMMIT została potwierdzona i dla wszystkich operacji transakcji otrzymano potwierdzenie jej wykonania w pamięci zewnętrznej;

· Transakcja została pomyślnie zakończona, ale dla niektórych operacji nie otrzymano potwierdzenia ich wykonania w pamięci zewnętrznej;

· Transakcja odebrana i wykonana polecenie ROLLBACK;

· Transakcja nie została zakończona.

Spójność fizyczna bazy danych

Jak zapewnić, że w bazie danych są punkty fizycznej spójności, czyli jak przywrócić stan bazy danych z czasu tpc? W tym celu stosuje się dwa główne podejścia: podejście oparte na cieniu i podejście, które wykorzystuje rejestrowanie zmian w bazie danych strona po stronie.

Po otwarciu pliku do pamięci RAM wczytywana jest tablica mapowania numerów jego bloków logicznych na adresy bloków fizycznych pamięci zewnętrznej. Kiedy dowolny blok pliku jest modyfikowany, nowy blok jest przydzielany w pamięci zewnętrznej. W takim przypadku bieżąca tabela mapowania (w pamięci RAM) zostaje zmieniona, a tabela cieni pozostaje niezmieniona. Jeśli podczas pracy z otwartym plikiem wystąpi awaria, stan pliku przed jego otwarciem jest automatycznie zapisywany w pamięci zewnętrznej. Aby jawnie przywrócić plik, wystarczy ponownie wczytać tablicę mapowania cieni do pamięci RAM.

Ogólną ideę mechanizmu cienia pokazano na ryc. 11.4.

Ryż. 11.4.Korzystanie ze stołów do wyświetlania cieni

W kontekście bazy danych mechanizm cienia jest używany w następujący sposób. Punkty kontrolne są wykonywane okresowo. Aby to zrobić, wszystkie operacje logiczne są zakończone, wypychane są wszystkie bufory pamięci głównej, których zawartość nie odpowiada zawartości odpowiednich stron pamięci zewnętrznej. Tablica cieni dla mapujących pliki bazy danych zostaje zastąpiona obecną (bardziej poprawnie, aktualna tablica mapowań jest zapisywana w miejscu tablicy cieni).

Przywracanie do tpc jest natychmiastowe: bieżąca tablica mapowania jest zastępowana tablicą cienia (podczas przywracania tablica mapowania cieni jest po prostu odczytywana). Wszystkie problemy z odzyskiwaniem są rozwiązywane, ale kosztem nadmiernego wykorzystania pamięci zewnętrznej. Na granicy możesz potrzebować dwa razy więcej pamięci zewnętrznej niż faktycznie potrzebujesz do przechowywania bazy danych. Mechanizm cieni jest niezawodnym, ale zbyt prymitywnym narzędziem. Spójny stan pamięci zewnętrznej jest zapewniony w jednym punkcie czasowym, wspólnym dla wszystkich obiektów. W rzeczywistości wystarczy mieć zestaw spójnych zestawów stron, z których każda może odpowiadać własnym próbkom czasu.

Aby spełnić tak słabsze wymaganie, wraz z logicznym logowaniem operacji zmiany bazy danych, zmiany strona po stronie są rejestrowane. Pierwszym krokiem do odzyskania po awarii miękkiej jest wycofywanie nieudanych operacji logicznych o jedną stronę na raz. Podobnie jak w przypadku rekordów logicznych w odniesieniu do transakcji, ostatnia zmiana strona po stronie z pojedynczej operacji logicznej jest końcem operacji.

W tym podejściu istnieją dwie metody rozwiązania problemu. Pierwsza metoda utrzymuje wspólny dziennik operacji logicznych i stronicowania. Oczywiście obecność dwóch typów zapisów, interpretowanych na zupełnie odmienne sposoby, komplikuje strukturę czasopisma. Ponadto zapisy zmian strona po stronie, których aktualność ma charakter lokalny, znacznie (i niezbyt wymownie) powiększają czasopismo.

Dlatego coraz popularniejsze staje się prowadzenie osobnego (krótkiego) dziennika stronicowanych zmian. Ta technika jest stosowana na przykład w dobrze znanym produkcie Informix Online.

Załóżmy, że w jakiś sposób udało się przywrócić pamięć zewnętrzną bazy danych do stanu z punktu w czasie tpc (jak to zrobić - trochę później). Następnie:

· Nie jest wymagane żadne działanie w przypadku transakcji T1. Zakończył się przed tpc, a wszystkie jego wyniki znajdują odzwierciedlenie w zewnętrznej pamięci bazy danych.

· W przypadku transakcji T2 konieczne jest ponowne wykonanie pozostałych operacji (powtórz). Rzeczywiście, w pamięci zewnętrznej nie ma kompletnie śladów po operacjach, które zostały wykonane w transakcji T2 po chwili tpc. W związku z tym bezpośrednia reinterpretacja operacji T2 jest poprawna i prowadzi do logicznie spójnego stanu bazy danych (ponieważ transakcja T2 zakończyła się sukcesem przed awarią soft, log zawiera zapis wszystkich zmian dokonanych przez tę transakcję).

· W przypadku transakcji TK, pierwsza część operacji (cofnij) musi być wykonana w przeciwnym kierunku. Rzeczywiście, w zewnętrznej pamięci bazy danych wyniki operacji TK, które zostały wykonane po chwili tpc, są całkowicie nieobecne. Z drugiej strony pamięć zewnętrzna gwarantuje, że zawiera wyniki operacji TK, które zostały wykonane przed tpc. W konsekwencji odwrotna interpretacja operacji TK jest poprawna i prowadzi do spójnego stanu bazy danych (ponieważ transakcja TK nie została zakończona do czasu awarii miękkiej, podczas odzyskiwania należy zachować wszystkie konsekwencje jej wykonania ).

· W przypadku transakcji T4, które rozpoczęły się po tpc i zakończyły przed miękkim niepowodzeniem, należy wykonać pełne ponowne wykonanie.

Wreszcie, nie jest wymagane żadne działanie dla transakcji T5, która rozpoczęła się po momencie tpc i nie miała czasu na zakończenie do czasu awarii miękkiej. Wyniki tej transakcji są całkowicie nieobecne w zewnętrznej pamięci bazy danych.

Odzyskiwanie po ciężkiej awarii

Oczywiste jest, że dziennik zmian bazy danych nie wystarcza do przywrócenia bazy danych do ostatniego spójnego stanu po poważnej awarii. W takim przypadku podstawą odzyskania jest logi i kopia zapasowa bazy danych.

Odzyskiwanie rozpoczyna się od skopiowania bazy danych z powrotem z kopii archiwalnej. Następnie wykonywane jest ponowne wykonanie dla wszystkich zakończonych transakcji, czyli operacje są ponownie wykonywane w kolejności forward.

Dokładniej dzieje się tak:

· Wszystkie operacje wykonywane są wzdłuż kłody w kierunku do przodu;

· W przypadku transakcji, które nie zostały zakończone do czasu awarii, wykonywane jest wycofanie.

W rzeczywistości, ponieważ twarda awaria nie powoduje utraty buforów pamięci RAM, możliwe jest przywrócenie bazy danych do takiego poziomu, że nawet nieudane transakcje mogą być kontynuowane. Ale zwykle się tego nie robi, ponieważ odzyskiwanie sprawności po ciężkiej awarii jest dość długim procesem.

Chociaż istnieją specjalne wymagania dotyczące logowania pod względem niezawodności, w zasadzie można je stracić. Wtedy jedynym sposobem przywrócenia bazy danych jest powrót do kopii archiwalnej. Oczywiście w tym przypadku nie będziesz w stanie uzyskać ostatniego spójnego stanu bazy danych, ale to lepsze niż nic.

Ostatnie zagadnienie, któremu pokrótce się przyjrzymy, dotyczy tworzenia kopii zapasowych bazy danych. Najprostszym sposobem jest zarchiwizowanie bazy danych, gdy dziennik jest pełny. W logu wprowadzana jest tak zwana „żółta strefa”, po osiągnięciu której tworzenie nowych transakcji jest czasowo blokowane. Gdy wszystkie transakcje zostaną zakończone, a zatem baza danych będzie w spójnym stanie, możesz ją zarchiwizować, a następnie ponownie rozpocząć wypełnianie dziennika.

Kopię zapasową bazy danych można tworzyć rzadziej, niż zapełni się dziennik. Jeśli dziennik jest pełny i wszystkie rozpoczęte transakcje zostały zakończone, możesz zarchiwizować sam dziennik. Ponieważ taki zarchiwizowany dziennik jest zasadniczo wymagany tylko do odtworzenia zarchiwizowanej kopii bazy danych, zarchiwizowane informacje dziennika można znacznie skompresować.

Każdorazowo przy użyciu karty bankowej do zapłaty za towar, wypłaty środków lub wykonania przelewu klient banku dokonuje określonych transakcji. I choć wszystkie transakcje trwają tylko kilka minut, pełny cykl operacji to dość rozbudowany proces, który obejmuje wysyłanie żądań wypłaty pieniędzy, ich przetwarzanie i realizację.

Transakcja to każda operacja dokonana kartą bankową, której wykonanie prowadzi do zmiany stanu rachunku klienta. Transakcja może być przeprowadzona w czasie rzeczywistym (online) oraz offline.

Transakcje internetowe wymagają obowiązkowego potwierdzenia płatności w momencie dokonywania płatności lub przelewu środków.

Transakcje internetowe obejmują przelewy między kartami, operacje wypłaty gotówki w bankomatach, operacje rozliczeniowe w punktach detalicznych i sklepach. Rozważ proces dokonywania transakcji online na przykładzie płatności za przedmiot w centrum handlowym.

W operację zaangażowane są trzy strony:

  • bank przejmujący obsługujący wybraną placówkę (jest to jego terminal POS zainstalowany w sklepie);
  • bank wydający obsługujący płatniczą kartę bankową;
  • międzynarodowy system płatniczy, który jest ogniwem pośrednim w rozliczeniach transakcji (Visa, MasterCard itp.).

Zamówienie transakcji online

Transakcja rozliczeniowa rozpoczyna się od momentu przekazania karty płatniczej kasjerowi i odczytania przez terminal POS danych niezbędnych do dokonania płatności (numer karty, okres ważności, imię i nazwisko właściciela oraz inne informacje zaszyfrowane na taśmie magnetycznej). Odczytane informacje przekazywane są do banku przejmującego obsługującego terminal POS (z reguły sklepy zawierają specjalne umowy na obsługę terminali, zgodnie z którymi za każdą transakcję naliczane są prowizje).

Otrzymane dane są przesyłane przez bank przejmujący do centrum przetwarzania danych (DPC) międzynarodowego systemu płatniczego obsługującego kartę.

Data center sprawdza obecność lub brak karty płatniczej na liście przystanków (karty podejrzane o oszustwo mogą pojawić się na liście przystanków), w wyniku czego operacja zostaje zatwierdzona lub odrzucona.

Następnie informacje są przekazywane do centrum przetwarzania banku wydającego, gdzie płatność jest zatwierdzana. Tutaj transakcja jest sprawdzana pod kątem legalności: sprawdzane jest, czy są wystarczające środki na zakończenie operacji, sprawdzana jest zgodność wprowadzonego kodu PIN z rzeczywistą wartością. Ponadto przeprowadzana jest kontrola przekroczenia ustalonego limitu wykonywania operacji.

Odpowiedź banku wydającego jest odsyłana przez centrum danych do banku przejmującego i sklepu. Szczegóły płatności są wyświetlane na czeku, który jest przekazywany kupującemu.

Funkcje transakcji online i offline

Rozważane działania przy dokonywaniu transakcji online uzupełniają interakcję między kupującym a sklepem. Ale sam proces transakcyjny na tym się nie kończy. Faktem jest, że środki nie są natychmiast pobierane z karty: są tymczasowo blokowane. Środki są przelewane do sklepu z konta agenta rozliczeniowego i obciążają kartę dopiero po przekazaniu przez bank przejmujący dokumentu finansowego wystawcy w celu ich obciążenia. Może się to zdarzyć w ciągu kilku dni lub nawet miesiąca.

Transakcje offline przeprowadzane są na innej zasadzie. Przechodzą bez czynności weryfikacyjnych przez zdalną stronę i zatwierdzenia lub odrzucenia. Transakcja jest z góry zatwierdzona, saldo na karcie bankowej zostaje zarezerwowane, a wszystkie szczegóły płatności zapisywane są w pamięci terminala płatniczego.

Transakcja offline jest wykonywana później, gdy informacje zgromadzone w terminalu są przesyłane kanałami komunikacyjnymi do obsługującego banku. Od momentu wezwania do faktycznej zapłaty mija zwykle kilka dni.

Transakcje offline są stosowane w przypadkach, gdy nie jest możliwe nawiązanie połączenia z centrum przetwarzania w czasie rzeczywistym (w samolotach, autobusach, taksówkach itp.).

Blokowanie i anulowanie transakcji

Najczęstsze transakcje to płatności w sklepach, przelewy pieniężne i wypłaty gotówki. Istnieje kilka powodów, dla których transakcje mogą być zabronione.

Najczęstsze z nich to:

  • karta bankowa została zablokowana;
  • na karcie bankowej nie ma wystarczających środków do zakończenia operacji;
  • karta płatnicza wprowadziła ograniczenia w dokonywaniu płatności;
  • karta płatnicza straciła ważność;
  • wystąpił błąd podczas wprowadzania kodu PIN;
  • karta bankowa została uwzględniona na liście stop pod zarzutem prania pieniędzy, oszustwa itp .;
  • występują problemy techniczne (na stronie internetowej, z bankomatem itp.).

Jeśli zakaz transakcji nie jest związany z niewystarczającym saldem karty, należy skontaktować się z bankiem obsługującym, aby rozwiązać problemy. W niektórych przypadkach transakcje można anulować z inicjatywy samych klientów (oczywiście, jeśli nie mówimy o wypłatach gotówki). Musisz wiedzieć o możliwości anulowania transakcji, aby móc nieuczciwie zwrócić środki pobrane z karty.

Najłatwiej jest anulować transakcję w dniu jej wykonania.

Funkcja anulowania operacji znajduje się w samych terminalach.

Jeżeli dane z terminali zostały już przekazane do banku, należy skontaktować się z samą instytucją finansową.