Oracle Patch Level Differences (Oracle Enterprise Manager and DBA_REGISTRY_HISTORY)
The installation of a PSU is not complete without the execution of the postinstall script. Opatch works at file level, it replaces/relinks files in the Oracle home. Changes inside the database are performed by running the postinstall script. Sometimes I see DBAs forget this step.

The postinstall script maintains the SYS.REGISTRY$ table (on which the DBA_SERVER_REGISTRY view is built) with the actual patch versions.

In 11.2, you run the postinstall script as (stated in the README):

sqlplus / as sysdba
@?/rdbms/admin/catbundle psu apply


This populates the above table (and so the view) with the actual data. When installing a PSU, this script must be executed in all databases running from the affected Oracle Home.

In most of the cases, skipping the postinstall script does not cause any problem, so mostly this goes on unnoticed. But there are exceptions, for example I have seen a database throwing ORA-07445 errors during the configuration of GoldenGate, because the postinstall script was not executed after the installation of the PSU.

Starting with 12c, the postinstall script is executed as:

export ORACLE_SID=orcl
cd $ORACLE_HOME/OPatch
./datapatch