Datenbank Version & Patch Level mit SQL ermitteln
von Sebastian Solbach |
![]() |
Wenn Entwickler in der heutigen Zeit Zugriff auf eine Datenbank beantragen, bekommen Sie von der IT Abteilung meist einen Benutzer, Passwort und einen fertigen Connect String
mit dem man sich direkt an der "aktuellen" Datenbank anmeldet. Dabei ist es aber auch für den Entwickler wichtig zu wissen, welche Version und häufig auch
welchen genauen Patch Level die Datenbank hat, mit der er sich verbindet. Schließlich sind bestimmte Funktionen erst mit aktuellen Patch Set Updates verfügbar.
So wie zum Beispiel bei der mit 12.1.0.2 eingefürten JSON Unterstützung. Diese wurde mit jedem PSU der 12.1.0.2 Datenbank
erheblich verbessert, so dass jeder Entwickler, der mit Oracle 12c und JSON arbeiten möchte zumindest auf 12.1.0.2.BP:160719 sein sollte.
Auch für Testzwecke, Datenübertragung und Client Kompatibilität ist es wichtig möglichst die gleiche Versions zu verwenden.
Damit stellt sich die Frage, wie man am einfachsten an diese Informationen herankommt - am Besten mit einem SQL Befehl.
Für den Datenbankadministrator hingegen ist es im Normalfall sehr einfach diese Informationen zu bekommen, hat er doch direkten Zugriff auf das Betriebssystem und kann damit leicht
über das OPATCH Utility den genauen
Stand der Software in Erfahrung bringen. Näheres dazu finden Sie auch in den
Community Artikeln zu OPatch.
Allerdings hat durch die zur Zeit stattfindenden Entwicklung selbst der DBA nur noch bedingt Zugriff auf das Betriebssystem und damit direkt auf OPATCH.
Gerade im Zuge von Database as a Service in der Cloud bekommt auch der DBA nur noch einen Datenbank Service und die Wartung übernimmt der Cloud Betreiber.
Um so wichtiger genau zu wissen, welche Oracle Version und welcher Patch Level vorliegt. Denn wenn Datenbanken via Backup/Restore oder anderen Mechanismen
in die Cloud kopiert werden sollen, ist es am einfachsten, wenn die Releases und Patchstände übereinstimmen. In der zum Zeitpunkt des Tipps vorliegenden DBaaS Version von Oracle
ist zum Beispiel der genaue Patch Level aus der DBaaS Console leider nicht ersichtlich oder nur indirekt, wenn neuere PSUs zum Patch angeboten werden.
Noch deutlicher wird dieses Thema des fehlenden Zugriff auf das Betriebssystem mit Oracle Multitenant:
Ein Datenbank Administrator einer Pluggable Datenbank hat aus sicherheitstechnischen Gründen nur selten einen Zugriff
auf die darunterliegende Container Datenbank.
Auf der anderen Seite gibt es einfache Transport und Upgrade Mölichkeiten einer PDB zwischen CDBs.
Beides zusammen macht es notwendig, die genaue Datenbank Version und Patch Level mit Hilfe von SQL abfragen zu können.
Der neue Oracle Exadata Express Cloud Service kombiniert dann Cloud und Multitenant: Kunden, die diesen Service nutzen, bekommen einen DBA
Zugang für eine PDB in der Cloud, aber keinen Zugriff auf das OS und CDB. Außerdem übernimmt
Oracle die Wartung komplett vom Benutzer unabhängig.
Datenbank Version und Funktionen in SQL und PL/SQL
Bevor wir uns um den genauen Patch Level kümmern, erst einmal die Abfragen zu generellen Informationen der Datenbank. Hierbei werden die beiden interessantesten Views ALL_BANNERS und DBA_REGISTRY jeweils beide von der Tabelle registry$ gespeist und zeigen die installierten Datenbankfunktionen an. In 12.1 gibt es aber den Unterschied, dass ALL_BANNERS nur die aktiven Funktionen, DBA_REGISTRY aber auch ausgeschaltete Funktionen mit anzeigt:
SQL> select * from all_registry_banners; BANNER -------------------------------------------------------------------------------- Oracle Database Catalog Views Release 12.1.0.2.0 - 64bit Production Oracle Database Packages and Types Release 12.1.0.2.0 - Production Oracle XML Database Version 12.1.0.2.0 - Production Oracle Workspace Manager Release 12.1.0.2.0 - Production JServer JAVA Virtual Machine Release 12.1.0.2.0 - Production Oracle XDK Release 12.1.0.2.0 - Production Oracle Database Java Packages Release 12.1.0.2.0 - Production Oracle Text Release 12.1.0.2.0 - Production Oracle Multimedia Release 12.1.0.2.0 - Production OLAP Analytic Workspace Release 12.1.0.2.0 - Production Oracle OLAP API Release 12.1.0.2.0 - Production Spatial Release 12.1.0.2.0 - Production Oracle Label Security Release 12.1.0.2.0 - Production Oracle Database Vault Release 12.1.0.2.0 - Production Oracle Application Express Release 5.0.0.00.31 - Production SQL> select comp_id,comp_name,version,status,modified,schema from dba_registry; COMP_ID COMP_NAME VERSION STATUS MODIFIED SCHEMA -------- ---------------------------------------- ------------ ----------- ----------------------- --------------- APEX Oracle Application Express 5.0.0.00.31 VALID 26-SEP-2016 13:00:20 APEX_050000 OLS Oracle Label Security 12.1.0.2.0 VALID 29-JUN-2016 11:42:18 LBACSYS DV Oracle Database Vault 12.1.0.2.0 VALID 29-JUN-2016 11:42:19 DVSYS ORDIM Oracle Multimedia 12.1.0.2.0 VALID 29-JUN-2016 11:42:14 ORDSYS CONTEXT Oracle Text 12.1.0.2.0 VALID 29-JUN-2016 11:42:13 CTXSYS OWM Oracle Workspace Manager 12.1.0.2.0 VALID 29-JUN-2016 11:42:11 WMSYS SDO Spatial 12.1.0.2.0 VALID 29-JUN-2016 11:42:17 MDSYS XDB Oracle XML Database 12.1.0.2.0 VALID 29-JUN-2016 11:42:08 XDB CATALOG Oracle Database Catalog Views 12.1.0.2.0 VALID 29-JUN-2016 11:42:05 SYS CATPROC Oracle Database Packages and Types 12.1.0.2.0 VALID 29-JUN-2016 11:42:06 SYS JAVAVM JServer JAVA Virtual Machine 12.1.0.2.0 VALID 29-JUN-2016 11:47:54 SYS XML Oracle XDK 12.1.0.2.0 VALID 29-JUN-2016 11:42:12 SYS CATJAVA Oracle Database Java Packages 12.1.0.2.0 VALID 29-JUN-2016 11:42:12 SYS APS OLAP Analytic Workspace 12.1.0.2.0 VALID 29-JUN-2016 11:42:14 SYS XOQ Oracle OLAP API 12.1.0.2.0 VALID 29-JUN-2016 11:42:16 SYS RAC Oracle Real Application Clusters 12.1.0.2.0 OPTION OFF 07-JUL-2014 06:52:28 SYSBeide Views sind auch in 11.2 und älteren Versionen noch zu finden.
SQL> var version varchar2(20); SQL> var compatibility varchar2(20); SQL> exec DBMS_UTILITY.DB_VERSION(:version,:compatibility); SQL> print version; VERSION ------- 12.1.0.2.0 SQL> print compatibility; COMPATIBILITY ------------- 12.1.0.2.0Leider kann man damit aber auch nur die Version, nicht jedoch den PSU Stand auslesen.
Installierte Patches und Patch Set Updates
Reine Software Only Patches sind in der Datenbank direkt leider nicht sichtbar. Allerdings haben Patch Set Updates und Bundle Patches immer die Notwendigkeit an einigen Datenbank Objekten oder Daten Änderungen
vorzunehmen. Dem einen oder anderen wird der Umstand, dass nach einem Patch Set Update der 12c Datenbank immer "datapatch.pl" aufgerufen werden muss, bekannt sein: "Datapatch.pl" muss manchmal manuell nachgeholt werden,
wie hier im Oracle Upgrade Blog beschrieben.
Auch in 11.2 gab es damals ein ähnliches Skript: catpatch.sql.
Das Ausführen dieser SQLs wird dabei von der Datenbank protokolliert. In 12c verlässlich in der View
"DBA_REGISTRY_SQLPATCH" während in 11.2 noch
"DBA_REGISTRY_HISTORY" zum Einsatz kam.
Allerdings protokollierte DBA_REGISTRY_HISTORY dabei nur kritische Patches und Upgrades, nicht jedes SQLPatch, wie dies die bei der neuen View in 12c der Fall ist.
Dies kann man in einer 12c Datenbank auch beobachten, da nur der OJVM Patch als "kritisch" in Bezug auf DBA_REGISTRY_HISTORY eingestuft wird, während andere PSUs nicht zu finden sind:
SQL> select PATCH_ID, PATCH_UID, VERSION, STATUS, BUNDLE_SERIES, BUNDLE_ID, DESCRIPTION from DBA_REGISTRY_SQLPATCH; PATCH_ID PATCH_UID VERSION STATUS BUNDLE_SERIES BUNDLE_ID DESCRIPTION ---------- ---------- ---------- -------- ------------- ---------- ------------------------------------------------------ 22674709 20057886 12.1.0.2 SUCCESS Database PSU 12.1.0.2.160419, Oracle JavaVM Component 22291127 19694308 12.1.0.2 SUCCESS PSU 160419 Database Patch Set Update : 12.1.0.2.160419 (22291127) 23617395 20319266 12.1.0.2 SUCCESS SQL> select action_time, action, version, comments from dba_registry_history; ACTION_TIME ACTION VERSION COMMENTS ----------------- ------------------------------ ------------------------- -------------------- 29.06.16 11:40:48 jvmpsu.sql 12.1.0.2.160419OJVMPSU RAN jvmpsu.sqlIn 11.2 gibt die View mehr Auskünfte auch über PSUs:
SQL> select action_time, action, version, comments from dba_registry_history ACTION_TIME ACTION VERSION COMMENTS --------------------- ------- ------------ -------------------- 24-AUG-13 12.03.45 PM APPLY 11.2.0.4 Patchset 11.2.0.2.0 28-NOV-13 06.01.43 PM APPLY 11.2.0.4 Patchset 11.2.0.2.0
Zugriff auf OPatch aus der Datenbank
Da in beiden Views, wie oben schon beschrieben, leider keine reinen Software Patches auftauchen, bietet 12.1 die Möglichkeit aus der Datenbank heraus OPatch aufzurufen. Dies geschieht über das Package dbms_qopatch vom Benutzer SYS. Daher hat leider auch nur ein SYSDBA auf dieses Package Zugriff. Über die Prozedur GET_SQLPATCH_STATUS des Packages können die gleichen Informationen von OPatch abgefragt werden, die oben in DBA_REGISTRY_SQLPATCH zu sehen waren:
SQL> set serveroutput on; SQL> exec dbms_qopatch.get_sqlpatch_status; Patch Id : 22674709 Action : APPLY Action Time : 29-JUN-2016 11:48:34 Description : Database PSU 12.1.0.2.160419, Oracle JavaVM Component (Apr2016) Logfile : /u01/app/oracle/cfgtoollogs/sqlpatch/22674709/20057886/22674709_apply_ORCL_CDBROOT_2016Jun29_11_47_52.log Status : SUCCESS Patch Id : 22291127 Action : APPLY Action Time : 29-JUN-2016 11:48:34 Description : Database Patch Set Update : 12.1.0.2.160419 (22291127) Logfile : /u01/app/oracle/cfgtoollogs/sqlpatch/22291127/19694308/22291127_apply_ORCL_CDBROOT_2016Jun29_11_47_54.log Status : SUCCESS Patch Id : 23617395 Action : APPLY Action Time : 29-JUN-2016 11:48:35 Description : Logfile : /u01/app/oracle/cfgtoollogs/sqlpatch/23617395/20319266/23617395_apply_ORCL_CDBROOT_2016Jun29_11_48_15.log Status : SUCCESSEine Auflistung aller installierten Patches, auch der Software only, erhält man dabei über GET_OPATCH_LIST:
SQL> set long 10000 SQL> set pages 1000 SQL> select xmltransform(dbms_qopatch.get_opatch_list, dbms_qopatch.get_opatch_xslt) from dual; XMLTRANSFORM(DBMS_QOPATCH.GET_OPATCH_LIST,DBMS_QOPATCH.GET_OPATCH_XSLT) ---------------------------------------------------------------------------------------- Patch Details: Patch(sqlpatch) 23617395: applied on 2016-07-06T19:20:48Z Unique Patch ID: 20319266 Patch Description: Created on : 28 Jun 2016, 07:09:21 hrs PST8PDT Bugs fixed: ... Patch(sqlpatch) 22674709: applied on 2016-05-06T17:34:29Z Unique Patch ID: 20057886 Patch Description: Database PSU 12.1.0.2.160419, Oracle JavaVM Component (Apr2016) Created on : 5 Apr 2016, 08:56:18 hrs PST8PDT Bugs fixed: ... Patch(sqlpatch) 22291127: applied on 2016-05-06T17:33:25Z Unique Patch ID: 19694308 Patch Description: Database Patch Set Update : 12.1.0.2.160419 (22291127) Created on : 6 Apr 2016, 03:46:21 hrs PST8PDT Bugs fixed: ...Der Umstand, dass die genaue Auflistung der Software Only Patches nur mit Hilfe des SYSDBA funktioniert, hat Security technische Aspekte. Dies ist insoweit aber auch nur teilweise ein Nachteil, da die meisten Software Only Patches RAC Rolling Upgradable und Standby First Patchable sind. Dies bedeutet, das zwischen den Patches eine gewisse Kompatibilität herrscht, ansonsten dürfte man in RAC und Data Guard Umgebungen nicht mit unterschiedlichen Patchständen fahren.
Fazit
Heutzutage kann in der Cloud ein Service, der vor einer Woche erstellt wurde, eine ältere Version besitzen, als der aktuell beantrage Service. Dies zu Wissen ist insbesondere wichtig, wenn Daten zwischen den Services bewegt werden sollen. Aber nicht nur bei Cloud Umgebungen ist das Wissen des genauen Versionsstandes unerlässlich, auch wenn gerade kein Zugriff auf das Betriebssystem besteht.Weitere Informationen
Zurück zum Anfang des Artikels
Zurück zur Community-Seite