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

jak sprawdzić, czy baza danych jest spójna po niepełnym odzyskaniu

Możesz przywrócić bazę danych z kopii zapasowej i zastosować wiele archiwów, aby była spójna. Teraz chcesz się upewnić, że otwarte logi resetowania przebiegają prawidłowo.
Oto jak sprawdzić, czy baza danych jest spójna po niepełnym odzyskaniu

Poniższe stwierdzenie ustawia format daty na formę rozszerzoną, ponieważ wymagalibyśmy tego wiele razy  w naszej analizie

SQL> alter session set nls_date_format='DD-MON-YYYY HH24:MI:SS' ;

Sprawdź 1:

Cel:Sprawdź, czy pliki danych zostały odzyskane do zamierzonego punktu w czasie (PIT) i są spójne (FUZZY=NO)
Zapytaj o aktualny stan i PIT (P-oint I-n T-time, do którego pliki danych zostały odzyskane) plików danych poprzez odczytanie nagłówków plików danych bezpośrednio z fizycznych plików danych:

SQL> select fuzzy, status, error, recover, checkpoint_change#, checkpoint_time, count(*) from v$datafile_header group by fuzzy, status, error, recover, checkpoint_change#, checkpoint_time ;
  • Sprawdź, czy checkpoint_time / checkpoint_change# jest zgodny z zamierzonym UNTIL TIME/SCN. Jeśli nie, odzyskaj bazę danych dalej, jeśli masz dostępnych więcej zarchiwizowanych dzienników.
  • Jeżeli FUZZY=YES dla niektórych plików danych oznacza to, że wymagane jest dalsze odzyskiwanie. Jeśli nie ma więcej zarchiwizowanych dzienników, zidentyfikuj takie pliki danych i określ, czy możemy je wyłączyć, ponieważ utracimy dane w tych plikach danych. Jeśli pliki danych należą do obszaru tabel SYSTEM lub UNDO, nie możemy / NIE MOŻEMY przełączyć takiego pliku danych w tryb offline bez odpowiedniej analizy. W celu uzyskania dalszych działań skontaktuj się z pomocą techniczną Oracle.
SQL> select file#, substr(name, 1, 50), substr(tablespace_name, 1, 15), undo_opt_current_change# from v$datafile_header where fuzzy='YES' ;

Czasami, jeśli nazwa obszaru tabel nie wskazuje, że jest to obszar tabel UNDO, jeśli widzimy wartość niezerową w kolumnie UNDO_OPT_CURRENT_CHANGE#, oznacza to, że plik danych zawiera segmenty cofania.

Aby przełączyć plik danych w tryb offline:

SQL> alter database datafile offline ;

Sprawdzenie 1 można uznać za zaliczone, gdy :
+ Zweryfikowano, że wszystkie pliki danych zostały odzyskane do zamierzonego Punktu w czasie.
+ Rozmyte=NIE dla SYSTEMU, COFNIJ i wszystkich zamierzonych plików danych. W przypadku plików danych z Fuzzy=YES, odzyskaj je dalej lub przenieś je do trybu OFFLINE, jeśli nie są dostępne żadne dalsze zarchiwizowane logi.

Sprawdź 2:

Cel:Sprawdź, czy pliki o statusie=RECOVER nie są przypadkowo OFFLINE

SQL> select status, enabled, count(*) from v$datafile group by status, enabled ;
STATUS  ENABLED      COUNT(*)
------- ---------- ----------
SYSTEM  DISABLED            1
ONLINE  READ WRITE          1114
RECOVER DISABLED            2

Jeśli pliki są w stanie RECOVER, sprawdź, czy są OFFLINE :

SQL> select file#, substr(name, 1, 50), status, error, recover from v$datafile_header ;

Jeśli chcesz, aby dane tych plików były dostępne, przenieś je ONLINE :

SQL> alter database datafile ONLINE ;

Jeśli plik pozostaje offline w czasie OPEN RESETLOGS, plik danych nie może zostać ponownie przywrócony do trybu online w tej samej OTWARTEJ bazie danych.
Plik 2 można uznać za Zaliczony, gdy:
a) Wszystkie zamierzone pliki danych są nie OFFLINE

Sprawdź 3:

Cel:Dodatkowy test Fuzzy (test Absolute Fuzzy)

Czasami można zobaczyć Fuzzy=NO i ten sam checkpoint_change# dla wszystkich zamierzonych plików danych; nadal niektóre pliki danych mogą być rozmyte, a OPEN RESETLOGS zwróci błąd, np.

SQL> select fuzzy, status, error, recover, checkpoint_change#, checkpoint_time, count(*) from v$datafile_header group by fuzzy, status, error, recover, checkpoint_change#, checkpoint_time ;
FUZ STATUS  ERROR           REC CHECKPOINT_CHANGE#      CHECKPOINT_TIME   COUNT(*)
--- ------- --------------- --- ------------------ -------------------- ----------
NO  ONLINE                                 5375858580 31-OCT-2011 23:10:14          7

SQL> ALTER DATABASE OPEN RESETLOGS ;
ORA-01194: file 14 needs more recovery to be consistent
ORA-01110: data file 3: '/u01/app/oracle/oradata/TEST/undotbs02.dbf'

Hence, we should perform additional fuzzy check known as Absolute Fuzzy Check:
SQL> select hxfil file#, substr(hxfnm, 1, 50) name, fhscn checkpoint_change#, fhafs Absolute_Fuzzy_SCN, max(fhafs) over () Min_PIT_SCN from x$kcvfh where fhafs!=0 ;

Uwaga:Kolumna Min_PIT_SCN zwróci tę samą wartość nawet dla wielu wierszy, ponieważ zastosowaliśmy na niej funkcję ANALITYCZNĄ „MAX() OVER ()”.

Powyższe zapytanie wskazuje, że odzyskiwanie musi zostać wykonane co najmniej DO SCN 5311524, aby pliki danych były spójne i gotowe do OTWARCIA. Ponieważ checkpoint_change# jest mniejszy niż Min_PIT_SCN, pliki danych poproszą o dalsze odzyskiwanie.

Kontrola 3 może być uznana za zaliczoną, gdy,
a) nie wybrano wierszy z powyższego zapytania (tj. Min_PIT_SCN wynosi 0 (zero) dla wszystkich plików danych)
b) Min_PIT_SCN jest zwracane mniej niż Checkpoint_Change#

Zaznacz 4:Wymagane dzienniki archiwizacji

Przeprowadź zapytanie do pliku kontrolnego, aby znaleźć najnowszy dziennik archiwum wymagany do odzyskania. Powiedzmy, że kopia zapasowa została ukończona 31 sierpnia 2011 o 23:20:14:

SQL> ALTER SESSION SET NLS_DATE_FORMAT='DD-MON-RR HH24:MI:SS';
SQL> SELECT THREAD#, SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG
WHERE '31-AUG-11 23:20:14' BETWEEN FIRST_TIME AND NEXT_TIME;

Jeśli powyższe zapytanie nie zwróci żadnych wierszy, może to oznaczać, że informacje przestarzały się poza plikiem kontrolnym – uruchom następujące zapytanie względem v$log_history.

SQL> ALTER SESSION SET NLS_DATE_FORMAT='DD-MON-RR HH24:MI:SS';
SQL> select a.THREAD#, a.SEQUENCE#, a.FIRST_TIME
from V$LOG_HISTORY a
where FIRST_TIME =
( SELECT MAX(b.FIRST_TIME)
FROM V$LOG_HISTORY b
WHERE b.FIRST_TIME < to_date('31-AUG-11 23:20:14', 'DD-MON-RR HH24:MI:SS') ) ; SQL>
The sequence# returned by the above query is the log sequence current at the time the backup ended - let say 530 thread 1.

Dla minimalnego wykorzystania odzyskiwania:(Sekwencja nr jako zwrócona +1 )

RMAN> RUN
{
SET UNTIL SEQUENCE 531 THREAD 1;
RECOVER DATABASE;
}

Jeśli jest to implementacja RAC, użyj tego kodu SQL zamiast zapytania do pliku kontrolnego:

SQL> SELECT THREAD#, SEQUENCE#, FIRST_CHANGE#, NEXT_CHANGE# FROM V$ARCHIVED_LOG WHERE '31-AUG-11 23:20:14' BETWEEN FIRST_TIME AND NEXT_TIME;

Aby uzyskać minimalne odzyskiwanie, użyj sekwencji dziennika i wątku, który ma najniższy numer NEXT_CHANGE zwrócony przez powyższe zapytanie.

Zaznaczenie 4 można uznać za ZALICZONE, gdy:

Wszystkie logi archiwum od momentu utworzenia kopii zapasowej do jej zakończenia są dostępne do użycia podczas odzyskiwania

Zaznacz 5 (po pomyślnym OTWARCIU RESETÓW):

Monitoruj alert.log na czas aktywności OPEN RESETLOGS. Podczas sprawdzania słownika możesz zobaczyć komunikaty takie jak poniżej:

Tworzenie pliku OFFLINE „MISSING00004” w pliku kontrolnym

jeśli znajdziesz plik, spróbuj zmienić jego nazwę. Jeśli nie, możemy wyłączyć plik danych lub usunąć powiązaną przestrzeń tabel:

SQL> select file#, status, enabled, substr(name, 1, 50) from v$datafile where name like '%MISSING%' ;
FILE#    STATUS  ENABLED    SUBSTR(NAME,1,50)
-------- ------- ---------- --------------------------------------------------
       4 OFFLINE DISABLED   /<path>/MISSING000
       7 OFFLINE DISABLED   /<path>/MISSING000

SQL> alter database datafile 4 online ;
alter database datafile 4 online
*
ERROR at line 1:
ORA-01157: cannot identify/lock data file 4 - see DBWR trace file
ORA-01111: name for data file 4 is unknown - rename to correct file
ORA-01110: data file 4: '/<oracle_home path>/dbs/MISSING00004'

SQL> alter database rename file 'MISSING00004' to '/<path>/users01.dbf' ;
Database altered.

SQL> alter database rename file 'MISSING00007' to '/<path>/users02.dbf' ;
Database altered.

SQL> select tablespace_name, status from dba_tablespaces where tablespace_name in (select tablespace_name from dba_data_files where file_id in (4, 7)) ;
TABLESPACE_NAME                STATUS
------------------------------ ---------
USERS                          OFFLINE

SQL> ALTER TABLESPACE USERS ONLINE ;
Tablespace altered.

Mam nadzieję, że pomoże to sprawdzić, czy baza danych jest spójna po niepełnym odzyskaniu. Prosimy o przesłanie opinii

Też czyta
jak znaleźć numer sekwencyjny dziennika archiwum w oracle
Polecenia tworzenia kopii zapasowych RMAN
Lista poleceń tworzenia kopii zapasowych RMAN
Jak odzyskać bazę danych za pomocą RMAN


  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 przenieść plik z jednego katalogu do drugiego za pomocą PL SQL?

  2. Kroki zmiany hasła administratora, które zostało utracone lub zapomniane w domenie EBS WebLogic R12.2

  3. Używanie LogMiner do znajdowania bieżących zmian

  4. Jak zwrócić RefCursor z funkcji Oracle?

  5. wyszukiwanie tekstu Oracle Blob