We’ve just upgraded the database containing our recovery catalog to 12.2. Although rman operations seemed to be completing OK, we noticed the following slightly worrying error message in the alert log:
PDB(3):WARNING: too many parse errors, count=44106 SQL hash=0x2473a808 PDB(3):PARSE ERROR: ospid=398064, error=6550 for statement: 2018-07-22T17:06:22.313262+08:00 PDB(3):BEGIN :owner := dbms_rai_owner; END; PDB(3):Additional information: hd=0x26ee29a560 phd=0x26ee122418 flg=0x101476 cisid=343 sid=343 ciuid=343 uid=343 2018-07-22T17:06:22.313360+08:00 PDB(3):----- PL/SQL Call Stack ----- object line object handle number name 0x26afed3ed8 36 package body RCAT.DBMS_RCVVPC.IS_RA 0x26afed3ed8 8 package body RCAT.DBMS_RCVVPC.__pkg_init 0x240a892a20 1 anonymous block 0x23cb60d9d0 4 anonymous block
I checked the source of the package DBMS_RCVPC in the recovery catalog (it is unwrapped PL/SQL):
FUNCTION is_ra RETURN BOOLEAN IS l_owner all_users.username%TYPE; BEGIN EXECUTE IMMEDIATE 'BEGIN :owner := dbms_rai_owner; END;' USING OUT l_owner; RETURN (l_owner IS NOT NULL); EXCEPTION WHEN OTHERS THEN RETURN FALSE; END is_ra;
I cannot find any object named dbms_rai_owner in the database.
It seems the package is designed to fail with a parse error and that will be caught by the “WHEN OTHERS” handler and return false, and that is what had been happening when this database was at version 12.1.
What has changed is that Oracle now writes details about such parse errors (see Oracle support document 2320935.1 for more details).
Ideally the Oracle developers need to re-write the package logic so it doesn’t rely on throwing parsing exceptions, but until then, I think this message in the alert log can be safely ignored.
Update (2018-07-27): Bug 28223871 – RMAN12C.DBMS_RCVVPC.IS_RA WARNING: TOO MANY PARSE ERRORS, COUNT=4519
Symptom can be fixed by disabling VPD on recovery catalog using dbmsrmanvpc.sql -novpd. Obviously weigh up the pros and cons of this before proceeding.