Sono frequenti le attivita' amministrative per il trasferimento o la migrazione
dei componenti Oracle (relocate).
In questo documento vengono riportate le piu' comuni ed i relativi comandi.
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 #.
Prima di qualsiasi attivita' di migrazione e' necessaria
un'attivita' di preparazione.
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,
...
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).
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).
Per la migrazione dei redo log archiviati e' sufficiente agire sull'initSID.ora
oppure sull'SPFILE, come descritto nel seguito.
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 in cui venga utilizzato l'SPFILE i comandi sono i seguenti:
La migrazione dei Tempfile puo' essere eseguita a database attivo.
Ecco i comandi:
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:
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).
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,
...
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;
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;
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;
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
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
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;
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='*';
Testo: Attivita' amministrative di trasferimento sull'RDBMS Oracle
Data: 31 Settembre 2010
Versione: 1.0.0
Autore: mail@meo.bogliolo.name