Title
Running "urlrp.sql" automatically disconnects with ORA-03113 and ORA-03114

Date
2007-08-21

Summary
1. Install Oracle Database 10g (10.2.0.1) x86 on SERVER1 and SERVER2.

2. Upgrade to Oracle Database 10g (10.2.0.2) via patch 4547817 on SERVER1 and SERVER2.

3. When running the post-install script utlrp.sql, it runs successfully to completion on SERVER1 but not SERVER2.

    Running urlrp.sql on SERVER2 automatically disconnects with the following:
    oracle@SERVER2:/u01/app/oracle> sqlplus "/ as sysdba"
    
    SQL*Plus: Release 10.2.0.2.0 - Production on Tue Jul 31 16:34:29 2007
    
    Copyright (c) 1982, 2005, Oracle.  All Rights Reserved.
    
    
    Connected to:
    Oracle Database 10g Enterprise Edition Release 10.2.0.2.0 - Production
    With the Partitioning, OLAP and Data Mining options
    
    SQL> @?/rdbms/admin/utlrp.sql
    
    TIMESTAMP
    --------------------------------------------------------------------------------
    COMP_TIMESTAMP UTLRP_BGN  2007-07-31 16:34:43
    
    DOC>   The following PL/SQL block invokes UTL_RECOMP to recompile invalid
    DOC>   objects in the database. Recompilation time is proportional to the
    DOC>   number of invalid objects in the database, so this command may take
    DOC>   a long time to execute on a database with a large number of invalid
    DOC>   objects.
    DOC>
    DOC>   Use the following queries to track recompilation progress:
    DOC>
    DOC>   1. Query returning the number of invalid objects remaining. This
    DOC>      number should decrease with time.
    DOC>         SELECT COUNT(*) FROM obj$ WHERE status IN (4, 5, 6);
    DOC>
    DOC>   2. Query returning the number of objects compiled so far. This number
    DOC>      should increase with time.
    DOC>         SELECT COUNT(*) FROM UTL_RECOMP_COMPILED;
    DOC>
    DOC>   This script automatically chooses serial or parallel recompilation
    DOC>   based on the number of CPUs available (parameter cpu_count) multiplied
    DOC>   by the number of threads per CPU (parameter parallel_threads_per_cpu).
    DOC>   On RAC, this number is added across all RAC nodes.
    DOC>
    DOC>   UTL_RECOMP uses DBMS_SCHEDULER to create jobs for parallel
    DOC>   recompilation. Jobs are created without instance affinity so that they
    DOC>   can migrate across RAC nodes. Use the following queries to verify
    DOC>   whether UTL_RECOMP jobs are being created and run correctly:
    DOC>
    DOC>   1. Query showing jobs created by UTL_RECOMP
    DOC>         SELECT job_name FROM dba_scheduler_jobs
    DOC>            WHERE job_name like 'UTL_RECOMP_SLAVE_%';
    DOC>
    DOC>   2. Query showing UTL_RECOMP jobs that are running
    DOC>         SELECT job_name FROM dba_scheduler_running_jobs
    DOC>            WHERE job_name like 'UTL_RECOMP_SLAVE_%';
    DOC>#
    DECLARE
    *
    ERROR at line 1:
    ORA-03113: end-of-file on communication channel
    
    
    ERROR:
    ORA-03114: not connected to ORACLE
    
    
    ERROR:
    ORA-03114: not connected to ORACLE
    
    
    DOC> The following query reports the number of objects that have compiled
    DOC> with errors (objects that compile with errors have status set to 3 in
    DOC> obj$). If the number is higher than expected, please examine the error
    DOC> messages reported with each object (using SHOW ERRORS) to see if they
    DOC> point to system misconfiguration or resource constraints that must be
    DOC> fixed before attempting to recompile these objects.
    DOC>#
    ERROR:
    ORA-03114: not connected to ORACLE
    
    
    DOC> The following query reports the number of errors caught during
    DOC> recompilation. If this number is non-zero, please query the error
    DOC> messages in the table UTL_RECOMP_ERRORS to see if any of these errors
    DOC> are due to misconfiguration or resource constraints that must be
    DOC> fixed before objects can compile successfully.
    DOC>#
    ERROR:
    ORA-03114: not connected to ORACLE
    
    
    ERROR:
    ORA-03114: not connected to ORACLE
    
    
    ERROR:
    ORA-03114: not connected to ORACLE
    
    
    ERROR:
    ORA-03114: not connected to ORACLE
    
Details
1. Apparently, in my case, these are hardened servers. To resolve this, various invalid objects need to be resolved first.

Grant the privileges required to all invalid objects first.

2. Run utlrp.sql:
SQL> @?/rdbms/admin/utlrp.sql

3. Compile invalid objects using the following:
SELECT 'ALTER TRIGGER ' || owner || '.' || object_name || ' COMPILE;'
FROM dba_objects WHERE status = 'INVALID' AND object_type = 'TRIGGER'
ORDER BY owner, object_name;

SELECT 'ALTER TYPE ' || owner || '.' || object_name || ' COMPILE BODY;'
FROM dba_objects WHERE status = 'INVALID' AND object_type = 'TYPE BODY'
ORDER BY owner, object_name;

SELECT 'ALTER SYNONYM ' || owner || '.' || object_name || ' COMPILE;'
FROM dba_objects WHERE status = 'INVALID' AND object_type = 'SYNONYM'
ORDER BY owner, object_name;

SELECT 'ALTER FUNCTION ' || owner || '.' || object_name || ' COMPILE;'
FROM dba_objects WHERE status = 'INVALID' AND object_type = 'FUNCTION'
ORDER BY owner, object_name;

SELECT 'ALTER PROCEDURE ' || owner || '.' || object_name || ' COMPILE;'
FROM dba_objects WHERE status = 'INVALID' AND object_type = 'PROCEDURE'
ORDER BY owner, object_name;

SELECT 'ALTER PACKAGE ' || owner || '.' || object_name || ' COMPILE;'
FROM dba_objects WHERE status = 'INVALID' AND object_type = 'PACKAGE'
ORDER BY owner, object_name;

SELECT 'ALTER PACKAGE ' || owner || '.' || object_name || ' COMPILE BODY;'
FROM dba_objects WHERE status = 'INVALID' AND object_type = 'PACKAGE BODY'
ORDER BY owner, object_name;

4. Run utlrp.sql again to get rid of PUBLIC synonyms:
SQL> @?/rdbms/admin/utlrp.sql

Applicable Versions
Oracle Database 10g (10.2.0.2) x86
Ahmed Aboulnaga

.com .com