12c New-"Alltags"-Features

03.
April
2018
Veröffentlicht von: Richard Meinhardt

Bei "New Features" 12c denkt man gleich an die großen Brocken: Multitenant, InMemory und natürlich auch an die inzwischen allgegenwärtige Cloud, aber jedes neue Release bringt auch Features mit, die für einen mehr "alltäglichen" Gebrauch geschaffen sind.

Features sind meist keine große Sache, aber so manche" Kleinigkeit" hat schon die Welt verändert. Deswegen hier eine überschaubare Liste von kleinen, aber doch sehr praktischen und teils auch mächtigen Features:

PGA_AGGREGATE_LIMIT

Der neue Parameter PGA_AGGREGATE_LIMIT macht es nun endlich möglich, die PGA zu beschränken. Vor 12c war die PGA immer ein "irgendwie fest verdrahteter möglicher Memory-Leak", es war nicht möglich diesen wirklich zu beschränken. Abfragen lässt sich dieser Parameter wie jeder andere:

SQL> show parameter PGA_AGGREGATE_LIMIT
NAME                  TYPE           VALUE
--------------------- -------------- -------
pga_aggregate_limit   big integer    2G


Sie können die Grenze auf einem Testsystem mit folgendem kleinem PL/SQL-Block auch "austesten":

ACHTUNG: Dieser Block belegt viel Hauptspeicher, bitte nicht auf einem produktiven Server ausführen!

DECLARE
  type array_t is table of varchar2(32767);
  vieltext varchar2(32767) := 'x';
  varray array_t := array_t();
BEGIN
   for i in 1..32766 loop
      vieltext := vieltext || 'x';
   end loop;
  for i in 1..40000 loop
      varray.extend; -- Extend it
      varray(i) := vieltext;
   end loop;
END;
/

Falls in Ihrem System der Parameter höher gesetzt ist, kann es sein, dass Sie die zweite Loop vergrößern müssen.

Wenn die Grenze erreicht wurde erhalten Sie folgenden Fehler:

ORA-04036: PGA memory used by the instance exceeds PGA_AGGREGATE_LIMIT


SQL im RMAN

Klein aber fein, ist die Tatsache, dass man im RMAN seine SQL-Statements nicht mehr mit einer extra Syntax kennzeichnen muss:

oracle@s-tl-040 [asd]:~> rman

Recovery Manager: Release 12.2.0.1.0 - Production on Mon Mar 5 16:13:34 2018

Copyright (c) 1982, 2017, Oracle and/or its affiliates.  All rights reserved.

connected to target database: ASD (DBID=139029862)

RMAN> desc v$session

using target database control file instead of recovery catalog
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 SADDR                                              RAW(8)
 SID                                                NUMBER
 SERIAL#                                            NUMBER
 AUDSID                                             NUMBER
 PADDR                                              RAW(8)
 USER#                                              NUMBER
 USERNAME                                           VARCHAR2(128)
...
 ECID                                               VARCHAR2(64)
 SQL_TRANSLATION_PROFILE_ID                         NUMBER
 PGA_TUNABLE_MEM                                    NUMBER
 SHARD_DDL_STATUS                                   VARCHAR2(8)
 CON_ID                                             NUMBER
 EXTERNAL_NAME                                      VARCHAR2(1024)
 PLSQL_DEBUGGER_CONNECTED                           VARCHAR2(5)

RMAN> select sid, serial#, username, PROGRAM from v$session where username is not null;

       SID    SERIAL# USERNAME   PROGRAM
---------- ---------- ---------- ------------------------------
         6      45620 SYS        oracle@s-tl-040 (OFSD)
        13      46736 SYS        rman@s-tl-040 (TNS V1-V3)
        15      39246 SYS        rman@s-tl-040 (TNS V1-V3)
       301      39376 SYS        sqlplus@s-tl-040 (TNS V1-V3)


Datapump Import ohne Archivierung

Vielleicht nicht wirklich für den alltäglichen Gebrauch, aber eine der praktischen Neuerungen ist die Möglichkeit für einen Import mit Datapump die Archivierung abzuschalten. Vor allem bei großen Imports spart man sich hier viel Zeit und auch Festplattenplatz, auch ohne die Archivierung für die ganze Datenbank abzuschalten.

Das ganze wird mit dem Import-Parameter transform=disable_archive_logging:y bewerkstelligt.

Mit Archivierung:

Import: Release 12.2.0.1.0 - Production on Tue Mar 6 10:39:38 2018

Copyright (c) 1982, 2017, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
Master table "SYSTEM"."SYS_IMPORT_FULL_01" successfully loaded/unloaded
Starting "SYSTEM"."SYS_IMPORT_FULL_01":  system/******** DIRECTORY=DATA_PUMP_DIR DUMPFILE=asdf_schema.dmp
Processing object type SCHEMA_EXPORT/USER
ORA-31684: Object type USER:"ASDF" already exists
...
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
. . imported "ASDF"."BIG_T"                              5.051 GB 45627392 rows
...
Job "SYSTEM"."SYS_IMPORT_FULL_01" completed with 1 error(s) at Tue Mar 6 10:53:43 2018 elapsed 0 00:13:56


Ohne Archivierung:

Import: Release 12.2.0.1.0 - Production on Tue Mar 6 11:17:52 2018

Copyright (c) 1982, 2017, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
Master table "SYSTEM"."SYS_IMPORT_FULL_01" successfully loaded/unloaded
Starting "SYSTEM"."SYS_IMPORT_FULL_01":  system/******** DIRECTORY=DATA_PUMP_DIR DUMPFILE=asdf_schema.dmp transform=disable_archive_logging:y
Processing object type SCHEMA_EXPORT/USER
ORA-31684: Object type USER:"ASDF" already exists
...
Processing object type SCHEMA_EXPORT/TABLE/TABLE_DATA
. . imported "ASDF"."BIG_T"                              5.051 GB 45627392 rows
...
Job "SYSTEM"."SYS_IMPORT_FULL_01" completed with 1 error(s) at Tue Mar 6 11:22:51 2018 elapsed 0 00:04:53

Sollte die Datenbank im "Force Logging Modus" sein, funktioniert es leider nicht.

Natürlich sollten Sie auch nach einer solchen Aktion (genauso wie beim Abschalten der Archivierung) am besten sofort im Anschluss ein Full-Backup der Datenbank durchführen, damit es nicht zu einem Datenverlust (!) kommt.


Patchabfrage in der Datenbank

Mit dem Package DBMS_QOPATCH ist es jetzt möglich in der Datenbank Patches und Bugfixes abzufragen, die man vorher über das OPatch Utility abfragen musste:

SQL> exec dbms_qopatch.get_sqlpatch_status;

Patch Id : 19769486
        Action : APPLY
        Action Time : 13-OCT-2016 17:43:11
        Description : bundle:PSU
        Logfile : /u01/app/oracle/product/12.1.0.1/dbhome_1/sqlpatch/19769486/19769486_apply_ASD_2016Oct13_17_41_50.log
        Status : SUCCESS

Patch Id : 20299016
        Action : APPLY
        Action Time : 13-OCT-2016 17:43:11
        Description : bundle:PSU
        Logfile : /u01/app/oracle/product/12.1.0.1/dbhome_1/sqlpatch/20299016/20299016_apply_ASD_2016Oct13_17_43_02.log
        Status : SUCCESS

Patch Id : 20831107
        Action : APPLY
        Action Time : 13-OCT-2016 17:43:11
        Description : bundle:PSU
        Logfile : /u01/app/oracle/product/12.1.0.1/dbhome_1/sqlpatch/20831107/20831107_apply_ASD_2016Oct13_17_43_04.log
        Status : SUCCESS

Patch Id : 21352619
        Action : APPLY
        Action Time : 13-OCT-2016 17:43:11
        Description : bundle:PSU
        Logfile : /u01/app/oracle/product/12.1.0.1/dbhome_1/sqlpatch/21352619/21352619_apply_ASD_2016Oct13_17_43_05.log
        Status : SUCCESS

Patch Id : 21951844
        Action : APPLY
        Action Time : 13-OCT-2016 17:43:11
        Description : bundle:PSU
        Logfile : /u01/app/oracle/product/12.1.0.1/dbhome_1/sqlpatch/21951844/21951844_apply_ASD_2016Oct13_17_43_07.log
        Status : SUCCESS

Patch Id : 22291141
        Action : APPLY
        Action Time : 13-OCT-2016 17:43:11
        Description : bundle:PSU
        Logfile : /u01/app/oracle/product/12.1.0.1/dbhome_1/sqlpatch/22291141/22291141_apply_ASD_2016Oct13_17_43_08.log
        Status : SUCCESS

Patch Id : 23054354
        Action : APPLY
        Action Time : 13-OCT-2016 17:43:11
        Description : bundle:PSU
        Logfile : /u01/app/oracle/product/12.1.0.1/dbhome_1/sqlpatch/23054354/23054354_apply_ASD_2016Oct13_17_43_10.log
        Status : SUCCESS

PL/SQL procedure successfully completed.


Das Package stellt auch noch weitere Funktionen zur Verfügung, zum Beispiel können Sie direkt abfragen, ob ein bestimmter Patch installiert ist:

SQL> select xmltransform(dbms_qopatch.is_patch_installed('23054354'), dbms_qopatch.get_opatch_xslt) from dual;

XMLTRANSFORM(DBMS_QOPATCH.IS_PATCH_INSTALLED('23054354'),DBMS_QOPATCH.GET_OPATCH_XSLT)
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

Patch Information:
         23054354:   applied on 2016-10-13T17:36:21+02:00

Ein nicht installierter Patch gibt keine Zeile zurück.


Honorable Mentions

Nicht wirklich in diese Liste geschafft hat es der Table restore von RMAN, und das hat folgenden Grund:

Im ersten Moment liest es sich natürlich toll und ich habe mir gedacht:

"Endlich kann der RMAN die Blöcke, die zu einer Tabelle gehören aus einem Backup zusammensuchen und diese einzeln wiederherstellen, ohne extra Instanz und viel Platzverbrauch."

Leider ist es aber so, dass es sich nur um eine automatisierte Variante, der üblichen Verfahren zum Wiederherstellen von Tabellen vor 12c handelt. Und diese ist noch recht Zeit- und Ressourcen-intensiv. Deswegen gibt es ein Sternchen für den Versuch aber es sollte eigentlich noch einfacher gehen. Hoffen wir auf das nächste Release.

Diese wenigen Beispiele repräsentieren lediglich die Meinung des Autors.
Wir sollten die Liste erweitern, dann lassen Sie uns das wissen. Öffnet ein Fenster zum Versenden der E-Mailmit.

Jede Menge Know-how für Sie!

In unserer Know-How Datenbank finden Sie mehr als 300 ausführliche Beiträge zu den Oracle-Themen wie DBA, SQL, PL/SQL, APEX und vielem mehr.
Hier erhalten Sie Antworten auf Ihre Fragen.