Yesterday I had an
ora-600: [kqd-objerror$]
when compiling a trigger.My DBA found the solution in oracle support: ID 1160244.1
"Cause: The problem is caused by a dictionary inconsistency.
When compiling invalid PL/SQL objects a corresponding row for the invalid object must exist in OBJERROR$. The ORA-600 error indicates that this row could not be updated (the "U" parameter) because the row didn't exist.
Solution: Solution is to add the missing row by querying the OBJECT_ID from DBA_OBJECTS for the object to be compiled.
Then perform an INSERT of this OBJECT_ID value into OBJERROR$.
Next is to perform COMMIT followed by a SHUTDOWN ABORT. Note that this MUST be ABORT to prevent the rowcache from being flushed to the data dictionary.
After that, the database can be started using STARTUP NORMAL and the trigger can be compiled."
That fixed the problem :-)! Great!
If the object doesn't exists delete the missing object from the OBJERROR$;
ReplyDeletedone by 11gR2 migration the object was a synonym which was dropped. the recyclebin was empty but the reference was still in the OBJERROR$;
solution: delete rows in the OBJERROR$
following by commit and abort;