Program „Gather Schema Statistics” zgłosił następujące błędy w plikach dziennika żądań:
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***
Stało się tak, jeśli istnieją zduplikowane lub nieprawidłowe kolumny w FND_HISTOGRAMS_COL
(1 ) Istnieją zduplikowane wiersze w tabeli FND_HISTOGRAM_COLS dla tabeli JE_BE_LINE_TYPE_MAP. Z powodu tego problemu FND_STATS próbuje zebrać informacje o histogramie za pomocą niewłaściwego polecenia i kończy się niepowodzeniem z błędami ORA-20001.
Poniższy kod SQL powinien zwrócić jeden wiersz, a nie dwa:
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
Ponieważ w tabeli histogramów są dwa wiersze, FND_STATS tworzy następujące polecenie w celu zebrania statystyk w tabeli „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');
Powyższe polecenie będzie działać na bazach danych 9i i 10G, ale zawiedzie z błędami ora-20001 na 11G.
(2) Kolumna nie istnieje w tabeli, ale nadal jest wymieniona w tabeli FND_HISTOGRAMS_COL.
Do identyfikacji można użyć następującego kodu SQL. SQL zapyta o nazwę tabeli, użyj nazwy tabeli z błędów. W powyższych przykładach możesz użyć 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;
Znajdź wszystkie duplikaty i/lub przestarzałe wiersze w FND_HISTOGRAM_COLS i usuń jeden z nich. Pamiętaj, aby przed usunięciem jakichkolwiek danych wykonać kopię zapasową tabeli FND_HISTOGRAM_COLS.
— zidentyfikuj zduplikowane wiersze
select table_name, column_name, count(*) from FND_HISTOGRAM_COLS group by table_name, column_name having count(*) > 1;
— Użyj powyższych wyników dla następującego kodu SQL, aby usunąć duplikaty
delete from FND_HISTOGRAM_COLS where table_name = '&TABLE_NAME' and column_name = '&COLUMN_NAME' and rownum=1;
— Użyj następującego kodu SQL, aby usunąć przestarzałe wiersze
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 );
Też czyta
ORA-00900:Nieprawidłowa instrukcja Sql
ORA-03113
ora-29283:nieprawidłowa operacja na pliku
ORA-29285:błąd zapisu do pliku
ORA-00054