Oracle
 sql >> Datenbank >  >> RDS >> Oracle

ORA-20001 in R12 Sammelt Schemastatistiken auf 11g (FND_HISTOGRAM_COLS)

Das Programm „Schemastatistik sammeln“ hat die folgenden Fehler in den Anforderungsprotokolldateien gemeldet:

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***

Dies ist aufgetreten, wenn in FND_HISTOGRAMS_COL

doppelte oder ungültige Spalten vorhanden sind

(1) Es gibt doppelte Zeilen in der Tabelle FND_HISTOGRAM_COLS für die Tabelle JE_BE_LINE_TYPE_MAP. Aufgrund dieses Problems versucht FND_STATS, Histogramminformationen mit dem falschen Befehl zu sammeln, und es schlägt mit ORA-20001-Fehlern fehl.

Die folgende SQL sollte eine Zeile zurückgeben, nicht zwei:

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

Da die Histogrammtabelle zwei Zeilen enthält, erstellt FND_STATS den folgenden Befehl, um Statistiken über die Tabelle „JE_BE_LINE_TYPE_MAP“ zu sammeln:

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');

Der obige Befehl funktioniert auf 9i- und 10G-Datenbanken, schlägt jedoch mit ora-20001-Fehlern auf 11G fehl.

(2) Die Spalte existiert nicht in der Tabelle, ist aber dennoch in der Tabelle FND_HISTOGRAMS_COL aufgeführt.

Sie können die folgende SQL zur Identifizierung verwenden. SQL fordert zur Eingabe des Tabellennamens auf, verwenden Sie den Tabellennamen aus den Fehlern. In den obigen Beispielen können Sie FII_FIN_ITEM_HIERARCHIES.

verwenden
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;

Finden Sie alle Duplikate und/oder veralteten Zeilen in FND_HISTOGRAM_COLS heraus und löschen Sie eine davon. Denken Sie daran, eine Sicherungskopie der Tabelle FND_HISTOGRAM_COLS zu erstellen, bevor Sie Daten löschen.
– Identifizieren Sie doppelte Zeilen

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

— Verwenden Sie die obigen Ergebnisse für die folgende SQL, um Duplikate zu löschen

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

— Verwenden Sie die folgende SQL, um veraltete Zeilen zu löschen

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
);

Liest auch
ORA-00900:Ungültige SQL-Anweisung
ORA-03113
ora-29283:Ungültiger Dateivorgang
ORA-29285:Dateischreibfehler
ORA-00054