Oracle
 sql >> Baza danych >  >> RDS >> Oracle

Co to jest Cofanie i ponawianie w bazie danych Oracle

Wiele osób często zadaje mi pytania

Co to jest Cofanie i ponawianie w bazie danych Oracle ? Czego używa?

Staram się rozwiać wszystkie wątpliwości w tym poście

Co to jest Cofnij w Oracle?

Cofnij jest przechowywany w obszarze tabel Cofnij w bazie danych. Przechowuje wartości „przed” zmienionych bloków danych za każdym razem, gdy wydamy instrukcję INSERT, Update lub DELETE (operacja DML). Kiedy wydajemy jakiekolwiek polecenie DML, zmienione bloki są przechowywane w buforze pamięci podręcznej, a wartości przed dla tych zmienionych bloków w segmentach UNDO. Za każdym razem, gdy wydajemy polecenie ROLLBACK, używa on segmentu cofania, aby przywrócić poprzednią wartość.

Działa to tak samo jak Cofnij w Notatniku lub Microsoft word

Cofnięcie usunięcia jest bardziej przydatne niż w przypadku wstawienia. Dzieje się tak, ponieważ cofnięcie usunięcia jest w rzeczywistości ponownym wstawieniem całego wiersza. Tak więc ma zachowanie wartości dla każdej kolumny wiersza, aby móc „cofnąć” usunięcie.
Odwrotnie, cofnięcie wstawienia to usunięcie wiersza według ROWID – co nie musi zachowywać wartości są usuwane.

Cofnij zapewnia nam również spójność odczytu użytkownikowi, ponieważ widzi on tylko poprzednie wartości, dopóki transakcja nie zostanie zatwierdzona. Aby wyjaśnić, podam jeden przykład

Użytkownik A uruchomi kursor wyboru na stole w czasie t .Kursor będzie działał przez jakiś czas

Użytkownik B zaczyna aktualizować tę samą tabelę w czasie t’.

Teraz użytkownik A powinien otrzymać spójną do odczytu wersję tabeli o godzinie t. Ale bloki są aktualizowane przez użytkownika B po pewnym czasie.

Dlatego Oracle używa segmentów Cofnij, aby przywrócić obraz sprzed aktualizacji dla tych bloków z segmentów Cofnij, aby uzyskać spójne widoki odczytu

Cofnij nie są niszczone natychmiast po zatwierdzeniu lub wycofaniu, ponieważ będą używane w mechanizmie spójności odczytu.

Są one również używane w zapytaniach dotyczących flashbacków, aby zobaczyć stare zatwierdzone dane za pomocą cofnięcia przywracania.

Jak długo trwa cofnięcie danych przechowywanych w bazie danych?
Oracle zapewnia elastyczność, jak długo powinny być przechowywane dane cofania za pomocą parametru undo_retention. Możemy ustawić parametr undo_management na automatyczny, aby oracle zarządzał retencją cofania (domyślnie), lub nawet ustawić tę wartość ręcznie, a jej wartość powinna być większa niż czas zabierany przez najdłużej działające zapytanie w Twojej bazie danych. W 11g Onward Oracle dostroił ten parametr automatycznie zgodnie z rozmiarem obszaru tabel cofania

Co to jest transakcja ?
Transakcja jest zbiorem instrukcji języka manipulacji danymi SQL (DML) traktowanych jako jednostka logiczna.
Niepowodzenie jakiejkolwiek instrukcji skutkuje „cofnięciem” transakcji.Jeżeli wszystkie instrukcje zostaną przetworzone, SQLPlus lub aplikacja programistyczna wyda polecenie COMMIT, aby zmiany w bazie danych były trwałe. Transakcje są zatwierdzane niejawnie, jeśli użytkownik normalnie rozłącza się z Oracle.
Nienormalne rozłączenia powodują wycofanie transakcji. Polecenie ROLLBACK służy do anulowania (nie zatwierdzenia) transakcji, która jest w postęp.

Co to jest ponawianie w Oracle?

Redo oznacza rejestrowanie wykonanych prac, aby praca nie została utracona. Logi REDO są wykorzystywane do odzyskiwania. Za każdym razem, gdy wstawiamy do bazy danych, wykonuje ona następujące czynności

  1. Wstaw wiersz do bufora
  2. wygeneruj cofnięcie w buforze
  3. Zapisz ponawiane zmiany, tj. wstawiaj wiersze w dziennikach ponawiania
  4. Zapisz zmiany ponawiania dla segmentów cofania w dziennikach ponawiania

Tak więc każda operacja DML wykonana w bazie danych jest zapisywana w dziennikach ponawiania w celu odzyskania

Ponawianie jest najpierw zapisywane w buforze dziennika ponawiania w SGA. Proces zapisu dziennika (LGWR) zapisuje te zmiany z „bufora ponawiania dziennika” do ponawiania plików dziennika na dysku

Ponawianie dzienników pomaga w przywróceniu utraty danych z powodu błędu ludzkiego, błędu systemu operacyjnego, awarii dysku twardego.

Dzienniki ponawiania są krytyczne dla działania bazy danych, ponieważ zapewniają odporność na błędy.

Przed zapisaniem zmian w tabelach w pliku danych Oracle najpierw zapisz bufor ponawiania w pliku dzienników ponawiania.

mamy opcję braku logowania dla niektórych operacji, aby nie generować buforów ponawiania.

Jak działają dzienniki ponawiania
Serwer Oracle sekwencyjnie rejestruje wszystkie zmiany wprowadzone w bazie danych w buforze dziennika ponawiania. Wpisy dotyczące ponawiania są zapisywane z bufora dziennika ponawiania do jednej z grup dzienników ponawiania online, zwanej bieżącą grupą dzienników ponawiania online, przez proces LGWR. LGWR zapisuje w
następujących sytuacjach:
• Gdy transakcja zostaje zatwierdzona
• Gdy bufor dziennika przeróbek zapełni się w jednej trzeciej
• Gdy zmienionych rekordów jest więcej niż megabajt w buforze dziennika ponawiania
• Zanim DBWn zapisze zmodyfikowane bloki w pamięci podręcznej bufora bazy danych do plików danych,
Ponawianie dzienników jest używane w sposób cykliczny. Każda grupa plików dziennika ponawiania jest identyfikowana przez numer porządkowy dziennika, który jest zastępowany za każdym razem, gdy dziennik jest ponownie używany. LGWR zapisuje sekwencyjnie pliki dziennika przeróbek online. Gdy bieżąca grupa dzienników ponownego wykonywania online jest wypełniona, LGWR zaczyna zapisywać do następnej grupy. Nazywa się to przełącznikiem dziennika. Po zapełnieniu ostatniego dostępnego pliku dziennika ponawiania online, LGWR powraca do pierwszej grupy dzienników ponawiania online
i zaczyna ponownie pisać.

Powiązane artykuły

jak znaleźć sesję generującą wiele powtórzeń
zmień plik dziennika przełącznika systemu v/s dziennik archiwum bieżące
odtwórz ponownie pliki dziennika w bazie danych Oracle
starszy oracle dba o pytania dotyczące wywiadów


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zresetować sekwencję w Oracle?

  2. Funkcja NLS_COLLATION_NAME() w Oracle

  3. JDBC — Oracle ArrayIndexOutOfBoundsException

  4. Co oznacza symbol SQL Select || oznaczać?

  5. Przetrwanie audytu Oracle