Le programme "Gather Schema Statistics" a signalé les erreurs suivantes dans les fichiers journaux des requêtes :
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***
Cela se produisait s'il y avait des colonnes en double ou non valides dans FND_HISTOGRAMS_COL
(1 ) Il existe des lignes en double sur la table FND_HISTOGRAM_COLS pour la table JE_BE_LINE_TYPE_MAP. En raison de ce problème, FND_STATS tente de collecter des informations d'histogramme à l'aide de la mauvaise commande et échoue avec les erreurs ORA-20001.
Le SQL suivant doit renvoyer une ligne, pas deux :
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
Puisqu'il y a deux lignes dans la table des histogrammes, FND_STATS crée la commande suivante pour rassembler les statistiques sur la table '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');
La commande ci-dessus fonctionnera sur les bases de données 9i et 10G, mais elle échouera avec des erreurs ora-20001 sur 11G.
(2) La colonne n'existe pas dans la table mais est toujours répertoriée dans la table FND_HISTOGRAMS_COL.
Vous pouvez utiliser le SQL suivant pour identifier. SQL vous demandera le nom de la table, utilisez le nom de la table à partir des erreurs. Dans les exemples ci-dessus, vous pouvez utiliser 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;
Trouvez tous les doublons et/ou lignes obsolètes dans FND_HISTOGRAM_COLS et supprimez-en un. N'oubliez pas d'effectuer une sauvegarde de la table FND_HISTOGRAM_COLS avant de supprimer des données.
— identifiez les lignes en double
select table_name, column_name, count(*) from FND_HISTOGRAM_COLS group by table_name, column_name having count(*) > 1;
— Utilisez les résultats ci-dessus sur le SQL suivant pour supprimer les doublons
delete from FND_HISTOGRAM_COLS where table_name = '&TABLE_NAME' and column_name = '&COLUMN_NAME' and rownum=1;
— Utilisez le SQL suivant pour supprimer les lignes obsolètes
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 );
Lit également
ORA-00900 :Instruction Sql invalide
ORA-03113
ora-29283 :opération de fichier invalide
ORA-29285 :erreur d'écriture de fichier
ORA-00054