lunes, 26 de agosto de 2019

Características Avanzadas en Oracle XE 18c - Compresión Avanzada (Parte 2)

En esta segunda parte se analizarán los resultados de aplicar la compresión de datos avanzada sobre dos tablas con la misma estructura y datos, salvo que una de las tablas no comprimirá sus datos y la otra sí.

Puede crear las tablas en el esquema HR o en un nuevo esquema.

Las tablas tendrán la siguiente estructura:
 


Crear la tabla FACTURA_DETALLE

create table factura_detalle(
  fd_id varchar2(10) not null,
  nro_dtl integer not null,
  producto_id number(6) not null,
  cantidad number(6,3) not null,
  precio  number(6,3) not null,
  importe number generated always as (cantidad*precio) virtual,
  constraint fct_dtl_pk primary key(fd_id,nro_dtl)
)ROW STORE COMPRESS ADVANCED tablespace users;


Crear la tabla FACTURA_DETALLE_UNCOMPRESS

create table factura_detalle_uncompress(
  fd_id varchar2(10) not null,
  nro_dtl integer not null,    
  producto_id number(6) not null,
  cantidad number(6,3) not null,
  precio  number(6,3) not null,
  importe number generated always as (cantidad*precio) virtual,
  constraint fct_dtl_pk primary key(fd_id,nro_dtl)
)tablespace users;

Insertar 10000 filas en la tabla comprimida y no comprimida usando el siguiente código PL/SQL :


Después de ejecutar con éxito el bloque PL/SQL, ejecutar la siguiente sentencia de selección para consultar el total en bytes ocupado por cada tabla:


Análisis de resultados
Puede apreciarse en los resultados de la consulta que FACTURA_DETALLE ocupa un poco más de la mitad del almacenamiento requerido por su contraparte no comprimida(FACTURA_DETALLE_UNCOMPRESS), es decir, que el radio de compresión de datos se aproxima a 2x o lo que es lo mismo, se redujo dos veces el espacio requerido en la tabla comprimida.


Conclusión

Se ha demostrado que la Compresión de Datos Avanzada es de gran utilidad para reducir el volumen de almacenamiento de datos a medida que estos se incrementan permitiendo ahorrar costos en este ámbito sin peder el rendimiento del SGBD. 











sábado, 24 de agosto de 2019

Características Avanzadas en Oracle XE 18c - Compresión Avanzada (Parte 1)

Desde la versión 18c, Oracle Database XE es muy diferente de las versiones previas (XE 10g y XE 11g) porque incluye muchas de las características de la Edición Empresarial (EE - Enterprise Edition)  de forma gratuita como por ejemplo: 
  • Compresión de Datos Avanzada(Advanced Compression).  
  • Seguridad Avanzada (Advanced Security).
  • En Memoria (In-Memory).
  • Compresión a Nivel de Índice(Index Compression)
  • Particionamiento(Partitioning)
Pulsar aquí para obtener una lista completa de características disponibles.

Este post se centrará brevemente en la Compresión Avanzada de Datos, característica que permite ganar espacio de almacenamiento a medida que el volumen de los datos se incrementa. El radio de compresión de datos es de 2x a 4x, es decir, reduce de 2 a 4 veces el espacio requerido para almacenar datos de una tabla (datos estructurados), incluso puede comprimir objetos como archivos (datos no estructurados como objetos grandes o LOBS).

Entre las ventajas de la compresión de datos avanzada se tiene:
  1. Reducción del espacio de almacenamiento requerido.
  2. No hay sobrecarga en operaciones de lectura en bloques comprimidos.
  3. Mayor rendimiento en operaciones DML como INSERT y UPDATE.

Esta característica se puede aplicar a tablas existentes o en el proceso de creación de las mismas sobre todo en ambientes de Almacenes de Datos (Data WareHouse), es decir, en entornos activos de almacenamiento y procesamiento de datos variables en el tiempo y que permiten tomar decisiones en los negocios.
 
Sintaxis para su aplicación en el proceso de creación de una tabla

create table NombreTabla(
   campos...
)ROW STORE COMPRESS ADVANCED

Ejemplo:


create table Objetos(
    objeto_id number(6) PRIAMRY KEY,
    objeto_nombre varchar2(120) NOT NULL
)ROW STORE COMPRESS ADVANCED 
tablespace USERS;  


Sintaxis para su aplicación en una tabla creada
 
alter table NombreTabla
ROW STORE COMPRESS ADVANCED ;

Ejemplo:

alter table Employees
ROW STORE COMPRESS ADVANCED;
 
Para verificar que la compresión de datos avanzada se ha aplicado a las tablas, se debe submitir la siguiente sentencia:

SELECT compression, compress_for
FROM   user_tables
WHERE  table_name IN('Objetos','Employees');


 
Resultado
 
TABLE_NAME  COMPRESS  COMPRESS_FOR                  
--------------------  ---------------   ------------------------------
EMPLOYEES     ENABLED     ADVANCED                            
OBJETOS            ENABLED    ADVANCED              
 
Aplicación desde Oracle SQL Developer 

Para aplicar la compresión avanzada de datos en SQL Developer, se debe editar o crear la tabla y selecciona
la opción Almacenamiento que se muestra en la siguiente imagen:
  
 
Hacer click en la opción del panel izquierdo DDL para visualizar la sentencia DDL generada.
 

Click en Aceptar.

Conclusión 
 
La Compresión de Datos Avanzada es una característica muy importante que puede ser aplicada en la base 
de datos Oracle 18c XE para ahorrar espacio de almacenamiento considerando el límite de 12GB impuesto
a esta edición, el dominio de esta técnica permitirá optimizar el almacén de datos. 
 


martes, 20 de agosto de 2019

Crear tablas y vistas con Oracle SQL Data Modeler Parte 2

En el artículo anterior, se desarrolló una serie de objetos de tipo tabla empleando SQL Developer Data Modeler, en este post que es continuación del anterior, se procederá a desarrollar Vistas a partir del archivo del modelo creado previamente.

1.Abrir el archivo del modelo desarrollado previamente:
      Archivo>>Data Modeler>>Abrir


  
2. En el cuadro de diálogo seelccionar el archivo con extensión .dmd y hacer click en Abrir.
 
3.  En el cuadro de diálogo seleccionar el modelo Relational_2 (o el que haya definido) y hacer click en Aceptar.


4. En la barra de herramientas de Data Modeler seleccionar Vista.

5. Hacer clik sobre el área de trabajo. En el cuadro de diálogo que se visualiza, ingresar el nombre de la Vista: ProgramasVIEW y hacer click en el botón Aplicar.
 



 6.  En el cuadro de diálogo Ver Propiedades, hacer click en  Consulta.
 
 7. Se visualizará el cuadro de diálogo  Generador de Consultas que en su panel derecho   muestra las tablas y vistas existentes incluyendo la vista que se está configurando.


8. Seleccionar la tabla programas y arrastrar al área de consulta(área en blanco) o hacer doble clik sobre la tabla programas.


 La tablas seleccionada se visualiza gráficamente en el área de consulta.


 9. Seleccionar los campos de la tabla programas, al realizar esta acción los campos se agregan en la primera cuadrícula debajo  del área de consulta.
10. Proceda a configurar las prpiedades de la consulta, por ejemplo:

Tipo de Orden: Ascendente
Secuencia de Orden: 1

Esto hará que los resultados (filas o registros) se muestren ordenados ascendentemente por nombre de programa.
Adicionalmente, a medida que realiza cambios, estos se traducen en una sentencia SELECT bajo la cuadrícula de columnas o campos como se aprecia en la imagen de abajo.

Hacer Click en Aceptar.
11.  Realizada la acción anterior, se oculta la ventana de Consultas y retorna al siguiente cuadro de diálogo Ver propiedades y hacer click en Aceptar.

12.  Se obtiene un cuadrado color verde que contiene el nombre de la vista con sus campos y el nombre de la tabla de donde provienen los campos.

13. Hacer Click con el botón secundario  sobre el nombre del Diseño y selccionar Guardar Diseño.
14. Click en Generar DDL de la barra de herramientas.


15. Seleccionar la versión de Oracle donde implementará el script.


16. Click en Generar.


17. En la pestaña Selección 'CREATE' expandir Sin Asignar a Esquemas y seleccionar tablas y vistas.



18. En la pestaña Selección 'DROP', seleccionar Tablas, Vistas y Claves Ajenas, estos elementos si ya existen en el esquema de destino serán borrados y posteriormente recreados.
 

19. Click sobre el botón Aceptar ubicado en la parte inferior dereecha del cuadro de diálogo Editor de Archivo DDL.


 20. Se desplega el código SQL que incluye la vista generada.
Posteriormente puede seguir las indicaciones 25 a 30 del post anterior para ejecutar el script.

Espero que este post sea de gran ayuda.  Sus comentarios son importantes, aún cuando no encuentren dificultades en el desarrollo de lo aquí descrito no olvidar comentar.

Saludos.



 
     
     

miércoles, 14 de agosto de 2019

Columnas Identidad

En versiones previas a Oracle 12c, los valores de una columna clave primaria se generaban mediante una secuencia que produce un valor único y para que el proceso sea automático se requería adicionalmente de un disparador.  A partir de Oracle Database 12c se puede prescindir de las secuencias empleando columnas de identidad, una columna de identidad  genera un valor numérico secuencial y único al estilo de gestores como MySQL y PostgreSQL.

Para crear una columna de identidad se emplea la sintaxis básica siguiente:

             nombre_columna tipo GENERATED BY DEFAULT AS IDENTITY

El siguiente ejemplo crea la tabla Projects en el esquema HR:

   create table HR.Projects(
     project_id number(6)  GENERATED BY DEFAULT AS IDENTITY,
     project_name varchar2(60) not null,
     constraint Projects_PK Primary key( project_id)
   ); 

Probar la columna insertando datos y omitiendo la columna identidad porque esta genera su valor por defecto:

    insert into HR.Projects(project_name)
  values('Proyecto A1');

  insert into HR.Projects(project_name)
  values('Proyecto A2');

Consultar datos de Projects:

   select project_id,project_name
   from HR.Projects;


Como puede apreciarse en la imagen, la columan identidad genera automáticamente los valores secuenciales 1 y 2 para cada fila insertada. 

Para poder cambiar el valor inicial, establecer el  valor de incremento e indicar valores mínimo y máximo se puede aplicar la sintaxis siguiente:

  nombre_columna tipo GENERATED BY DEFAULT AS IDENTITY
             MINVALUE valor_mínimo
             MAXVALUE valor_máximo
             INCREMENT BY valor_incremento
             START WITH valor_inicial 
             NOORDER  NOCYCLE  NOT NULL ENABLE

Con el objetivo de probar la sintaxis descrita, se creará la tabla Project2 con las siguientes características para la columna Project_Id:
  •   Valor Mínimo:100
  •   Valor Máximo:99999999
  •   Incremento: 10
  •   Iniciar con:100

create table HR.Projects2(
     project_id number(6) GENERATED BY DEFAULT AS IDENTITY
                          MINVALUE 100
                          MAXVALUE 99999999
                          INCREMENT BY 10
                          START WITH 100,
     project_name varchar2(60) not null,
     constraint Projects_PK Primary key( project_id)
   ); 

Table HR.PROJECTS2 creado.

Insertar datos en la nueva tabla:

 insert into HR.Projects2(project_name)
 values('Proyecto A1A');

 insert into HR.Projects2(project_name)
 values('Proyecto A2A');


Consultar la tabla Projects2 para comprobar resultados:

 SELECT *
 FROM
PROJECTS2; 


  

Conclusión

Las columnas de identidad constituyen un mecanismo natural y ágil para generar valores únicos y secuenciales para los campos de clave primaria, evitando crear objetos extra como  secuencias y disparadores.

Hasta una próxima ocasión.

Saludos.

    
      

Entrada destacada

Cómo instalar Oracle Database 18c Express Edition para Windows

Oracle Database 18c XE ya está disponible para Windows 64bit, en este post se enseñará como instalar y configurar esta nueva versión en W...