lunes, 18 de junio de 2012

Migración Oracle10g2 a Oracle 11g, con expdp/impdp (Parte 3)

A partir de aquí, lo que nos queda es crear la estructura básica en la base de datos nueva, tablespaces, usuarios con sus contraseñas. etc.
Una vez tengamos todo esto ya estaremos listos para importar los datos.


Generación de scripts de creación de esquemas y tablespaces.

El siguiente paso es generar los scripts para la creación de esquemas y tablespaces en la base de datos en blanco, para ello nos conectamos a la base de datos origen, desde la que hemos hecho el backup y generamos los scripts.

SQL> spool create_temp_tablespaces.sql
SQL> select 'CREATE TEMPORARY TABLESPACE '||TABLESPACE_NAME||' TEMPFILE SIZE 1024M;' from dba_temp_files;

'CREATETEMPORARYTABLESPACE'||TABLESPACE_NAME||'TEMPFILESIZE1024M;'
-------------------------------------------------------------------------------
CREATE TEMPORARY TABLESPACE TEMP01 TEMPFILE SIZE 1024M;

SQL> spool off;

SQL> spool create_tablespaces.sql;

SQL> select 'CREATE TABLESPACE '||TABLESPACE_NAME||' DATAFILE SIZE 32M;' from dba_tablespaces where CONTENTS !='TEMPORARY';

SQL> spool off;

SQL> spool alter_tablespaces.sql;

SQL> select 'ALTER TABLESPACE '||TABLESPACE_NAME||' ADD DATAFILE '''||'+DATA'''||' SIZE '||BYTES/1024/1024||'M;' from dba_data_files order by TABLESPACE_NAME;

SQL> spool off;

SQL> spool create_users.sql

SQL> select 'CREATE USER "'||USERNAME||'" IDENTIFIED BY VALUES '''||PASSWORD||''' DEFAULT TABLESPACE "'
||DEFAULT_TABLESPACE||'" TEMPORARY TABLESPACE "'||TEMPORARY_TABLESPACE||'";'
  2    3  from dba_users where USERNAME NOT LIKE '%SYS%' and USERNAME NOT LIKE 'OUTLN'
  4  and USERNAME NOT LIKE 'ANONYMOUS'
  5  and USERNAME NOT LIKE 'DBSNMP'
  6  and USERNAME NOT LIKE 'SCOTT'
  7  and USERNAME NOT LIKE '%ORACLE%';

SQL> spool off;

Para evitar problemas de espacio a la hora de hacer la importación, he generado un script "alter_tablespaces.sql" para crear una estructura de datafiles idéntica que en la base de datos original, si queremos podemos crear un número diferente de datafiles, pero tendremos que calcular el espacio total que vamos a necesitar.

Creación de la estructura básica.

A partir de los scripts generados anteriormente, podemos crear la estructura básica de usuarios y tablespaces para poder empezar con la importación de los datos en la nueva base de datos.

Procedemos con la importación.

SQL> @create_tablespaces.sql
Tablespace creado.


Tablespace creado.


Tablespace creado.
.
.
.

SQL> @create_temp_tablespaces.sql

Tablespace creado.

SQL> @alter_tablespaces.sql


Tablespace modificado.


Tablespace modificado.

SQL> @create_users.sql

Usuario creado.


Usuario creado.
.
.
.

Configuración base de datos “en blanco”.

Una vez ya hemos completado la instalación de la infraestructura 11g, Grid para el soporte de almacenamiento ASM, motor de base de datos 11g y base de datos vacía, cambiaremos el parámetro de ejecución automática de los Jobs (para que no se ejecute nada después de la importación), y configuraremos un directorio para el DATAPUMP, donde tendremos almacenados nuestros exports de la base de datos.

Desactivamos los Jobs.

SQL> show parameter job

NAME                                 TYPE        VALUE
------------------------------------ ----------- -----------------------------
job_queue_processes                  integer     1000

SQL> alter system set job_queue_processes=0 scope=both;

Sistema modificado.

Configuración de los directorios para la importación.

Al igual que en la base de datos origen, debemos crear un directorio válido para especificar la ubicación del archivo a importar en la base de datos “en blanco”.

SQL> select * from dba_directories;

OWNER  DIRECTORY_NAME                 DIRECTORY_PATH
------ ------------------------------ --------------------------------------------------
SYS    ORACLE_OCM_CONFIG_DIR          /oracle/app/oracle/11.2/db/ccr/state
SYS    DATA_PUMP_DIR                  /oracle/app/oracle/11.2/admin/EXITAE01/dpdump/
SYS    XMLDIR                         /ade/b/107470581/oracle/rdbms/xml

SQL> drop directory DATA_PUMP_DIR;

Directorio borrado.

SQL> create directory DATA_PUMP_DIR as '/oracle/fra/DATAPUMP';

Directorio creado.

SQL> select * from dba_directories;

OWNER  DIRECTORY_NAME                 DIRECTORY_PATH
------ ------------------------------ --------------------------------------------------
SYS    ORACLE_OCM_CONFIG_DIR          /oracle/app/oracle/11.2/db/ccr/state
SYS    DATA_PUMP_DIR                  /oracle/fra/DATAPUMP
SYS    XMLDIR                         /ade/b/107470581/oracle/rdbms/xml

Export de los datos.

Antes de hacer la exportación debemos asegurarnos de tener espacio suficiente en el directorio de destino para el DATAPUMP. Para saber cual es el directorio configurado:

SQL>  select * from dba_directories;

OWN DIRECTORY_NAME                 DIRECTORY_PATH
--- ------------------------------ ------------------------------------------------------------
SYS EXPDIR                         /oracle/fra/datapump
SYS DATA_PUMP_DIR                  /oracle/fra/DATAPUMP
SYS TIMEZDIF_DIR                   /u01/app/oracle10g2/10.2/db/oracore/zoneinfo
SYS WORK_DIR                       /ade/aime_ship_10gR2_050630/oracle/work
SYS ORACLE_OCM_CONFIG_DIR          /u01/app/oracle10g2/10.2/db/ccr/state
SYS ADMIN_DIR                      /ade/aime_ship_10gR2_050630/oracle/md/admin

El directorio que nosotros vamos a usar para el DATAPUMP es el “DATA_PUMP_DIR”.

Ejecutamos el export:

-bash-3.00$ export ORACLE_SID=TEST1
-bash-3.00$ expdp system/password FULL=Y DIRECTORY=DATA_PUMP_DIR DUMPFILE=exportTEST1.dmp LOGFILE=exportTEST1.log EXCLUDE=STATISTICS

Export: Release 10.2.0.4.0 - 64bit Production on Miércoles, 06 Junio, 2012 23:28:19

Copyright (c) 2003, 2007, Oracle.  All rights reserved.

Conectado a: Oracle Database 10g Release 10.2.0.4.0 - 64bit Production
Iniciando "SYSTEM"."SYS_EXPORT_FULL_01":  system/******** FULL=Y DIRECTORY=DATA_PUMP_DIR DUMPFILE=exportTEST1.dmp LOGFILE=exportTEST1.log EXCLUDE=STATISTICS
Estimación en curso mediante el método BLOCKS...
Procesando el tipo de objeto DATABASE_EXPORT/SCHEMA/TABLE/TABLE_DATA
Estimación total mediante el método BLOCKS: 84.17 GB
Procesando el tipo de objeto DATABASE_EXPORT/TABLESPACE
Procesando el tipo de objeto DATABASE_EXPORT/PROFILE
Procesando el tipo de objeto DATABASE_EXPORT/SYS_USER/USER
Procesando el tipo de objeto DATABASE_EXPORT/SCHEMA/USER
Procesando el tipo de objeto DATABASE_EXPORT/ROLE
Procesando el tipo de objeto DATABASE_EXPORT/GRANT/SYSTEM_GRANT/PROC_SYSTEM_GRANT
Procesando el tipo de objeto DATABASE_EXPORT/SCHEMA/GRANT/SYSTEM_GRANT
Procesando el tipo de objeto DATABASE_EXPORT/SCHEMA/ROLE_GRANT
Procesando el tipo de objeto DATABASE_EXPORT/SCHEMA/DEFAULT_ROLE
.
.
.
.
. . "USER1"."CONTACTOS3"                              0 KB       0 filas exportadas
. . "USER1"."EVALUACIONES"                            0 KB       0 filas exportadas
. . "USER1"."EVALUACIONES_RESP"                       0 KB       0 filas exportadas
. . "USER1"."SMP_VDN_NODE_LIST"                       0 KB       0 filas exportadas
. . "USER1"."VBZ$CHANGE_PLANS"                        0 KB       0 filas exportadas
La tabla maestra "SYSTEM"."SYS_EXPORT_FULL_01" se ha cargado/descargado correctamente
******************************************************************************
El juego de archivos de volcado para SYSTEM.SYS_EXPORT_FULL_01 es:
  /oracle/fra/DATAPUMP/exportTEST1.dmp
El trabajo "SYSTEM"."SYS_EXPORT_FULL_01" ha terminado correctamente en 04:08:54

Import de los datos.

Ejecutamos el Import de los datos sobre la nueva base de datos oracle 11g.

-bash-3.00$ impdp system/password FULL=Y DIRECTORY=DATA_PUMP_DIR DUMPFILE=exportTEST1.dmp LOGFILE=importTEST1.log

Import: Release 11.2.0.1.0 - Production on Mar Jun 12 10:21:11 2012

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Conectado a: Oracle Database 11g Release 11.2.0.1.0 - 64bit Production
With the Automatic Storage Management option
La tabla maestra "SYSTEM"."SYS_IMPORT_FULL_01" se ha cargado/descargado correctamente
Iniciando "SYSTEM"."SYS_IMPORT_FULL_01":  system/******** FULL=Y DIRECTORY=DATA_PUMP_DIR DUMPFILE=exportTEST1.dmp LOGFILE=importTEST1.log
Procesando el tipo de objeto DATABASE_EXPORT/TABLESPACE
.
.
.

Una vez ha acabado la importación, debemos revisar el log de la operación, por si ha fallado la importación de algún objeto. Objetos que ya estén inválidos en la base de datos origen, o objetos que dependan de otra base de datos por dblink, se crearán inválidos.






No hay comentarios:

Publicar un comentario