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.
verwendenselect 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