Oracle Patch deinstallieren – oder Oracle vergiss, was ich dich einst lehrte

Irgendwann wird es jedem, der Oracle Datenbanken administrativ betreut mal passieren, dass ein installierter Patch wieder deinstalliert (roll back database patch) werden muss. Patches mit Opatch oder MOpatch einspielen ist die eine Sache. Sie wieder zu deinstallieren eben eine andere.

Um einen Patch deinstallieren zu können muss zunächst der produktive Betrieb des Systems eingestellt werden. Hierzu muss sowohlnder Listener als auch die Datenbank selbst gestoppt werden.

Listener stoppen:

lsnrctl stop <Name des Listeners>

sqlplus ‘/as sysdba’

Datenabnk stoppen:

sqlplus / as sysdba
SQL> shutdown immediate;

Der Patch wird dann wie folgt deinstalliert:

cd /oracle/<SID>/121/.patch_storage/21949015_Jan_16_2013_03_10_39
opatch rollback -id 21949015

Hierbei ist es wichtig, dass der OPatch die Aktion mit „completed successfully“ quittiert.

Anschließend muss noch die „Post patch roll back“ Aktion vorgenommen werden, ansonsten ist der Patch nicht vollständig deinstalliert. Zunächst wird die Datenbank wieder gestartet:

sqlplus / as sysdba

gefolgt von einem

startup

im SQL Plus.

Anschließend wechselt man ins OPatch Verzeichnis:

cd $ORACLE_HOME/OPatch
./datapatch –verbose

Um zu überprüfen, dass der gewünschte Patch wirklich komplett deinstalliert wurde kann man die dba_registry_sqlpatch zu dem Patch befragen:

select * from dba_registry_sqlpatch where PATCH_ID=20831110;

Anschließend sollte zur Sicherheit geprüft werden, dass die Datenbankobjekte sauber kompiliert werden können. Dies erledigt das folgende (als bekannt vorausgesetzte) Script:

@$ORACLE_HOME/rdbms/admin/utlrp.sql

Anschließend kann man zur Verifizierung noch mal folgenden SQL Schnipsel laufen lassen:

select COMP_ID, COMP_NAME, MODIFIED, CONTROL, STATUS from dba_registry;

Hier sollten alle Komponenten ein „valid“ ausgeben.

Java Patches werden übrigens nach dem gleichen Schema deinstalliert.