2014-01-20 8 views
5

In Identifying Your Oracle Database Software Release Oracle besagt, dass Sie Ihre „plattformspezifische Release-Nummer“ (Patch-Sets) von PRODUCT_COMPONENT_VERSION Abfrage finden:Wie kann man den aktuellen Oracle-Patchsatz programmatisch finden?

die Release-Stände von

Zur Identifizierung der Version von Oracle Database, die derzeit installiert ist, und um zu sehen, Wenn Sie andere Datenbankkomponenten verwenden, suchen Sie in der Datenwörterbuchansicht PRODUCT_COMPONENT_VERSION.

dies Nach wir verwenden 11.2.0.3.0

SQL> select * from product_component_version; 

PRODUCT        VERSION   STATUS 
----------------------------------- --------------- --------------- 
NLSRTL        11.2.0.3.0  Production 
Oracle Database 11g     11.2.0.3.0  64bit Production 
PL/SQL        11.2.0.3.0  Production 
TNS for Linux:      11.2.0.3.0  Production 

Das gleiche geschieht mit V $ VERSION (die PRODUCT_COMPONENT_VERSION eine Ansicht übrigens):

SQL> select * from v$version; 

BANNER 
--------------------------------------------------------- 

Oracle Database 11g Release 11.2.0.3.0 - 64bit Production 
PL/SQL Release 11.2.0.3.0 - Production 
CORE 11.2.0.3.0  Production 
TNS for Linux: Version 11.2.0.3.0 - Production 
NLSRTL Version 11.2.0.3.0 - Production 

jedoch nach DBA_REGISTRY_HISTORY scheint die Datenbank auf 11.2.0.3.5 zu sein:

SQL> select action, namespace, version, id, comments from dba_registry_history; 

ACTION   NAMESPACE VERSION   ID COMMENTS 
--------------- --------- ---------- ---------- ------------------------------ 
VIEW INVALIDATE       8289601 view invalidation 
UPGRADE   SERVER 11.2.0.3.0   Upgraded from 11.2.0.1.0 
APPLY   SERVER 11.2.0.3   0 Patchset 11.2.0.2.0 
APPLY   SERVER 11.2.0.3   5 PSU 11.2.0.3.5 

DBA_REGISTRY_HISTORY enthält nicht unbedingt Daten, daher kann ich diese Ansicht nicht zuverlässig verwenden. Und Oracle scheint keine standardisierte Methode zur Verfügung zu stellen, um das Kommentarfeld zu füllen, in dem ich das Folgende zu tun scheint und dann zu beten, dass es funktioniert.

Gibt es eine einfachere, zuverlässige Methode, um die aktuelle Version einschließlich Programmkorrektur programmgesteuert zu finden?

1. Auch möglich: Ich habe das komplett falsch verstanden und die Leute haben vergessen, was sie gepatcht haben.

+0

Interessant - das Banner, das bei der Anmeldung mit SQL/Plus angezeigt wird, und jede einzelne Ansicht oder Tabelle in meiner Datenbank gibt 0 für den letzten Teil der Versionsnummer zurück, * außer für * dba_registry_history. http://oracle-dba-yi.blogspot.de/2011/04/how-to-find-database-related-version.html behauptet, dass "nachfolgende kumulative Patch-Sets Installationen, ... nicht immer in angezeigt werden das Banner. " und empfiehlt anschließend die Auswahl aus dba_registry_history, also scheint das der richtige Weg zu sein. Beachten Sie auch, dass die ID-Spalte identisch mit der Patch-Version zu sein scheint, aber ich habe keine Ahnung, wie zuverlässig das ist. –

Antwort

3

Wie ich kann nicht garantieren, dass DBA_REGISTRY_HISTORY sogar bevölkert werden, obwohl es scheint die richtigen Patch-Sets zu geben, die ich habe Sie folgendermaßen vorgehen ende bis zu von V $ VERSION bevölkert, wenn es nichts.

with drh as ( 
select max(regexp_replace(comments, '[^[:digit:].]')) 
      keep (dense_rank last order by action_time) as vers 
    from dba_registry_history 
     ) 
, v$v as ( 
select regexp_substr(banner, '(\d+\.?){5}', 1) as vers 
    from v$version 
where lower(banner) like 'oracle%' 
     ) 
select coalesce(drh.vers, v$v.vers) as patch_set 
    from drh 
right outer join v$v 
    on 1 = 1 

Dies funktioniert, weil beide Abfragen nur eine Zeile zurück und ich habe es getestet auf 10.2, 11.2 und 12.1

Es ist jedoch lächerlich und hässlich. Es gibt keine Garantie, dass es nicht bricht, da alles ein Freitextfeld ist und Oracle scheint zu ändern, wie es die Daten in diesen Ansichten gelegentlich anzeigt. Außerdem ist Oracle in diesen Ansichten nicht einmal konsistent. Hier ist eine 12c-Datenbank, beachten Sie, dass das Kommentarfeld den Patch-Set beim Upgrade fälschlicherweise zurücksetzt und dass die Version und Kommentare nicht übereinstimmen.

SQL> select action, version, id, comments from dba_registry_history; 

ACTION   VERSION   ID COMMENTS 
--------------- ---------- -------- ------------------------ 
APPLY   11.2.0.3   0 Patchset 11.2.0.2.0 
APPLY   11.2.0.3   0 Patchset 11.2.0.2.0 
APPLY   11.2.0.3   5 PSU 11.2.0.3.5 
VIEW INVALIDATE    8289601 view invalidation 
UPGRADE   12.1.0.1.0   Upgraded from 11.2.0.3.0 
APPLY   12.1.0.1   0 Patchset 12.1.0.0.0 

6 rows selected. 

Also, wäre es noch schön, wenn diese Daten in einer Weise ausgesetzt wurde, die einfach zu bedienen ist.

+0

Da Sie 12c haben, sollten Sie sich [DBMS_QOPATCH] (http://docs.oracle.com/cd/E16655_01/appdev.121/e17602/d_qopatch.htm#ARPLS74834) ansehen. –

+0

Ich habe auch bemerkt, dass Windows-Patch-Bundles nicht im Banner und nicht in der Registry-History angezeigt werden. Und um nur das Offensichtliche zu sagen, erscheinen sie in der Befehlszeile in "opatch lspatches". Daher [wählen Sie den Extrakt (sys.DBMS_QOPATCH.GET_OPATCH_LIST, '// patchDescription | // appliedDate | // patchID') aus dual; '] (http://docs.oracle.com/database/121/ARPLS/d_qopatch. htm # ARPLS74834) arbeitete für mich. – eckes

-1

- Liste angewendet Patches sqlplus mit

SET linesize 200 pagesize 200 
col action_time FOR a28 
col version FOR a10 
col comments FOR a35 
col action FOR a25 
col namespace FOR a12 
SELECT * FROM registry$history; 

- Liste angewendet Patches mit opatch

$ ORACLE_HOME/OPatch/opatch lsinventory

$ ORACLE_HOME/OPatch/opatch lsinventory | grep " Patch Beschreibung "

$ ORACLE_HOME/OPatch/opatch lsinventory -details

+0

'DBA_REGISTRY_HISTORY' ist eine direkte Auswahl aus' REGISTRY $ HISTORY' ohne Änderung, so dass all dies dazu führt, dass Leute sich ohne Angabe von Gründen als SYS anmelden ... es liefert identische Ergebnisse wie in meiner Antwort. – Ben

+0

Ich bin mir bewusst, dass @ Pooh06, ich sehe nicht, wie Sie das Problem ansprechen, dass ich bereits bewiesen habe, was Sie vorschlagen, funktioniert nicht in der Frage ... – Ben

+0

Ich habe dies für die Vollständigkeit hinzugefügt . Der DBA_REGISTRY_HISTORY ist ein View und SYS.REGISTRY $ HISTORY ist eine Tabelle. Ich ziehe es vor, die Ansicht zu verwenden, weil sie leicht zu merken und praktischer ist. Soweit ich weiß, würde ein normaler Benutzer sowieso einige Privilegien benötigen, um aus dem Datenwörterbuch zu wählen. Wichtig ist, dass wir niemals versuchen sollten, diese Metadaten zu ändern. Andernfalls könnten wir die DB und die Oracle Support-Lizenz brechen. – pooh06