Attivita' amministrative di migrazione sull'RDBMS Oracle

Sono frequenti le attivita' amministrative per il trasferimento o la migrazione dei componenti Oracle (relocate).
Una migrazione puo' essere dovuta al cambio di Storage, ad una diversa struttura di file system necessaria per la predisposizione di un cluster, per ospitare ambienti differenti sullo stesso sistema ospite, ...

In questo documento vengono riportate le piu' comuni ed i relativi comandi.

Attenzione!

Un'importante avvertenza: molti dei comandi contenuti in questo documento sono pericolosi se usati in modo non corretto. Utilizzateli solo se sapete cosa state facendo.

Prima di procedere e' necessario:

Altri documenti contengono utili informazioni sull'argomento. Tra gli altri: Introduzione ad Oracle, Utilizzo della modalita' di log archiving in Oracle, SPFILE, Attivita' di recovery su Oracle, ...

Nel seguito sono riportati comandi da eseguire con un utente con diritti amministrativi da SQL*Plus o comunque da un editor SQL. Quando vi sono comandi di sistema operativo sono indicati con #.


Preparazione

Prima di qualsiasi attivita' di migrazione e' necessaria un'attivita' di preparazione.
La prima cosa e' capire esattamente cosa si vuole fare! Si vogliono spostare alcuni datafile su un file system che e' servito da uno storage piu' performante? Oppure la destinazione dei log archive? ...
Chiarito questo e' importante sapere esattamente qual'e' la configurazione attuale. Per questo sono utili i seguenti comandi:

alter database backup controlfile to trace as '/tmp/control';

select name from v$datafile;

select * from v$controlfile;

Ora si puo' procedere alla migrazione come descritto nei seguenti paragrafi. Per semplicita' ogni paragrafo tratta di un tipo di oggetto diverso: Datafile, Redo Log, Control file, datafile, Tempfile, altri, ...

Migrazione Datafile

Per migrare i datafile e' necessario che il tablespace che li contiene sia offline oppure che la base dati sia in MOUNT (ma non in OPEN).

CONNECT / as SYSDBA
STARTUP MOUNT
# copia dei file (eg. cp -p  /u02/oracle/rbdb1/temp01.dbf /u03/oracle/data/temp01.dbf )
ALTER DATABASE RENAME FILE '/u02/oracle/rbdb1/temp01.dbf', '/u02/oracle/rbdb1/user3.dbf'
  TO '/u03/oracle/data/temp01.dbf', '/u03/oracle/data/user3.dbf';
ALTER DATABASE OPEN;
Migrazione Redo LOG

Per migrare i Redo Log la procedura piu' semplice e' aggiungere i nuovi Redo Log, effettuare uno switch per impostare come corrente uno dei nuovi Redo Log e quindi cancellare i vecchi Redo Log. Tutto questo si fa con i normali comandi SQL... quindi non lo descrivo (cfr. Log archiving in Oracle).
Nel caso in cui siano da migrare fisicamente tutti contemporaneamente e' possibile farlo con il database in mount:

CONNECT / as SYSDBA
STARTUP MOUNT
ALTER DATABASE 
  RENAME FILE '/diska/logs/log1a.rdo', '/diska/logs/log2a.rdo' 
           TO '/diskc/logs/log1c.rdo', '/diskc/logs/log2c.rdo';
ALTER DATABASE OPEN;

Per la migrazione dei redo log archiviati e' sufficiente agire sull'initSID.ora oppure sull'SPFILE, come descritto nel seguito.

Migrazione Control file

Per migrare i control file si deve operare a DB spento. Il contenuto dei control file e' fondamentale per il MOUNT della base dati, quindi vanno utilizzate piu' copie e vanno periodicamente salvati (come visto in precedenza).
Nel caso, piu' semplice, in cui venga utilizzato l'initSID.ora i comandi sono i seguenti:

SHUTDOWN NORMAL
# copia dei control file
# modifica di initSID.ora con i nuovi nomi
# CONTROL_FILES = (/u01/oracle/prod/control01.ctl,
#                  /u02/oracle/prod/control02.ctl, 
#                  /u04/oracle/prod/control03.ctl)
EXIT
STARTUP

Nel caso in cui venga utilizzato l'SPFILE i comandi sono i seguenti:

SHUTDOWN NORMAL
STARTUP MOUNT
ALTER SYSTEM SET CONTROL_FILES= '/u01/oracle/prod/control01.ctl', '/u02/oracle/prod/control02.ctl', '/u04/oracle/prod/control03.ctl' scope=SPFILE;
SHUTDOWN NORMAL
EXIT
# Copia del control file
STARTUP
Migrazione Tempfile

La migrazione dei Tempfile puo' essere eseguita a database attivo. Ecco i comandi:

CREATE TEMPORARY TABLESPACE temp2
 TEMPFILE '/newdisk/data/SID/temp02.dbf' SIZE 1000M AUTOEXTEND ON NEXT 100M MAXSIZE 5000M
 EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1024K
 SEGMENT SPACE MANAGEMENT MANUAL;

ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp2;

DROP TABLESPACE temp INCLUDING CONTENTS AND DATAFILES;

CREATE TEMPORARY TABLESPACE temp
 TEMPFILE '/newdisk/data/SID/temp03.dbf' SIZE 1000M AUTOEXTEND ON NEXT 100M MAXSIZE unlimited
 EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1024K
 SEGMENT SPACE MANAGEMENT MANUAL;

ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp;

DROP TABLESPACE temp2 INCLUDING CONTENTS AND DATAFILES;
Migrazione altri oggetti

Vi e' un'ampia serie di file che vengono definiti come parametri nel file initSID.ora. Per modificarlo e' sufficiente editare il file e riavviare la base dati:

SID.__oracle_base='/home/oracle/app/oracle'
*.audit_file_dest='/home/oracle/app/oracle/admin/SID/adump'
*.control_files='/home/oracle/data/SID/control01.ctl','/home/oracle/bck/flash_recovery_area/SID/control02.ctl'
*.db_recovery_file_dest='/home/oracle/bck/flash_recovery_area'
*.diagnostic_dest='/home/oracle/app/oracle'
Nel caso in cui si utilizzi l'SPFILE e' possibile modificarli on-line utilizzare i comandi seguenti per l'impostazione ed il reset:
ALTER SYSTEM SET diagnostic_dest='/ora11ptp/app/oracle' scope=both;
ALTER SYSTEM SET core_dump_dest ='/ora11ptp/app/oracle/diag/rdbms/cptprod/CPTPROD/cdump' scope=both;
ALTER SYSTEM SET audit_file_dest='/ora11ptp/app/oracle/admin/CPTPROD/adump' scope=both;
ALTER SYSTEM SET db_recovery_file_dest='/oradata_11ptp/bck/flash_recovery_area' scope=both;

ALTER SYSTEM RESET background_dump_dest scope=spfile sid='*';
Ribaltamento di un istanza

Puo' essere in alcuni casi opportuno ribaltare il contenuto di un'instanza su una seconda istanza Oracle.

La procedura da seguire consiste nei seguenti passi:

Il dettaglio delle operative e' descritto nel documento Attivita' di recovery su Oracle (e' di 15 anni fa, ma ancora valido).


Testo: Attivita' amministrative di trasferimento sull'RDBMS Oracle
Data: 31 Settembre 2010
Versione: 1.0.0
Autore: mail@meo.bogliolo.name