Hur man använder Oracle 12c s Flashback Table

May 29

Mycket liknar Flashback Query är Oracle 12c s Flashback Table. Faktum är båda byggda på samma underliggande tekniken. Flashback Table kan blinka tillbaka rad förändringar eller hela tabellen om det tappas.

Håll följande krav i åtanke:

  • Den UNDO_RETENTION parametern kommer att styra hur långt tillbaka kan du blinka bordet.
  • Du måste använda en funktion som kallas rad rörelse som måste aktiveras på alla bord du vill blinka tillbaka rader. (De kommande stegen visar hur du aktivera rad rörelser.)
  • Om du vill kunna blinka tillbaka en tabell från en droppe, måste du ha din parameter RECYCLEBIN inställd på ON. Denna parameter är aktiverad som standard, men observera att om det har stängts av det kräver en databas studsar för att slå på den igen.

Betrakta ett exempel om misstag raderat några rader från en tabell. De var mycket lätt att återhämta sig eftersom att identifiera dem var inte svårt. Men antar att du vill återhämta sig från en oavsiktlig uppdatering. Uppdateringar är svårare att återhämta sig från med Flashback Query. Du kan göra det, men du kanske kan göra det lättare för dig själv genom att blinka tillbaka hela tabellen.

Flashback Table fungerar på hela tabellen, inte bara vissa rader, så se till att föra hela tabellen tillbaka i tiden inte kommer att orsaka andra problem.

För att använda Flashback Table, så här:

  1. Du måste ha rad rörelse aktiverad; att göra det möjligt, typ

    <Förändra tabell avdelningar möjliggör rad rörelser;>

    Du bör se det här:

    Tabell förändras.

    Som en sidoanteckning, behöver du inte aktivera rad rörelser innan du ändrar dina data. Du kan göra det i efterhand.

  2. Se vad dina data ser ut genom att skriva

    <Välj department_name, manager_id
    från avdelningarna
    där manager_id inte är null;>

    Du bör se ut ungefär så här:

    DEPARTMENT_NAME MANAGER_ID
    ------------------------------ ----------
    Administrering 200
    Marknadsföring 201
    Inköp 114
    Human Resources 203
    Frakt 121
    IT 103
    PR 204
    Omsättning 145
    Executive 100
    Finansiering 108
    Redovisning 205
    11 rader markerade.

    Att "röra upp" data, skriver du följande:

    <uppdaterings avdelningar
    ställa manager_id = 205
    där manager_id inte är null;
    begå;>

    Du shoud se ut ungefär så här:

    11 rader uppdateras.
    Commit komplett.

  3. Titta på dina data igen genom att skriva

    <Välj department_name, manager_id
    från avdelningarna
    där manager_id inte är null;>

    Du bör se ut ungefär så här:

    DEPARTMENT_NAME MANAGER_ID
    ------------------------------ ----------
    Administrering 205
    Marknadsföring 205
    Inköp 205
    Human Resources 205
    Frakt 205
    IT 205
    PR 205
    Omsättning 205
    Executive 205
    Finansiering 205
    Redovisning 205
    11 rader markerade.

  4. Att flashback alla förändringar på rader, typ

    <blick table avdelningar
    till tidsstämpel to_date ('16 -AUG 2013 20:40:00 ',' DD-MÅN-ÅÅÅÅ HH24: MI: SS ');>

    Du bör se ut ungefär så här:

    Flashback komplett.

  5. Kontrollera dina uppgifter igen genom att skriva

    <Välj department_name, manager_id
    från avdelningarna
    där manager_id inte är null;>

    Du bör se ut ungefär så här:

DEPARTMENT_NAME MANAGER_ID
------------------------------ ----------
Administrering 200
Marknadsföring 201
Inköp 114
Human Resources 203
Frakt 121
IT 103
PR 204
Omsättning 145
Executive 100
Finansiering 108
Redovisning 205
11 rader markerade.

Uppgifterna är tillbaka där den var på tidsstämpel anges.

Nästa övning hjälper dig om du av misstag tappade ditt bord. Den använder funktionen nämns ovan kallas Recyclebin. Det fungerar ungefär som papperskorgen på en Windows-skrivbordet. Du kan återställa ett objekt till hur det såg ut innan det tappades.

För detta nästa exempel, du börjar med att göra en kopia av tabellen anställda att arbeta med. Anledningen till att du gör en kopia är att i demo schemat försedd med databasen finns det en hel del referensintegritet, vilket hindrar dig från att falla tabeller i första hand (en av de många skäl referensintegritet är en så bra idé! ).

  1. För att göra en kopia av din medarbetare bord, typ

    <Skapar tabellen emp som SELECT * FROM anställda;>

    Du ser ut ungefär så här:

    Tabell skapas.

  2. "Oavsiktligt" släppa nya emp tabellen genom att skriva

    <Droppe bord emp>;

    Du ser ut ungefär så här:

    Tabell tappade.

  3. Kontrollera din Recyclebin att se vad du kan återställa - typ

    <Välj objekt, original_name, drift, droptime
    från user_recyclebin;>

    Du ser ut ungefär så här:

    OBJECT_NAME ORIGINAL_NAME DRIFT DROPTIME
    ------------------------------ --------------- ----- ---- -------------------
    BIN $ 5BtB5dF6GmXgQ1ABqMC8yg == $ 0 EMP DROP 2013/08/16: 21: 02: 12

    Lägg märke till den roliga namn som börjar med BIN $. Med Recyclebin påslagen, vad som faktiskt händer under en droppe objektet under namnändring. Du kan fortfarande söka den ursprungliga tabellen genom att använda detta namn!

    Detta kan vara användbart om du vill återställa några rader i stället hela tabellen. Du kan fråga de rader eller gör en "skapa bord som väljer" att förvara dem i en ny tabell helt.

  4. Att undrop ditt bord, typ

    <Flashback bord emp till innan drop;>

    Du ser detta:

    Flashback komplett.

    Nu kan du fråga ditt bord igen.

Även blinkande tillbaka bordet till innan en droppe gör lägga tillbaka alla privilegier och index, index behålla namnet BIN $. Du kan ge dina index tillbaka det ursprungliga namnet bytt namn kommando om du vill.