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}
Podpinamy bibliotekę networkera do obsługi SBT_TAPE i oracle
Zmieniamy environment na poprawny oraz logujemy się do rmana:
Wykonujemy zamkniecie bazy danych:
shutdown immediate;
startup nomount
CONFIGURE DEFAULT DEVICE TYPE TO 'SBT_TAPE';
CONFIGURE CHANNEL DEVICE TYPE 'SBT_TAPE' SEND 'NSR_ENV=(NSR_SERVER=snp2004.vm.local,NSR_CLIENT=ewe013.ewepl.local)';
CONFIGURE CONTROLFILE AUTOBACKUP FORMAT FOR DEVICE TYPE 'SBT_TAPE' TO 'ENTIADEV_CONTROLFILE_%F';
By odzyskać controlfile wyłączamy bazę i uruchamiamy jako nomount:
----------- Na serwerze skąd pobieramy dane: ----------
Łączymy się do odpowiedniej bazy poprzez rmana ponieważ:
LIST BACKUP OF CONTROLFILE;
I wybieramy ostatni
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';
}
Wykonujemy teraz zmianę ID bazy na docelowym serwerze na ID bazy odwarzanej poprzez:
SET DBID NRXXXXXX
startup mount
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;
Porównujemy ze ścieżkami docelowymi i ewentualnie wykonujemy zmiany dla datafiles
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;
}
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;
}















