Oracle 11.2.0.4 error PLS-00306: wrong number or types of arguments in call to ‘SYNCRN’

After upgrading the database to 11.2.0.4 and applying the latest Patch Set Update(October 2015 PSU) (11.2.0.4.8) , a database account could not perform any update or delete transaction on a table (that has context index) and received the following errors:

 

ERROR at line 1:
ORA-00604: error occurred at recursive SQL level 1
ORA-06550: line 1, column 7:
PLS-00306: wrong number or types of arguments in call to ‘SYNCRN’
ORA-06550: line 1, column 7:
PL/SQL: Statement ignored

 

Solution:

There is a patch provided by Oracle to fix this OR perform the following “workaround” by recreating ctxsys.syncrn procedure:

SQL> sqlplus ‘/as sysdba’

SQL>alter session set current_schema=CTXSYS;

SQL>create or replace procedure syncrn (
  ownid IN binary_integer,
  oname IN varchar2,
  idxid IN binary_integer,
  ixpid IN binary_integer,
  rtabnm IN varchar2,
  srcflg IN binary_integer,
  smallr IN binary_integer
)
  authid definer
  as external
  name “comt_cb”
  library dr$lib
  with context
  parameters(
    context,
    ownid  ub4,
    oname  OCISTRING,
    idxid  ub4,
    ixpid  ub4,
    rtabnm OCISTRING,
    srcflg ub1,
    smallr ub1
);
/

// execute the following to recompile all database objects:

SQL> @$ORACLE_HOME/rdbms/admin/utlrp.sql

//Then check that your database components are “valid”:

SQL> select * from dba_registry;

//check if there is any invalid objects under CTXSYS:

SQL>select owner, count(*) from dba_objects where status <>’VALID’ group by owner order by 1;

 

Remark: to find the patch set update applied on your database use the following query:

select * from sys.registry$history;

Upgrading Oracle database from 11.2.0.3 to 11.2.0.4

The following is a generic procedure to upgrade from 11.2.0.3 to 11.2.0.4 . As many of you know that 11.2.0.3 release has been desupported and last PSU released was in JULY 2015. so you need to either upgrade to 12cR1 OR to 11.2.0.4 . The right move is of course to move forward to 12c however, some vendor applications are not certified  Yet 😦 !!!

So you will need to upgrade 11.2.0.4.

I hope this will help. Please note that the below procedure assumes that you have already installed 11.2.0.4 binaries successfully.

 

Procedure upgrade in Unix environment:

//create a directory called “upgrade_11gR4”

mkdir upgrade_11gR4

cd upgrade_11gR4

//now copy 2 scripts (utlu112i.sql) and (dbupgdiag.sql )

cp /oraclex/oradbp05/product/11.2.0.4/rdbms/admin/utlu112i.sql .

cp /oracle_software/database/dbupgdiag.sql .

//gather general database information

sql

SQL> EXEC DBMS_STATS.GATHER_DICTIONARY_STATS;

SQL> set pages 300

SQL> set lines 250

SQL> col owner for a23;

SQL> col object_name for a35;

SQL> col object_type for a20;

SQL> col action for a15;

SQL> col comments for a40;

SQL> col comp_name for a40;

SQL> col version for a15;

 

SQL> spool before_upgrading_11gR4.log

SQL> SELECT NAME FROM V$DATABASE;

SQL> SELECT * from V$VERSION;

SQL> SELECT ACTION,VERSION,COMMENTS FROM SYS.REGISTRY$HISTORY;

SQL> SELECT COMP_NAME,VERSION,STATUS FROM DBA_REGISTRY;

SQL> select count(*) from dba_objects where  status = ‘INVALID’;

SQL> spool off

SQL>upgrade_information_gather.log

SQL>@utlu112i.sql

SQL>spool off

exit

//check the the log output and read it carefully

cat upgrade_information_gather.log

sql

SQL>alter session set nls_language=’American’;
SQL>@dbupgdiag.sql

//then check the log output for diagnostic information

//Purging the Database Recycle Bin

SQL> PURGE dba_recyclebin;

//Copy the LISTENER.ORA &  TNSNAMES.ORA & SQLNET.ORA from 11.2.0.3 directory to 11.2.0.4 directory

//shutdown the database

//change  your .profile to point to the new Oracle HOME binaries for 11.2.0.4

cd $ORACLE_HOME/rdbms/admin

sqlplus “/ as sysdba”

SQL>startup UPGRADE

SQL>@catupgrd.sql

//enter a directory where you want to log to be generated to

SQL> shutdown immediate;

sqlplus “/ as sysdba”

SQL>STARTUP

SQL>@$ORACLE_HOME/rdbms/admin/utlrp.sql

SQL>set pages 300

SQL>set lines 250

SQL>col owner for a17;

SQL>col object_name for a35;

SQL>col object_type for a20;

SQL>Select owner,object_type,object_name from dba_objects where status=’INVALID’ ORDER BY 1,2,3;

SQL>@$ORACLE_HOME/rdbms/admin/catuppst.sql

 

//Run the following script to identify any new invalid objects due to the upgrade:

SQL>@$ORACLE_HOME/rdbms/admin/utluiobj.sql

 

//check your time zone

SQL>SELECT PROPERTY_NAME, SUBSTR(property_value, 1, 30) value FROM DATABASE_PROPERTIES WHERE PROPERTY_NAME LIKE ‘DST_%’ ORDER BY PROPERTY_NAME;

//if the the time zone is 14 then you are OK…and your upgrade is DONE…congratulations 🙂

//if the time zone value is less than 14 then proceed with the following:

SQL>TRUNCATE TABLE SYS.DST$TRIGGER_TABLE;

SQL>TRUNCATE TABLE sys.dst$affected_tables;

SQL>TRUNCATE TABLE sys.dst$error_table;      

 

//Start upgrade window

SQL>EXEC DBMS_DST.BEGIN_UPGRADE(14);

//The message “An upgrade window has been successfully started.” will be seen

//check

SQL>SELECT PROPERTY_NAME, SUBSTR(property_value, 1, 30) value

FROM DATABASE_PROPERTIES

WHERE PROPERTY_NAME LIKE ‘DST_%’

ORDER BY PROPERTY_NAME;

//restart the database

SQL>shutdown immediate;

SQL> startup;

SQL>set serveroutput on

VAR numfail number

BEGIN

DBMS_DST.UPGRADE_DATABASE(:numfail,

parallel => TRUE,

log_errors => TRUE,

log_errors_table => ‘SYS.DST$ERROR_TABLE’,

log_triggers_table => ‘SYS.DST$TRIGGER_TABLE’,

error_on_overlap_time => FALSE,

error_on_nonexisting_time => FALSE);

DBMS_OUTPUT.PUT_LINE(‘Failures:’|| :numfail);

END;

/

SQL> VAR fail number

BEGIN

DBMS_DST.END_UPGRADE(:fail);

DBMS_OUTPUT.PUT_LINE(‘Failures:’|| :fail);

END;

/

//Output that will be seen: “An upgrade window has been successfully ended”  “Failures:0”

ACL (Access Control List) in Oracle 12c

The following points should be in consideration while upgrading your Oracle database to 12c:

  • Starting with Oracle Database 12c, the access control of the UTL packages (UTL_TCP, UTL_SMTP, UTL_MAIL, UTL_HTTP, and UTL_INADDR) is implemented using Oracle Database Real Application Security and does not require Oracle XML DB.

 

  • existing ACL in XDB of your database will be migrated during the upgrade to 12c .

 

  • DBMS_NETWORK_ACL_ADMIN has been deprecated.

 

  • Existing ACL’s in your database will be migrated and “re-named” after the upgrade , the following query will list the old and the new name of the ACL:

           SQL> select * from DBA_ACL_NAME_MAP ;

  • take the backup of the following tables just in case ACL’s were not migrated successfully:

 SQL> create table TESTSCHEMA.DBA_NETWORK_ACLS as select * from DBA_NETWORK_ACLS;

SQL> create table TESTSCHEMA.DBA_NETWORK_ACL_PRIVILEGES as select * from DBA_NETWORK_ACL_PRIVILEGES;