sql >> Database >  >> RDS >> Oracle

ORA-20001 in R12 Verzamel schemastatistieken over 11g(FND_HISTOGRAM_COLS)

Het programma "Verzamel schemastatistieken" rapporteerde de volgende fouten in logbestanden van verzoeken:

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***

Dit gebeurde als er dubbele of ongeldige kolommen zijn in FND_HISTOGRAMS_COL

(1) Er zijn dubbele rijen in de tabel FND_HISTOGRAM_COLS voor de tabel JE_BE_LINE_TYPE_MAP. Vanwege dit probleem probeert FND_STATS histograminformatie te verzamelen met de verkeerde opdracht en dit mislukt met ORA-20001-fouten.

De volgende SQL zou één rij moeten retourneren, niet twee:

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

Aangezien er twee rijen zijn in de histogramtabel, maakt FND_STATS de volgende opdracht om statistieken te verzamelen over tabel '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');

De bovenstaande opdracht werkt op 9i- en 10G-databases, maar zal mislukken met ora-20001-fouten op 11G.

(2) Kolom bestaat niet in de tabel, maar staat nog steeds in de tabel FND_HISTOGRAMS_COL.

U kunt de volgende SQL gebruiken om te identificeren. SQL vraagt ​​om de tabelnaam, gebruik de tabelnaam uit de fouten. In de bovenstaande voorbeelden kunt u FII_FIN_ITEM_HIERARCHIES gebruiken.

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;

Ontdek alle dubbele en/of verouderde rijen in FND_HISTOGRAM_COLS en verwijder er een. Vergeet niet om een ​​back-up te maken van de tabel FND_HISTOGRAM_COLS voordat u gegevens verwijdert.
— identificeer dubbele rijen

select table_name, column_name, count(*)
from FND_HISTOGRAM_COLS
group by table_name, column_name
having count(*) > 1;

— Gebruik de bovenstaande resultaten op de volgende SQL om duplicaten te verwijderen

delete from FND_HISTOGRAM_COLS
where table_name = '&TABLE_NAME'
and column_name = '&COLUMN_NAME'
and rownum=1;

— Gebruik de volgende SQL om verouderde rijen te verwijderen

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
);

Leest ook
ORA-00900:Ongeldige Sql-instructie
ORA-03113
ora-29283:ongeldige bestandsbewerking
ORA-29285:schrijffout bestand
ORA-00054


  1. NLS_LOWER() Functie in Oracle

  2. Toegang tot resultatensets vanuit opgeslagen procedures Transact-SQL SQL Server

  3. Hoe ClusterControl virtueel IP configureert en wat te verwachten tijdens failover

  4. Hoe TO_CHAR() werkt in MariaDB