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