sql >> データベース >  >> RDS >> Oracle

R12のORA-2000111g(FND_HISTOGRAM_COLS)のスキーマ統計を収集します

    「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

    >
    1. 不動産業者のデータモデル

    2. データベース開発自動化のためのDevOpsソリューション

    3. SQL Server(T-SQL)で2つのパーティションを1つにマージする

    4. MySQLデータベースに写真を保存する方法