Skip to Main Content

Breadcrumb

Datapump und Domain Indizes

Beim Transport einer Oracle-Applikation mittels Datapump stellt sich manchmal heraus, dass die Datapump bei Domain Indizes leider (noch immer) nicht zuverlässig ist. Manche Indizes werden transportiert, andere nicht, bzw liefern beim Import diese Fehlermeldung:

16-NOV-20 12:31:58.164: ORA-39083: Object type INDEX:"USER1"."IDX_TABLE_TEXT" failed to create with error:
ORA-20000: Oracle Text error:
DRG-50857: oracle error in driimp.create_index
ORA-20000: Oracle Text error:
DRG-52204: error while registering index
DRG-10507: duplicate index name: IDX_TABLE_TEXT, owner: USER1
Failing sql is:
...

Analyse

Abhilfe schafft hier nur ein manueller Eingriff: Man muss die fehlenden oder unvollständigen Indizes manuell einrichten.

  • Am Quellsystem alle Domain Indizes auflisten
    SQL> SELECT owner, index_name, status, domidx_status, domidx_opstatus FROM dba_indexes WHERE owner != 'CTXSYS' AND index_type = 'DOMAIN' ORDER BY 1,2;
  • Das selbe am Zielsystem: Für alle Indizes, bei denen es jetzt Diskrepanzen gibt, muss man am Quellsystem die Create-Scripts generieren:
    SET HEAD OFF FEED OFF VERIFY OFF LINES 140 PAGES 0 TRIMSPOOL ON
    COL line_ FORM a140
    SPOOL cr_idx_USER1_IDX_TABLE_TEXT.sql
    SELECT ctx_report.create_index_script ('USER1.IDX_TABLE_TEXT') AS line_ FROM DUAL;
    SPOOL OFF
  • Das erzeugte Script führt man als Zieluser (in diesem Beispiel USER1) aus, also nicht als SYS!

Etwaige Fehler "Index aleady exists" kann man ignorieren. Sollte ein Index nicht jeden Status auf "VALID" haben, den Index löschen und Script noch einmal ausführen. Damit sollten die Domain Indizes erfolgreich transportiert worden sein.