sql >> Databáze >  >> RDS >> Oracle

Co je Undo and Redo v databázi Oracle

Mnoho lidí mi často klade otázky

Co je Zpět a opakovat v databázi Oracle ? Co to používá?

Snažím se odstranit všechny pochybnosti o tom zde v příspěvku

Co je Zpět v Oracle?

Zpět se ukládá v tabulkovém prostoru Zpět v databázi. Ukládá hodnoty dříve změněných datových bloků, kdykoli vydáme příkaz vložení, aktualizace nebo odstranění (operace DML). Když vydáme jakýkoli příkaz DML, změněné bloky jsou uloženy ve vyrovnávací paměti a předchozí hodnoty pro tyto změněné bloky v segmentech UNDO. Kdykoli zadáme příkaz ROLLBACK, použije segment undo k vrácení zpět na předchozí hodnotu .

Je to stejné jako Undo v programu Poznámkový blok nebo Microsoft word

Zpět pro odstranění je více pro než pro vložení. Je to proto, že zpět pro odstranění je ve skutečnosti opětovné vložení celého řádku. Má tedy hodnoty zachování pro každý ze sloupců řádku, aby bylo možné „zrušit“ odstranění.
Naopak, vrácením zpět pro vložení je odstranění řádku pomocí ROWID – které se nemusí zachovat hodnoty jsou odstraňovány.

Zpět nám také poskytuje  konzistenci čtení pro uživatele, protože může vidět pouze předchozí hodnoty, dokud není transakce potvrzena. Pro vysvětlení bych uvedl jeden příklad

Uživatel A spustí výběrový kurzor na stole v čase t. Kurzor poběží nějakou dobu

Uživatel B začne aktualizovat stejnou tabulku v čase t'.

Nyní by měl uživatel A získat konzistentní verzi tabulky v čase t. Ale bloky jsou po nějaké době aktualizovány uživatelem B.

Oracle tedy používá segmenty Zpět k obnovení předchozího obrazu aktualizace pro tyto bloky ze segmentů Zpět, aby získal konzistentní zobrazení pro čtení

Vrácení zpět není zničeno ihned po odevzdání nebo vrácení zpět, protože bude použito v konzistentním mechanismu čtení.

Používají se také ve flashbackových dotazech k zobrazení starých potvrzených dat pomocí undo restore.

Jak dlouho lze vrátit data uložená v databázi?
Oracle poskytuje flexibilitu toho, jak dlouho by měla být data pro vrácení zpět uložena pomocí parametru undo_retention. Můžeme nastavit parametr undo_management na automatický, aby Oracle spravoval uchování zpět (výchozí), nebo dokonce nastavit tuto hodnotu ručně a její hodnota by měla být větší než čas, který zabere nejdéle běžící dotaz ve vaší databázi. V 11g Onward Oracle vyladil tento parametr automaticky podle velikosti tabulkového prostoru zpět

Co je transakce ?
Transakce je soubor příkazů jazyka SQL Data manipulation Language (DML) považovaných za logickou jednotku.
Selhání jakéhokoli příkazu má za následek, že transakce je „vrácena zpět“. Pokud se všechny příkazy zpracují, SQLPlus nebo programovací aplikace vydá COMMIT, aby byly změny databáze trvalé.Transakce se implicitně potvrdí, pokud se uživatel normálně odpojí od Oracle.
Neobvyklá odpojení vedou k vrácení transakce.Příkaz ROLLBACK se používá ke zrušení (ne potvrzení) transakce, která je v pokrok.

Co je v Oracle opakováno?

Redo znamená zaznamenávání provedených prací, takže se práce neztratí. Při obnově se používají protokoly REDO. Kdykoli provedeme vložení do databáze, provede následující věci

  1. Vložte řádek do vyrovnávací paměti
  2. vygenerujte krok zpět ve vyrovnávací paměti
  3. Zapište změny opakování, tj. vložte řádky do protokolů opakování
  4. Zapište změny opakování pro segmenty zpět do protokolů opakování

Takže každá operace DML provedená v databázi je zaznamenána v redo logech pro účely obnovy

Redo jsou nejprve zapsány do redo log bufferu v SGA. Proces log Writer (LGWR) zapisuje tyto změny z „redo log bufferu“ do redo log souborů na disk

Opakované protokoly pomáhají při obnově jakékoli ztráty dat v důsledku lidské chyby, chyby operačního systému nebo selhání pevného disku.

Protokoly opakování jsou důležité pro provoz databáze, protože poskytují odolnost proti chybám.

Než zapíšete změny do tabulek  v datovém souboru, Oracle nejprve zapíše vyrovnávací paměť pro opakování do souboru protokolů redo.

pro určité operace máme k dispozici možnost žádného protokolování  negenerovat opakované vyrovnávací paměti.

Jak fungují protokoly Redo
Server Oracle postupně zaznamenává všechny změny provedené v databázi do vyrovnávací paměti protokolu redo. Položky opakování se zapisují z vyrovnávací paměti protokolu opakování do jedné z online skupin protokolu opakování, které se procesem LGWR říká aktuální skupina online protokolu opakování. LGWR zapisuje v
následujících situacích:
• Když se transakce potvrdí
• Když se vyrovnávací paměť redo log zaplní z jedné třetiny
• Když existuje více než megabajt změněných záznamů ve vyrovnávací paměti redo log
• Než DBWn zapíše upravené bloky v mezipaměti databáze do datových souborů
Protokoly Redo se používají cyklickým způsobem. Každá skupina souborů redo log souborů je identifikována pořadovým číslem protokolu, které se přepíše při každém opětovném použití protokolu. LGWR zapisuje do online souborů redo log postupně. Když je aktuální online skupina redo log vyplněna, LGWR začne zapisovat do další skupiny. Tomu se říká přepínač protokolu. Když je vyplněn poslední dostupný online soubor redo protokolu, LGWR se vrátí do první online redo
skupiny protokolu a začne znovu zapisovat.

Související články

jak najít relaci generující spoustu opakování
změnit soubor protokolu přepnutí systému v/s archivní protokol aktuální
znovu vytvořit soubory protokolu opakování v databázi Oracle
dotazy k pohovoru senior oracle dba


  1. Převést název měsíce na číslo měsíce v SQL Server (T-SQL)

  2. Jak funguje funkce CONCAT() v PostgreSQL

  3. Výběr COUNT(*) pomocí DISTINCT

  4. Pravidla pro implementaci TDD ve starém projektu