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

Migración de Oracle 9.2 a 10G

Antes de Empezar la migración hay que instalar una 10G

Proceso de Migracion

– Chequeo del Espacio disponible en el Tablespace SYSTEM – He puesto 1Gb más

– Chequeo del espacio necesario para SYSAUX (en principio 500MB)

– Los derechos de Usuario de los directorios de la BBDD: Estarán creados con usuario propietario de oracle9 no del nuevo usuario de oracle 10g.

– Como ya hay instalaciones en la Máquina. hay que revisar que:

 /var/opt/oracle/oraInst.loc
   #Oracle Installer Location File Location
   #Wed Jul 18 15:55:14 BST 2007
   inst_group=oinstall
   inventory_loc=/<Path>/orabin10/oraInventory
 Esté apuntando a la nueva intalación o si no, que el nuevo usuario de oracle 10g
 Tenga derechos para escribir ahí. Si no al finalizar la migración petará al registrar
 el oraInventory.

2) Ejecutar el DBUA

– Hay que disponer de un XWindows Server.

export DISPLAY=<IP del xwindows>
export ORACLE_HOME=/PKGAPOLO2/orabin10/oracle/product/10

cd /PKGAPOLO2/orabin10/oracle/product/10cd
dbua

Errores que hay que vigilar

  Puede que simplemente No se Use pfile, si no se puede ignorar el error.

 Este es debido a que al hacer una migración usas un nuevo usuario.
 Hay que asegurarse de que tenga derechos de escritura sobre todos los ficheros de la BBDD.

Pantalla 1

 Seleccionaremos la BBDD a migrar

—-

Pantalla 2

 En este caso hay que ejecutar el catpath.sql

—-

Pantalla 3

 Estos TEMAS hay que apuntarlos para solucionarlos al finalizar la migración

—-

Pantalla 4

 En principio con 500MB para el sysaux hay suficiente, desparcaremos el AUTOEXTEND

—-

Pantalla 5

 Según el nº de CPUs de la máquina, marcaremos 2,4,6 cpu para recompilar los objetos.

—-

Pantalla 6

 Como ya tenemos Backups de la BBDD marcaremos 'I have already backed up my database'

—-

Pantalla 7

 Esta pantalla la dejaremos tal y como está

—-

Pantalla 8

 Usaremos la misma contraseña para los dos nuevos usuarios

—-

Pantalla 9


Pantalla 10


  Y Si todo va bién... Al cabo de unas horas:
Database upgrade has been completed successfully, and the database is ready to use.

Configuración del LISTENER

En $ORACLE_HOME/network/admin/listener.ora
LISTENER =
    (DESCRIPTION =
            (ADDRESS = (PROTOCOL = TCP)(HOST = <Host>)(PORT = <Puerto - Por def. 1521>))
                )
En Init.ora:
  local_listener=LISTENER
  o si la bbdd ya está arriba:
sqlplus “/ as sysdba”

alter system set local_listener=LISTENER;
Registrar el nuevo listener en tnsnames.ora

En $ORACLE_HOME/network/admin/tnsnames.ora

LISTENER =

(DESCRIPTION =
  (ADDRESS =(PROTOCOL = TCP)(Host = <Host>)(PORT = <Puerto - Por def. 1521>)))

Migracion de Oracle 9 a Oracle 11 – Foros del Web

Migracion de Oracle 9 a Oracle 11Hola gente,Bueno despues de tanto buscar y buscar, me he dado por vencido y ya recurro a la sabiduria de los foros para solucionar mi duda. Y es la siguiente:Resulta que tengo que migrar una base de datos que esta en oracle 9 a oracle 11g. Ya he instalado correctamente el servidor de oracle 11g, y ya he hecho unas pruebas para ver si todo va bien, por lo menos en cuanto a la conexion se refiere.Cada dia, se hace una copia total de la base de datos, por lo que ya dispongo del fichero dmp para hacer la importacion.Ahora bien a la hora de hacer el import, de la forma “imp file=copia.dmp full=yes ignore=yes log=exp_oracle11.log buffer=1000000”, me sale el siguiente error, o por lo menos esto es el log de lo que me sale:”Username:Connected to: Oracle Database 11g Enterprise Edition Release 11.1.0.6.0 – ProductionWith the Partitioning, OLAP, Data Mining and Real Application Testing optionsExport file created by EXPORT:V09.02.00 via conventional pathWarning: the objects were exported by SYS, not by youimport done in WE8ISO8859P1 character set and AL16UTF16 NCHAR character setimport server uses WE8MSWIN1252 character set possible charset conversionexport client uses US7ASCII character set possible charset conversion. importing SYSTEM’s objects into SYSTEM,IMP-00017: following statement failed with ORACLE error 1119:”CREATE TABLESPACE “CURSOS_ICFEM” BLOCKSIZE 8192 DATAFILE ‘/u01/datos/oracl””e/daute/oradata/cursos_icfem05.dbf’ SIZE 1073741824 AUTOEXTEND ON NEX””T 12582912 MAXSIZE 2048M, ‘/u01/datos/oracle/daute/oradata/cursos_icfem06.””dbf’ SIZE 1073741824 AUTOEXTEND ON NEXT 12582912 MAXSIZE 2048M, ‘/u0″”1/datos/oracle/daute/oradata/cursos_icfem01.dbf’ SIZE 2048M , ‘/u01/da””tos/oracle/daute/oradata/cursos_icfem02.dbf’ SIZE 2048M , ‘/u01/datos/””oracle/daute/oradata/cursos_icfem03.dbf’ SIZE 1073741824 AUTOEXTEND O””N NEXT 12582912 MAXSIZE 2048M, ‘/u01/datos/oracle/daute/oradata/cursos_icf””em04.dbf’ SIZE 1073741824 AUTOEXTEND ON NEXT 12582912 MAXSIZE 2048M “”EXTENT MANAGEMENT LOCAL AUTOALLOCATE ONLINE PERMANENT NOLOGGING SEGMENT “”SPACE MANAGEMENT AUTO””Esta parte se repite para todos los ficheros del tablespace. Tambien mas abajo me da algo parecido pero con los usuarios o roles, y la importacion acaba en un momento y logicamente me ha dicho que no se ha importado correctamente.Lo de los tablespace, me he dado cuenta que el path no es el mismo en la maquina de oracle 9 y en la maquina de oracle 11.Necesitaria ayuda para seguir los pasos y realizar la completa migracion sin errores o con los menos posibles,Muchas gracias

Respuesta: Migracion de Oracle 9 a Oracle 11


Revisa que los directorios de los archivos ya existan ejemplo que el directorio /u01/datos/oracle/daute/oradata/ exista y sea accesible por oracle, (el import no te va a crear subdirectorios)
No pones el log completo, no se si el error sea que ya tienes los tablespaces creados y no los puede volver a crear igual que los usuarios, lo cual es normal.Lo que yo te recomendaria seria.

-Copiar tu estructura de tu BB de 9i a la de 11 incluyendo tablespaces y usuarios con los mismos privilegios.
– Sacar un import full de tu base de 9
– En tu base de 11i hacer el import por esquemas (fromuser=scott,admin,test touser=scott,admin,test)

de esta forma solo inserta los datos de los eschemas y no trata de recrear completa la BD, a final de cuentas no deberias de tener nada en los esquemas de sys y system.

Espero que esto ayude.

Saludos.

Respuesta: Migracion de Oracle 9 a Oracle 11


Antes que nada muchas gracias por tu respuesta, y es mas o menos los pasos que he intentado seguir a mi manera.Lo que he hecho y llevo haciendo es como tu dices, y mediante el TOAD, coger y generar primero los scripts de im bd oracle 9, y logicamente cambiar el path donde los quiero ubicar.

Despues tambien he generado los scripts con todos los usuarios que me interesan para el traspaso de datos, y para tener mejor control, hacer la importacion usuario por usuario para tener mejor control de los posibles errores que puedan generarse.

Lo que no tengo claro es que a la hora de generar los scripts para la creacion de los usuarios, la clave que me devuelve el script es la que esta encriptada, y locigamente necesito los mismos datos, usuario y clave para que puedan acceder desde las mismas aplicaciones. Esto como se podria solventar?

Me imagino que para hacer la importacion despues de los primeros dos pasos (creacion de tablespaces y usuarios), la sentencia para la importacion sera:

imp file=copia.dmp full=yes ignore=yes log=exp_oracle11.log buffer=1000000 fromuser=scott,admin,test touser=scott,admin,test.

Me imagino que en este import se importa todo lo relacionado con este usuario, aparte de tablas, vistas, secuencias, etc…tambien los roles y permisos sobre las tablas y demas objetos de la base de datos.

Respuesta: Migracion de Oracle 9 a Oracle 11


La sintaxis que pones del import quitale el FULL=Y, si no intentara crear los tablespaces nuevamente. Con el fromuser touser solo importara los usuarios que le pones, lo cual es correcto. De preferencia tambien quitale el IGNORE=Y para que te marque errores, con el fromuser touser ya no deberian de aparecer ninguno y los que aparezcan son por asi decirlo “reales”.Los passwords aparecen encriptados por seguridad y cuando los vayas a crear en tu BD de 11 se crearan con el password orinal por lo cual no debes de tener problemas en la BD.

Saludos.

Respuesta: Migracion de Oracle 9 a Oracle 11


Muchas gracias por tu rapida respuesta. El lunes ya cuando vuelva al trabajo me pondre manos a la obra para ir migrando poco a poco cada uno de los usuarios con los objetos pertenecientes a el mismo. Seguire al pie de la letra tus pasos, asi que espero que todo me vaya bien Un cordial saludo!!!

vía Migracion de Oracle 9 a Oracle 11 – Foros del Web.