viernes, 1 de diciembre de 2017

Crear Wallets para Oracle Database 12C usando Oracle Wallet Manager

1.  Crear Wallets para Oracle Database 12C usando Oracle Wallet Manager.
Primer Paso: Exportar variable DISPLAY.
Con el objetivo de invocar el entorno grafico de la aplicación Oracle Wallet Manager y mostrarla en nuestra maquina local, se debe exportar la variable DISPLAY, esto se hace con el siguiente comando:
     $ export DISPLAY=172.22.XX.XX:0.0
    $ cd $ORACLE_HOME/owm
    $ pwd
    $ /oracle/oracle/12.1.0.2/product/12.1.0/dbhome_1/owm
    #Se Ejecuta el commando owm (Oracle Wallet Manager).
    $    owm
Si todo sale bien y tenemos en nuestro equipo local instalado un servidor de tipo X server for Windows como el Xming X Server o estamos ejecutando este comando         con    el MobaXterm free Xserver, nos saldrá la siguiente pantalla del Oracle Wallet     Manager en nuestra maquina local:
Segundo Paso: Creamos el wallet desde el OWM.
Abrimos el wallet en la ruta desde la interfaz gráfica del OWM:
    /oracle/oracle/12.1.0.2/product/12.1.0/dbhome_1/owm/wallets/oracle
Posteriormente nos va a pedir que le asignamos un password: ******
    Luego de asignarle el password nos abre la administración de los certificados desde el Oracle Wallet Manager en el cual debemos de importar los certificados, hay que tener muy encuenta que deben de ser generarlos "Base-64 encoded X.509 (.CER)" esto se hace desde el navegador de internet dandole exportar certificado, y los mismos se pasan al servidor de base de datos para mi caso son los siguientes:
     Ya estando los certificados en el servidor se deben de importar desde el Oracle Wallet Manager seleccionando los mismos desde la herramienta OWM de la siguiente forma.
Por último se verán los certificados de la siguiente forma:

Conclusión:     
    La herramienta Oracle Wallet Manager es muy fácil de usar ya que de forma grafico nos permite hacer este tipo de configuración agregando cuantos wallets necesitemos y los mismos los podemos administrar de una mejor manera ayudándonos a nosotros como DBAs en la gestión de estos certificados. 

jueves, 30 de noviembre de 2017

Export DataPump usando INCLUDE para seleccionar solo tablas que tengan la paralabra "T_HIS"

1.    Como exportar con DataPump solo las tablas que contengan la palabra "T_HIS" en Oracle, e importar el archivo .dmp generado a un nuevo schema usando REMAP_SCHEMA y REMAP_TABLESPACE.

 Primer Paso: revisar tipo de servidor arquitectura y versión de base de datos,etc.

Para este caso el servidor donde está la base de datos origen es un servidor  Sun Fire V490, con las siguientes características.

$ isalist
sparcv9+vis2 sparcv9+vis sparcv9 sparcv8plus+vis2 sparcv8plus+vis sparcv8plus sparcv8 
sparcv8-fsmuld sparcv7 sparc
$  uname -a
SunOS alpha 5.10 Generic_150400-07 sun4u sparc SUNW,Sun-Fire-V490
$ cat /etc/*release*
                   Oracle Solaris 10 1/13 s10s_u11wos_24a SPARC
  Copyright (c) 1983, 2013, Oracle and/or its affiliates. All rights reserved.
                            Assembled 17 January 2013

La versión de la base de datos es 10g Enterprise Edition Release 10.2.0.5.0

$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.5.0 - Production on Thu Nov 30 15:19:59 2017
Copyright (c) 1982, 2010, Oracle.  All Rights Reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

Segundo Paso: Crear el directorio DataPump en la BD.

Tener muy en cuenta que para que funcione export/import DataPump la base de datos debe de tener creado un directorio.

SQL> CREATE OR REPLACE DIRECTORY EXPIMP AS '/backup/EXPIMP';
SQL> GRANT READ, WRITE ON DIRECTORY EXPIMP TO EXP_FULL_DATABASE;
SQL> GRANT READ, WRITE ON DIRECTORY EXPIMP TO IMP_FULL_DATABASE;

 Tercer Paso: Crear del script

Para lo cual se crea el siguiente script, y tener muy en cuenta el parámetro INCLUDE el tipo de objeto que para mi caso lo que quiero escoger es TABLE y el parámetro LIKE que lo que hace es filtrar las tablas que quiero exportar que son todas las que contengan \(\'T_HIS%\'\), a continuación el script:

$ cat expdp_tablas_schema.sh
expdp system/*** DIRECTORY=EXPIMP SCHEMAS=EXAMPLE 
INCLUDE=TABLE:\"LIKE\(\'T_HIS%\'\)\" 
dumpfile=expdp_EXAMPLE_tables_T_HIS_29NOV2017.dmp 
logfile=expdp_EXAMPLE_tables_T_HIS_29NOV2017.log

Cuarto Paso: ejecutar el script

A continuación se ejecuta el script con expdp_tabla_schema.sh, tener en cuenta que se debe tener las variables de entorno ORACLE_HOME, ORACLE_BASE Y ORACLE_SID habilitadas.

$ sh expdp_tabla_schema.sh
Export: Release 10.2.0.5.0 - 64bit Production on Wednesday, 29 November, 2017 10:28:21
Copyright (c) 2003, 2007, Oracle.  All rights reserved.
Connected to: Oracle Database 10g Enterprise Edition Release 10.2.0.5.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options
Starting "SYSTEM"."SYS_EXPORT_SCHEMA_01":  system/******** DIRECTORY=EXPIMP 
SCHEMAS=EXAMPLE INCLUDE=TABLE:"LIKE('T_HIS%')" 
dumpfile=expdp_EXAMPLE_tables_T_HIS_29NOV2017.dmp 
logfile=expdp_EXAMPLE_tables_T_HIS_29NOV2017.log
Estimate in progress using BLOCKS method...
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
Total estimation using BLOCKS method: 808 MB
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/GRANT/OWNER_GRANT/OBJECT_GRANT
Processing object type SCHEMA_EXPORT/TABLE/GRANT/WITH_GRANT_OPTION/OBJECT_GRANT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/COMMENT
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
. . exported "EXAMPLE"."T_HIS_SU_REQS_DETAIL"             64.96 MB  325200 rows
. . exported "EXAMPLE"."T_HIS_SU_TRANSAC_STOCK"           64.20 MB  428920 rows
. . exported "EXAMPLE"."T_HIS_SU_REQS_COMPRAS_RESUMEN"    54.39 MB  281637 rows
. . exported "EXAMPLE"."T_HIS_SU_REQS_COMPRAS_RESUMEND"   51.46 MB  281637 rows
. . exported "EXAMPLE"."T_HIS_SU_REQS_HEADER"             39.53 MB  107726 rows
. . exported "EXAMPLE"."T_HIS_SU_TRANSAC_NO_STOCK"        40.11 MB  358547 rows
. . exported "EXAMPLE"."T_HIS_SU_REQS_STOCK_RESUMEN"      28.56 MB  209746 rows
. . exported "EXAMPLE"."T_HIS_SU_FACTURAS"                25.67 MB  259760 rows
. . exported "EXAMPLE"."T_HIS_TT_DESC_EXT_SERVICIOS"          0 KB       0 rows
Master table "SYSTEM"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded
******************************************************************************
Dump file set for SYSTEM.SYS_EXPORT_SCHEMA_01 is:
  /backup/EXPIMP/expdp_EXAMPLE_tables_T_HIS_29NOV2017.dmp
Job "SYSTEM"."SYS_EXPORT_SCHEMA_01" successfully completed at 10:55:50
$

Esto genera dos archivos.

$ ls -ltrh
total 1227086
-rwxrwxrwx   1 oracle  dba          194 Nov 29 10:28 expdp_tabla_schema.sh
-rw-r--r--   1 oracle  dba          13K Nov 29 10:55 expdp_EXAMPLE_tables_T_HIS_29NOV2017.log
-rw-r-----   1 oracle  dba         599M Nov 29 10:55 expdp_EXAMPLE_tables_T_HIS_29NOV2017.dmp
$ pwd
/backup/EXPIMP

Quinto Paso: Copiar .dmp al servidor destino.

Con el commando scp copiamos vía red el archivo .dmp generado en en el paso anterior al el servidor destino:

$scp /backup/EXPIMP/expdp_EXAMPLE_tables_T_HIS_29NOV2017.dmp 
oracle@192.168.XX.XXX:/orabkp/EXPDP/EXPIMP/

Sexto Paso: Generar script de impdp he Importar .dmp en la base de datos destino.

Para el proceso de importación se debe de tener en cuenta los siguientes temas:

·       El nombre del tablespace de la base de datos Origen y el nombre del tablespace de la base de datos destino si son diferentes se debe de hacer un remap_tablespace para que la información quede dentro del tablespace que requerimos.
·         El nombre del schema de la base de datos Origen y el nombre del schema de la base de datos destino si son diferentes se debe de hacer un remap_schema para que la información quede dentro del schema que requerimos.

$cat impdp_tablas_schema.sh
impdp system/*** directory=EXPIMP dumpfile=expdp_EXAMPLE_tables_T_HIS_29NOV2017.dmp 
REMAP_SCHEMA=EXAMPLE:EXAMPLE_AS400 
REMAP_TABLESPACE=EXAMPLE:EXAMPLE_AS400 
logfile=impdp_EXAMPLE_tables_T_HIS_30NOV2017.log

Séptimo Paso: ejecutar el script

$ sh impdp_EXAMPLE_tables_T_HIS_30NOV2017.sh
Import: Release 12.1.0.2.0 - Production on Thu Nov 30 07:48:52 2017
Copyright (c) 1982, 2015, Oracle and/or its affiliates.  All rights reserved.
Connected to: Oracle Database 12c Standard Edition Release 12.1.0.2.0 - 64bit Production
With the Automatic Storage Management option
Master table "SYSTEM"."SYS_IMPORT_FULL_01" successfully loaded/unloaded
import done in WE8ISO8859P15 character set and AL16UTF16 NCHAR character set
export done in WE8ISO8859P1 character set and AL16UTF16 NCHAR character set
WARNING: possible data loss in character set conversions
Starting "SYSTEM"."SYS_IMPORT_FULL_01":  system/******** directory=EXPIMP 
dumpfile=expdp_EXAMPLE_tables_T_HIS_29NOV2017.dmp 
REMAP_SCHEMA=EXAMPLE:EXAMPLE_AS400 
REMAP_TABLESPACE=EXAMPLE:EXAMPLE_AS400 
logfile=impdp_EXAMPLE_tables_T_HIS_30NOV2017.log
Processing object type SCHEMA_EXPORT/TABLE/TABLE
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
. . imported "EXAMPLE_AS400"."T_HIS_SU_REQS_DETAIL"         64.96 MB  325200 rows
. . imported "EXAMPLE_AS400"."T_HIS_SU_TRANSAC_STOCK"       64.20 MB  428920 rows
. . imported "EXAMPLE_AS400"."T_HIS_SU_REQS_COMPRAS_RESUMEN"  54.39 MB  281637 rows
. . imported "EXAMPLE_AS400"."T_HIS_SU_REQS_COMPRAS_RESUMEND"  51.46 MB  281637 rows
. . imported "EXAMPLE_AS400"."T_HIS_SU_REQS_HEADER"         39.53 MB  107726 rows
. . imported "EXAMPLE_AS400"."T_HIS_SU_TRANSAC_NO_STOCK"    40.11 MB  358547 rows
. . imported "EXAMPLE_AS400"."T_HIS_SU_REQS_STOCK_RESUMEN"  28.56 MB  209746 rows
. . imported "EXAMPLE_AS400"."T_HIS_SU_FACTURAS"            25.67 MB  259760 rows
. . imported "EXAMPLE_AS400"."T_HIS_TT_DESC_EXT_SERVICIOS"      0 KB       0 rows
Processing object type SCHEMA_EXPORT/TABLE/GRANT/OWNER_GRANT/OBJECT_GRANT
GRANT SELECT ON "EXAMPLE_AS400"."T_HISTORICO_ACTIVOS_AS400_A" TO "DISCOVERER_CIAT" WITH GRANT OPTION
Processing object type SCHEMA_EXPORT/TABLE/INDEX/INDEX
Processing object type SCHEMA_EXPORT/TABLE/CONSTRAINT/CONSTRAINT
Processing object type SCHEMA_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICS
Processing object type SCHEMA_EXPORT/TABLE/COMMENT
Processing object type SCHEMA_EXPORT/TABLE/STATISTICS/TABLE_STATISTICS
Job "SYSTEM"."SYS_IMPORT_FULL_01" completed with 0 error(s) at Thu Nov 30 07:49:36 2017 elapsed 0 00:00:43
$

Conclusion:                                                                                                    
DataPump es una herramienta poderosa y efectiva para la exportacion he importacion de datos, la cual nos permite filtrar la informacion que requerimos con tan solo el parametro INCLUDE, hay que tener encuenta que tambien existe otro parametro EXCLUDE que nos permite filtrar la informacion que no queremos exportar, para revisar mas informacion a este tema les recomiendo la siguiente nota de oracle: 

Export/Import DataPump Parameters INCLUDE and EXCLUDE - How to Load and Unload Specific Objects (Doc ID 341733.1)

Examples: 

expdp ... SCHEMAS=scott EXCLUDE=SEQUENCE, TABLE:\"IN ('EMP', 'DEPT')\" 
impdp ... SCHEMAS=scott INCLUDE=FUNCTION, PACKAGE, TABLE:\"= 'EMP'\"



lunes, 30 de octubre de 2017

Como multiplexar los redo logs members and groups on ASM con sqlplus en Oracle 12C

Como multiplexar los redo logs members and groups almacenamiento ASM con sqlplus en Oracle 12C

1.     Primer Paso: Ingresar a la base de datos con sqlplus y consultar la información de los grupos de discos en ASM que tiene la base de datos con el siguiente comando:                                                                                      

  1. -bash-4.2$ sqlplus / as sysdba

    SQL*Plus: Release 12.1.0.2.0 Production on Mon Oct 30 15:25:25 2017

    Copyright (c) 1982, 2014, Oracle.  All rights reserved.

    Connected to:
    Oracle Database 12c Standard Edition Release 12.1.0.2.0 - 64bit Production
    With the Automatic Storage Management option

    SQL> select NAME, STATE, FREE_MB, TOTAL_MB from v$asm_diskgroup;

    NAME                           STATE          FREE_MB   TOTAL_MB
    ------------------------------ ----------- ---------- ----------
    DG_DATA                        CONNECTED       428904     614376
    DG_FRA                         CONNECTED       201920     204792
    Según el comando anterior vemos que la base de datos está configurada en ASM (Automatic Storage Management) y tiene dos grupos de discos DG_DATA y DG_FRA                                                                                                    
    2.     Segundo Paso: Revisar una vista de la metadata de Oracle en la cual se pueda ver la cantidad de grupos y miembros de redo por cada grupo, con el siguiente comando:                                                                                      
    SQL> SELECT GROUP#, member from v$logfile;

        GROUP#                     MEMBER
         ------------------            ------------------------------------------------------------
             3                             +DG_FRA/DRACO3/ONLINELOG/group_3.281.948723171
             2                             +DG_FRA/DRACO3/ONLINELOG/group_2.282.948723171
             1                             +DG_FRA/DRACO3/ONLINELOG/group_1.283.948723171

    El comando anterior nos muestra que se tiene 3 grupos de redos y con 1 miembro para cada grupo por lo cual no está multiplexado.



    3.     Tercer Paso: Para multiplexar los redos logs debemos agregar un miembro adicional para da uno de los grupos colocándolos en una ruta diferente a la que se tiene actualmente, es decir se debe de agregar sobre el grupo de discos ASM DG_FRA, con el siguiente comando:                                                    
    SQL> ALTER DATABASE ADD LOGFILE MEMBER '+DG_DATA' TO GROUP 1;

    Database altered.

    SQL> ALTER DATABASE ADD LOGFILE MEMBER '+DG_DATA' TO GROUP 2;

    Database altered.

    SQL> ALTER DATABASE ADD LOGFILE MEMBER '+DG_DATA' TO GROUP 3;

    Database altered.

    Ahora se valida que se haya agregado un miembro para cada uno de los grupos pero este debe de haberse creado sobre el disco DG_DATA.
    SQL> SELECT GROUP#, member from v$logfile;

        GROUP#                     MEMBER
    ----------                           ------------------------------------------------------------
             3                             +DG_FRA/DRACO3/ONLINELOG/group_3.281.948723171
             2                             +DG_FRA/DRACO3/ONLINELOG/group_2.282.948723171
             1                             +DG_FRA/DRACO3/ONLINELOG/group_1.283.948723171
             1                             +DG_DATA/DRACO3/ONLINELOG/group_1.305.958750831
             2                             +DG_DATA/DRACO3/ONLINELOG/group_2.306.958750855
             3                             +DG_DATA/DRACO3/ONLINELOG/group_3.307.958750863

    6 rows selected.
                                                                                                                              Conclusion:                                                                                                        Por lo anterior vemos que ya quedo multiplexado los redos en los dos grupos de discos, garantizando un tema de disponibilidad en el caso de que alguno de los miembros de un grupo se borre o quede corrupto permitiendo que la base de datos continue operando.