miércoles, 28 de junio de 2023

Certificaciones OCI Gratuitas - Etapas 1 y 2 Completadas


Las primeras dos semanas de junio pude completar los sectores 1 y 2 de la carrera de certificaciones OCI que describí en el artículo "Certificaciones OCI Gratuitas", completando los cursos de Oracle Cloud Infrastructure Foundations y Oracle Cloud Data Management Foundations, asistiendo a las clases virtuales de los mismos y rindiendo ambos exámenes, los cuales son siempre gratuitos, más allá de la Carrera de Certificación que se encuentra disponible entre junio y agosto de este año.

Al completar ambos sectores, al terminar la carrera el 31 de agosto voy a recibir dos voucher de exámenes de Oracle (uno por sector) y si tengo la suerte de quedar entre los mejores 300 promedios, una gorra de Oracle University de regalo.

Sector 3 allá vamos...

Pero eso no es todo, ya que ya completé un curso adicional y ayer rendí el primero de los dos exámenes Professional requeridos para completar el sector 3 de la carrera, sumando a las dos certificaciones anteriores la certificación Oracle Autonomous Database Cloud Professional:




Sólo me resta preparar y aprobar de acá a fin de agosto un examen Professional adicional (la carrera incluye la posibilidad de tomar dos exámenes Associate o Professional sin cargo alguno) y de esa forma completar el sector 3, que incluye como premios un voucher de examen adicional, tres meses de acceso sin cargo a los Labs de Oracle University para practicar contenido de las capacitaciones en entornos reales, y una campera de Oracle para los mejores 300 promedios.



En resumen, si se aprovecha y completa la carrera se pueden rendir 5 certificaciones Oracle Professional o Associate (las dos incluidas para completar la carrera más las tres que se pueden obtener de premio) más el acceso a tres meses de Oracle Labs, sin duda una oportunidad muy grande de capacitarse y certificarse sin costo en los servicios de Oracle Cloud Infrastructure.

Cómo participar?

Es muy sencillo, solo es necesario ir al sitio de Educación de Oracle y elegir alguna de las certificaciones disponibles (son 22 los exámenes incluidos en la carrera, tanto de Oracle Cloud Infrastructure como de Oracle Database Management):

Nota: El "camino ideal" es tomar las capacitaciones, clases y exámenes de Foundations primero, ya que no requieren vouchers de exámenes, son más fáciles de completar y al hacerlo nos aseguramos completar los sectores 1 y 2 y por lo tanto obtener dos vouchers de examen que se pueden utilizar una vez finalizada la carrera. Luego si usar los dos exámenes incluidos en esta carrera para rendir dos certificaciones Professional, lo que nos permite, de aprobarlas, completar el sector 3 y obtener un tercer voucher, tambien disponible sólo una vez finalizada la carrera.

Al seleccionar una certificación, nos lleva a la página del Learning Path de la misma, la cual incluye:
  • El o los cursos gratuitos disponibles para el examen.
  • Instrucciones para los Labs (depende del examen, no todos lo incluyen, y el acceso a los labs en si no está incluidos).
  • Examen de Práctica gratuito (depende del examen, no todos lo incluyen).
  • Sesión de preparación para el examen (depende del examen, no todos lo incluyen).
  • Link a la registración para el examen.

Nos suscribimos al Learning Path, seleccionamos el primer paso del mismo, y a aprender!







martes, 27 de junio de 2023

Oracle Community Tour 2023 en Argentina

El próximo 15 de Agosto vuelve el Community Tour a la Argentina en forma presencial. Después de tres años de evento virtual, el tour sale de gira nuevamente por toda Latino América, cerrando la gira en Buenos Aires.

Para conocer sobre los distintos países que serán parte este año del evento, así como ver la lista completa de participantes, pueden acceder a la la página de LAOUC (Latin America Oracle User Community). En el mismo sitio pueden conocer los detalles de cada escala del mismo (como ser la de Argentina) incluyendo la agenda tentativa del evento:


Si bien el evento completamente gratuito, requiere registración previa en el sitio de Eventbrite.

Este año nuevamente voy a participar como Orador en el evento, con una charla sobre JSON en Oracle Database 23c, así que aquellos que puedan unirse al evento el 15 de agosto serán bienvenidos!.




lunes, 26 de junio de 2023

APEX 23.1 Patchset Bundle #2 ya está disponible!

Este conjunto de patchs agrupado bajo el número de patch 35283657 fue liberado hace unos 10 días y está disponible sólo desde la página de soporte de Oracle en este link. Una vez aplicado el patchset, la versión de APEX es actualizada a 23.1.2


Se puede consultar la lista de fixes incluidos en el patchset bundle en este link.


La versión base de Oracle APEX 23.1 puede ser descargada aquí.


viernes, 23 de junio de 2023

Oracle 23c - Mejoras Varias #2


En este artículo vamos a ver una segunda serie de mejoras de Oracle 23c que no evaluamos en otros artículos.


DEFAULT ON NULL para sentencias UPDATE

Oracle históricamente permite definir valores por defecto cuando una sentencia INSERT no incluye a una columna en la lista de valores a insertar, y desde Oracle 12c también se podía definir ese valor por defecto si la columna estaba incluida en la lista pero el valor insertado era NULL.

Oracle 23c amplia esta funcionalidad a las sentencias UPDATE, tal cual veremos en este artículo.


DEFAULT original

La sintaxis de la cláusula DEFAULT original es como se detalla a continuación:

CREATE TABLE tDEFAULT (ID NUMBER, Nombre VARCHAR2(50) DEFAULT 'Ingrese Nombre');

Nota: esta definición asigna el valor 'Ingrese Nombre' sólo si la sentencia INSERT no incluye a la columna Nombre. Por otro lado, la columna acepta nulos, por lo que se puede ejecutar una sentencia UPDATE que asigne el valor NULO a la columna Nombre.


DEFAULT ON NULL [FOR INSERT ONLY]

Oracle 12c introdujo la opción de definir la cláusula DEFAULT ON NULL (opcionalmente seguida de FOR INSERT ONLY) para indicar que el valor por defecto debe ser asignado ya sea si la columna no es incluida en la sentencia INSERT, o si el valor a ser insertado es NULL.

La sintaxis es la siguiente (en ambos casos el comportamiento es el mismo):

CREATE TABLE tDEFAULT_NULL (
    ID NUMBER,
    Nombre VARCHAR2(50) DEFAULT ON NULL 'Ingrese Nombre',
    Comentario VARCHAR2(50) DEFAULT ON NULL FOR INSERT ONLY 'Ingrese Comentario');

Nota: al definir un DEFAULT con la opción ON NULL la columna se define en forma automática como NOT NULL (como "efecto secundario") por lo que no podemos actualizar la misma a NULL.


DEFAULT ON NULL FOR INSERT AND UPDATE

Esta es la sintaxis que incorpora Oracle 23c y permite que se le asigne el valor definido tanto al insertar un valor nulo como al momento de actualizar el mismo a NULL.

La sintaxis es la siguiente:

CREATE TABLE tDEFAULT_NULL_UPDATE (
    ID NUMBER,
    Nombre VARCHAR2(50) DEFAULT ON NULL 'Ingrese Nombre',
    Comentario VARCHAR2(50) DEFAULT ON NULL FOR INSERT AND UPDATE 'Ingrese Comentario');

Nota: Definimos sólo la columna Comentario como DEFAULT ON NULL FOR INSERT AND UPDATE.

Ahora vamos a probar esta nueva funcionalidad con un par de ejemplos donde insertamos filas en nuestra tabla de diversas maneras:

INSERT INTO tDEFAULT_NULL_UPDATE (ID) VALUES (1); INSERT INTO tDEFAULT_NULL_UPDATE VALUES (2, NULL, NULL);
INSERT INTO tDEFAULT_NULL_UPDATE VALUES (3, 'Nombre', 'Comentario'); -- SELECT * FROM tDEFAULT_NULL_UPDATE;

La sentencia SELECT del final del script nos devuelve la siguiente información:


Y ahora vamos a actualizar una de las columnas con NULL, para ver qué sucede:

UPDATE tDEFAULT_NULL_UPDATE SET Nombre = NULL WHERE ID = 2;
Error que empieza en la línea: 1 del comando - UPDATE tDEFAULT_NULL_UPDATE SET Nombre = NULL WHERE ID = 2 Error en la línea de comandos : 1 Columna : 33 Informe de error - Error SQL: ORA-01407: no se puede actualizar ("DEMO23C"."TDEFAULT_NULL_UPDATE"."NOMBRE") a un valor NULL 01407. 00000 - "cannot update (%s) to NULL"

Como era de esperar, el UPDATE da error ya que la columna Nombre no acepta nulos. 

Pero si probamos de actualizar con NULL la columna Comentarios de la fila 3, veremos lo siguiente:

UPDATE tDEFAULT_NULL_UPDATE SET Comentario = NULL WHERE ID = 3;
1 fila actualizadas.

Y al consultar el contenido de la tabla, vemos que el UPDATE se ejecutó sin problemas pero en vez de asignar el valor NULL se asignó el valor especificado como valor por defecto:



Renombrado de Segmentos LOB

Cuando creamos una tabla con segmentos de tipo LOB (columnas CLOB o BLOB) y no especificamos un nombre de segmento, el mismo es generado por Oracle en forma automática, como vemos a continuación:

CREATE TABLE tSegmento (ID NUMBER(10), Datos CLOB);
-- SELECT table_name, column_name, segment_name FROM user_lobs;

Hasta Oracle 23c, la única forma de darle un nombre propio a un segmento de LOB ya creado era "moviendo" el mismo usando la siguiente sintaxis:

ALTER TABLE tSegmento MOVE LOB(Datos) STORE AS tSegmento_Datos ONLINE;

El problema es que esta operación efectivamente mueve los datos (en este ejemplo, al no especificar nada lo hace al mismo tablespace), con lo cual es altamente costosa.


En Oracle 23c se introduce una nueva opción RENAME en la sentencia ALTER TABLE que permite renombrar el segmento de LOB sin necesidad de mover el mismo, lo cual podemos probar a continuación:

ALTER TABLE tSegmento RENAME LOB(Datos) SYS_LOB0000109061C00002$$ TO LOB_tSegmento_Datos;


Al ser una operación que afecta solo al diccionario de datos, es altamente eficiente y no tiene ningún costo significativo. Podemos ver el resultado de la misma si volvemos a consultar la vista user_lobs:

SELECT table_name, column_name, segment_name FROM user_lobs;


Conclusión

En este artículo discutimos otras dos mejoras disponibles en Oracle 23c que facilitan la gestión de segmentos LOB y que también permiten definir valores por defectos en caso de actualizar datos, no solo al insertar.


Si desean conocer más sobre Oracle 23c, es recomendable que vean estos artículos en este blog como punto de partida:

Adicionalmente, pueden consultar todos los artículos relacionados a Oracle Database 23c agrupados en en el tag Database 23c.

viernes, 16 de junio de 2023

Oracle 23c - Mejoras Varias #1


En este artículo vamos a ver algunas mejoras de Oracle 23c que no evaluamos en otros artículos.


Mas de 1000 Valores en Operador IN 

Una mejora que puede ser útil en el caso de código generado en forma dinámica o automática es la posibilidad de usar el operador IN con hasta 64.000 valores, en vez del limite de 1000 valores que existía previamente.

Lo primero que vamos a hacer, es generar una lista de mas de 1000 valores:

SELECT LISTAGG( LEVEL,',' ) --FROM dual CONNECT BY LEVEL <= 1010;

Nota: Oracle Database 23c permite escribir sentencias select sin la clausula FROM si la misma no es necesaria, como vemos en el ejemplo que está comentada.


El paso siguiente es pegar el resultado de esa consulta que devuelve 1010 valores separados por comas (el formato que espera el operador IN) en la siguiente sentencia, y ejecutarla:

SELECT * FROM all_objects a WHERE object_id IN (<PegarAca>);

Veremos que la query se ejecuta sin ningún problema:


Auditoría a Nivel Columnas

Oracle 23c permite definir políticas de auditoría a nivel de columnas específicas tanto de vistas como de tablas, permitiendo de esa forma reducir el número de "falsos positivos" al tener que auditar sobre toda la tabla cuando nos interesa sólo una o varias columnas en particular.

Vamos a crear una tabla con varias columnas para demostrar cómo se define y cómo funciona la auditoría a nivel columna:

CREATE TABLE AuditarColumnas ( ID NUMBER(10) NOT NULL, Texto1 VARCHAR2(10), Texto2 VARCHAR2(10), Texto3 VARCHAR2(10));


Y ahora vamos a insertar algunos registros (usando la funcionalidad de constructor de tablas descripta en el artículo "Oracle 23c - Constructor de Tabla a partir de Valores"):

INSERT INTO AuditarColumnas VALUES (1, 'Fila 1 A', 'Fila 1 B', 'Fila 1 C'), (2, 'Fila 2 A', 'Fila 2 B', 'Fila 2 C'), (3, 'Fila 3 A', 'Fila 3 B', 'Fila 3 C'), (4, 'Fila 4 A', 'Fila 4 B', 'Fila 4 C');


Definiendo Auditoría a Nivel Columna

En el ejemplo podemos ver como crear una regla de auditoría en el caso de que se ejecute sentencias SELECT contra las columnas Texto1 o Texto2, o cuando se ejecute un UPDATE contra la columna Texto3, y a continuación vamos a habilitar dicha regla: 

CREATE AUDIT POLICY auditar_columnas ACTIONS SELECT(Texto1, Texto2) ON demo23c.AuditarColumnas, UPDATE(Texto3) ON demo23c.AuditarColumnas CONTAINER = CURRENT;
--
AUDIT POLICY auditar_columnas;

Nota: Para crear auditorías es necesario tener permisos, en este caso la misma la creamos con el usuario SYSTEM.

La lista de acciones que se pueden auditar sobre columnas esta disponible en la documentación oficial.


Probando la Auditoría

Vamos a ejecutar sentencias SELECT y UPDATE que en algunos casos tienen que ser auditados y en otros casos no:

UPDATE AuditarColumnas SET Texto1 = 'Modificado' WHERE ID =1; -- No debe Auditar SELECT ID, Texto1 FROM AuditarColumnas WHERE ID <3; -- Si debe Auditar UPDATE AuditarColumnas SET Texto3 = 'Modificado' WHERE ID =3; --Si debe Auditar SELECT ID, Texto3 FROM AuditarColumnas WHERE ID >2; -- No debe Auditar

Y sólo nos resta consultar la tabla de auditoría unificada (nuevamente, usando el usuario SYSTEM u otro usuario con privilegios de acceder a la auditoría) de esta manera:

SELECT TO_CHAR(event_timestamp,'YYYY-MM-DD HH24:MI:SS') AS Fecha, dbusername AS Usuario, action_name AS Accion, object_schema AS Esquema, object_name AS Objeto, sql_text AS CodigoSQL FROM unified_audit_trail WHERE object_name = 'AUDITARCOLUMNAS';


Obteniendo el siguiente resultado:

FECHA USUARIO ACCION ESQUEMA OBJETO CODIGOSQL -------------------- ---------- ---------- ---------- --------------- ------------------------------------------------------------ 2023-06-15 22:03:40 DEMO23C SELECT DEMO23C AUDITARCOLUMNAS SELECT ID, Texto1 FROM AuditarColumnas WHERE ID <3
2023-06-15 22:04:03 DEMO23C UPDATE DEMO23C AUDITARCOLUMNAS UPDATE AuditarColumnas SET Texto3 = 'Modificado' WHERE ID =3


Conversor Automático de PL/SQL a SQL (SQL Transpiler)

Esta nueva funcionalidad permite, en ciertos casos, convertir funciones desarrollada en PL/SQL directamente a código SQL, reduciendo notablemente el costo de ejecutar sentencias SQL que llaman veces a dichas funciones. Cuando el código SQL ejecuta una función PL/SQL, se produce un "cambio de contexto" en el que la sentencia SQL se detiene, se ejecuta el código PL/SQL en el motor de ejecución PL/SQL, el cual devuelve un resultado, y a continuación se vuelve el control al motor SQL, que obtiene y utiliza el resultado devuelto por el motor PL/SQL y luego toma otra fila y repite el proceso para ejecutar la función en ella.

Oracle 23c permite que funciones PL/SQL pueden ser convertidas directamente en la sentencia que las utiliza en código SQL (para ver más detalles sobre que funciones pueden ser convertidas consultar la documentación oficial), evitando de esa forma los cambios de contexto.

Esta conversión es automática, y solo requiere habilitarla mediante un parámetro configurable a nivel de instancia o de sesión.


Probando la conversión

Vamos a crear una función que concatena dos cadenas con un separador en el medio:

CREATE OR REPLACE FUNCTION Concatenar (pTexto1 VARCHAR, pTexto2 VARCHAR) RETURN VARCHAR AS BEGIN RETURN pTexto1 || '-' || pTexto2; END; /


Y vamos a ejecutar un SELECT sobre la tabla creada en el ejemplo anterior de auditoría de columnas utilizando la función recién creada:

SELECT * FROM AuditarColumnas ac WHERE Concatenar(ac.Texto1, ac.Texto2) = 'Fila 2 A-Fila 2 B';


Si consultamos el plan de ejecución de esta sentencia, veremos que en el predicado figura la llamada a la función:


A continuación vamos a cambiar la configuración de nuestra sesión, habilitando la funcionalidad de conversión (llamada transpiler) modificando el parámetro SQL_TRANSPILER de la siguiente forma:

ALTER SESSION SET sql_transpiler = 'ON';


Si volvemos a ejecutar la sentencia y vemos su plan de ejecución, nos encontraremos que la misma ha sido convertida y ya no contiene la llamada a la función sino que el código de la misma ha sido "embebido" dentro de nuestra sentencia:


Conclusión

En este artículo discutimos tres mejoras disponibles en Oracle 23c que facilitan la generación de código en forma dinámica, simplifican la auditoría y permiten una ejecución más eficiente de código PL/SQL sin necesidad de reescribir el mismo ni las sentencias que lo llaman.


Si desean conocer más sobre Oracle 23c, es recomendable que vean estos artículos en este blog como punto de partida:

Adicionalmente, pueden consultar todos los artículos relacionados a Oracle Database 23c agrupados en en el tag Database 23c.

jueves, 1 de junio de 2023

Certificaciones OCI Gratuitas

A partir de hoy Oracle ofrece la posibilidad de participar en una "carrera" para certificarse en Oracle Cloud Infrastructure y poder recibir tanto entrenamiento como exámenes gratuitos. Es un programa que inicia hoy, 1 de junio, y es válido hasta el 31 de agosto de este año.

Esta carrera consta de tres etapas, en cada una hay que asistir a algunos cursos online y sesiones de preguntas y respuestas en vivo y aprobar uno de los exámenes de la lista, y de esta forma obtener el acceso a exámenes adicionales, badgets digitales y para los mejores "promedios" gorras y camperas al completar las etapas dos y tres, así como acceso a OCI labs por tres meses, como se muestra en la imagen a continuación:



Esta oferta incluye:

  • Exámenes Gratuitos
  • Cursos Online Gratuitos
  • Sesiones en vivo de Preguntas y Respuestas Gratuitas.

Para comenzar la carrera, deben activar la misma en la pagina Free Certification for OCI. Podemos completar las capacitaciones gratuitas de nivel inicial y tomar los exámenes asociados a los mismos (son gratuitos) y al completar uno de ellos estamos cumpliendo la etapa 1, lo cual nos da la posibilidad de acceder a un nuevo examen gratuito para iniciar la etapa siguiente!