martes, 31 de marzo de 2020

Capacitaciones y Certificaciones Oracle Cloud Gratuitas!

Oracle University anunció ayer la disponibilidad de más de 50 horas de capacitación en línea y 6 exámenes de certificación. Para aprovecharlas, solo hace falta tener una cuenta de Oracle y seguir los siguientes pasos:


Luego, solo es necesario registrarse en el path de capacitación deseado y completar los pasos del mismo, por ejemplo:



Este anuncio se suma al anuncio de la disponibilidad de material de capacitación de Oracle Cloud y la rebaja en los precios de los exámenes de certificación, los cuales pueden ser consultados aquí.

viernes, 13 de marzo de 2020

Oracle 20c - SQL Macros

Las macros SQL son nuevas en la base de datos 20c, y permiten a los desarrolladores de SQL encapsular ciertos procesamientos complejos dentro de una macro que luego se usará en cualquier lugar dentro de instrucciones SQL.

Existen dos tipos de macros SQL, de tipo ESCALAR y de tipo TABLA

  1. Expresiones ESCALARES utilizadas en SELECT o en clausulas WHERE, HAVING, GROUP BY u ORDER BY
  2. Expresiones de TABLA utilizadas en una cláusula FROM

Las macros de SQL se crean mediante funciones PL/SQL, como veremos en los ejemplos posteriores.

Macros de tipo ESCALAR

Proporcionan una sintaxis más flexible generando código SQL reutilizable y transparente para el optimizador de SQL, lo cual trae las siguientes ventajas:

  • El optimizador de SQL puede transformar el código para una ejecución eficiente.
  • La consulta dentro de la macro puede combinarse con una consulta externa, a diferencia de una función PL/SQL que debe ejecutarse en el contexto de PL/SQL.
  • Sin cambio de contexto entre PL/SQL y SQL.
  • La consulta dentro de la función PL/SQL ahora se ejecuta bajo la misma snapshot que la consulta externa, evitando inconsistencias.
  • Los predicados de la cláusula WHERE que usan macros escalares pueden ser "empujados" para la evaluación de predicados de almacenamiento en Exadata - no es posible con las funciones PL/SQL.

Ejemplo

A continuación vamos a crear una macro mediante la definición de la funcion "fnControlRango", la cual verifica si un valor X pertenece a un rango dado. De ser así, devuelve el valor de X, en caso contrario devuelve el valor mínimo o máximo del rango:

CREATE FUNCTION fnControlRango (minval number, x number, maxval number)
RETURN VARCHAR2 SQL_MACRO(SCALAR)
IS BEGIN
    RETURN ‘least(greatest(x, minval), maxval)’;
END;

Hay tres cosas que pueden llamar la atención
  1. La clausula "SQL_MACRO(SCALAR)" le indica que la función PL/SQL es una Macro, y que es de tipo Escalar.
  2. El tipo de datos devuelto es "VARCHAR2", ya que la función no devuelve el resultado de la operación sino el texto SQL a ejecutar.
  3. Lo que se devuelve con la sentencia "RETURN" es una cadena de caracteres que representa el texto a usar al momento de ejecutar la sentencia que usa la Macro.

Una vez creada la función, la podemos usar en sentencias SQL de la siguiente manera:

SELECT Nombre, 
       Apellido, 
       LimiteCredito, 
       fnControlRango (10000, LimiteCredito, 20000) AS NuevoLimite1,
       fnControlRango (12000, LimiteCredito, 22000) AS NuevoLimite2,
       fnControlRango (15000, LimiteCredito, 25000) AS NuevoLimite3
FROM Clientes;

Suponiendo que tenemos los siguientes datos:


El resultado que veremos es el siguiente:


La ventaja de usar una Macro en vez de una función PL/SQL, radica en que la misma se "traduce" a código SQL y se ejecuta en el contexto SQL, sin necesidad de hacer un context switch con PL/SQL en cada ejecución. La sentencia que le llega al optimizador es la siguiente:

SELECT Nombre, 
       Apellido, 
       LimiteCredito, 
       least(greatest(LimiteCredito, 10000), 20000) AS NuevoLimite1,
       least(greatest(LimiteCredito, 12000), 22000) AS NuevoLimite2,
       least(greatest(LimiteCredito, 15000), 25000) AS NuevoLimite3
FROM Clientes;

El uso de la macro reduce y simplifica el código que tenemos que escribir, facilita la corrección de la misma (ya que alcanza con modificar la función que define la macro y no todos los lugares donde se emplea) sin perjudicar la performance.



Macros de tipo TABLA

Las macros de tipo Tabla permiten generar:

  • Vistas parametrizadas. En las mismas las tablas utilizadas en las consultas están fijas se arreglan dentro de la definición de la macro, y se pasan argumentos para seleccionar filas de esas tablas. El uso común de estas vistas parametrizadas es cuando los argumentos escalares se usan para seleccionar un subconjunto de las filas que luego se agregan

  • Vistas polimórficas; En las mismas, los argumentos representan uno o mas nombres de tabla (también puede tener argumentos adicionales de tipo escalar). Las tablas de entrada se utilizan dentro de la consulta devuelta por macro.

Ejemplo de Macro de Tabla usada para vista Parametrizada

A continuación, creamos una función que define una macro de tipo Tabla, que nos devuelve una sentencia SELECT sobre las tablas Regiones y Clientes, filtrando por el ID de la region y a la vez agrupando por el mismo.


CREATE FUNCTION fnLimitePromedio (pID_Region number)
RETURN varchar2 SQL_MACRO(TABLE)
IS 
BEGIN
    RETURN q’[SELECT r.ID_Region, ANY_VALUE(r.Region) AS Region,
                     AVG(c.LimiteCredito) AS CreditoPromedio,
                     COUNT(c.ID_Cliente) AS NroClientes
              FROM Regiones r JOIN Clientes c ON c.ID_Region = r.ID_Region
              WHERE r.ID_Region = :pID_Region
              GROUP BY r.ID_Region]’;
END fnLimitePromedio;

El paso siguiente es usar esta macro como si fuera una vista que acepta un parámetro:

WITH Norte AS
    (SELECT ID_Region
     FROM Regiones
     WHERE ID_Pais = 1)
SELECT *
FROM fnLimitePromedio(Norte);


Ejemplo de Macro de Tabla usada para vista Polimórfica

A continuación, creamos una función que define una macro de tipo Tabla, que nos devuelve una sentencia SELECT sobre una tabla que pasamos como parámetro, limitando la cantidad de filas devueltas mediante el uso de otro parámetro.


CREATE FUNCTION fnPedirNFilas
(
    pTabla DBMS_TF.Table_t,
 pFilas NUMBER DEFAULT 10
)
RETURN VARCHAR2 SQL_MACRO(TABLE)
AS
BEGIN
RETURN q’[SELECT *
          FROM pTabla
          WHERE rownum <= pFilas’;
END fnPedirNFilas;

El paso siguiente es usar esta macro como si fuera una vista normal, pasando el nombre de la tabla y la cantidad de filas como parámetros:

SELECT * 
FROM fnPedirNFilas(pTabla=>Clientes, pFilas=> 20);

En este caso, al optimizador le llega una consulta de la siguiente forma:

SELECT * 
FROM (SELECT * FROM Clientes WHERE rownum <= 20);






lunes, 2 de marzo de 2020

Oracle Standard Edition 2 incluirá una opción de Alta Disponibilidad



Así lo anunció hoy Markus Michalewicz, Director de Producto de Oracle, en el blog de "Maximum Availability Architecture".

Oracle va a incluir una solución de alta disponibilidad para las bases de datos Standard Edition 2 que utilizan Oracle Clusterware, proporcionando una solución de failover en clúster basada en la infraestructura de Grid de Oracle.

Esto permitirá utilizar funcionalidades de alta disponibilidad y las soluciones de administración de almacenamiento que ya forman parte de Oracle Grid Infrastructure, como Oracle Automatic Storage Management (ASM) y Oracle ASM Cluster File System (ACFS), sin costos adicionales.

Esta nueva funcionalidad (sumadas a otras mejoras recientes a SE2 como Oracle Machine Learning, Oracle Spatial y Oracle Graph) estará disponible durante este año calendario como parte de un Release Update (RU) tanto para la version de base de datos Oracle 20c como para Oracle 19c.

viernes, 21 de febrero de 2020

Nueva forma de licenciamiento de Oracle XE para Linux



Oracle cambió el licenciamiento de Oracle XE para Linux, tal como se explica en la página de licenciamiento. A partir del 20 de febrero, la version Linux ya no se licencia con el modelo "Oracle Technology Network Developer License" (conocido como licencia de OTN) sino que lo hace por el nuevo modelo "Oracle Free Use Terms and Conditions", el cual no requiere aceptar explícitamente la licencia (como se ve en la imagen siguiente, el cual se mantiene para Windows) 



Este cambio permite descargar e instalar Oracle Database XE en linux mendiante el comando YUM sin intervención, como se muestra a continuación:

yum -y localinstall https://download.oracle.com/otn-pub/otn_software/db-express/oracle-database-xe-18c-1.0-1.x86_64.rpm”

El anuncio lo hizo hoy Gerald Venzl en el blog de base de datos de Oracle.

jueves, 20 de febrero de 2020

VirtualBox 6.1.4 ya está disponible


Oracle anunció hoy en el blog de virtualización la disponibilidad de la versión 6.1.2 de Virtualbox, la herramienta de virtualización gratuita de Oracle.

VirtualBox se puede descargar en forma gratuita desde el sitio web de Virtualbox, y adicionalmente existen los siguientes recursos:

Las correcciones de errores mas importantes en esta edición incluyen:

  • VBoxManage: se reincorporó la antigua opción "--clipboard" para el comando modifyvm, problema que afectó principalmente a los usuarios de Vagrant.
  • Linux Hosts: soporte Linux Kernel 5.5 agregado
  • Windows Hosts: se reincorporó la posibilidad de ejecutar máquinas virtuales a través de Hyper-V, a expensas del rendimiento.

martes, 18 de febrero de 2020

Oracle 20c - Las mejoras y nuevas funcionalidades mas importantes



A continuación vamos a detallar algunas de las mejoras y nuevas funcionalidades incluidas en Oracle 20c. Sobre algunas de ellas escribiré un artículo específico, pero por lo pronto vamos a ver rápidamente lo que la nueva versión nos trae.

Funcionalidades de Oracle Graph

Como ya fuera anunciado (ver mi artículo "Machine Learning, Spatial y Graph ya no requieren licencias adicionales") Oracle incluye sin costo adicional la funcionalidad de Graph en todas sus ediciones. Oracle Database 20c simplifica la instalación, configuración e implementación de Graph con la introducción de Graph Server y Client Kit, los cuales facilitan a los desarrolladores de aplicaciones comenzar a desarrollar utilizando Graph.


JSON

Oracle Database 20c introduce un  tipo de datos JSON nativo, llamado JSON, optimizado para el procesamiento de consultas y DML,  haciendo que sea más rápido procesar documentos JSON. A partir de 20c, este es el mejor tipo para almacenar documentos JSON grandes en vez de usar "VARCHAR" o "CLOB", evitando conversiones de juegos de caracteres y utilizando menos espacio de almacenamiento.

Puede usar el nuevo tipo de datos "JSON" tanto en SQL como en PL/SQL, pasando datos JSON de SQL a PL/SQL y de regreso a SQL (estático y dinámico). PL/SQL ahora admite la vinculación directa de datos JSON desde interfaces del lado del cliente como Oracle Call Interface (OCI) y Java Database Connectivity (JDBC). JSON puede ser un tipo diferenciador en la resolución de sobrecarga de procedimientos y funciones.

Se puede usar la nueva función SQL "JSON_TRANSFORM" para actualizar partes de un documento JSON. Se debe especificar qué partes modificar, las modificaciones y cualquier valor nuevo. "JSON_TRANSFORM" facilita que una aplicación modifique un documento JSON, sin tener que analizarlo y reconstruirlo. En la mayoría de los casos, también evita un viaje de ida y vuelta entre el servidor y el cliente para todo el documento.

Ahora puede expresar consultas SQL / JSON más complejas y expresar algunas consultas de manera más simple:

  • La nueva función SQL "JSON_SCALAR" acepta una instancia escalar de un tipo de datos SQL y devuelve un valor JSON escalar como una instancia del tipo de datos JSON.
  • Los nuevos métodos de elementos de lenguaje de ruta JSON admiten "JSON_SCALAR": float (), double (), binary (), ymInterval () y dsInterval ().
  • La sintaxis de lenguaje por Path o por Notación de Puntos en JSON admite nuevos métodos de elementos agregados: avg (), count (), minNumber (), maxNumber (), minString (), maxString (), sum ().


Funciones de Agregación y Analíticas

Existen nuevas funciones analíticas y estadísticas agregadas están disponibles en SQL:

  • "CHECKSUM" calcula la suma de verificación de los valores de entrada o expresión.
  • Funciones "KURTOSIS_POP" y "KURTOSIS_SAMP".
  • Funciones "SKEWNESS_POP" y "SKEWNESS_SAMP" son medidas de asimetría en los datos. Cuando la asimetría es positiva, esto significa que los datos están sesgados a la derecha. Cuando la asimetría es negativa, esto significa que los datos se distribuyen a la izquierda.

Todas estas nuevas funciones agregadas admiten las palabras clave "ALL", "DISTINCT" y "UNIQUE", permitiendo escribir código más eficiente y beneficiarse de un procesamiento más rápido en la base de datos.

Las funciones analíticas de ventanas ahora admiten las opciones "EXCLUDE" del estándar de SQL: 2011. La compatibilidad con el estándar ANSI completo permite una migración más fácil de las aplicaciones que se desarrollaron contra otros sistemas de bases de datos que cumplen con el estándar.

Macros SQL 

Puede crear Macros SQL (SQM) para factorizar expresiones y declaraciones SQL comunes en construcciones parametrizadas reutilizables que se pueden usar en otras declaraciones SQL. Las macros SQL pueden ser expresiones escalares, típicamente utilizadas en listas SELECT, WHERE, GROUP BY y HAVING, para encapsular cálculos y lógica de negocios o pueden ser expresiones de tabla, típicamente usadas en una cláusula FROM.

Las macros SQL aumentan la productividad del desarrollador, simplifican el desarrollo colaborativo y mejoran la calidad del código.


Mejoras a operadores de conjuntos SQL (SET)

Los operadores de conjuntos SQL ahora admiten todas las palabras clave según lo definido en ANSI SQL. El nuevo operador "EXCEPT [ALL]" es funcionalmente equivalente a "MINUS [ALL]". Los operadores "MINUS" e "INTERSECT" ahora admiten la palabra clave "ALL".

El pleno cumplimiento de ANSI proporciona una mayor compatibilidad con otros proveedores de bases de datos y hace que la migración a Oracle Database sea más fácil que antes.

Mejoras a In-Memory 

La función Automatic In-Memory (AIM) se ha mejorado significativamente. Oracle Database 20c agrega una nueva opción "HIGH" al parámetro de inicialización "INMEMORY_AUTOMATIC_LEVEL". Con esta configuración, todos los objetos que no tienen una configuración IN-MEMORY preexistente se configuran automáticamente en "INMEMORY MEMCOMPRESS AUTO" de forma predeterminada. AIM luego administra automáticamente los objetos poblados en el almacén de columnas en memoria (IM) utilizando el seguimiento de acceso y las estadísticas de columna. Este es un gran cambio en el comportamiento y aborda una de las preguntas más frecuentes que los clientes han tenido, que es "¿Cómo determino qué objetos llenar en el almacén de columnas de mensajería instantánea?"

Otra mejora significativa es que las tablas externas particionadas o híbrida, la cláusula INMEMORY es compatible tanto a nivel de tabla como de partición. Para las tablas híbridas, el atributo INMEMORY a nivel de tabla se aplica a todas las particiones, ya sean internas o externas. Esta mejora amplía significativamente el soporte para tablas externas en memoria.

Tablas Blockchain

La tabla Blockchain es un nuevo tipo de tabla especializada que proporciona una opción de persistencia altamente resistente a la manipulación directamente en la base de datos Oracle. Permite operaciones de solo inserción, sin actualizaciones y otras modificaciones permitidas, y restringe las eliminaciones.

Para aumentar aún más la resistencia a la manipulación, las filas se encadenan almacenando el hash de la fila anterior en la fila actual, lo que permite a los usuarios verificar cualquier modificación. Los usuarios también pueden firmar opcionalmente el contenido de las filas con firmas basadas en PKI que aprovechan los certificados X.509, y se puede verificar la integridad de la firma y los datos, asegurando así el no repudio



lunes, 17 de febrero de 2020

Oracle 20c - Funcionalidades obsoletas o no soportadas


En este primer artículo sobre Oracle Database 20c vamos a revisar las características que son "deprecadas" u obsoletas (lo que significa que no tendrán nuevo desarrollos ni correcciones pero pueden ser utilizadas tal cual existen en la actualidad, llamadas "deprecated" por Oracle) y las que quedan sin soporte ("desupported" para Oracle, la explicación detallada la podemos encontrar en el blog de Mike Dietrich), lo que significa que ya no deben ser utilizadas ya que puede que Oracle no incluya el código para ejecutarlas o el mismo no se comporte como lo esperado.

Funcionalidades desoportadas o cambios que afectan el uso de Oracle 20c


  • "A partir de Oracle Database 20c, Oracle Database solo es compatible con la arquitectura multi-tenant (CDB)". Este cambio fue anunciado hace tiempo y era esperado que la "nueva" arquitectura reemplace a la arquitectura tradicional. Como consideración adicional, Oracle 20c permite el uso de hasta 3 PDB en una misma instancia sin necesidad de pagar por la opción Multitenant, lo cual permite un cierto grado de consolidación sin necesidad de incurrir en costos adicionales. Todo esto lo expliqué en su momento en el artículo "Noticias de OOW 2019: Multitenant si o si a partir de Oracle 20c".
  • "A partir de Oracle Database 20c, el paquete 'DBMS_OBFUSCATION_TOOLKIT' queda desoportado y se reemplaza con 'DBMS_CRYPTO'". No es una novedad, este paquete fue deprecado en Oracle 10g.
  • "A partir de Oracle Database 20c, quedan sin soporte varias características de la base de datos XML". Las mismas incluyen
    1. Paquete "DBMS_XDBT". No hay reemplazo.
    2. Función de XQuery "ora:contains".Utilice XQuery Full Text en su lugar.
    3. Función SQL "XMLRoot". Utilice la función SQL / XML "XMLSerialize()" con un número de versión en su lugar.
    4. Tablas anidadas almacenadas como tablas ordenadas por índice (IOT). Esto incluye tanto el uso de la opción "DBMS_XMLSCHEMA.REGISTER_NT_AS_IOT", como el uso de la cláusula "NESTED TABLE N STORE AS ... (ORGANIZATION INDEX)" al crear una tabla con la columna de tabla anidada N. En su lugar, almacene columnas de tabla anidada utilizando almacenamiento dinámico (el comportamiento predeterminado para el procedimiento PL/SQL "DBMS_XMLSCHEMA.registerSchema").
    5. Procedimiento PL/SQL "DBMS_XSLPROCESSOR.CLOB2FILE". En su lugar, se debe utilizar el procedimiento "DBMS_LOB.CLOB2FILE".
    6. Función PL/SQL "DBMS_XSLPROCESSOR.READ2CLOB".En su lugar, se debe utilizar el procedimiento "DBMS_LOB.LOADCLOBFROMFILE".
    7. Oracle XML DB Content Connector.


  • "A partir de Oracle Database 20c, "DBMS_LOB.LOADFROMFILE" y LOB Buffering quedan desoportados".
  • “A partir de Oracle Database 20c, el parámetro "IGNORECASE" para el archivo "orapwd" queda desoportado". Todos los archivos de contraseña recién creados deben distinguir entre mayúsculas y minúsculas"

Como consideración adicional, Oracle 20c sólo soporta Oracle Home de tipo Sólo Lectura (ver mi articulo "Oracle 18c - ORACLE_HOME de Solo Lectura"). Antes de Oracle Database 20c, una instalación de Oracle predeterminada combinaba "ORACLE_HOME", "ORACLE_BASE_HOME" y "ORACLE_BASE_CONFIG" en una sola ubicación. A partir de Oracle Database 20c, la única configuración disponible es un "ORACLE_HOME" de solo lectura donde "ORACLE_BASE_HOME" y "ORACLE_BASE_CONFIG" se encuentran por separado de "ORACLE_HOME".


Funcionalidades obsoletas de Oracle 20c



    • "A partir de Oracle Database 20c, los algoritmos mas antiguos de cifrado y hash (como ser MD4, MD5 y RC4) contenidos en "DBMS_CRYPTO" están en desuso".
    • “La auditoría tradicional está en desuso en Oracle Database 20c. Oracle recomienda que utilice auditoría unificada, que permite una auditoría selectiva y más efectiva dentro de Oracle Database". Hay que tener en cuenta que los parámetros de inicialización y las vistas asociadas a esta funcionalidad también son consideradas obsoletas.
    • "A partir de Oracle Database 20c, el protocolo de seguridad de la capa de transporte versión 1.0 (TLS 1.0) está en desuso".

    viernes, 14 de febrero de 2020

    Ya se viene Oracle 20c... está disponible en Oracle Cloud!

    Oracle liberó en el día de ayer la versión 20c en modo "preview" para pruebas en el entorno Cloud en algunas regiones (mi entorno Free Cloud en Brasil todavía no la tiene).


    Lo interesante es que al liberar la versión ya se encuentra disponible toda la documentación, por lo que podemos comenzar a estudiar lo que se viene en esta nueva versión.

    Lo recomendable es comenzar por la sección "What's New" donde rápidamente encontraremos los cambios mas significativos.

    También resulta importante consultar la sección "Behavior Changes, Deprecated and Desupported Features for Oracle Databas" donde se detallan todas las funcionalidades que son deprecadas o dejan de ser soportadas, destacándose en Oracle 20c que ya no se puede tener arquitecturas Non CDB.


    martes, 11 de febrero de 2020

    Webcast Gratuito! Que hay de nuevo en Oracle 20c




    El mismo será dictado el próximo 19 de febrero, a las 15 hs. (de Argentina) y se explorarán los cambios y las nuevas características que se esperan en la versión 20c, incluidas las mejoras en la arquitectura multitenant, almacenamiento y uso de JSON, Machine Learning y más.

    Para registrarse o ver mas información, seguir este enlace.

    viernes, 17 de enero de 2020

    Virtualbox 6.1.2 Disponible


    Oracle anunció el martes en el blog de virtualización la disponibilidad de la versión 6.1.2 (primer release de mantenimiento de la version 6.1) de Virtualbox, la herramienta de virtualización gratuita de Oracle.

    VirtualBox se puede descargar en forma gratuita desde el sitio web de Virtualbox, y adicionalmente existen los siguientes recursos:


    viernes, 3 de enero de 2020

    Objetivos para el 2020!



    Blog



    2019 fue un año interesante el blog, escribí muchos artículos y novedades y tuve varias consultas y preguntas de algunos lectores. El número de lectores mensuales se fue incrementando a lo largo del año, comenzando en Febrero en 135 y llegando a 1150 en septiembre!

    En el año actual espero poder participar un poco mas, mi objetivo es escribir al menos 20 artículos técnicos, sumados a las novedades sobre productos y eventos de Oracle, manteniendo el número de lectores mensual en torno a los 1000.

    Grupo de Usuarios Oracle de Argentina



    Para el año que comienza espero poder:
    • Participar en la organización del Groundbreakers Latin America Tour 2020 en Argentina.
    • Participar como Speaker en Groundbreakers Tour 2020 en Argentina disertando sobre alguna de las nuevas características de Oracle 20c.


    Programa Oracle ACE



    Si bien faltan varios meses para que cierre el año de evaluación (el 31 de mayo) del programa, teóricamente ya tengo los puntos suficientes para asegurarme la condición de Oracle ACE, por lo que el objetivo ya estaría cumplido!

    Comunidad Oracle



    En los últimos meses del 2019 mi participación en la comunidad Oracle fue creciendo, logrando más de 110 respuestas identificadas como útiles y 90 como correctas, tanto en los foros abiertos de Groundbreakers como en la comunidad de My Oracle Support, llegando al puesto 220 del ranking global del sitio.

    Durante el 2020 espero superar las 200 respuestas útiles y 150 respuestas correctas, logrando llegar al puesto 100 del ranking global.

    Otras actividades


    • Escribir al menos tres artículos técnicos en el sitio "OTN en Español".
    • Escribir al menos cinco Review de productos Oracle en TrustRadius y/o Gartner.