Ich habe eine Warnung von Enterprise Manager erhalten, dass einer meiner Produktionsdatenbanken der Speicherplatz ausgeht. Ich habe es bis zu $GRID_HOME/.patch_storage aufgespürt, das 30 GB meines 90-GB-Laufwerks verbrauchte. Huch!
Als erstes habe ich die opatch-Bereinigungsroutine ausgeführt, wie ich sie 2013 hier dokumentiert habe: http://www.peasland.net/2013/03/21/patch_storage/
Leider hat es nichts bereinigt.
Dieses Mal musste ich auf eine manuelle Bereinigung zurückgreifen. Hier sind die Schritte, die ich ausgeführt habe.
Die Dateien in .patch_storage beginnen mit der Patch-Molekülnummer und einem Zeitstempel. Beispiel: 19582630 _Nov_14_2014_21_43_23
Ich muss opatch fragen, ob sich dieser Patch noch im Inventar befindet.
$ORACLE_HOME/OPatch/opatch lsinventory|grep 19582630
20075154, 20641027, 22271856, 20548410, 19016964, 19582630
linventory zeigt an, dass sich der Patch im Inventar befindet. Ich gehe zum nächsten Patch über.
Wenn mein lsinventory-Befehl nichts zurückgibt, befindet sich der Patch nicht im Inventar. MOS-Hinweis 550522.1 besagt, dass Sie dieses Verzeichnis entfernen können, da es nicht mehr benötigt wird. Die immer vorsichtige DBA-Persönlichkeit in mir möchte sicherstellen, dass ich mich von einem einfachen „rm -rf dir_name“-Befehl erholen kann. Also tare und gzipe ich zuerst das Verzeichnis und entferne dann das Verzeichnis.
tar cvf 25869825_Jul_3_2017_23_11_58.tar 25869825_Jul_3_2017_23_11_58
gzip 25869825_Jul_3_2017_23_11_58.tar
rm -rf 25869825_Jul_3_2017_23_11_58
Es ist mühsame Arbeit, dies für jeden einzelnen Patch zu tun. Ich bin mir sicher, dass jemand, der mit sed und awk und Shell-Scripting besser ist als ich, diesen Prozess automatisieren könnte.
Durch Befolgen dieser Schritte ist mein .patch_storage-Verzeichnis von 30 GB auf 11 GB gesunken.
Wenn ich im nächsten Quartal meine CPU wieder einsetze, sollte opatch schlecht schreien und verlangen, dass diese zurückgelegt werden, kann ich den Tarball schnell entpacken und extrahieren, und opatch sollte zufrieden sein.
Ich habe diese Operation auf $GRID_HOME durchgeführt, aber sie funktioniert auch auf $RDBMS_HOME. Da dies Oracle RAC ist, möchte ich dies möglicherweise auf allen Knoten im Cluster tun.