sql >> Base de Datos >  >> RDS >> Oracle

ORA-20001 en R12 Recopilar estadísticas de esquema en 11g (FND_HISTOGRAM_COLS)

El programa "Gather Schema Statistics" informó los siguientes errores en los archivos de registro de solicitudes:

Error #1: ERROR: While GATHER_TABLE_STATS:
object_name=GL.JE_BE_LINE_TYPE_MAP***ORA-20001: invalid column name or duplicate columns/column groups/expressions in method_opt***
Error #2: ERROR: While GATHER_TABLE_STATS:
object_name=GL.JE_BE_LOGS***ORA-20001: invalid column name or duplicate columns/column groups/expressions in method_opt***
Error #3: ERROR: While GATHER_TABLE_STATS:
object_name=GL.JE_BE_VAT_REP_RULES***ORA-20001: invalid column name or duplicate columns/column groups/expressions in method_opt***

Error #4: ERROR: While GATHER_TABLE_STATS: object_name=FII.FII_FIN_ITEM_HIERARCHIES***ORA-20001: invalid column name or duplicate columns/column groups/expressions in method_opt***

Esto ocurría si había columnas duplicadas o no válidas en FND_HISTOGRAMS_COL

(1 ) Hay filas duplicadas en la tabla FND_HISTOGRAM_COLS para la tabla JE_BE_LINE_TYPE_MAP. Debido a este problema, FND_STATS intenta recopilar información del histograma con el comando incorrecto y falla con los errores ORA-20001.

El siguiente SQL debería devolver una fila, no dos:

SQL>select column_name, nvl(hsize,254) hsize
from FND_HISTOGRAM_COLS
where table_name = 'JE_BE_LINE_TYPE_MAP'
order by column_name;

COLUMN_NAME HSIZE
------------------------------ ----------
SOURCE 254
SOURCE 254

Dado que hay dos filas en la tabla de histogramas, FND_STATS crea el siguiente comando para recopilar estadísticas en la tabla 'JE_BE_LINE_TYPE_MAP':

dbms_Stats.gather_table_stats(OWNNAME => 'GL', TABNAME
=>'JE_BE_LINE_TYPE_MAP',METHOD_OPT=>'FOR ALL COLUMNS SIZE 1 FOR COLUMNS SOURCE SIZE 254 FOR
COLUMNS SOURCE SIZE 254');

El comando anterior funcionará en bases de datos 9i y 10G, pero fallará con errores ora-20001 en 11G.

(2) La columna no existe en la tabla pero aún aparece en la tabla FND_HISTOGRAMS_COL.

Puede usar el siguiente SQL para identificar. SQL solicitará el nombre de la tabla, use el nombre de la tabla de los errores. En los ejemplos anteriores, puede usar FII_FIN_ITEM_HIERARCHIES.

select hc.table_name, hc.column_name
from FND_HISTOGRAM_COLS hc , dba_tab_columns tc
where hc.table_name ='&TABLE_NAME'
and hc.table_name= tc.table_name (+)
and hc.column_name = tc.column_name (+)
and tc.column_name is null;

Descubra todas las filas duplicadas y/u obsoletas en FND_HISTOGRAM_COLS y elimine una de ellas. Recuerde realizar una copia de seguridad de la tabla FND_HISTOGRAM_COLS antes de eliminar cualquier dato.
— identifique las filas duplicadas

select table_name, column_name, count(*)
from FND_HISTOGRAM_COLS
group by table_name, column_name
having count(*) > 1;

— Use los resultados anteriores en el siguiente SQL para eliminar duplicados

delete from FND_HISTOGRAM_COLS
where table_name = '&TABLE_NAME'
and column_name = '&COLUMN_NAME'
and rownum=1;

— Utilice el siguiente SQL para eliminar filas obsoletas

delete from FND_HISTOGRAM_COLS
where (table_name, column_name) in
(
select hc.table_name, hc.column_name
from FND_HISTOGRAM_COLS hc , dba_tab_columns tc
where hc.table_name ='&TABLE_NAME'
and hc.table_name= tc.table_name (+)
and hc.column_name = tc.column_name (+)
and tc.column_name is null
);

También lee
ORA-00900:declaración Sql no válida
ORA-03113
ora-29283:operación de archivo no válida
ORA-29285:error de escritura de archivo
ORA-00054