Archivo de la etiqueta: Oracle 12c

ORA-12008 y ORA-904 al refrescar Vistas Materializadas

Hace unos días saltó un error al confirmar una inserción en Oracle. El error se producía a la hora de refrescar una vista materializada en modo «fast refresh on commit». Pero la descripción del error no ofrecía mucha información:

ORA-12008: error in materialized view refresh path
ORA-00904: "<column_name>": invalid identifier

En el error 904 nos informaba de una de las columnas de la tabla sobre la que está construida la vista materializada. Pero esta columna no tenía ninguna característica particular: es de tipo varchar2 (no de un tipo de datos complejo), no está indexada, no tiene referencias externas con otras tablas; además, en la sentencia INSERT que daba el error venía informada con datos admisibles. ¿Qué puede estar ocurriendo?

Después de lanzar varios refrescos de la vista materializada, cambiando distintas opciones sin que nos dieran error, y comprobando que las inserciones seguían fallando: ¿por dónde seguimos investigando?

Comenzamos a realizar búsquedas en MOS con los códigos de error, acotando por versión de la base de datos, y dimos con la nota ID 1331516.1 «Errors ORA-12008 And ORA-904 Invalid Identifier While Fast Refreshing».

La nota reconoce este comportamiento como un bug de las versiones 11.2 que se corrigen en la 12.1. Bueno, esto ya es algo. El problema ahora es que nuestra base de datos ya está en versión 12. En teoría, el bug estaba corregido.

De todas formas, revisamos la nota completa y nos llamó la atención el parche temporal que proponían:

alter system set "_replace_virtual_columns" = FALSE;

¿Hay que desactivar el reemplazo de columnas virtuales? Nosotros no utilizamos columnas virtuales en la tabla sobre la que se construye la vista materializada. ¿O si? Vamos a averiguarlo:

select * from user_tab_cols where table_name = '<table_name>' and virtual_column = 'YES';

Pues resulta que si tenemos columnas virtuales. Y, ¿de dónde han salido? El nombre de las columnas es un nombre generado por el sistema. Así que alguna funcionalidad interna de Oracle está creando columnas virtuales en la tabla. Y, tal vez, estén interfiriendo en el refresco de las vistas materializadas. Para salir de dudas, buscamos la forma de eliminar las columnas virtuales y damos con el post de Chris Saxon sobre el misterio de las columnas virtuales:

https://blogs.oracle.com/sql/ora-54033-and-the-hidden-virtual-column-mystery

Parece ser que las estadísticas extendidas de Oracle han decidido crear estas columnas virtuales para mejorar sus reportes de rendimiento. Y una de ellas contiene la columna que se refería en el error ORA-00904. Como no creemos en las casualidades, y esto ya es mucha casualidad, decidimos eliminar la columna virtual sospechosa. En este mismo artículo explican cómo hacerlo:

exec dbms_stats.drop_extended_stats(user, '<table_name>', '(<x, y>)');

Y, efectivamente, el refresco de la vista materializada ha vuelto a funcionar.

Oracle’s Machine Learning and Advanced Analytics 12.2 and Oracle Data Miner 4.2 New Features | Oracle Data Mining (ODM) Blog

Presentación de las nuevas funcionalidades incorporadas en Oracle 12.2 para trabajar con Machine Learning y análisis de datos a través de Oracle’s Machine Learning and Advanced Analytics 12.2 and Oracle Data Miner 4.2 New Features | Oracle Data Mining (ODM) Blog

12 Things Developers Will Love About Oracle Database 12c Release 2 (All Things SQL)

La nueva versión de Oracle 12cR2 (o 12.2) ya se encuentra disponible en Oracle Cloud. En el siguiente artículo se revisan las principales novedades: 12 Things Developers Will Love About Oracle Database 12c Release 2 (All Things SQL)

  • Easier, Better, Faster, Stronger JSON
    • JSON from SQL
    • JSON in PL/SQL
  • Looooooooooong Names
  • Robust Code using Constants for Data Type Lengths
  • Listagg Improved On Overflow
  • Lightning Fast SQL with Real Time Materialized Views
  • Fast Estimates with Approximate Query Enhancements
  • Verify Data Type Conversions
  • Handle Casting Conversion Errors
  • Single Statement Table Partitioning
  • Automatic List Partitioning
  • Mark Old Code as «Not for Use»
  • PL/SQL Code Coverage

Oracle 12.2 Cool New Features

En el último Oracle Open World se ha anunciado el lanzamiento de Oracle 12cR2 (o 12.2). En el siguiente artículo se repasan algunas de las novedades más importantes: Oracle 12.2 Cool New Features

  • Partitioning
    • Alter table to partitioned table
    • Create table for exchange
  • In-Memory
    • Standby Database: In-Memory option
    • Dynamic resizing
    • Fast start
  • Security
    • Online encryption and re-key operations
    • Internal tablespace encryption
    • DB vault simulation
  • Dictionary
    • Long identifiers
  • PDB
    • Resource management
    • Hot clone
    • Local undo
    • Flashback
    • Characterset
  • Others
    • Index Monitoring
    • Materialized Views – real time refresh
    • External Tables – partitions