lunes, 12 de febrero de 2018

Nuevas funcionalidades de Oracle Datapump 12c Release 1

Una de las funcionalidades más usadas en la base de datos Oracle es Oracle Datapump.  La utilizamos para migrar bases de datos, mover bases de datos a diferentes tipos de servidores, desfragmentar grandes cantidades de tablas, realizar Trasnport Tablespace (no creo que se utilice mucho por la complejidad del proceso) e inclusive para realizar Backups de la base de datos; aunque este último no es una práctica recomendada, lo he visto implementado en muchos clientes.

Datapump es una herramienta muy útil y querida entre los DBAs y, con la nueva versión Oracle 12c, no podía quedarse sin tener mejoras que nos podrían ayudar en diferentes tareas.

A continuación, voy a detallar las mejoras para Oracle 12c release 1 y en un siguiente articulo las de reléase 2.



 1.    Deshabilitar el Logging en el IMPDP

¿Cuántas veces hemos ejecutado una importación de un esquema grande y nuestro Flash Recovery Area se llena por generación Archivelogs?  En muchas ocasiones debemos poner la base de datos en modo NO ARCHIVE para poder realizar la importación de manera rápida y sin problemas.

En Oracle 12c se utiliza el parámetro TRANSFORM junto a la opción DISABLE_ARCHIVE_LOGGING para deshabilitar la generación de Logging sobre tablas e índices durante la ejecución de una importación.  Muy útil para cargas de gran volumen de datos y de manera más rápida.

Realizamos el exportado de un esquema completo en la base de datos origen.

expdp system@ORCL DUMPFILE=SH_user.dmp LOGFILE=exp_SH.log DIRECTORY=EXP_DIR SCHEMAS=SH


Realizamos la importación del esquema en la base de datos destino con la opcion de generación de Logging deshabilitada.

impdp system@PRD DUMPFILE=SH_user.dmp LOGFILE=imp_SH.log DIRECTORY=IMP_DIR SCHEMAS=SH TRANSFORM=DISABLE_ARCHIVE_LOGGING:Y



 2.    Compresión de tablas durante el IMPDP

Usamos la opción TRANSFORM junto con el parámetro TABLE_COMPRESSION_CLAUSE para definir el tipo de compresión que se le aplica a una tabla durante la ejecución de IMPDP sobre la base de datos destino.

Revisamos el tamaño de una tabla en el origen y luego realizamos una exportación de la misma

SQL> select owner, segment_name, bytes/1024/1204 MBytes  from dba_segments where segment_name='CUSTOMERS' and owner='SH';

OWNER         SEGMENT_NAME                       MBYTES
------------- ------------------------------ ----------
SH            CUSTOMERS                           10.73


[oracle@oracle12c dump]$ expdp system@ORCL DUMPFILE=customer.dmp LOGFILE=exp_customer.log DIRECTORY=EXP_DIR TABLES=SH.CUSTOMERS

  
Realizamos la importación con la opción de compresión en la base de datos destino. Las opciones para el parámetro TABLE_COMPRESSION_CLAUSE son:
·         NONE
·         NOCOMPRESS
·         COMPRESS 
·         ROW STORE COMPRESS BASIC
·         ROW STORE COMPRESS ADVANCED
·         COLUMN STORE COMPRESS FOR QUERY
·         COLUMN STORE COMPRESS FOR ARCHIVE

Prestar atención a como se define las compresiones con espacios en blanco.

impdp system@PRD DUMPFILE=customer.dmp LOGFILE=imp_customer.log DIRECTORY=IMP_DIR TRANSFORM=TABLE_COMPRESSION_CLAUSE:\"ROW STORE COMPRESS ADVANCED\"
Processing object type TABLE_EXPORT/TABLE/TABLE
Processing object type TABLE_EXPORT/TABLE/TABLE_DATA
. . imported "SH"."CUSTOMERS"                      10.27 MB   55500 rows
Processing object type TABLE_EXPORT/TABLE/GRANT/OWNER_GRANT/OBJECT_GRANT


Finalmente verificamos si la tabla fue importada con la compresión activada.

SQL> select OWNER, TABLE_NAME, COMPRESSION, COMPRESS_FOR from dba_tables where owner='SH' and table_name='CUSTOMERS';

OWNER    TABLE_NAME      COMPRESS COMPRESS_FOR
-------- --------------- -------- --------------
SH       CUSTOMERS       ENABLED  ADVANCED


SQL> select owner,segment_name, bytes/1024/1204 MBytes  from dba_segments where segment_name='CUSTOMERS' and owner='SH';

OWNER         SEGMENT_NAME       MBYTES
------------- -------------- ----------
SH            CUSTOMERS            5.95



3.    Convertir Vistas en Tablas

Mediante la opción VIEWS_AS_TABLES podemos exportar una vista como si fuera una tabla.  Datapump guarda la definición de la nueva tabla y los objetos dependientes de la vista original.
Los permisos asociados a la vista son replicados en la nueva tabla.
Muy Útil para mover información de diferentes tablas relacionadas hacia tablas consolidadas y para importar a tablas Des-normalizadas.

Creamos una vista simple y verificamos el objeto.

SQL> create view hr.EMP_VIEW as
select e.EMPLOYEE_ID, e.FIRST_NAME||' '||e.LAST_NAME "NOMBRE", e.HIRE_DATE, j.JOB_TITLE, d.DEPARTMENT_NAME
from hr.EMPLOYEES e, hr.DEPARTMENTS d, hr.JOBS j
where e.JOB_ID = j.JOB_ID and e.DEPARTMENT_ID = d.DEPARTMENT_ID
order by e.EMPLOYEE_ID; 

View created.

SQL> select OWNER, OBJECT_NAME, OBJECT_TYPE, CREATED, STATUS
from dba_objects where OBJECT_NAME='EMP_VIEW';

OWNER      OBJECT_NAME      OBJECT_TYPE   CREATED   STATUS
---------- ---------------- ------------- --------- -------
HR         EMP_VIEW         VIEW          10-FEB-18 VALID



Realizamos la transformación desde la ejecución EXPDP.

expdp system@ORCL DUMPFILE=vista_tabla.dmp LOGFILE=exp_vista.log DIRECTORY=EXP_DIR VIEWS_AS_TABLES=HR.EMP_VIEW


impdp system@PRD DUMPFILE=vista_tabla.dmp LOGFILE=imp_tabla.log DIRECTORY=IMP_DIR REMAP_TABLE=EMP_VIEW:EMP_TBL


Verificamos que la vista se ha convertido en tabla y con un nuevo nombre EMP_TBL en la base de datos destino.

SQL> select OWNER, OBJECT_NAME, OBJECT_TYPE, CREATED, STATUS from dba_objects where OBJECT_NAME='EMP_TBL';

OWNER    OBJECT_NAME        OBJECT_TYPE   CREATED   STATUS
-------- ------------------ ------------- --------- -------
HR       EMP_TBL            TABLE         10-FEB-18 VALID



4.    Mostrar el tiempo en las ejecuciones Datapump

Usamos la opción LOGTIME durante la exportación o importación para mostrar la fecha y hora de cada registro del Log.  Es una funcionalidad simple, pero nos podría ayudar en toma de tiempos de ejecución.  Los valores que permite esta opción son: NONE, STATUS, LOGFILE, ALL

Ejecutamos el EXPDP y observamos el log.

expdp system@ORCL DUMPFILE=HR_OE.dmp LOGFILE=exp_HR_OE.log DIRECTORY=EXP_DIR SCHEMAS=HR,OE LOGTIME=ALL

Export: Release 12.2.0.1.0 - Production on Sat Feb 10 17:49:20 2018

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

Connected to: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
10-FEB-18 17:49:36.337: Starting "SYSTEM"."SYS_EXPORT_SCHEMA_01":  system/********@ORCL DUMPFILE=HR_OE.dmp LOGFILE=exp_HR_OE.log DIRECTORY=EXP_DIR SCHEMAS=HR,OE LOGTIME=ALL
10-FEB-18 17:49:45.080: Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
10-FEB-18 17:49:46.289: Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
10-FEB-18 17:49:46.471: Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/FUNCTIONAL_INDEX/INDEX_STATISTICS
10-FEB-18 17:49:46.868: Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
10-FEB-18 17:49:55.992: Processing object type SCHEMA_EXPORT/STATISTICS/MARKER
10-FEB-18 17:49:56.866: Processing object type SCHEMA_EXPORT/USER
10-FEB-18 17:49:57.110: Processing object type SCHEMA_EXPORT/SYSTEM_GRANT
10-FEB-18 17:49:57.251: Processing object type SCHEMA_EXPORT/ROLE_GRANT
10-FEB-18 17:49:57.286: Processing object type SCHEMA_EXPORT/DEFAULT_ROLE
10-FEB-18 17:49:57.405: Processing object type SCHEMA_EXPORT/TABLESPACE_QUOTA
10-FEB-18 17:49:58.273: Processing object type SCHEMA_EXPORT/PRE_SCHEMA/PROCACT_SCHEMA
10-FEB-18 17:49:58.658: Processing object type SCHEMA_EXPORT/SYNONYM/SYNONYM
10-FEB-18 17:49:58.842: Processing object type SCHEMA_EXPORT/TYPE/INC_TYPE
10-FEB-18 17:49:59.663: Processing object type SCHEMA_EXPORT/TYPE/TYPE_SPEC
10-FEB-18 17:50:00.559: Processing object type SCHEMA_EXPORT/TYPE/GRANT/OWNER_GRANT/OBJECT_GRANT
10-FEB-18 17:50:01.795: Processing object type SCHEMA_EXPORT/SEQUENCE/SEQUENCE
10-FEB-18 17:50:07.960: Processing object type SCHEMA_EXPORT/XMLSCHEMA/XMLSCHEMA
10-FEB-18 17:50:16.997: Processing object type SCHEMA_EXPORT/TABLE/TABLE
10-FEB-18 17:50:27.397: Processing object type
10-FEB-18 17:50:54.307: Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX


5.    Encriptación de password

Para poder encriptar los archivos Dump de una operación EXPDP, podemos utilizar la opción de encriptación con password.  Lamentablemente en versiones anteriores es necesario colocar el password como parámetro del comando EXPDP e IMPDP. 

Para evitar colocar el password como parámetro se define el parámetro ENCRYPTION_PWD_PROMPT.  De esta manera el password se solicita mediante un Prompt de manera más segura.

expdp system@ORCL DUMPFILE=encrypt_SH.dmp LOGFILE=exp_SH_encryp.log DIRECTORY=EXP_DIR SCHEMAS=SH ENCRYPTION_PWD_PROMPT=Y

Export: Release 12.2.0.1.0 - Production on Sat Feb 10 19:03:17 2018

Copyright (c) 1982, 2017, Oracle and/or its affiliates.  All rights reserved.
Connected to: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

Encryption Password:
Starting "SYSTEM"."SYS_EXPORT_SCHEMA_01":  system/********@ORCL DUMPFILE=encrypt_SH.dmp LOGFILE=exp_SH_encryp.log DIRECTORY=EXP_DIR SCHEMAS=SH ENCRYPTION_PWD_PROMPT=Y


6.    Compresión de archivos Dump

Podemos elegir el parámetro COMPRESSION_ALGORITHM para comprimir los archivos Dumps generados por el comando EXPDP. Con la opción de base de datos Advanced Compression podemos seleccionar diferentes niveles de compresión.
·         BASIC
·         LOW
·         MEDIUM
·         HIGH

La opción de compresión es muy efectiva cuando la base de datos es muy grande y no se tiene mucha capacidad para almacenar archivos Dumps. 
Mientras mayor sea la compresión, la inversión de recursos de CPU aumenta.

expdp system@ORCL DUMPFILE=FULL_DB.dmp LOGFILE=exp_full.log DIRECTORY=EXP_DIR FULL=Y COMPRESSION=ALL COMPRESSION_ALGORITHM=HIGH

Export: Release 12.2.0.1.0 - Production on Sat Feb 10 19:34:02 2018

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

Connected to: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
Starting "SYSTEM"."SYS_EXPORT_FULL_01":  system/********@ORCL DUMPFILE=FULL_DB.dmp LOGFILE=exp_full.log DIRECTORY=EXP_DIR FULL=Y COMPRESSION=ALL COMPRESSION_ALGORITHM=HIGH


7.    Datapump de un Pluggable Database

Con la nueva arquitectura Oracle 12c Multitenant podemos contar con bases de datos Pluggable.
El procedimiento para realizar exportaciones e importaciones, con Datapumpt, no es diferente del procedimiento tradicional.  
Por lo que es posible mover información:
·         Desde una base de datos Non-CDB hacia un Pluggable, o viceversa.
·         Desde una base de datos Pluggable hacia otro Pluggable.


En la segunda parte de este articulo me enfocaré en funcionalidades nuevas para la versión Oracle 12c Release 2.



Espero les pueda servir de ayuda.

No hay comentarios.:

Publicar un comentario