Monday, March 16, 2015

ORA-06553: PLS-801: internal error [56319]

You will face this error while connecting to a database which has word size (32-bit or 64-bit) different than the actual installation binaries (32-bit or 64-bit). It means that if database was created (and running) on a 64-bit platform and then you move/restore same database to a 32-bit platform, or vice versa, you will be facing this problem.

You may also face this error if you have a standby database running on a platform which has Oracle binaries different than the binaries of primary database platform, and you perform a switchover. After the switchover, you might be facing same error.

Reason of this error is that PL/SQL objects (functions, procedures, packages) were compiled using a different word size (suppose 32-bit) when database was created/running, and now you restore/move this database to a 64-bit platform and hence these objects code is inconsistent with the binaries.

To solve this problem, you first need to invalidate all PL/SQL objects and then re-compile them so that new compiled code becomes consistent with the available binaries.

1.      Startup database with STARTUP UPGRADE option
2.      Invalidate the PL/SQL objects by running $ORACLE_HOME/rdbms/admin/utlip.sql
3.      Validate the PL/SQL objects by running $ORACLE_HOME/rdbms/utlrp.sql
4.      Shutdown the database
5.      Startup the database

No comments: