lunes, 11 de junio de 2018

Oracle 18c - Tablas Externas "Inline"


Tablas Externas "Inline"

¿Que son las tablas externas?

Las tablas externas existen en Oracle desde la versión 9i, y permiten acceder a información contenida en archivos de texto como si fueran tablas almacenadas dentro de la base de datos.

Las mismas fueron adquiriendo nuevas características con el paso del tiempo. Inicialmente, eran de solo lectura, pero desde Oracle 10g se puede realizar modificaciones a las mismas.

En Oracle 12.2 es posible “particionar” el contenido de las tablas externas, con lo cual podemos ver varios archivos como si fueran una única tabla, y también es posible modificar algunos parámetros (como ser el directorio por defecto o los nombres de archivo) directamente al momento de escribir una consulta, sin necesidad de modificar la definición de la tabla en forma permanente.

¿Qué es lo nuevo en Tablas Externas en Oracle 18c?

Oracle 18c introduce la opción de Tablas Externas "INLINE", lo que traducido a conceptos básicos significa que la definición de la tabla externa se puede hacer directamente en la sentencia que la va a utilizar, sin necesidad de que la misma exista previamente.

SELECT Pais, Provincia, Sucursal, MontoMensual
FROM   EXTERNAL (
         (
           Pais    VARCHAR2(30),
           Provincia VARCHAR2(30),
           Sucursal  VARCHAR2(30),
           MontoMensual NUMBER(18,4)
         )
         TYPE oracle_loader
         DEFAULT DIRECTORY datos_externos
         ACCESS PARAMETERS (
           RECORDS DELIMITED BY NEWLINE
           BADFILE datos_externos
           LOGFILE datos_externos:'inline_ext_tab_%a_%p.log'
           DISCARDFILE datos_externos
           FIELDS CSV WITH EMBEDDED TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
           MISSING FIELD VALUES ARE NULL (
             Pais,
             Provincia,
             Sucursal,
             MontoMensual
           )
        )
        LOCATION ('ventas_argentina.txt', 'ventas_chile.txt', 'ventas_uruguay.txt')
        REJECT LIMIT UNLIMITED
      ) inline_ext_tab
ORDER BY Pais, Provincia, Sucursal;

Si bien el código no queda muy elegante, permite acceder a datos externos (que sean accesibles para la base de datos) sin necesidad de crear un objeto de tipo tabla, lo cual puede ser muy útil en bases de datos o esquemas de solo lectura.

La sintraxis completa puede ser consultada aqui y aqui.

viernes, 8 de junio de 2018

Oracle 18c - ALTER SYSTEM CANCEL


ALTER SYSTEM CANCEL

A partir de la version 18c, es posible cancelar una sentencia ejecutándose en la base de datos sin necesidad de terminar (matar) a la sesión que la está ejecutando.

Para ello, Oracle 18c introduce una nueva opción "CANCEL" en la sentencia "ALTER SYSTEM", la cual tiene la siguiente sintaxis:

ALTER SYSTEM CANCEL SQL ‘SID, SERIAL, [, @INST_ID] [, SQL_ID]’;

Los valores de "SID" y "SERIAL" son idénticos a los que se utilizan históricamente para terminar una sesión utilizando "ALTER SYSTEM KILL". La opción "CANCEL" nos permite indicar dos parámetros adicionales:


  • @INST_ID: Indica la instancia donde la sesión se está ejecutando, y va siempre precedida del símbolo @. Si no se especifica un valor, Oracle asume que la sentencia a cancelar se está ejecutando en la misma instancia donde se ejecuta la sentencia "ALTER SYSTEM CANCEL".
  • SQL_ID: Indica el identificador de la sentencia SQL que deseamos cancelar. Si no se especifica un valor, la sentencia que se esté ejecutando al momento de hacer el "ALTER SYSTEM CANCEL" será cancelada.

Para obtener los datos de las sesiones que están activas, se puede ejecutar la siguiente sentencia:

SELECT s.sid,
       s.serial#,
       s.sql_id,
       s.username,
       s.program,
       s.status
FROM   v$session s
WHERE s.status = 'ACTIVE';



En entornos RAC, se debe usar la vista global "gv$session" e incluir la columna "inst_id" en los resultados:

SELECT s.sid,
       s.serial#,
       s.inst_id,
       s.sql_id,
       s.username,
       s.program
FROM   gv$session s
WHERE s.status = 'ACTIVE';

Se puede consultar la documentación oficial aquí.

viernes, 13 de abril de 2018

Oracle Code 2018 Buenos Aires

La serie de Eventos "Oracle Code" llega en 2018 por primera vez a la Argentina. En esta ocasión, el evento será en Buenos Aires el próximo 15 de Mayo, en la Usina del Arte.



El evento se centrará en las últimas tecnologías, arquitecturas y prácticas, que incluyen:

  • Machine Learning & AI
  • Containers, Microservices & Serverless
  • Chatbots y dispositivos móviles
  • Blockchain
  • Databases & Big Data
  • DevOps, Tools & Low Code Platforms

Oracle Code incluye sesiones para desarrollar software en Java, Node.js y otros lenguajes utilizando Oracle Database, MySQL y NoSQL, así como otras tecnologías Open Source.

Tendremos experiencias únicas para que compartas tu conocimiento: Hands-On-Lab, Paneles de Expertos, Demos, Laboratorios de Nube, entre otros!


La registración ya se encuentra abierta aqui.