Oracle
 sql >> Base de données >  >> RDS >> Oracle

ORA-20001 dans R12 Recueillir des statistiques de schéma sur 11g (FND_HISTOGRAM_COLS)

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