Restore Oracle11g tramite HP Data protector

Si richiede il restore dello schema DBMF database di produzione PROD01 su host serdbp01.
Va bene l'ultima versione dispobibile prima delle 14.00 di oggi.

Il back è su HP Data protector e consiste in un backup full di domenica e l’ultimo L1 alle 03.00 del 07/02/2019. CI viene richiesto di effettuare il backup fino alle 14.00 del 08/02
Nella directory archivelog /u01/app/oracle/oradata/PROD01/arch sono presenti gli archivelog del 08/02 quindi conviene effettuare un bakup degli archivelog così che RMAN riesce in automatico ad effettuare il restore e recovery until time.

0) Sul db sorgente effettuare un export del db o dello schema
Vedere lo spazio occupato dallo schema e del db se intendiamo restorare tutto il db e poi esportare
solo lo schema.
select sum(bytes)/1024/1024 "DB size in MB"
from dba_segments
where owner='DBMF' ;

Select
"Reserved_Space(MB)",
"Reserved_Space(MB)" - "Free_Space(MB)" "Used_Space(MB)","Free_Space(MB)"
from(select (select sum(bytes/(1024*1024))
from dba_data_files) "Reserved_Space(MB)",
(select sum(bytes/(1024*1024)) from dba_free_space) "Free_Space(MB)"
from dual );

1) Individuato un server che contiene lo stesso motore oracle del db sorgente.

2) Inserire nel listener.ora sotto cd $ORACLE_HOME/network/admin  la stringa di
connessione.

  (SID_DESC =
    (GLOBAL_DBNAME = PROD01)
    (ORACLE_HOME = /u01/app/oracle/product/11gR24)
    (SID_NAME = PROD01)
   )

3) Modificare il tnsnames.ora mettendo come host quello della macchina di test.
PROD01 =
 (DESCRIPTION =
   (ADDRESS = (PROTOCOL = TCP)(HOST = serdbt05.dominio.it)(PORT = 1521))
   (CONNECT_DATA =
     (SERVER = DEDICATED)
     (SERVICE_NAME = PROD01)
   )
 )

4) Dalla macchina sorgente creare il file pfile e poi portarlo sulla macchina di test
export ORACLE_SID=PROD01
SQL> create pfile='/u01/app/oracle/admin/PROD01/pfile/initPROD01.ora' from spfile;

Copiare spfile del db sorgente (serdbp01 )sulla macchina test (serdbt05).
scp initPROD01.ora root@serdbt05:/u01/app/oracle/product/11gR24/dbs
Sulla macchina target (oratest05) cambiare il proprietario
Chowm oracle: initPROD01.ora

5) Copiare orapwPROD01 dal server sorgente sulla macchina test.
scp orapwPROD01 root@serdbt05:/u01/app/oracle/product/11gR24/dbs
Sulla macchina target (oratest05) cambiare il proprietario
Chowm oracle: orapwPROD01

6) Sulla macchina target (oratest05) creare le stesse directory del db sorgente che possono
essere estarrre dal file initPROD01.ora
mkdir -p /u01/app/oracle/admin/PROD01/adump
mkdir -p /u01/app/oracle/oradata/PROD01/
mkdir -p /u01/app/oracle/foradata/PROD01/
mkdir -p /u01/app/oracle/oradata/PROD01/arch

Attenzione creare tutte le sottodirectory di PROD01.

7) Avviare il db target in modalità nomount.
echo $ORACLE_SID
PROD01
SQL>startup nomount pfile='/u01/app/oracle/product/11gR24/dbs/initPROD01.ora';

8) Sul db target effettuare il restore del controlfile
oracle@serdbt05:/u01/app/oracle/product/11gR24/dbs>
rman target / catalog rman/rman@CAT112
Recovery Manager: Release 11.2.0.4.0 - Production on Fri Feb 8 18:17:04 2019
Copyright (c) 1982, 2011, Oracle and/or its affiliates.  All rights reserved.
connected to target database: PROD01 (not mounted)
connected to recovery catalog database

RMAN>run {
allocate channel 'dev_0' type 'sbt_tape'
parms 'ENV=(OB2BARTYPE=Oracle8,OB2APPNAME=PROD01,OB2BARLIST=
serdbp01-PROD01-lvl0)';
SET UNTIL TIME "TO_DATE('08-FEB-2019 13:30:00','DD-MON-YYYY HH24:MI:SS')";
restore controlfile to  '/tmp/controlPROD01.ctl' ;
}
cp control01.ctl /u01/app/oracle/oradata/PROD01
cp control01.ctl /u01/app/oracle/foradata/PROD01/control02.ctl

9) Avviare il db in stato mount.
SQL> alter database mount;
Database altered.

10) creare sotto la direcorty ad esempio oracle@serdbt05:/u01/app/oracle/admin/PROD01>
i seguenti file
### script
#lancio.sh
export ORACLE_SID=PROD01
rman cmdfile=rst_db.rcv log=log_rst_db.log
#rman cmdfile=rec_db.rcv log=log_rec_db.log

#rst_db.rcv
connect catalog rman/rman@CAT112
connect target /
run {
allocate channel 'dev_0' type 'sbt_tape' parms 'ENV=
(OB2BARTYPE=Oracle8,OB2APPNAME=PROD01,OB2BARLIST=serdbp01-PROD01-lvl0)';
allocate channel 'dev_1' type 'sbt_tape' parms 'ENV=
(OB2BARTYPE=Oracle8,OB2APPNAME=PROD01,OB2BARLIST=serdbp01-PROD01-lvl0)';
allocate channel 'dev_2' type 'sbt_tape' parms 'ENV=
(OB2BARTYPE=Oracle8,OB2APPNAME=PROD01,OB2BARLIST=serdbp01-PROD01-lvl0)';
allocate channel 'dev_3' type 'sbt_tape' parms 'ENV=
(OB2BARTYPE=Oracle8,OB2APPNAME=PROD01,OB2BARLIST=serdbp01-PROD01-lvl0)';
set until time "TO_DATE ('20190208 13:30:00','YYYYMMDD HH24:MI:SS')";
restore database;
}

#rec_db.rcv
connect catalog rman/rman@CAT112
connect target /
run {
allocate channel 'dev_0' type 'sbt_tape' parms 'ENV=
(OB2BARTYPE=Oracle8,OB2APPNAME=PROD01,OB2BARLIST=serdbp01-PROD01-lvl0)';
allocate channel 'dev_1' type 'sbt_tape' parms 'ENV=
(OB2BARTYPE=Oracle8,OB2APPNAME=PROD01,OB2BARLIST=serdbp01-PROD01-lvl0)';
allocate channel 'dev_2' type 'sbt_tape' parms 'ENV=
(OB2BARTYPE=Oracle8,OB2APPNAME=PROD01,OB2BARLIST=serdbp01-PROD01-lvl0)';
allocate channel 'dev_3' type 'sbt_tape' parms 'ENV=
(OB2BARTYPE=Oracle8,OB2APPNAME=PROD01,OB2BARLIST=serdbp01-PROD01-lvl0)';
set until time "TO_DATE ('20190208 13:30:00','YYYYMMDD HH24:MI:SS')";
recover database;
}

Dare i permessi 777 ai file
chmod 777

11) Lanciare il restore del db.

nohup ./lancio.sh &

termina con
..................
channel dev_0: restore complete, elapsed time: 00:47:05
Finished restore at 08-FEB-19
released channel: dev_0
released channel: dev_1
released channel: dev_2
released channel: dev_3

12) Modificare il file lancio.sh per lanciare il recovery.
#lancio.sh
export ORACLE_SID=PROD01
#rman cmdfile=rst_db.rcv log=log_rst_db.log
rman cmdfile=rec_db.rcv log=log_rec_db.log

Eseguire il recovery
nohup ./lancio.sh &

Termina con
media recovery complete, elapsed time: 00:05:21
Finished recover at 08-FEB-19
released channel: dev_0
released channel: dev_1
released channel: dev_2
released channel: dev_3

13) Aprire il db in modalità resetlog.
alter database open resetlogs;

14) Export dello schema DBMF
expdp '"/ as sysdba"' schemas=DBMF dumpfile=expTEST05_DBMF_20190211.dump
logfile=expdp_DBMF_20190211.log
Copiarlo sul db sorgente nella direcorty Datapump.

15) Creiamo uno schema di appoggio contenente questi dati da dare allo sviluppo per effettuare le
verifiche prima di sovrascrivere lo schema DBMF
CREATE TABLESPACE TS_DBMF09_DATA DATAFILE
....

CREATE TABLESPACE TS_DBMF09_IDX DATAFILE
.....

CREATE USER DBMF09
.........



echo $ORACLE_SID
PROD01
impdp '"/ as sysdba"' dumpfile=expTEST05_DBMF_20190211.dump  
logfile=remap_DBMF_20190211.log REMAP_SCHEMA=DBMF:DBMF09
REMAP_TABLESPACE=TS_DBMF_DATA:TS_DBMF09_DATA,TS_DBMF_IDX:TS_DBMF09_IDX;

16) Se confermano la bontà dei dati effettuare l'import sullo schema DBMF
Cancellare gli oggetti di DBMF e poi effettuare import
select count(*),object_type
from dba_objects where owner='DBMF' group by object_type

select 'drop ' ||OBJECT_TYPE  ||' '|| owner ||'.'|| object_name  
from dba_objects
where owner='DBMF'
order by  object_type

impdp '"/ as sysdba"' schemas=DBMF dumpfile=expTEST05_DBMF_20190211.dump
logfile=imp_DBMF_20190211.log

Controllare la numerosità degli oggetti importati e se ci sono funzioni\procedure\package da compilare

17) Cancellare lo schema di appoggio
DROP TABLESPACE TS_DBMF09_IDX INCLUDING CONTENTS AND DATAFILES;
DROP TABLESPACE TS_DBMF09_DATA INCLUDING CONTENTS AND DATAFILES;
drop user DBMF09 cascade;


IMPORTANTISSIMO
12) copiare la cartella arch (compresi in file archivelog) da serdbt05 in produzione sotto il path
/u01/app/oracle/oradata/PROD01/arch
perchè la prossima volta che gira il backup, RMAN si aspetta di trovare gli archivelog che abbiamo restorato che contengono SCN restorati. Quelli che stanno in prod hanno SNC maggiori. 

Se si dimentica di trasferire i file, allora fare il crosscheck che segnala come expired gli archived file non presenti nel catalogo. I file sono presenti in nastroteca e quindi possiamo comunque fare il restore.


Post popolari in questo blog

Create e Drop Pluggable Database

ORA-12154: TNS: il listener non è attualmente a conoscenza del servizio richiesto nel descrittore di connessione