O programa “Gather Schema Statistics” relatou os seguintes erros nos arquivos de log de solicitação:
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***
Isso ocorreu se houver colunas duplicadas ou inválidas em FND_HISTOGRAMS_COL
(1 ) Existem linhas duplicadas na tabela FND_HISTOGRAM_COLS para a tabela JE_BE_LINE_TYPE_MAP. Devido a esse problema, FND_STATS tenta coletar informações de histograma usando o comando errado e falha com erros ORA-20001.
O SQL a seguir deve retornar uma linha, não duas:
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
Como há duas linhas na tabela de histogramas, FND_STATS cria o seguinte comando para coletar estatísticas na tabela ‘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');
O comando acima funcionará em bancos de dados 9i e 10G, mas falhará com erros ora-20001 em 11G.
(2) A coluna não existe na tabela, mas ainda está listada na tabela FND_HISTOGRAMS_COL.
Você pode usar o seguinte SQL para identificar. O SQL solicitará o nome da tabela, use o nome da tabela dos erros. Nos exemplos acima, você pode usar 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;
Descubra todas as linhas duplicadas e/ou obsoletas em FND_HISTOGRAM_COLS e exclua uma delas. Lembre-se de fazer um backup da tabela FND_HISTOGRAM_COLS antes de excluir quaisquer dados.
— identifique linhas duplicadas
select table_name, column_name, count(*) from FND_HISTOGRAM_COLS group by table_name, column_name having count(*) > 1;
— Use os resultados acima no SQL a seguir para excluir duplicatas
delete from FND_HISTOGRAM_COLS where table_name = '&TABLE_NAME' and column_name = '&COLUMN_NAME' and rownum=1;
— Use o seguinte SQL para excluir linhas obsoletas
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 );
Também lê
ORA-00900:Instrução SQL inválida
ORA-03113
ora-29283:operação de arquivo inválida
ORA-29285:erro de gravação de arquivo
ORA-00054