Skip to main content

Podłączanie się do backupów networkera i odtworzenie na innym hoście

Podpinamy nowy channel do połączenia się z serwerem networkera. 

Jako że RMAN nie widzi połączeń sieciowych, będziemy poprzez bibliotekę media library udawali urządzenie SBT TAPE

Najpierw podmieniamy ID bazy danych na tą z docelowego odtworzenia (baza o docelowej nazwie musi istnieć na serwerze docelowym - nawet pusta):

Przed włączeniem rmana:

export NLS_DATE_FORMAT="DD-MM-YYYY HH24:MI:SS"
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/lib64/:${LD_LIBRARY_PATH}

image.png

Podpinamy bibliotekę networkera do obsługi SBT_TAPE i oracle
Zmieniamy environment na poprawny oraz logujemy się do rmana:

image.png

Wykonujemy zamkniecie bazy danych:

shutdown immediate;

image.png

startup nomount

image.png

CONFIGURE DEFAULT DEVICE TYPE TO 'SBT_TAPE';

image.png

CONFIGURE CHANNEL DEVICE TYPE 'SBT_TAPE' SEND 'NSR_ENV=(NSR_SERVER=snp2004.vm.local,NSR_CLIENT=ewe013.ewepl.local)';

image.png

CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE 'SBT_TAPE' TO 'ENTIADEV_CONTROLFILE_%F';

image.png

By odzyskać controlfile wyłączamy bazę i uruchamiamy jako nomount:

image.png

----------- Na serwerze skąd pobieramy dane: ----------

Łączymy się do odpowiedniej bazy poprzez rmana ponieważ:

LIST BACKUP OF CONTROLFILE;

I wybieramy ostatni

image.png

RUN {
ALLOCATE CHANNEL CH1 TYPE 'SBT_TAPE';
SEND 'NSR_ENV=(NSR_SERVER=snp2004.vm.local,
          NSR_CLIENT=ewe013.ewepl.local)';
SET CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE 'SBT_TAPE' TO 'ENTIADEV_CONTROLFILE_%F';
RESTORE CONTROLFILE FROM 'ENTIADEV_mv3ccnce_1_1';
}

image.png

Wykonujemy teraz zmianę ID bazy na docelowym serwerze na ID bazy odwarzanej poprzez:
SET DBID NRXXXXXX

image.png

startup mount

image.png

Jeżeli ścieżki różnią się pomiędzy serwerami - wykonujemy sprawdzenie na serwerze źródłowym:

SELECT * 
FROM DBA_DATA_FILES
ORDER BY FILE_ID;

image.png

Porównujemy ze ścieżkami docelowymi i ewentualnie wykonujemy zmiany dla datafiles

image.png

RUN {
  # Ustaw punkt w czasie, do którego chcemy przywrócić
  SET UNTIL TIME "TO_DATE('2024-12-11:06:00:00', 'yyyy-mm-dd:hh24:mi:ss')";

  # Mapowanie starych plików na nowe lokalizacje
  SET NEWNAME FOR DATAFILE 1 TO '/oracle/db/entiadev/oradata/ENTIADEV/SYSTEM.DBF';
  SET NEWNAME FOR DATAFILE 2 TO '/oracle/db/entiadev/oradata/ENTIADEV/SYSAUX.DBF';
  SET NEWNAME FOR DATAFILE 3 TO '/oracle/db/entiadev/oradata/ENTIADEV/UNDOTBS1.DBF';
  SET NEWNAME FOR DATAFILE 4 TO '/oracle/db/entiadev/oradata/ENTIADEV/USERS.DBF';
  SET NEWNAME FOR DATAFILE 5 TO '/oracle/db/entiadev/oradata/ENTIADEV/RAN.DBF';
  SET NEWNAME FOR DATAFILE 6 TO '/oracle/db/entiadev/oradata/ENTIADEV/KOLEKTOR.DBF';
  SET NEWNAME FOR DATAFILE 7 TO '/oracle/db/entiadev/oradata/ENTIADEV/KOLEKTOR_SMS.DBF';
  SET NEWNAME FOR DATAFILE 8 TO '/oracle/db/entiadev/oradata/ENTIADEV/KOLEKTOR_DD.DBF';
  SET NEWNAME FOR DATAFILE 9 TO '/oracle/db/entiadev/oradata/ENTIADEV/PROGNOZY.DBF';
  SET NEWNAME FOR DATAFILE 9 TO '/oracle/db/entiadev/oradata/ENTIADEV/KOLEKTOR_KEYCLOAK.DBF';

  # Przywrócenie bazy danych
  RESTORE DATABASE;
  
  #Zmiana nazw na poprawne
  SWITCH DATAFILE ALL;

  # Odtworzenie bazy danych i usunięcie archiwalnych logów
  RECOVER DATABASE;

  RELEASE CHANNEL CH1;
}

image.png

image.png

Na tym etapie mamy odtworzone datafile należy więc zrecoverować baze:
SET UNTIL TIME oczywiście zmieniamy

RUN {
  # Ustaw punkt w czasie, do którego chcemy odtworzyć bazę danych
  SET UNTIL TIME "TO_DATE('2024-12-11 06:00:00', 'yyyy-mm-dd hh24:mi:ss')";

  # Odtworzenie bazy danych z logów archiwalnych do wskazanego punktu
  RECOVER DATABASE;

  # Ustawienie nowych nazw plików danych (jeśli były zmieniane w czasie restore)
  SWITCH DATAFILE ALL;

  # Opcjonalne otwarcie bazy w trybie RESETLOGS
  ALTER DATABASE OPEN RESETLOGS;
}