Blog Sebastian

Blog Sebastian

sebastian blog ohne logo

PDB Erstellung in einer Single Tenant Umgebung verhindern

Veröffentlicht: 18. März 2016
Geschrieben von Sebastian Winkler
Wie verhindere ich das Erstellen einer zweiten PDB in einer Single Tenant Umgebung?

Endlich. Mit 12c bringt Oracle eine Reihe neuer Features und das herausragende ist und bleibt immernoch Multi Tenant. Beim Umstieg stellt sich jedoch für viele Oracle Kunden die Frage, brauche ich dieses Feature wirklich? Ganz abseits von nicht unerheblichen weiteren Lizenzkosten für die Multi Tenant Option, gibt es natürlich den ganz praktischen Nutzen. Wenn ich aber nur jeweils eine Produktive Umgebung mit entsprechender Testumgebung betreibe und auch eine Konsolidierung in eine Multi Tenant Umgebung keinen Sinn macht, bleibt ja immer noch die sogenannte Non-CDB Variante. Also weiter die Architektur der Vorgänger Versionen jetzt mit 12c. Nur leider hat Oracle diese Architektur schon mit 12.1.0.2 für deprecated erklärt. Also bleibt in Zukunft nur die Single Tenant Variante ohne weitere Lizenzkosten. Also eine CDB mit jeweils nur einer zugeordneten PDB. Das Problem: Ich kann nicht verhindern, dass ein eifriger DBA Kollege mit CREATE PLUGGABLE DATABASE eine weitere PDB erstellt. Schwups hat die Lizenzfalle zugeschnappt.

In der Standard Edition erhält man übrigens eine Fehlermeldung, wenn man eine Single Tenant Umgebung aufgebaut hat und das gleiche versucht. Oracle bietet an dieser Stelle in der Enterprise Edition aber keine Hilfe in Form eines einfachen Parameters. Oder doch? Wenn man genau hinschaut findet man einen Hidden Parameter namens '_max_pdbs'.

Leider bewirkt dieser in der Enterprise Edition rein garnichts:

PARAMETER     DESCRIPTION                                                   Session Value   Instance Value

------------  ------------------------------------------------------------- --------------- ----------------

_max_pdbs     Parameter is a hint to adjust certain attributes of the CDB   2               2

 

Meine Lösung dazu sieht also folgendermaßen aus:

Zunächst sollten man allen Usern und Roles das CREATE PLUGGABLE DATABASE entziehen:

REVOKE create pluggable database FROM <any_granted_user>;

 

Im zweiten Schritt implementiert man einen entsprechenden Event Trigger, der auch dem letzten User (SYS) das Erstellen einer weiteren PDB verwehrt:

CREATE OR REPLACE TRIGGER prevent_pdb_creation
     BEFORE CREATE ON DATABASE
DECLARE
     numcdbs NUMBER := 0;
BEGIN
     IF (ora_dict_obj_type = 'PLUGGABLE DATABASE')
     THEN
       SELECT count(*)
       INTO numcdbs
       FROM cdb_pdbs
       WHERE pdb_name != 'PDB$SEED'
       AND status != 'UNPLUGGED';
       IF ( numcdbs >= 1 )
       THEN
         RAISE_APPLICATION_ERROR(-20007,'Maximum number of pluggable databases exeeded ' );
       END IF;
       ELSE
       NULL;
     END IF;
END;

Ich hoffe ich konnte an dieser Stelle Abhilfe für ein wichtiges Problem geben.

 

Falls Sie noch Fragen oder Anregungen haben melden Sie sich einfach bei uns oder nutzen den Kommentarbereich.

 

Sebastian Winkler

CarajanDB GmbH

Siemensstr. 25  50374 Erftstadt

Fon: +49 (2235) 170 91 83

Fax: +49 (2235) 170 79 78

Mail: info@carajandb.com

 

carajan-db-logo