Mostrando las entradas con la etiqueta Oracle 20c. Mostrar todas las entradas
Mostrando las entradas con la etiqueta Oracle 20c. Mostrar todas las entradas

viernes, 14 de agosto de 2020

Oracle Cloud Infrastructure - Conectandose a una DB en la nube con SQL Developer

En los artículos anteriores ( "Oracle Cloud Infrastructure - Creando Compartimiento y Red Virtual (VCN)" y "Oracle Cloud Infrastructure - Creando una VM con Oracle 20c") vimos cómo configurar un compartimiento y una VCN, y posteriormente crear una VM con Oracle Database en OCI.

En este artículo vamos a explicar cómo conectarse con SQL Developer a nuestra instancia de base de datos Oracle en la nube.


Configurando la VCN para aceptar conexiones

El primer paso consiste en navegar en la consola de OCI dentro de "Core Infrastructure", seleccionado Networking y luego la opción de Virtual Cloud Networks:


A continuación debemos seleccionar la VCN donde se encuentra nuestra VM con la instancia de Base de Datos Oracle:


Una vez en la red, debemos seleccionar la sub-red pública:


Y a continuación la "Lista de Seguridad" de la misma:


En el paso siguiente, vamos a habilitar una regla de ingreso para permitir conexiones entrantes desde nuestra computadora, presionando en la opción "Add Ingress Rules":


Se abrirá una pantalla donde deberemos ingresar:

  • El rango de IP desde donde la subred aceptará las conexiones (pueden obtener su IP pública fácilmente, ingresando al sitio "myip.es".
  • El protocolo (dejar TCP).
  • El puerto al que se desea conectar (habilitaremos solo el 1521, donde escucha por defecto el Listener de Oracle).
  • Un nombre para la regla, el cual facilita su identificación.


Al presionar finalizar la carga de la nueva regla, volvemos a la pantalla anterior, donde podemos verificar la misma:


Datos de Conexión de la VM e Instancia

En el artículo anterior, ya habíamos obtenido la IP pública de nuestra VM, para poder conectarnos vamos a requerir también el nombre de servicio de la base de datos. Para ello navegaremos hasta la sección de DB Systems en la consola de OCI hasta llegar a nuestra VM y la instancia de base de datos. Una vez en la misma, presionaremos la opción "DB Connection":

Una ventana se abrirá, donde podremos copiar los detalles de conexión a nuestra instancia. Para ello presionaremos en la opción "Copy":

Esto nos copia al portapapeles la cadena de conexión a nuestra instancia, con el formato "<servidor>:<puerto>/<servicio>", nosotros usaremos el puerto y el servicio en el próximo paso.


Configurar SQL Developer

A continuación solo nos resta configurar SQL Developer para acceder a nuestra DB. Para ello, crearemos una nueva conexión (no de tipo Cloud, sino una "normal") y completaremos los siguientes datos:

  • Usuario: Sys o System (creados al momento de configurar la DB) o alguno que hayamos creado posteriormente.
  • Contraseña: La correspondiente al usuario ingresado
  • Nombre de Host: No usaremos el nombre sino la IP pública que obtuvimos en el artículo anterior.
  • Puerto: 1521 (el mismo que configuramos para aceptar conexiones entrantes)
  • Nombre de Servicio: El nombre que obtuvimos en el punto anterior.


Podemos asegurarnos que todo esta OK presionando en el botón "Probar", si el mensaje de estado es "Correcto" podemos guardar nuestra conexión presionando "Guardar".

Una vez guardada la conexión, nos conectamos a la misma y ya podemos consultar nuestra base de datos:





martes, 11 de agosto de 2020

Oracle Cloud Infrastructure - Creando una VM con Oracle 20c

En el artículo anterior "Oracle Cloud Infrastructure - Creando Compartimiento y Red Virtual (VCN)" configuramos un compartimiento y una red virtual (VCN) como pasos iniciales para crear una máquina virtual (VM) con Oracle Database en Oracle Cloud Infrastructure. A continuación veremos los pasos requeridos para configurar una VM en OCI con una instancia de Oracle Database.


Creando una VM con Oracle Database

El primer paso consiste en seleccionar la opción "Bare Metal, VM and Exadata" (también conocida como DB Systems) dentro de la sección "Oracle Database" del menú principal de la consola de Oracle Cloud Infrastructure:



Una vez en la página de DB Systems de Oracle Database, podemos ver los sistemas de DB que tenemos configurados en el compartimiento seleccionado (en este caso, lo haremos en el Compartimiento "Blog" que creamos en el artículo anterior). A continuación debemos presionar en "Create DB System" para crear nuestra VM con Oracle DB:



Creando la VM

En la primer página dentro del asistente de creación de DB System, vamos a configurar la VM donde se ejecutará nuestra instancia de Oracle DB. Lo primero que debemos hacer es :

  • Confirmar el Compartimiento a utilizar
  • Ingresar un nombre para la máquina virtual (es un nombre "amigable", no el nombre del servidor).
  • Seleccionar en que Availability Domain de la región estará ubicada la VM
  • Elegir entre VM, Bare Metal (servidor físico) o Exadata
  • Elegir el tamaño ("Shape") de la VM a crear, en este caso para instalar Oracle 20c es requerido que sea de tipo VM.Standard2.1.

Podemos cambiar el shape de la VM presionando en "Change Shape" (como se ve en la imagen anterior) y seleccionando la deseada de la lista disponible:


Luego, debemos elegir:
  • Edición de Oracle Database a utilizar, desde Standard a la versión de Ultra Performance, en nuestro caso nos alcanza con una versión Enterprise.
  • Definir de qué manera queremos manejar el almacenamiento. Para una instalación más rápida nos alcanza con usar la version de "Logical Volume Management".
  • El tamaño de almacenamiento, el cual inicia en 256 Gb., lo cual es más que suficiente para esta prueba.


Luego, deberemos ingresar:
  • Una clave pública de SSH, para poder conectarnos al equipo. Puede elegirse entre ingresar la clave (como hice en este caso) o subir un archivo de clave pública. Si no saben cómo generar una clave, pueden consultar la herramienta PuttyGen. Debemos guardar la clave privada en un lugar seguro, será requerida para conectarnos a la VM. 
  • Elegir entre usar una licencia provista por Oracle (lo cual implica un costo), o ingresar los detalles de una licencia Oracle que ya hayamos adquirido

La última parte de la creación de la VM requiere seleccionar:

  • La VCN (Virtual Cloud Network) donde residirá la VM. Vamos a usar la VCN creada en el artículo anterior.
  • La subred dentro de la VCN. Ya que queremos acceder a la VM en forma directa desde Internet, vamos a ubicarla en la subnet pública, pero en condiciones normales los equipos de tipo DB system suelen estar ubicados en la subred privada.
  • El nombre de Host (servidor) de la VM.
Una vez ingresados los datos, presionamos "Next" para culminar la configuración de la VM y pasar a configurar la Instancia de Oracle:


Configurando la instancia de Oracle Database

En esta página vamos a definir la características de la instancia de Oracle que crearemos dentro de la VM configurada en el punto anterior. 

Lo primero que debemos seleccionar es:

  • Nombre de la base de datos contenedor (CDB).
  • Versión de la base de datos. En este caso, no me dejó elegir Oracle 20c, es probable que sea debido a que ya tengo configurada otra VM con Oracle 20c y esa versión está disponible sólo como preview.
  • Nombre de la PDB que usaremos para crear nuestros esquemas, tablas, etc. Esto no es obligatorio (podemos crear la PDB posteriormente, como en cualquier instancia de Oracle).
  • Contraseña del usuario SYS (tambien usada para SYSTEM).

A continuación sólo resta seleccionar el tipo de uso que le daremos a la DB (procesamiento de transacciones o Data Warehouse) y presionar el botón "Create DB System" para crear la VM con la instancia:

Al seleccionar "Create DB System" la consola vuelve a la página de DB Systems, y nos muestra el estado del proceso de provisionamiento de la VM con la instancia. Este proceso puede demorar entre 10 y 30 minutos:


Al finalizar el proceso, el estado de la VM aparecerá como "Available" (disponible). Podemos ver los detalles del sistema si seleccionamos en el nombre de la misma:

Al ver los detalles de la VM tenemos acceso a toda la información de la VM y la base de datos creada:


Al seleccionar "Nodes" en la parte inferior izquierda del detalle de la VM (como se ve en la imagen anterior) podemos ver las características del nodo, incluyendo la dirección IP pública que usaremos para conectarnos a la VM:

Con esto queda finalizado el proceso de creación de la VM con una instancia Oracle.


Probar a la Base de Datos

Podemos probar en forma rápida de conectarnos a la VM y una vez en ella, conectarnos a la DB. Para ello debemos:


  1. Configurar Putty u otra herramienta que permita conexiones SSH, para conectarnos con la VM. Para ello usaremos:
    • La IP pública del punto anterior
    • El usuario de Linux "opc" (disponible por defecto en todas las VM de OCI).
    • El archivo de clave privada correspondiente a la clave pública que usamos al configurar la VM.
  2. Una vez conectamos con "opc" cambiar al usuario "oracle" usando el siguiente comando:
            sudo su - oracle


Una vez conectados como "oracle", podemos hacer lo que deseemos con nuestra instancia!


miércoles, 8 de julio de 2020

"Innovation Release" vs "Long Term Support Release"

En el artículo del lunes, donde explicaba decisión de Oracle de extender por algo más de un año del soporte Premier para Oracle 19c, incluí una referencia al documento 742060.1 de My Oracle Support, donde se menciona la política de soporte de las versiones definidas como "Long Term Support Release", y las versiones "Innovation Release".

Esta es una nueva forma de llamar a las distintas versiones, y a continuación vamos a explicar qué significa cada una de ellas.

Versiones "Long Term Support Release"

En cierta medida, son como los Final Patchset de las release anteriores. Significa que esta versión del producto es más estable, y por lo tanto recibirá actualizaciones menos frecuentes que otras versiones. Al mismo tiempo, ofrecen un período de soporte y corrección de errores mucho más amplio, ya que el soporte Premier para las mismas será de cinco años, pudiéndose contratar adicionalmente soporte extendido por otros tres años, alcanzando así una extensión de ocho años.

Versiones "Innovation Release"

Estas versiones serán liberadas entre dos versiones "Long Term Support", e incluirán mejoras y nuevas características que posteriormente serán consolidadas en la siguiente versión "Long Term Support". Estas versiones permiten que los usuarios puedan incorporar nuevas tecnologías en caso  de requerirse. Estas versiones "Innovation Release" tendrán dos años de soporte Premier y no contarán con soporte extendido. Si se piensa usar en entornos productivos, esto implica que se debe planificar una actualización a una versión (ya sea Innovation Release o Long Term Support Release) posterior dentro de los dos años.


¿Que significan estos cambios?

La conclusión a la que podemos llegar es que este modelo nos permite optar entre versiones más modernas, con updates frecuentes (con el costo de tener que actualizar más frecuentemente) o versiones más estables y con mayor soporte, pero las cuales no incluirán rápidamente nuevas características.


(Imagen basada en artículo de Mike Dietrich)


Todo indica que iremos hacia un ciclo de 2 a 4 versiones "Innovation" (pueden ser anuales o hasta semestrales) seguidas de una version "Long Term Support" que abarque todas las mejoras de las versiones Innovation previas, en una versión mas estable y consolidada.

Esto permitiría desarrollar y probar usando nuevas características y mejoras de versiones Innovation, e implementar en producción las mismas ya mismo de ser un requerimiento, o  bien aguardar hasta que las mismas estén disponibles en la próxima Long Term Support.

¿A que versión de Oracle actualizar nuestras bases 11g, y 12c?

Si bien la versión 20c todavía no está disponible para su uso productivo, su liberación es inminente, y eso nos lleva a la pregunta: ¿Actualizar a Oracle 19c o esperar y actualizar a Oracle 20c?

A simple vista la idea de esperar a la versión 20c suena tentadora (una versión más nueva implicaría, a simple vista, una mayor vida útil), pero en realidad esta nueva clasificación de versiones no hace más que confirmar que, excepto que necesitemos alguna de las nuevas características de Oracle 20c, la misma dejará de tener soporte a mediados de 2022, obligandonos a migrar a la versión 21c o 22c (y no sabemos si alguna de esas dos será una versión "Long  Term Support") antes de esa fecha, mientras que la versión 19c contará con soporte Premier hasta el 2024, y extendido hasta el 2027, por lo que es la opción mas segura.


jueves, 7 de mayo de 2020

Oracle APEX 20.1 disponible!


Hace un par de semanas fue liberada la versión 20.1 de Oracle APEX, la plataforma de desarrollo Low Code gratuita de Oracle que permite un rápido desarrollo de aplicaciones seguras y escalables con un mínimo de programación.

El anuncio lo hizo Joel Kallman, director de desarrollo de APEX de Oracle, en este artículo en su blog.

Links útiles:




Nuevas características y Mejoras


  • APEX + Redwood
    • Nueva apariencia para estar en sincronía con el nuevo estilo visual de Oracle.
  • Mejoras de búsqueda por facetas (Faceted Search)
    • La búsqueda por facetas se ha mejorado para permitir listas de valores en cascada, facetas condicionales y mostrar totales en forma compacta, entre otras mejoras.
  • URL amigables
    • La sintaxis de URL para aplicaciones APEX se ha simplificado para permitir URL más amigables en tiempo de ejecución.
  • Administración mejorada del ciclo de vida de la aplicación
    • Se han realizado numerosas mejoras que incluyen implementaciones de aplicaciones con un solo clic, copias de seguridad automáticas, exportaciones de archivos zip, etc.
  • Impresión PDF nativa
    • Ahora puede imprimir archivos PDF directamente desde grillas  interactivas. Esta característica produce un archivo PDF que incluye opciones de formato como resaltado, agrupación de columnas y saltos de columna.
  • Mega Menus
    • Universal Theme ahora incluye Mega Menus


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.

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.

    lunes, 23 de septiembre de 2019

    Noticias de OOW 2019: Multitenant si o si a partir de Oracle 20c



    La semana pasada se desarrolló en San Francisco el Oracle Open World 2019, y en el mismo hubo importantes novedades. La mas rutilante fue, sin dudas, la nueva oferta gratuita de Cloud de Oracle, la cual expliqué en mi artículo anterior.

    Pero otra noticia que no pasó desapercibida fue el cambio a partir de Oracle 20c, donde ya no existirá la opción de instalar y usar Oracle en modo No-CDB, ya que esta opción no será soportada (se debe recordar que la misma figura como "deprecada" desde Oracle 12.1.0.2, como se explica en el blog de Mike Dietrich).

    Esta decisión va a forzar a los usuarios a migrar hacia entornos CDB-PDB si desean mantener el soporte de Oracle.


    Pero esta "mala" noticia se compensa con el hecho que, a partir de Oracle 19c, no es necesario licenciar la opción de Multitenant si tenemos tres o menos PDB en cada instancia. Esto es similar a lo que ya está permitido en Oracle XE, que es hasta tres PDB de usuario por contenedor.

    Esto ya fue reflejado en la documentación de Oracle 19c, donde podemos ver la siguiente sección de la guía de licenciamiento:



    Ambas novedades fueron informadas en una sesión de Dominic Giles y Jenny Tsai-Smith