「GatherSchemaStatistics」プログラムは、要求ログファイルで次のエラーを報告しました:
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***
これは、FND_HISTOGRAMS_COL
に重複または無効な列がある場合に発生しました。(1)JE_BE_LINE_TYPE_MAPテーブルのFND_HISTOGRAM_COLSテーブルに重複する行があります。この問題が原因で、FND_STATSは間違ったコマンドを使用してヒストグラム情報を収集しようとし、ORA-20001エラーで失敗します。
次のSQLは、2行ではなく1行を返す必要があります。
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
ヒストグラムテーブルには2つの行があるため、FND_STATSは次のコマンドを作成して、テーブル「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');
上記のコマンドは9iおよび10Gデータベースでは機能しますが、11Gではora-20001エラーで失敗します。
(2)列はテーブルに存在しませんが、FND_HISTOGRAMS_COLテーブルに引き続きリストされています。
次のSQLを使用して識別できます。 SQLはテーブル名の入力を求めます。エラーからテーブル名を使用してください。上記の例では、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;
FND_HISTOGRAM_COLS内のすべての重複および/または廃止された行を見つけて、それらの1つを削除します。データを削除する前に、FND_HISTOGRAM_COLSテーブルのバックアップを取ることを忘れないでください。
—重複する行を特定します
select table_name, column_name, count(*) from FND_HISTOGRAM_COLS group by table_name, column_name having count(*) > 1;
—次のSQLで上記の結果を使用して、重複を削除します
delete from FND_HISTOGRAM_COLS where table_name = '&TABLE_NAME' and column_name = '&COLUMN_NAME' and rownum=1;
—次の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 );
また読む
ORA-00900:無効なSQLステートメント
ORA-03113
ora-29283:無効なファイル操作
ORA-29285:ファイル書き込みエラー
ORA-00054