ORA-00600 [kkdlReadOnDiskDefVal: bad defValLen] (Solución)
Algunas ocasiones los errores ORA-600 no son del todo útiles para resolver diagnosticar problemas, esta entrada tiene como objetivo presentar una explicación sobre el Bug 21866762, presentado en las versiones de Oracle anteriores a 12.2.
Identificación del problema
Este error principalmente aparece cuando re dimensionamos el tamaño o cantidad de caracteres que puede almacenar una columna de una tabla, de menor a mayor por medio de un DDL y la columna tiene valores por default mayores al tamaño de la columna, al hacer esto los meta-datos en el diccionario de datos, no son actualizados de la forma correcta, por lo que el diccionario registra valores distintos para el tamaño de la columna y valores por default, para constatar esto, el siguiente query nos permitirá obtener la columna con problemas:
select owner, object_name, object_type, object_id, c.name column_name, c.intcol#, lengthb(e.binarydefval) default_value_length, c.length column_length from sys.ecol$ e, sys.col$ c, dba_objects o where e.tabobj# = c.obj# and e.colnum = c.intcol# and bitand(c.property , 1073741824) = 1073741824 and lengthb(e.binarydefval) > c.length and o.object_id = e.tabobj#;
Lo que en caso de tener esta inconsistencia en diccionario, nos regresará un registro o más registros con distintos valores en las columnas default_value_length y column_length.
También si realizamos una consulta en los datos de esa tabla, el gestor retornara el error
ORA-00600: código de error interno, argumentos: [kkdlReadOnDiskDefVal: bad defValLen], [a], [b], [], [], [], [], [], [], [], [], []
Del cual su interpretación es la siguiente:
ORA-00600: Código de error genérico de BDD.
[a] : Número default de bytes configurado para esa columna
[b]: Longitud de la columna
kkdl : Búsqueda del diccionario compilación del kernel
Impacto y solución
Todas las tablas que tengan este problema en una o varias columnas, no permitirán realizar la consulta, modificación, actualización o inclusive borrado de la columna, por lo que todas las sesiones que intenten realizar estas acciones, serán terminadas de inmediato y será registrado el error en el alert<SID>.log.
Tampoco será posible exportar, respaldar o utilizar esa tabla por medio de datapump y RMAN.
De acuerdo a la nota técnica de MOS para el Bug 21866762, este problema es solucionado en el r2 de 12c o puede aplicarse un parche dependiendo de la plataforma exceptuando para windows, para el cual será necesario instalar el bundle patch
ความคิดเห็น