Oracle backup sql

0

Mam zadanie stworzyć tabele na użytkowniku hr robię create table tabela zrobiona wszystko jest. Nastepnie robię backup connect system as sys dba wykonuje polecenia SHUTDOWN IMMEDIATE;
STARTUP MOUNT; ALTER DATABASE ARCHIVELOG; ALTER DATABASE OPEN; nastepnie wchodzę w rmana $RMAN connect target hr i BACKUP DATABASE; Po skonczonym backupie kasuje tabele drop table i chce ją przywrócić z kopi zapasowej wiec znow connect system as sys $RMAN connect target hr i robię coś takiego:
RUN{
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
RESTORE DATABASE;
RECOVER DATABASE;
ALTER DATABASE OPEN;
}
pisze ze wszystko się udało po czym wchodzę w developera tabeli nadal nie ma. Gdzie popełniłem błąd pomoże ktoś ? wersja oracle 11 a developera 18.3

1

Jak się zastanowisz, to jest to logiczne. Przywracasz bazę z backupu i wykonujesz jej recovery, tj. odtwarzasz pliki z backupu i aplikujesz archive oraz redo logi. A że w redo logach masz "DROP TABLE", to recovery uwzględnia również tę operację ;-)

Jeśli masz włączoną funkcjonalność "RECYCLEBIN", to wystarczy:

FLASHBACK TABLE FOO.BAR TO BEFORE DROP;

Jeśli nie masz, to RMAN może odtworzyć bazę do momentu sprzed dropu. Zauważ, że w ten sposób, przez jedną tabelę cofasz stan całej bazy. Nie zawsze o to chodzi. Czasem stan innych tabel powinien zostać nieruszony. Możesz się posiłkować pomocniczą instancją bazy, odtworzyć tam tabelę na moment przed usunięciem, wyeksportować tabelę i zaimportować do "naprawianej bazy".

0

okej dzięki za wyjaśnienie :) a w jaki sposób w RMANIE odtworzyć baze z przed dropu bo patrzę w tą dokumentację oraclową ale ciężko znaleźć czy to by było coś takiego ? FLASHBACK DATABASE
TO RESTORE POINT BEFORE_CHANGES;

1

O ile masz utworzony RESTORE POINT o nazwie "BEFORE_CHANGES" ;)

Jeśli nie, to masz wybór jak dokumentacja sugeruje: https://docs.oracle.com/cd/B28359_01/server.111/b28286/img_text/flashback_database.htm

Dla RECOVER DATABASE masz podobną składnię, tj. możliwość odtworzenia do TIME/CHANGE/CANCEL.
https://docs.oracle.com/cd/E18283_01/server.112/e16604/ch_twelve033.htm

W praktyce albo użytkownik mówi Ci, że pomylił się o 12:07 i znasz orientacyjnie czas, albo jesteś w stanie wydłubać z bazy, że dane polecenie zostało wykonane o określonej porze, czy wydłubać numer zmiany.
Przydatne tabelki:

  • DBA_RECYCLEBIN
  • FLASHBACK_TRANSACTION_QUERY (potrzebne jest wcześniejsze włączenie czegoś co nazywa się "supplemental logging")
1

Jeśli chodzi o odzyskanie jednej tabeli to nie robisz niepełnego odtwarzania całej bazy bo stracisz inne dane.
Wystarczy w SQL: FLASHBACK TABLE nazwa TO BEFORE DROP;
RMAN nie ma tu nic do roboty.

W bardziej zaawansowanych scenariuszach trzeba użyć tzw. TSPITR - odtwarzanie przestrzeni tabel do wybranego punktu w czasie.

Generalna zasada to odtwarzanie tylko tego co trzeba, bo to kosztowna operacja. Usunąłeś tabelę - przywróć ją z kosza. Usunąłeś plik danych - przywróć go (restore) i zrób recovery. Usunąłeś plik przestrzeni tabel SYSTEM - no tu akurat trzeba odtworzyć całą bazę, bo się instancja zatrzyma :)

0

Z kosza najłatwiej chyba ale niestety w szkole dostałem zadanie żeby to zrobić za pomocą RMAN'a -.-

0

W takim razie odtwarzanie do punktu w czasie sprzed usunięcia.

0

Tak też zrobiłem. Dzięki za pomoc

1 użytkowników online, w tym zalogowanych: 0, gości: 1