« ¿¿RACK para terremotos??Export DataPump, no tan maravilloso como se dice :( »

Migración de Oacle9i a Oracle10g, paso a paso (migrating Oracle9i to Oracle10g)


Hola

A veces leemos tremendas notas en Metalink con respecto a la migración de una base de datos en Oracle9i a Oracle10g u Oracle11g, es tanto texto que muchas veces no perdemos u optamos por lo más sencillo, export e import. Como sabemos el exp/imp es bueno para bases de datos pequeñas, pero que sucede con aquellas bases de 1TB o 2TB o más??



Pues claramente no nos sirve el método antiguo del exp/imp, por ende... debemos recurrir a lo mpas básico de un DBA , los comandos, SIII!!!! pantalla negra y letras verdes :>>

Por eso , acá les explico como hacer la migración desde Oracle9i a Oracle10g, todo muy detallado.

Esta probado, pero si hubiese algún comentario, me lo hacen saber a hector.ulloa@gmail.com y lo modificaré a la brevedad

Matriz de certificación

8.1.7.4 -> 10.2.X.X.X
9.0.1.4 or 9.0.1.5 -> 10.2.X.X.X
9.2.0.4 or higher -> 10.2.X.X.X
10.1.0.2 or higher -> 10.2.X.X.X

B) Nota de origen

Complete Checklist for Manual Upgrades to 10gR2 Doc ID: Note:316889.1

1.- Bajar el motor Oracle10gr2 (10.2.0.1) desde la siguiente ruta
http://www.oracle.com/technology/software/products/database/oracle10g/htdocs/10201sol64soft.html

2.- Verificar los prerequisitos de instalación
http://download.oracle.com/docs/cd/B19306_01/install.102/b15690/toc.htm

3.- Instalar el motor Oracle10gr2

4.- Instalar el parche 10.2.0.4 número 6810189 (leer previamente el Readme)

5.- En (oracle10g)
Copiar estos archivos a otra ubicación , para que sean ejecutados desde la instancia Oracle9i

ORACLE_HOME/rdbms/admin/utlu102i.sql
ORACLE_HOME/rdbms/admin/utltzuv2.sql

6.- En (oracle9i)
Ejecutar los archivos del punto anterior

sqlplus '/as sysdba'

SQL> spool Database_Info.log
SQL> @utlu102i.sql
SQL> spool off

Simplemente verificar la información que arroja el Upgrade Information Tool, por ejemplo warnings , parámetros obsoletos, etc

7.- En (oracle9i)
Para verificar los usuarios que poseen rol de CONNECT

SELECT grantee FROM dba_role_privs
WHERE granted_role = 'CONNECT' and
grantee NOT IN (
'SYS', 'OUTLN', 'SYSTEM', 'CTXSYS', 'DBSNMP',
'LOGSTDBY_ADMINISTRATOR', 'ORDSYS',
'ORDPLUGINS', 'OEM_MONITOR', 'WKSYS', 'WKPROXY',
'WK_TEST', 'WKUSER', 'MDSYS', 'LBACSYS', 'DMSYS',
'WMSYS', 'OLAPDBA', 'OLAPSVR', 'OLAP_USER',
'OLAPSYS', 'EXFSYS', 'SYSMAN', 'MDDATA',
'SI_INFORMTN_SCHEMA', 'XDB', 'ODM');

A este rol de esos usuarios se les debe revocar todos los privilegios que no sean el CREATE SESSION, una vez que se haya realizado la migración

8.- En (Oracle9i)
Obtener información de los links públicos

SELECT
'create '||DECODE(U.NAME,'PUBLIC','public ')||'database link '||CHR(10)
||DECODE(U.NAME,'PUBLIC',Null, U.NAME||'.')|| L.NAME||chr(10)
||'connect to ' || L.USERID || ' identified by '''
||L.PASSWORD||''' using ''' || L.host || ''''
||chr(10)||';' TEXT
FROM sys.link$ L,
sys.user$ U
WHERE L.OWNER# = U.USER# ;

Para reconstruirlos una vez se haya realizado la migración

9.- En (Oracle9i)
Para buscar corrupciones

Set verify off
Set space 0
Set line 120
Set heading off
Set feedback off
Set pages 1000
Spool analyze.sql

Select 'Analyze cluster "'||cluster_name||'" validate structure cascade;'
from dba_clusters
where owner='SYS'
union
Select 'Analyze table "'||table_name||'" validate structure cascade;'
from dba_tables
where owner='SYS' and partitioned='NO' and (iot_type='IOT' or iot_type is NULL)
union
Select 'Analyze table "'||table_name||'" validate structure cascade into invalid_rows;'
from dba_tables
where owner='SYS' and partitioned='YES';

spool off

Este sql crea un script llamado analyze.sql.

Y se debe ejecutar de la siguiente forma

$ sqlplus '/as sysdba'
SQL> @$ORACLE_HOME/rdbms/admin/utlvalid.sql
SQL> @analyze.sql

Todo esto no debiese retornar error , si fuese así se debe investigar y solucionar

10.- En (Oracle9i)
Bajar el listener

$ lsnrctl
LSNRCTL> stop

Asegurarse que no hay archivos que necesiten recuperación

$ sqlplus '/ as sysdba'
SQL> select * from v$recover_file;

Por lo anterior , no debiese devolver registros

11.- En (Oracle9i)
Asegurarse que no hay archivos en modo backup

SQL> select * from v$backup where status!='NOT ACTIVE';

Esto no debiese retornar errores

12.- En (Oracle9i)
Deshabilitar todos los jobs y crontabs

13.- En (Oracle9i)
El usuario sys y system deben tener el tablespace por defecto en SYSTEM

SQL> select username, default_tablespace from dba_users
where username in ('SYS','SYSTEM');

Modificación de los usuarios , si estuviesen con inconvenientes

SQL> alter user sys default tablespace SYSTEM;
SQL> alter user system default tablespace SYSTEM;

14.- En (Oracle9i)
Asegurarse que la tabla aud$ este en el tablespace SYSTEM

SQL> select tablespace_name from dba_tables where table_name='AUD$';

15.- En (Oracle9i)
Tomar nota de todos los controlfiles

SQL> select * from v$controlfile;

16.- En (Oracle9i)
Si la tabla XDB.MIGR9202STATUS existe en la base 9i , borrarla

17.- En (Oracle9i)
Verificar donde estan los archivos de redo

select * from v$logfile;

18.- En (Oracle9i)
Verificar donde estan los datafiles

select * from dba_data_files;

19.- En (Oracle9i)
Bajar la base de datos

$ sqlplus '/as sysdba'
SQL> shutdown immediate;

20.- En (Oracle9i)
Realizar un full cold backup

21.- En (Oracle9i)
Copiar todos los datafiles, todos los controlfiles, todos los redologs y archivos temporales , desde la ruta antigua (Oracle9i) a la ruta nueva (Oracle10g)

22.- En ambas instancias
- Copiar el init.ora de la base 9i a la base 10g
- Copiar el archivo de password desde la base 9i a la base 10g
- Comentar cualquier parámetro obsoleto ubicado en el apendice A , y verificar los parámetros depreciados en el apendice B en el init de Oracle9i
- Setear el parámetro COMPATIBLE a la versión de Oracle que se está migrando, en Oracle9i
- Si el valor NLS_LENGTH_SEMANTICS está en CHAR cambiar a BYTE , en Oracle9i
- Verificar el DB_DOMAIN en Oracle9i
- Modificar el PGA_AGGREGATE_TARGET y asignarle unos 512MB en Oracle9i
- Setear el SHARED_POOL_SIZE mínimo en 150MB en Oracle9i
- Setear el LARGE_POOL_SIZE mínimo en 150MB en Oracle9i
- Setear el JAVA_POOL_SIZE mínimo en 150MB en Oracle9i
- Comentar cualquier parámetro AQ_TM_PROCESSES y JOB_QUEUE_PROCESS y dejarlos a ambos en 0 en Oracle9i

23.- En (Oracle10g)
Asegurarse que la variable de medioambiente NLS_LANG este seteada correctamente

$ env | grep $NLS_LANG

24.- En ambas instancias
- Copiar los archivos de Oracle Net a la nueva ubicación (Desde Oracle9i a Oracle10g)

$ cp $OLD_ORACLE_HOME/network/admin/*.ora /network/admin

25.- En (Oracle10g)
Actualizar el oratab
SID:ORACLE_HOME:N

26.- En (Oracle10g)
Actualizar las variables de medio ambiente ORACLE_HOME y PATH

27.- En (Oracle10g)
Verificar estos parámetros , que se encuentren con la ruta adecuada
- ORACLE_HOME
- PATH
- ORA_NLS10
- ORACLE_BASE
- LD_LIBRARY_PATH
- ORACLE_PATH

28.- En (Oracle10g)
Levantar la base de datos en modo UPGRADE
$ cd $ORACLE_HOME/rdbms/admin
$ sqlplus / as sysdba

SQL> startup upgrade

29.- En (Oracle10g)
Crear el nuevo tablespace SYSAUX , esta información proviene del punto de la ejecución del script utlul02i.sql

SQL> CREATE TABLESPACE sysaux DATAFILE 'sysaux01.dbf'
SIZE 500M REUSE
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO
ONLINE;

30.- En (Oracle10g)
Ejecutar el siguiente archivo

SQL> spool upgrade.log
SQL> @catupgrd.sql
SQL> spool off

El cual nos enseña que scripts de upgrade necesitan ser ejecutados en Oracle10g

31.- En (Oracle10g)
Ejecutar el siguiente archivo

SQL> @utlu102s.sql TEXT

El cual muestra el status de la base después del upgrade

32.- En (Oracle10g)
Ejecutar la siguiente consulta para saber el estado de los componentes

QL> select comp_name, status, version from dba_registry;

33.- En (Oracle10g)
Hacer un restart a la base de datos
SQL> shutdown immediate
SQL> startup restrict

34.- En (Oracle10g)
SQL> @olstrig.sql

Para el OLS

35.- En (Oracle10g)
Ejecutar para compilar los objetos inválidos en Oracle10g
SQL> @utlrp.sql

36.- En (Oracle10g)
Para verificar los objetos inválidos

spool invalidos_post_migracion.lst
Select substr(owner,1,12) owner,
substr(object_name,1,30) object,
substr(object_type,1,30) type, status
from
dba_objects where status <>'VALID';
spool off

Sólo se puede ignorar esto

SYS.V_$KQRPD
SYS.V_$KQRSD
SYS.GV_$KQRPD
SYS.GV_$KQRSD

37.- En (Oracle10g)
Levantar la base de datos en modo restringido

% sqlplus '/as sysdba'
SQL> shutdown
SQL> startup restrict

38.- En (Oracle10g)
En el nuevo archivo de inicialización , dejar el parámetro NLS_LENGTH_SEMANTICS en CHAR (había sido cambiado a BYTE)

39.- En (Oracle10g)
- Levantar la base de datos de forma normal
SQL> startup

40.- En (Oracle10g)
Revocar los privilegios que no sean CREATE SESSION desde el rol CONNECT, para los usuarios que se obtuvieron en Oracle9i

41.- En (Oracle10g)
Crear el spfile
SQL> create spfile from pfile;

42.- En (Oracle10g)
Reconstruir los links públicos según lo encontrado en Oracle9i

43.- En (Oracle10g)
Modificar los parámetros del listener y levantarlo (Oracle10g)

44.- En (Oracle10g)
Habilitar CRON y JOBS

45.- En (Oracle10g)
Modificar el oratab si corresponde

46.- En (Oracle10g)
Ejecutar el DBMS_STATS para verificar el tema de las estadísticas

DBMS_STATS.GATHER_DATABASE_STATS

Gathering Statistics for the Cost Based Optimizer (Pre 10g) Nota : 114671.1

47.- En (Oracle10g)
Tareas post-instalación

How to tune your Database after Migration/Upgrade Doc ID: Note:262592.1

Apendices

Appendix A --> Parámetros obsoletos
ENQUEUE_RESOURCES
DBLINK_ENCRYPT_LOGIN
HASH_JOIN_ENABLED
LOG_PARALLELISM
MAX_ROLLBACK_SEGMENTS
MTS_CIRCUITS
MTS_DISPATCHERS
MTS_LISTENER_ADDRESS
MTS_MAX_DISPATCHERS
MTS_MAX_SERVERS
MTS_MULTIPLE_LISTENERS
MTS_SERVERS
MTS_SERVICE
MTS_SESSIONS
OPTIMIZER_MAX_PERMUTATIONS
ORACLE_TRACE_COLLECTION_NAME
ORACLE_TRACE_COLLECTION_PATH
ORACLE_TRACE_COLLECTION_SIZE
ORACLE_TRACE_ENABLE
ORACLE_TRACE_FACILITY_NAME
ORACLE_TRACE_FACILITY_PATH
PARTITION_VIEW_ENABLED
PLSQL_NATIVE_C_COMPILER
PLSQL_NATIVE_LINKER
PLSQL_NATIVE_MAKE_FILE_NAME
PLSQL_NATIVE_MAKE_UTILITY
ROW_LOCKING
SERIALIZABLE
TRANSACTION_AUDITING
UNDO_SUPPRESS_ERRORS

Appendix B --> Parámetros depreciados
LOGMNR_MAX_PERSISTENT_SESSIONS
MAX_COMMIT_PROPAGATION_DELAY
REMOTE_ARCHIVE_ENABLE
SERIAL_REUSE
SQL_TRACE
BUFFER_POOL_KEEP (replaced by DB_KEEP_CACHE_SIZE)
BUFFER_POOL_RECYCLE (replaced by DB_RECYCLE_CACHE_SIZE)
GLOBAL_CONTEXT_POOL_SIZE
LOCK_NAME_SPACE
LOG_ARCHIVE_START
MAX_ENABLED_ROLES
PARALLEL_AUTOMATIC_TUNING
PLSQL_COMPILER_FLAGS (replaced by PLSQL_CODE_TYPE and PLSQL_DEBUG)

Appendix C --> Cosas varias

Además , esta la interrogante sobre la consola y cada uno de los componentes que quedan invalidos, por ejemplo XML .

a)
El Enterprise Manager no existe en Oracle9i, existe un módulo que no es la misma consola que vemos, por ende , habría que ejecutar el emca para reconstruir el repositorio , mediante el comando :

emca -config dbcontrol db -repos create

Teniendo en cuenta que hay que setear ORACLE_HOME y ORACLE_SID

b)
Las características de Oracle10g, ese dato lo podemos ver con la siguiente consulta

SQL> col comp_name format a60
SQL> select comp_name , status , version , procedure from dba_registry

Donde status me indica el estado del componente, version es la versión del componente y procedure es aquel package que lo recrea, o sea, ante un error ejecutamos el procedimiento.

Espero les sirva


by Ligarius
24.06.09. 20:12:36. 1923 words, 19327 views. Categories: Base de datos, Oracle 10g ,