Oracle
 sql >> Baza danych >  >> RDS >> Oracle

ORA-20001 w R12 Zbierz statystyki schematu dotyczące 11g (FND_HISTOGRAM_COLS)

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Grupuj według wartości, które są w kolejności

  2. Czy można tworzyć typy obiektów Oracle Database w PL/SQL?

  3. TO_YMINTERVAL() Funkcja w Oracle

  4. Łączenie się z bazą danych Oracle za pomocą SQLAlchemy

  5. Przekazywanie tablicy do procedury Oracle z c#