Creare un RECOVERY CATALOG
Il repository data (metadati) di RMAN viene salvato nel Control file del db target, ma può essere anche salvato in un altro database di Oracle chiamato Recovery Catalog. Questo contiene le informazioni di backup, in un db separato ed è utile in caso di perdita del control file. Inoltre un singolo Recovery Catalog può contenere backup di più target database. Le informazioni di backup continuano ad essere memorizzate nel control file.
Quando usarlo?
SINCRONIZZAZIONE
UNREGISTER DATABASE
Per rimuove dal catalogo un db collegarsi al db come target.
rman target / catalog rman/rman@catdb Recovery Manager: Release 11.2.0.1.0 - Production on Thu Jan 24 16:48:24 2019 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. connected to target database: SIAT11F (DBID=3216764891) connected to recovery catalog database RMAN> unregister database; database name is "SIAT11F" and DBID is 3216764891 Do you really want to unregister the database (enter YES or NO)? yes database unregistered from the recovery catalog
SPOSTARE RECOVERY CATALOG SU UN ALTRO DB
Spostare il recovery catalog dal db CATDB2 a CATDB che non ha all'interno alcun db registrato.
$ rman
RMAN> connect target sys/<pwd>@S11TEST1
connected to target database: S11TEST1 (DBID=4247218851)
RMAN> connect catalog rman/rman@CATDB
connected to recovery catalog database
RMAN> list incarnation;
RMAN> import catalog rman/rman@CATDB2;
Starting import catalog at 24-JAN-19
connected to source recovery catalog database
import validation complete
database unregistered from the source recovery catalog
Finished import catalog at 24-JAN-19
RMAN> list incarnation;
List of Database Incarnations
DB Key Inc Key DB Name DB ID STATUS Reset SCN Reset Time
------- ------- -------- ---------------- --- ---------- -----------------------------------------
6169 6190 S11TEST1 4247218851 PARENT 1 09-JAN-19
6169 6191 S11TEST1 4247218851 PARENT 1301776 15-JAN-19
6169 6192 S11TEST1 4247218851 PARENT 1303703 15-JAN-19
6169 6171 S11TEST1 4247218851 CURRENT 1659368 22-JAN-19
VISTE
Risalire al DBID del database target
SQL> select dbid from v$database;
Collegarsi come catalog
SQL> connect rman/rman@catdb
select * from rc_database where dbid =&dbid_target
select * from rc_stored_Script
select * from rc_unusable_backupfile_details
select * from rc_rman_status
select * from rc_rman_configuration
select * from rc_archived_log
select * from rc_Datafile
query RMAN: risalire al backup piece di un tablesapce\datafile SELECT db.dbid , --identifica db target db.name AS DB_TARGET, d.tablespace_name, d.name AS data_file, d.file# AS file_id, df.checkpoint_change#, --coincide con Ckp SCN estratto dal comando RMAN list backup df.resetlogs_change#, TRUNC (df.block_size * df.datafile_blocks / 1048576) Total_Size_MB, TRUNC (df.block_size * df.blocks / 1048576) Backup_Size_MB, DF.BS_KEY, ---coincide con il BS Key estratto dal comando RMAN list backup df.SET_STAMP,-- identifica univocamente il record nel control file del target database a cui corrisponde il backup set df.SET_COUNT,--identifica univocamente il record nel control file del target database a cui corrisponde il backup set df.recid, df.stamp, bp.handle, media, TAG, bp.piece#, start_time, bp.completion_time, CASE bp.backup_type WHEN 'D' THEN 'full backup or level 0 incremental' WHEN 'I' THEN 'incremental level 1' WHEN 'L' THEN 'archived redo log' ELSE bp.backup_type END AS tipo_bkp, CASE bp.status WHEN 'A' THEN 'all backup pieces available' WHEN 'D' THEN 'all backup pieces deleted' WHEN 'O' THEN 'the backup set is unusable' ELSE bp.status END stato FROM rc_backup_datafile df, rc_Datafile D, rc_backup_Piece bp, rc_database db, RC_DATABASE_INCARNATION inc WHERE inc.dbinc_key = (select max(inc.dbinc_key) from RC_DATABASE_INCARNATION inc where name = d.db_name and status='CURRENT') and inc.dbinc_key = db.dbinc_key and inc.dbinc_key = df.dbinc_key and inc.dbinc_key = d.dbinc_key and Df.DB_KEY = d.db_key AND df.file# = d.file# AND bp.db_id = db.dbid AND db.name = d.db_name AND DF.BS_KEY = bp.BS_KEY AND d.db_name = 'SIAT11' ---AND d.tablespace_name = 'TSDATISICA_LOB' --and handle = 'CONCT_23tgrilu_1_1' AND df.completion_time >= TO_DATE ('29/10/2018', 'dd/mm/yyyy') order by d.tablespace_name, d.file#;
Se il backup è molto semplice conviene usare il control file perché avere un recovery catalog significa gestire ed effettuare il backup di un altro db. Il vantaggio è che offre un tempo di retention di backup più lungo del control file e una redundanza nel caso si perda il control file.
Non usare il database target come il db del Recovery Catalog perché questo deve essere protetto da una perdita del db target. Assicurarsi che il recovery catalog e database target non risiedono nello stesso disco.
Non usare il database target come il db del Recovery Catalog perché questo deve essere protetto da una perdita del db target. Assicurarsi che il recovery catalog e database target non risiedono nello stesso disco.
RMAN propaga le informazioni sulla struttura del db target (archivlogs, backup sets, tablespace e data files indicate nel control file del db target) nel recovery catalog.
1) Creazione di un nuovo database per contenere il recovery catalog.
Prevede la creazione dei seguenti tablespace.
SYSTEM
SYSAUX
TEMP (spazio minimo perchè usate poco)
UNDO (spazio minimo perchè usate poco)
RECOVERY CATALOG (dimensione legata al numero di datafiles del database da backupare + la frequenza
di backup + archivelog (più dml abbiamo e più sono grandi questi file))
di backup + archivelog (più dml abbiamo e più sono grandi questi file))
Assicurasi che le due macchine dove sono i db comunichino tra loro con il comando “ping”.
Inoltre su db del catalogo definire un nuovo listener (con netca) che punta al db target.
2) Creazione del Tablespace per Rman repository storage.
export ORACLE_SID=CATDB
sqlplus / as sysdba
SQL>
create tablespace tbs_catdb datafile '/home/oracle/u01/app/oracle/oradata/catdb2/catdb2/datafile/tbs_catdb.dbf' size 2g autoextend on next 500m maxsize 3g permanent extent management local autoallocate blocksize 8k segment space management auto;
create tablespace tbs_catdb datafile '/home/oracle/u01/app/oracle/oradata/catdb2/catdb2/datafile/tbs_catdb.dbf' size 2g autoextend on next 500m maxsize 3g permanent extent management local autoallocate blocksize 8k segment space management auto;
3) Creazione di un recovery catalog owner
SQL> create user rman identified by rman
temporary tablespace temp
default tablespace cattbs
quota unlimited on cattbs;
temporary tablespace temp
default tablespace cattbs
quota unlimited on cattbs;
4) Dare le grant.
SQL> grant recovery_catalog_owner to rman;
5) Modificare il file tnsnames.ora sul server dove è installato il catalog.
vi $ORACLE_HOME/network/admin/tnsnames.ora
CATDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = coslab02.intra.camera.it)
(PORT = 1521))
(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = CATDB.WORLD)))
Attenzione che se in fase di collegamento a rman compare l’errore
RMAN-04004: error from recovery catalog database: ORA-12154:
TNS:could not resolve the connect identifier specified
TNS:could not resolve the connect identifier specified
è causato dal fatto che RMAN non risolve l’alias CATDB e in questo caso collegarsi come CATDB.<dominio>
a meno che il domain non sia messo nel file sqlnet.ora.
a meno che il domain non sia messo nel file sqlnet.ora.
Modificare anche il file listener.ora sul server in cui l’istanza di catalogo è running:
(SID_DESC =
(GLOBAL_DBNAME = CATDB)
(ORACLE_HOME = /home/oracle/u01/app/oracle/product/11.2.0/dbhome_2)
(SID_NAME = CATDB)
)
6) Creare il Recovery Catalog
[oracle@oradbs05 datafile]$ rman
RMAN> connect catalog rman/rman@catdb
connected to recovery catalog database
Non è necessario usare il net_service_name se si esporta come ORACLE_SID=catdb.
RMAN> create catalog;
recovery catalog created
Nel tablespace definito precedentemente vengono create le tabelle di catalog.
7) Registrare il database target nel catalogo.
Dalla macchina dove è installato il recovery catalogo collegarsi con Rman al db target (SIAT11F).
Il target deve essere in stato mount oppure open.
[oracle]$ RMAN sys/<password>@SIAT11F catalog rman/rman@catdb
RMAN> register database;
RMAN> register database;
database registered in recovery catalog
starting full resync of recovery catalog
full resync complete
Con questo comando Rman legge il control file del db target e copia i dati nelle tabelle del recovery catalog
e sincronizza il recovery catalog con il control file.
e sincronizza il recovery catalog con il control file.
Per verificare di aver registrato con successo il db target eseguire il comando.
RMAN> list incarnation;
List of Database Incarnations
DB Key Inc Key DB Name DB ID STATUS Reset SCN Reset Time
------- ------- -------- ---------------- --- ---------- ----------
2 84 SIAT11F 3216764891 PARENT 1 15-AUG-09
2 4 SIAT11F 3216764891 CURRENT 945184 11-SEP-18
SINCRONIZZAZIONE
Per effettuare l’update del Recovery Catagol a partire dai cambiamenti presenti nel control file, occorre prima stoppare il db target (SIAT11F) e portarlo in modalità nomount.
La sincronizzazione full fa sia quella parziale, e quindi aggiorna il recovery catalog con ogni metadata riguardante backup, archived redo log e data file, ma anche i cambiamenti della struttura del db come un cambiamento di uno schema e un nuovo tablespace. Per fare questo crea uno snapshot del control file e lo confronta con il, recovery catalog.
SQL> shutdown immediate;
SQL> startup nomount;
SQL> alter database mount;
ERROR at line 1:
ORA-00205: error in identifying control file, check alert log for more info
Collegarsi al rman con db target e catalog.
$ rman target sys/so12mee0@SIAT11F catalog rman/rman@catdb
RMAN> resync catalog;
starting full resync of recovery catalog
full resync complete
SQL> show parameter control_file_record_keep_time
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
control_file_record_keep_time integer 7
Questo parametro definisce il minimo numero di giorni dopodiché un record riusabile può essere sovrascritto.
Quali sono i record risuabili? Quelli relativi agli archivelog e backup. Quelli contenenti le informazioni dei
datafile, tablespace e redo non possono essere sovrascritti a meno che l'oggetto corrispondente non venga
eliminato dal tablespace.
Quali sono i record risuabili? Quelli relativi agli archivelog e backup. Quelli contenenti le informazioni dei
datafile, tablespace e redo non possono essere sovrascritti a meno che l'oggetto corrispondente non venga
eliminato dal tablespace.
Di default è 7.
control_file_record_keep_time = retention period + level 0 backup interval + 1
For example, a level 0 backup once a week with retention policy of a recovery windows of 14 days would
have a control_file_record_keep_time of 22 ( 14+7+1).
have a control_file_record_keep_time of 22 ( 14+7+1).
UNREGISTER DATABASE
Per rimuove dal catalogo un db collegarsi al db come target.
rman target / catalog rman/rman@catdb Recovery Manager: Release 11.2.0.1.0 - Production on Thu Jan 24 16:48:24 2019 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. connected to target database: SIAT11F (DBID=3216764891) connected to recovery catalog database RMAN> unregister database; database name is "SIAT11F" and DBID is 3216764891 Do you really want to unregister the database (enter YES or NO)? yes database unregistered from the recovery catalog
SPOSTARE RECOVERY CATALOG SU UN ALTRO DB
Spostare il recovery catalog dal db CATDB2 a CATDB che non ha all'interno alcun db registrato.
$ rman
RMAN> connect target sys/<pwd>@S11TEST1
connected to target database: S11TEST1 (DBID=4247218851)
RMAN> connect catalog rman/rman@CATDB
connected to recovery catalog database
RMAN> list incarnation;
RMAN> import catalog rman/rman@CATDB2;
Starting import catalog at 24-JAN-19
connected to source recovery catalog database
import validation complete
database unregistered from the source recovery catalog
Finished import catalog at 24-JAN-19
RMAN> list incarnation;
List of Database Incarnations
DB Key Inc Key DB Name DB ID STATUS Reset SCN Reset Time
------- ------- -------- ---------------- --- ---------- -----------------------------------------
6169 6190 S11TEST1 4247218851 PARENT 1 09-JAN-19
6169 6191 S11TEST1 4247218851 PARENT 1301776 15-JAN-19
6169 6192 S11TEST1 4247218851 PARENT 1303703 15-JAN-19
6169 6171 S11TEST1 4247218851 CURRENT 1659368 22-JAN-19
VISTE
Risalire al DBID del database target
SQL> select dbid from v$database;
Collegarsi come catalog
SQL> connect rman/rman@catdb
select * from rc_database where dbid =&dbid_target
select * from rc_stored_Script
select * from rc_unusable_backupfile_details
select * from rc_rman_status
select * from rc_rman_configuration
select * from rc_archived_log
select * from rc_Datafile
query RMAN: risalire al backup piece di un tablesapce\datafile SELECT db.dbid , --identifica db target db.name AS DB_TARGET, d.tablespace_name, d.name AS data_file, d.file# AS file_id, df.checkpoint_change#, --coincide con Ckp SCN estratto dal comando RMAN list backup df.resetlogs_change#, TRUNC (df.block_size * df.datafile_blocks / 1048576) Total_Size_MB, TRUNC (df.block_size * df.blocks / 1048576) Backup_Size_MB, DF.BS_KEY, ---coincide con il BS Key estratto dal comando RMAN list backup df.SET_STAMP,-- identifica univocamente il record nel control file del target database a cui corrisponde il backup set df.SET_COUNT,--identifica univocamente il record nel control file del target database a cui corrisponde il backup set df.recid, df.stamp, bp.handle, media, TAG, bp.piece#, start_time, bp.completion_time, CASE bp.backup_type WHEN 'D' THEN 'full backup or level 0 incremental' WHEN 'I' THEN 'incremental level 1' WHEN 'L' THEN 'archived redo log' ELSE bp.backup_type END AS tipo_bkp, CASE bp.status WHEN 'A' THEN 'all backup pieces available' WHEN 'D' THEN 'all backup pieces deleted' WHEN 'O' THEN 'the backup set is unusable' ELSE bp.status END stato FROM rc_backup_datafile df, rc_Datafile D, rc_backup_Piece bp, rc_database db, RC_DATABASE_INCARNATION inc WHERE inc.dbinc_key = (select max(inc.dbinc_key) from RC_DATABASE_INCARNATION inc where name = d.db_name and status='CURRENT') and inc.dbinc_key = db.dbinc_key and inc.dbinc_key = df.dbinc_key and inc.dbinc_key = d.dbinc_key and Df.DB_KEY = d.db_key AND df.file# = d.file# AND bp.db_id = db.dbid AND db.name = d.db_name AND DF.BS_KEY = bp.BS_KEY AND d.db_name = 'SIAT11' ---AND d.tablespace_name = 'TSDATISICA_LOB' --and handle = 'CONCT_23tgrilu_1_1' AND df.completion_time >= TO_DATE ('29/10/2018', 'dd/mm/yyyy') order by d.tablespace_name, d.file#;