Problembeschreibung
Beim SELECT auf die UNIFIED_AUDIT_TRAIL bekommt man den Fehler ORA-55940: An error occurred during execution of ktliIngestExternData statt der gesuchten Audit Informationen.
select count(*) from unified_audit_trail;
select count(*) from unified_audit_trail
*
ERROR at line 1:
ORA-55940: An error occurred during execution of ktliIngestExternData.
Problemanalyse
Die UNIFIED_AUDIT_TRAIL besteht aus zwei Komponenten:
- Den Daten im Schema AUDSYS innerhalb der Datenbank.
- Daten in sogenannten Spillover Audit Files am Filesystem.
Prüfen wir somit welcher Teil Probleme bereitet. Zuerst innerhalb der Datenbank:
select count(*) from audsys.aud$unified;
Hier kommt eine beliebige Zahl zurück, aber kein Fehler, also checken wir die Spillover Audit Files:
select count(*) from x$unified_audit_trail;
...
ORA-55940: An error occurred during execution of ktliIngestExternData.
OK, also liegt es an den Spillover Audit Files am Filesytem. Schauen wir einmal nach:
$ ls -la $ORACLE_BASE/audit/$ORACLE_SID
drwxr-x--- 2 oracle oinstall 4096 Jan 18 16:54 .
drwxr-x--- 5 oracle oinstall 4096 Jan 18 16:58 ..
-rw------- 1 oracle oinstall 1024 Jan 18 16:54 ora_audit_0388.bin
Das Spillover Audit File ist mehrere Monate alt...
Ist an dem Tag etwas passiert?
Der Kunden hat die Datenbank an diesem Tag neu gecloned. Anscheinend ist das Spillover Audit File noch von dem alten Clone!
Also verschieben wir das Spillover Audit File einmal in ein Hilfsverzeichnis und testen nochmals:
select count(*) from x$unified_audit_trail;
...
0 rows selected
Aufpassen, beim Verschieben der Spillover Audit Files! Es könnte sein, dass nur einige (die ältesten) Files ein Problem darstellen, und die neueren Files sehr wohl noch benötigt werden. Am besten immer ein File nach dem anderen in ein anders Verzeichnis verschieben, bis kein Fehler mehr auftritt.