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

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

<p class="callout info">Jako że RMAN nie widzi połączeń sieciowych, będziemy poprzez bibliotekę media library udawali urządzenie SBT TAPE</p>

<p class="callout info">Najpierw podmieniamy ID bazy danych na tą z docelowego odtworzenia (baza o docelowej nazwie musi istnieć na serwerze docelowym - nawet pusta):</p>

Przed włączeniem rmana:

```bash
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](https://bookstack.vm.local/uploads/images/gallery/2024-12/scaled-1680-/Dgjimage.png)](https://bookstack.vm.local/uploads/images/gallery/2024-12/Dgjimage.png)

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

[![image.png](https://bookstack.vm.local/uploads/images/gallery/2024-12/scaled-1680-/668image.png)](https://bookstack.vm.local/uploads/images/gallery/2024-12/668image.png)

Wykonujemy zamkniecie bazy danych:

```sql
shutdown immediate;
```

[![image.png](https://bookstack.vm.local/uploads/images/gallery/2024-12/scaled-1680-/ANmimage.png)](https://bookstack.vm.local/uploads/images/gallery/2024-12/ANmimage.png)

```sql
startup nomount
```

[![image.png](https://bookstack.vm.local/uploads/images/gallery/2024-12/scaled-1680-/ZTdimage.png)](https://bookstack.vm.local/uploads/images/gallery/2024-12/ZTdimage.png)

```sql
CONFIGURE DEFAULT DEVICE TYPE TO 'SBT_TAPE';
```

[![image.png](https://bookstack.vm.local/uploads/images/gallery/2024-12/scaled-1680-/Dcdimage.png)](https://bookstack.vm.local/uploads/images/gallery/2024-12/Dcdimage.png)

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

[![image.png](https://bookstack.vm.local/uploads/images/gallery/2024-12/scaled-1680-/jjUimage.png)](https://bookstack.vm.local/uploads/images/gallery/2024-12/jjUimage.png)

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

[![image.png](https://bookstack.vm.local/uploads/images/gallery/2024-12/scaled-1680-/mG5image.png)](https://bookstack.vm.local/uploads/images/gallery/2024-12/mG5image.png)

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

[![image.png](https://bookstack.vm.local/uploads/images/gallery/2024-12/scaled-1680-/t1uimage.png)](https://bookstack.vm.local/uploads/images/gallery/2024-12/t1uimage.png)

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

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

```sql
LIST BACKUP OF CONTROLFILE;
```

I wybieramy ostatni

[![image.png](https://bookstack.vm.local/uploads/images/gallery/2024-12/scaled-1680-/BiMimage.png)](https://bookstack.vm.local/uploads/images/gallery/2024-12/BiMimage.png)

```sql
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](https://bookstack.vm.local/uploads/images/gallery/2024-12/scaled-1680-/d8ximage.png)](https://bookstack.vm.local/uploads/images/gallery/2024-12/d8ximage.png)

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

[![image.png](https://bookstack.vm.local/uploads/images/gallery/2024-12/scaled-1680-/FLKimage.png)](https://bookstack.vm.local/uploads/images/gallery/2024-12/FLKimage.png)

```sql
startup mount
```

[![image.png](https://bookstack.vm.local/uploads/images/gallery/2024-12/scaled-1680-/g0Cimage.png)](https://bookstack.vm.local/uploads/images/gallery/2024-12/g0Cimage.png)

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

```sql
SELECT * 
FROM DBA_DATA_FILES
ORDER BY FILE_ID;
```

[![image.png](https://bookstack.vm.local/uploads/images/gallery/2024-12/scaled-1680-/bdNimage.png)](https://bookstack.vm.local/uploads/images/gallery/2024-12/bdNimage.png)

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

[![image.png](https://bookstack.vm.local/uploads/images/gallery/2024-12/scaled-1680-/gspimage.png)](https://bookstack.vm.local/uploads/images/gallery/2024-12/gspimage.png)

```sql
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](https://bookstack.vm.local/uploads/images/gallery/2024-12/scaled-1680-/9udimage.png)](https://bookstack.vm.local/uploads/images/gallery/2024-12/9udimage.png)

[![image.png](https://bookstack.vm.local/uploads/images/gallery/2024-12/scaled-1680-/jRyimage.png)](https://bookstack.vm.local/uploads/images/gallery/2024-12/jRyimage.png)

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

```sql
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;
}
```