Program „Gather Schema Statistics“ ohlásil následující chyby v souborech protokolu požadavků:
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***
K tomu došlo, pokud jsou ve FND_HISTOGRAMS_COL
duplicitní nebo neplatné sloupce(1) V tabulce FND_HISTOGRAM_COLS pro tabulku JE_BE_LINE_TYPE_MAP jsou duplicitní řádky. Kvůli tomuto problému se FND_STATS pokouší získat informace o histogramu pomocí nesprávného příkazu a selže s chybami ORA-20001.
Následující SQL by měl vrátit jeden řádek, nikoli dva:
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
Vzhledem k tomu, že tabulka histogramů obsahuje dva řádky, FND_STATS vytvoří následující příkaz pro shromažďování statistik v tabulce „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');
Výše uvedený příkaz bude fungovat na databázích 9i a 10G, ale selže s chybami ora-20001 na 11G.
(2) Sloupec v tabulce neexistuje, ale je stále uveden v tabulce FND_HISTOGRAMS_COL.
K identifikaci můžete použít následující SQL. SQL vás vyzve k zadání názvu tabulky, použijte název tabulky z chyb. Ve výše uvedených příkladech můžete použít 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;
Najděte všechny duplikáty a/nebo zastaralé řádky ve FND_HISTOGRAM_COLS a smažte jeden z nich. Před smazáním dat si nezapomeňte vytvořit zálohu tabulky FND_HISTOGRAM_COLS.
— identifikujte duplicitní řádky
select table_name, column_name, count(*) from FND_HISTOGRAM_COLS group by table_name, column_name having count(*) > 1;
— Použijte výše uvedené výsledky pro následující SQL k odstranění duplikátů
delete from FND_HISTOGRAM_COLS where table_name = '&TABLE_NAME' and column_name = '&COLUMN_NAME' and rownum=1;
— K odstranění zastaralých řádků použijte následující SQL
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 );
Také čte
ORA-00900:Neplatný příkaz SQL
ORA-03113
ora-29283:neplatná operace se souborem
ORA-29285:chyba při zápisu souboru
ORA-00054