05 noviembre 2016

¿Hay vida más allá de Oracle? Ecosistema de Themyscira: Amazon Web Servicies

Entre historia y mito

Themyscira (Θεμίσκυρα) fue una antigua ciudad griega, emplazada a corta distancia de la costa sur del mar Negro, se ha recuperado en la modernidad para los cómics de Wonder Woman (publicados por DC Comics), como capital de Isla Paraíso, lugar escondido y protegido por una barrera mística caótica que impide que el mundo del Hombre penetre en ellas sin permiso y reino de las Amazonas.


Amazon Web Services: AWS
Adentrémonos en esta isla paraíso que ha revolucionado la forma de desarrollar aplicaciones y diseñar arquitecturas. 



Empecemos describiendo cada uno de los servicios que Amazon nos ofrece:
Amazon API Gateway.

Amazon API Gateway es un servicio totalmente administrado que facilita a los desarrolladores la creación, la publicación, el mantenimiento, la monitorización y la protección de API a cualquier escala. Con tan solo unos clics en la consola de administración de AWS, puede crear un API que haga las veces de puerta delantera para que las aplicaciones obtengan acceso a datos, lógica de negocio o funcionalidades desde sus servicios de back-end, como cargas de trabajo ejecutadas en Amazon Elastic Compute Cloud (Amazon EC2), código ejecutado en AWS Lambda o cualquier aplicación web. 



Amazon API Gateway administra todas las tareas involucradas en la aceptación y el proceso de llamadas de API simultáneas, entre ellas:
  • La administración del tráfico
  • El control de autorizaciones y acceso
  • La monitorización
  • La administración de la versión de API. 

AWS Lambda functions


AWS Lambda es un servicio de computación sin servidores que ejecuta el código como respuesta a eventos y administra automáticamente los recursos de computación subyacentes. Puede usar AWS Lambda para ampliar otros productos de AWS con lógica personalizada o puede crear sus propios servicios back-end:
  • Administración de la seguridad. 
  • Administración del desempeño. 
  • El escalado de AWS. 

AWS Lambda puede ejecutar código automáticamente en respuesta a varios eventos, como la modificación de objetos en buckets de Amazon S3 o la actualización de tablas en Amazon DynamoDB.

Lambda ejecuta el código en una infraestructura informática de alta disponibilidad y ejecuta la administración integral de los recursos informáticos, incluido el mantenimiento del servidor y del sistema operativo, el aprovisionamiento de capacidad y el escalado automático, la implementación de parches de seguridad y código, así como la monitorización y los registros. Lo único que tiene que hacer es proporcionar el código.


Amazon S3 buckets.

Amazon S3 es almacenamiento para Internet. Es un servicio de almacenamiento sencillo que ofrece a los desarrolladores de software una infraestructura de almacenamiento de datos de gran escalabilidad, fiable y de baja latencia con costos muy bajos.

Una infraestructura de almacenamiento de datos escalable y sofisticada como la de Amazon no estaba al alcance de los desarrolladores pequeños. Amazon S3 permite a cualquier desarrollador aprovechar los beneficios propios de Amazon de escala masiva sin una inversión inicial y sin poner en riesgo el desempeño. Ahora los desarrolladores pueden innovar sabiendo que, sin importar el éxito que alcancen sus negocios, será asequible y sencillo garantizar que siempre se pueda obtener acceso a sus datos con rapidez, que siempre estén disponibles y que estén seguros.

El volumen total de datos y el número de objetos que puede almacenar son ilimitados. El tamaño de los objetos individuales de Amazon S3 puede variar entre un mínimo de 0 bytes y un máximo de 5 terabytes. El objeto más grande que se puede cargar en un solo PUT es de 5 gigabytes. Para objetos de más de 100 megabytes, los clientes deben plantearse el uso de la capacidad de carga multiparte.

Amazon S3 es un sencillo almacenamiento de objetos basado en claves. Cuando almacena datos, asigna una clave de objeto única que puede utilizarse posteriormente para recuperar los datos. Las claves pueden ser cualquier cadena, y pueden establecerse de forma que imiten atributos jerárquicos.

Amazon S3 ofrece una sencilla interfaz de servicios web REST basada en estándares, que está diseñada para funcionar con cualquier conjunto de herramientas de desarrollo basado en Internet. Las operaciones se han hecho sencillas de forma intencionada para facilitar la tarea de adición de nuevos protocolos de distribución y capas funcionales.

Amazon DynamoDB non-relational database
DynamoDB permite el almacenamiento, la realización de consultas y la actualización de documentos. Mediante el uso de AWS SDK, puede escribir aplicaciones que almacenen los documentos JSON directamente en tablas de Amazon DynamoDB. Esta función reduce la cantidad de código nuevo que ha de escribirse para insertar, actualizar y recuperar documentos JSON y realizar operaciones potentes en la base de datos, como consultas JSON anidadas, que pueden efectuarse con tan solo unas líneas de código.

Amazon DynamoDB soporta estructuras de datos de valor de clave. Cada elemento (fila) constituye una pareja de valor de clave, en la que la clave principal es el único atributo necesario para los elementos de la tabla e identifica a cada uno de ellos. DynamoDB no contiene esquemas. Cada elemento puede poseer cualquier número de atributos (columnas). Además de consultar la clave principal, puede consultar atributos clave no principales utilizando los índices secundarios globales e índices secundarios locales.



Amazon DynamoDB ofrece un desempeño y escalado del almacenamiento perfectos mediante el API y la consola de administración de AWS. Prácticamente no existen límites en cuanto al rendimiento o almacenamiento que se pueden solicitar en un momento determinado.

Amazon DynamoDB ofrece alta disponibilidad con replicación de datos automática y sincrónica en tres instalaciones incluidas dentro de una misma región. De este modo, protege sus datos ante posibles errores en máquinas individuales o en las instalaciones.

Para los que nos gusta andar husmeando con tecnología hay una versión descargable  de Amazon DynamoDB aquí.

Amazon DynamoDB se integra con AWS Lambda para proporcionar activadores. Mediante los activadores, puede ejecutar automáticamente una función personalizada que detecte los cambios a nivel de elemento en una tabla de DynamoDB. Son nuetros viejos trigger de bases de datos relacionales

Existe una consola de administración de AWS para DynamoDB le permite crear, actualizar, eliminar y consultar tablas, ajustar el desempeño y definir alarmas con solo unos clics del mouse. Además, DynamoDB soporta una amplia funcionalidad con un número reducido de API. 
Amazon Cognito

Amazon Cognito le permite agregar el registro y el inicio de sesión de forma sencilla a sus aplicaciones web y móviles. Con Amazon Cognito, también tiene las opciones de autenticar a los usuarios a través de proveedores de identidad social, como Facebook, Twitter o Amazon, con soluciones de identidad SAML o a través de su propio sistema de identidad (IBM Tivoli, Oracle Identity Manager, ...). Además, Amazon Cognito le permite guardar datos de forma local en los dispositivos de los usuarios, lo que permite que sus aplicaciones funcionen incluso cuando los dispositivos están fuera de línea. A continuación, puede sincronizar los datos entre los distintos dispositivos de los usuarios para que disfruten de una experiencia uniforme con las aplicaciones independientemente del dispositivo que utilicen.

04 noviembre 2016

A DROP of humour: Clouds elsewhere

 


¿Y tú de quien eres?: SQL para mostrar consultas jerárquicas en Oracle



En algunas ocasiones, es necesario recuperar los datos de una tabla cuya relación es recursiva, para mostrar pertenencias y/o jerarquías (por ejemplo litados de reportes de organizaciones, desglosadas por departamentos, direcciones, etc). Tales jerarquías generalmente son representadas a través de estructuras tipo árbol, en donde la raíz (o nodo principal) tiene ramas (nodos descendientes) y cada una de estas ramas puede a su vez generar más ramas, hasta llegar a un punto final en donde no hay mas divisiones. Esos nodos terminales son pues llamados también hojas.



Para el ejemplo, supongamos que se tiene una tabla donde se tiene almacenados los datos familiares de personas en una tabla como la siguiente:

idPersona
Nombres
hijoDe
1
Juan Carlos

2
Luis
5
3
Pedro
5
4
Jaime Alberto
9
5
Olga María
1
6
Marta Edith
8
7
Lucía
9
8
Nelly
1
9
Felipe
8
10
Edgar Nelson
8

La anterior tabla, almacena los datos acerca de los padres de cada persona. De esta manera, es posible construir un árbol como el siguiente:


Desde la versión 9i, el lenguaje sql de oracle provee la posibilidad de recuperar los datos de una tabla, vista, o tabla externa, simulando el recorrido de un árbol, el cual puede hacerse comenzando por la raía hasta llegar a todas las hojas, o desde las hojas hasta llegar a la raíz.

Por lo tanto, La consulta:

SELECT nombres, LEVEL
FROM persona
START WITH nombres='Juan Carlos'
CONNECT BY PRIOR idPersona = hijode;

Retornará el nombre de todas las personas y el id del respectivo padre; empezando por el nombre Juan Carlos. La Pseudocoluma LEVEL indica el nivel en el que se encuentra el registro, tras haber construido el arbol. START WITH indica el registro raiz; es decir, donde empieza el arbol. CONNECT BY PRIOR indica las columnas en las cuales existe la relación padre-hijo

Salida:


Si desea recuperar la descendencia a partir de “Felipe”, la consulta sería:



Obsérvese que en la anterior consulta el valor de LEVEL para “Felipe” es igual a 1, ya en el árbol que construye esta consulta, el nodo “Felipe” se encuentra en el primer nivel.

Si por el contrario, se desean conocer los padres de Felipe, la consulta sería:




Obsérvese en el anterior ejemplo, que el recorrido se hizo de abajo hacia arriba (en el árbol). El orden de las columnas en la clausula CONNECT BY PRIOR, especifica el orden del recorrido. En el primer ejemplo se tenía:CONNECT BY PRIOR idPersona=hijoDe y se tuvo el recorrido del árbol de arriba a abajo. En el ultimo ejemplo se tuvo CONNECT BY PRIOR hijoDe =idPersona, y el recorrido fue de abajo hacia arriba.

De igual manera, desde la versión 9i, fue incluida la función SYS_CONNECT_BY_PATH(), que concatena los valores de las ramas del árbol en el recorrido.

El siguiente es un ejemplo de su utilización:




Es muy fácil entonces hacer consultas jerárquicas con la utilización de la cláusula STARA WITH y CONNECT BY y la función SYS_CONNECT_BY_PATH.

NBA y COALESCE


La función COALESCE recibe varios argumentos y retorna la primer expresión distinta de nulo de la lista de dichos argumentos.


  • Sintaxis


COALESCE ( expression [ ,...n ] )


  • Argumentos


expression: Puede ser una expresión de cualquier tipo.


  • Tipos de valor devueltos

Devuelve el tipo de datos de expression con la precedencia de tipo de datos más alta.
Nota: Si todos los argumentos son NULL, COALESCE devuelve NULL.
Al menos uno de los valores NULL debe ser NULL con tipo.

COALESCE(expression1,...n) es equivalente a esta función CASE:

CASE
WHEN (expression1 IS NOT NULL) THEN expression1
...
WHEN (expressionN IS NOT NULL) THEN expressionN
ELSE NULL
END

ISNULL y COALESCE, aunque son equivalentes, pueden comportarse de forma diferente.
Una expresión que contenga ISNULL con parámetros diferentes de NULL se considera que es NOT NULL, mientras que las expresiones que contienen COALESCE con parámetros que son diferentes de NULL se consideran NULL.

En este ejemplo, la tabla NBA_TEAM_TICKETS_SOLDS incluye tres columnas con información acerca del precio de entradas vendidas por cada equipo de la NBA.
Para determinar el importe total por cada equipo, utilice la función COALESCE para obtener sólo los valores no NULL encontrados en hourly_wage, price y commission.



CREATE TABLE NBA_TEAM_TICKETS_SOLDS

(

party_day_wage number NULL,

price number NULL,

commission number NULL,

num_sales int NULL 

);

/

INSERT NBA_TEAM_TICKETS_SOLDS VALUES(10.00, NULL, NULL, NULL);

INSERT NBA_TEAM_TICKETS_SOLDS VALUES(20.00, NULL, NULL, NULL);

INSERT NBA_TEAM_TICKETS_SOLDS VALUES(30.00, NULL, NULL, NULL);

INSERT NBA_TEAM_TICKETS_SOLDS VALUES(40.00, NULL, NULL, NULL);

INSERT NBA_TEAM_TICKETS_SOLDS VALUES(NULL, 10000.00, NULL, NULL);

INSERT NBA_TEAM_TICKETS_SOLDS VALUES(NULL, 20000.00, NULL, NULL);

INSERT NBA_TEAM_TICKETS_SOLDS VALUES(NULL, 30000.00, NULL, NULL);

INSERT NBA_TEAM_TICKETS_SOLDS VALUES(NULL, 40000.00, NULL, NULL);

INSERT NBA_TEAM_TICKETS_SOLDS VALUES(NULL, NULL, 15000, 3);

INSERT NBA_TEAM_TICKETS_SOLDS VALUES(NULL, NULL, 25000, 2);

INSERT NBA_TEAM_TICKETS_SOLDS VALUES(NULL, NULL, 20000, 6);

INSERT NBA_TEAM_TICKETS_SOLDS VALUES(NULL, NULL, 14000, 4);

/

SELECT CAST(COALESCE(party_day_wage * 40 * 52, price, commission * num_sales) AS money) AS 'Total sales' FROM NBA_TEAM_TICKETS_SOLDS;
/

Total Sales

------------

20800.0000

41600.0000

62400.0000

83200.0000

10000.0000

20000.0000

30000.0000

40000.0000

45000.0000

50000.0000

120000.0000


¿Certificarte en Oracle? Aquí tienes su portfolio de certificaciones en Oracle

Con mi reciente estado laboral, he estado mirando varias certificaciones en bases de datos y como no, Oracle y MySQL son mis favoritas.
Aquí os dejo todas las que hay y señaladas en amarillo, las que planeo realizar, comenzando por SQL y PLSQL 

·         Database Application Development
o    Oracle Application Express (Oracle APEX)

o    SQL y PL/SQL

·         MySQL
o    MySQL Database Administration

o    MySQL Developer

·         Oracle Database
o    Database Cloud

o    Oracle Database 11g

o    Oracle Database 12c

o    Oracle Spatial 11g

28 octubre 2016

¿Hay vida más allá de Oracle? CriOS (Custom Real-time intelligent Operating System)?????



Hoy curioseando el publico que ve mi blog me he dado cuenta de una visita que ha usado el navegador CriOS. He investigado un poco y esta es la información que he sacado.

¿Qué es CriOS?
El sistem operativo de tu dispositivo móvil (tablet, smartphone) para identificar tu navegador usa una propiedad conocida como:
  • User Agent Strings (UA)
Esta propiedad ayuda a identificar qué navegador se está usando, qué versión, y de qué sistema operativo. Cuando las API de detección de características no están disponibles, se utiliza la UA para personalizar el comportamiento o el contenido de las versiones específicas del navegador.

Al igual que todos los demás navegadores, Chrome para iOS envía esta información en el encabezado HTTP User-Agent cada vez que se hace una petición a cualquier sitio. También está disponible en el cliente a través de JavaScript utilizando la llamada navigator.userAgent .:

De acuerdo con los desarrolladores de Google, la cadena de UA se ve así:

Mozilla/5.0 (iPhone; U; CPU iPhone OS 5_1_1 like Mac OS X; en) AppleWebKit/534.46.0 (KHTML, like Gecko) CriOS/19.0.1084.60 Mobile/9B206 Safari/7534.48.3

Así es como se diferencia de iOS Safari en el que dice CRIOS lugar de la versión. Así que esto:
  • if(navigator.userAgent.match('CriOS')
Debería de funcionar.

Pero...

Mirando esta página  encuentro:

  • Es la capa del sistema operativo (SO) es un diseño propio y personalizado basado en el sistema abierto Linux  con versión del kernel 2.6.x. Esta capa del sistema operativo está diseñado para proteger el sistema contra las amenazas basadas en software, proteger la integridad del kernel del sistema operativo y lograr el mejor rendimiento.
  • Se puede lograr un alto rendimiento de hardware de consumo mediante la eliminación de cuellos de botella estándar núcleo de Linux en recibir y enviar paquetes de red en tiempo real.
  • Esta capa del sistema operativo tiene varias tecnologías clave. Ellos son la tecnología de red directa de la caché de acceso (DNCA), Mac nivel de paquete Interceptación técnica, la tecnología de procesamiento paralelo de varios núcleos, Traffic Shaping algoritmo del motor (TSAE), y el motor de clasificación de paquetes IP. Pueden alcanzar plenamente un alto rendimiento del sistema, optimizar el uso de la CPU y maximizar el procesamiento de paquetes rápido en nuestro dispositivo de hardware de los productos básicos. Este sistema operativo está integrado en dispositivos de hardware que es un chasis montado en rack PC-industrial graduada estándar abierto. Es 100% seguro con OS endurecen y sin ningún coste oculto o de alta conjunto de habilidades de las necesidades de instalación de base de datos o software. Con el fin de mantener un alto rendimiento robusto para el despliegue de nuestros productos en entornos de red de transporte, todos los componentes de hardware como CPU, placas electrónicas, y la fuente de alimentación totalmente se examinarán y bien probados en el laboratorio de pruebas de la célula y otras organizaciones de prueba estándar.

No siempre se encuentra toda la verdad en las primeras búsquedas de internet.

24 octubre 2016

¿Hay vida más allá de Oracle? Tutorial de JSON subido a Slideshare


He publicado en SlideShare un pequeño tutorial de JSON para recién iniciados como Yo, encuentralo en este lugar. .


Detección de licencias Oracle Database Server




Nota:

La concesión de licencias de Oracle es un asunto complicado. Las notas aquí son sólo una guía. Siempre se debe hablar de su licencia con Oracle License Management Services.

Esta pequeña entrada del blog mostrará algunos comandos SQL que pueden ser ejecutados para mostrar que componentes de tu base de datos han de ser licenciados con Oracle Inc.

Poniéndonos en situación
Imaginemos que tenemos una auditoria de licencias de Oracle en enero, por lo que habrá que echar un vistazo a todo lo que tenemos para comprobar qué características que estamos utilizando.

Mi primer consejo seria mantener un repositorio de información, con toda esta información inventariada, a modo de pequeña CMDB, como aconseja las buenas practicas de ITIL

El lado de la base de datos es bastante fácil porque tenemos licencias FTE para Enterprise Edition, Diagnostics y Tuning Pack y Partitioning.



  • Numero de usuarios, CPU/Procesadores:
select * from v$license;


  • ¿Que versión tengo instalada?:
select banner from v$version where BANNER like '%Edition%';

¿Está instalada la opción de particonamiento de tablas y tablespaces?:
select decode(count(*), 0, 'No', 'Yes') Partitioning
from ( select 1 
       from dba_part_tables
       where owner not in ('SYSMAN', 'SH', 'SYS', 'SYSTEM')
         and rownum = 1 )
/
  • ¿Está Oracle Spatial instalado?:

select decode(count(*), 0, 'No', 'Yes') Spatial
from ( select 1
       from all_sdo_geom_metadata 
       where rownum = 1 )
/
  • ¿Está Oracle RAC instalado?:
select decode(count(*), 0, 'No', 'Yes') RAC
from ( select 1 
       from v$active_instances 
       where rownum = 1 );
/
  • ¿Que características están siendo usadas y cuáles no?: 
(solo para versiones Oracle  9i)

Col name  format a50 heading "Option"
Col value format a5  heading "?"      justify center wrap
Break on value dup skip 1
Spool option
Select parameter name, value
from v$option 
order by 2 desc, 1
/
  • ¿Que características están siendo usadas y cuáles no?: 
(solo para versiones Oracle 10g)

Set feedback off
Set linesize 122
Col name             format a45     heading "Feature"
Col version          format a10     heading "Version"
Col detected_usages  format 999,990 heading "Detected|usages"
Col currently_used   format a06     heading "Curr.|used?"
Col first_usage_date format a10     heading "First use"
Col last_usage_date  format a10     heading "Last use"
Col nop noprint
Break on nop skip 1 on name
Select decode(detected_usages,0,2,1) nop,
       name, version, detected_usages, currently_used,
       to_char(first_usage_date,'DD/MM/YYYY') first_usage_date, 
       to_char(last_usage_date,'DD/MM/YYYY') last_usage_date
from dba_feature_usage_statistics

order by nop, 1, 2
/
  • ¿Que características están siendo usadas y cuáles no?: 
(para versiones Oracle 11g en adelante)
En realidad bastante simple para ver qué características están siendo utilizados en la base de datos. Oracle proporciona la vista DBA_FEATURE_USAGE_STATISTICS para ese fin. SQL> 
SQL> DESC dba_feature_usage_statistics
 Name                                                  Null?    Type
 ----------------------------------------------------- -------- ------------
 DBID                                                  NOT NULL NUMBER
 NAME                                                  NOT NULL VARCHAR2(64)
 VERSION                                               NOT NULL VARCHAR2(17)
 DETECTED_USAGES                                       NOT NULL NUMBER
 TOTAL_SAMPLES                                         NOT NULL NUMBER
 CURRENTLY_USED                                                 VARCHAR2(5)
 FIRST_USAGE_DATE                                               DATE
 LAST_USAGE_DATE                                                DATE
 AUX_COUNT                                                      NUMBER
 FEATURE_INFO                                                   CLOB
 LAST_SAMPLE_DATE                                               DATE
 LAST_SAMPLE_PERIOD                                             NUMBER
 SAMPLE_INTERVAL                                                NUMBER
 DESCRIPTION                                                    VARCHAR2(128)

La salida se muestra corresponde a una base de datos Oracle 12c de prueba.
COLUMN name  FORMAT A60
COLUMN detected_usages FORMAT 999999999999

SELECT u1.name,
       u1.detected_usages,
       u1.currently_used,
       u1.version
FROM   dba_feature_usage_statistics u1
WHERE  u1.version = (SELECT MAX(u2.version)
                     FROM   dba_feature_usage_statistics u2
                     WHERE  u2.name = u1.name)
AND    u1.detected_usages > 0
AND    u1.dbid = (SELECT dbid FROM v$database)
ORDER BY name;

NAME                                                         DETECTED_USAGES CURRE VERSION
------------------------------------------------------------ --------------- ----- -----------------
Adaptive Plans                                                             1 TRUE  12.1.0.2.0
Automatic Maintenance - Optimizer Statistics Gathering                     1 TRUE  12.1.0.2.0
Automatic Maintenance - SQL Tuning Advisor                                 1 TRUE  12.1.0.2.0
Automatic Maintenance - Space Advisor                                      1 TRUE  12.1.0.2.0
Automatic Reoptimization                                                   1 TRUE  12.1.0.2.0
Automatic SGA Tuning                                                       1 TRUE  12.1.0.2.0
Automatic SQL Execution Memory                                             1 TRUE  12.1.0.2.0
Automatic Segment Space Management (system)                                1 TRUE  12.1.0.2.0
Automatic Undo Management                                                  1 TRUE  12.1.0.2.0
Backup Rollforward                                                         1 TRUE  12.1.0.2.0
Backup and Restore of plugged database                                     1 TRUE  12.1.0.2.0

NAME                                                         DETECTED_USAGES CURRE VERSION
------------------------------------------------------------ --------------- ----- -----------------
Character Set                                                              1 TRUE  12.1.0.2.0
Deferred Segment Creation                                                  1 TRUE  12.1.0.2.0
Flashback Database                                                         1 TRUE  12.1.0.2.0
Job Scheduler                                                              1 TRUE  12.1.0.2.0
LOB                                                                        1 TRUE  12.1.0.2.0
Locally Managed Tablespaces (system)                                       1 TRUE  12.1.0.2.0
Locally Managed Tablespaces (user)                                         1 TRUE  12.1.0.2.0
Logfile Multiplexing                                                       1 TRUE  12.1.0.2.0
Oracle Java Virtual Machine (system)                                       1 TRUE  12.1.0.2.0
Oracle Managed Files                                                       1 TRUE  12.1.0.2.0
Oracle Multitenant                                                         2 TRUE  12.1.0.1.0

NAME                                                         DETECTED_USAGES CURRE VERSION
------------------------------------------------------------ --------------- ----- -----------------
Oracle Pluggable Databases                                                 1 TRUE  12.1.0.2.0
Parallel SQL Query Execution                                               1 TRUE  12.1.0.2.0
Partitioning (system)                                                      1 TRUE  12.1.0.2.0
Recovery Area                                                              1 TRUE  12.1.0.2.0
Result Cache                                                               1 TRUE  12.1.0.2.0
SQL Plan Directive                                                         1 TRUE  12.1.0.2.0
SecureFiles (system)                                                       1 TRUE  12.1.0.2.0
SecureFiles (user)                                                         1 TRUE  12.1.0.2.0
Server Parameter File                                                      1 TRUE  12.1.0.2.0
Traditional Audit                                                          1 TRUE  12.1.0.2.0
Unified Audit                                                              1 TRUE  12.1.0.2.0

33 rows selected.

Por defecto esta vista se actualiza una vez por semana, pero se puede realizar una tarea para tenerla mas actualizada.