Migrar usuario de versión 9i a 11GR2 con herramienta exp/imp

En la siguiente entrada de blog voy a mostrar un ejemplo de cómo exportar un esquema completo de un usuario Oracle de una base de datos en versión 9i hacia una versión 11GR2.

En muchas ocasiones, los DBA´s nos encontramos que tenemos que migrar Bases de datos a las últimas versiones y este proceso de migración se debe hacer de la manera más segura posible.  Pues una de estas maneras, desde mi punto de vista, es migrar la Base de datos esquema a esquema. La idea es la siguiente ….

Si debo migrar de una versión 9i a una 11GR2 y no quiero ir haciendo actualizaciones de versiones de Oracle. Una solución efectiva y rápida puede ser hacer lo siguiente:

- Instalar la nueva versión 11GR2 y crear la BD durante la creación con el mismo “perfil” que la Base de datos de versión anterior (en este caso la 9i), teniendo en cuenta cosas cómo por ejemplo poner el mismo CHARACTER SET, etc….

- Lo siguiente sería, exportar usando las herramientas de la versión 9i todos los esquemas, pero haciéndolo uno a uno. 

- Finalmente importar, usando el export de la nueva versión a la nueva Base de datos.

Seguidamente explico cómo hacer este export/import y explico que errores son los que comúnmente nos podemos encontrar durante este proceso.

Lo primero que tenemos que plantearnos es cómo exportar los esquemas que se encuentran en la versión vieja, en este ejemplo la 9i.

Se puede hacer de dos maneras. O bien ejecutando la herramienta export (exp) desde el mismo servidor donde se encuentre la base de datos, o bien, usando un cliente Oracle instalado en nuestro PC,  por ejemplo, y realizar el export.

Tanto en un caso como en el otro, nos tenemos que asegurar de que tendremos espacio de disco donde ubicar el fichero binario (con extensión .dmp) que genera la herramienta export y luego tendremos que copiarlo al servidor destino (en este caso la 11GR2) para posteriormente realizar el import.

 Si tenemos acceso al servidor donde están los esquemas de la 9i, lo mejor es hacer el export de esta manera. Ya que probablemente será más rápido y además, nos aseguraremos de que la herramienta export que utilizamos corresponde con la versión Oracle que hay instalada. Si por el contrario, realizamos el export desde un cliente Oracle instalado en nuestro PC, nos tenemos que asegurar que la versión que utilizamos para realizar el export, es cómo mínimo igual o inferior a la versión de la Base de datos origen. Porque sino es así obtendremos el siguiente mensaje de error al ejecutar la herramienta export:

EXP-00056: ORACLE error 6550 encountered
ORA-06550: line 1, column 41:
PLS-00302: component ‘SET_NO_OUTLINES’ must be declared
ORA-06550: line 1, column 15:
PL/SQL: Statement ignored
EXP-00000: Export terminated unsuccessfully

Solución: Ejecutar el export desde el servidor o instalarse un cliente de la misma versión o inferior. Nunca superior.

Ejemplo de export de esquema que usaríamos para realizar el export desde nuestro PC Windows con cliente 9i instalado igual o inferior al instalado en el servidor “origen”:

exp system/password@SID9i owner=USUARIO file=esquema_USUARIO.dmp log=exp_USUARIO.log

Esta línea la podemos guardar en un fichero con extensión .bat y ejecutarlo desde la línea de comandos de Windows.

La ejecución de este export generará un fichero binario llamado “esquema_USUARIO.dmp” que será el que posteriormente copiaremos al servidor destino y usaremos para realizar el import a la nueva base de datos.

 Lo siguiente que se debería hacer es copiar el fichero generado con el export en el servidor destino donde tenemos instalada la versión 11GR2. Una vez copiado, en el servidor destino, entraremos a sqlplus y crearemos el usuario con el mismo nombre que tiene en el servidor origen y le asignaremos el tablespace correspondiente. Si el tablespace no existiese, que sería lo normal, lo deberíamos crear antes de crear el usuario y antes de lanzar el import.

Podemos basarnos en la versión 9i para sacar la información del tablespace e incluso del usuario. Si estamos acostumbrados a trabajar con herramientas como TOAD, se puede incluso sacar el código de creación del usuario y lo podemos usar para la creación en el nuevo entorno.

En resumen:

Tenemos el export (fichero .dmp) ya copiado en el servidor destino. Hemos creado el tablespace del usuario y hemos creado el usuario asignándole ese tablespace. Pues ahora, procederemos a hacer el import del usuario. Sino hubiésesmos creado el tablespace y el usuario, el import nos daría un error. Las nueva herramientas de export/import Datapump en el proceso de importación ya nos crea el usuario y su tablespace correspondiente. Pero en este caso como es una versión 9i, nos vemos obligados a usar los antiguos exp/imp que no lo hacen.

imp system/password@SID11G fromuser=USUARIO touser=USUARIO file=esquema_USUARIO.dmp log=imp_USUARIO.log

Ahora podríamos asegurarnos de que nos conectamos correctamente con el usuario y que tenemos todo el esquema creado y los permisos asignados correctamente. Si no tenemos todos los permisos, podemos usar el usuario de la base de datos origen para sacarlos, ya sea usando una herramienta como TOAD o bien podemos ejecutar las siguientes instrucciones que nos generarán los “grants” necesarios para otorgar los permisos.

accept newuser prompt ‘Entra el nombre de usuario para generar el scripts de los roles que tiene:’

select ‘grant ‘ ||granted_role || ‘ to &newuser’ ||
       decode(admin_option, ‘NO’, ‘;’, ‘YES’, ‘ with admin option;’) “ROLE”
from   dba_role_privs
where  grantee = ‘&newuser’
/

select ‘grant ‘ || privilege || ‘ to &newuser’ ||
       decode(admin_option, ‘NO’, ‘;’, ‘YES’, ‘ with admin option;’) “PRIV”
from   dba_sys_privs
where  grantee = ‘&newuser’
/

 

 

This entry was posted in Administración Oracle and tagged , , , , , , , . Bookmark the permalink.

Deja un comentario