Table of Contents
Ziel
Mit diesem Blogeintrag möchte ich einen kurzen Überblick über eines der neuen Hauptfeatures in Oracle 12c Release 1 geben. Mit der Version 12c Release 1 optimiert Oracle seine Produktlinie für die Cloud. In diesem Zuge wurde ein neues Datenbankkonzept, die Container und Pluggable Database, eingeführt. Dieses neue Datenbankdesign gehört zu dem Feature Oracle Multitenant und kann für die Oracle Enterprise Edition als Option dazu erworben werden.
Multitenant Option
Mithilfe der Multitenant Architektur möchte Oracle seine Datenbank fit für die Cloud machen und ermöglicht eine flexiblere Nutzung der zur Verfügung stehenden Resourcen. Dieses Features soll vor allem die Datenbank Konsolidierung verbessern und die Administration vereinfachern und somit die Kosten senken. Im folgendem möchte ich einige der neuen Begrifflichkeiten kurz erläutern und das neue Feature mit einem Alltagsgegenstand vergleichen.
Man kann sich dieses Feature als eine Art Schrank mit Schubladenplätzen vorstellen. Jede Schublade entspricht einer Pluggable Database und ist mit dem Schrankrumpf verbunden und teilt sich dessen grundlegende Resourcen, wie zum Beispiel die Schrankfüße und -wände. Eine Schublade kann ohne einen passenden Schrank nicht alleine funktionieren.
Container Database (kurz CDB)
Die Container Database stellt den Rumpf für die Seed und die Pluggable Databases (kurz PDB) bereit und wird intern als CDB$ROOT (Root Container) bezeichnet. Diese spezielle Datenbank stellt die System Global Area (SGA), das Controlfile, die Redo Logs und das Undo Tablespace bereit. Zusätzlich werden in diesem Root Container Metainformationen, wie zum Beispiel das PL/SQL Data Dictionary und die gemeinsamen Benutzer (Common User) gespeichert.
Seed Database
Jede Container Database besitzt eine Seed Database. Diese Seed Database kann als Vorlage beim Erstellen einer neuen Pluggable Database verwendet werden. Die Seed Database trägt den intrernen Namen PDB$SEED.
Pluggable Database (PDB)
Die Pluggable Databases beinhalten die eigentlichen Anwendungsdaten. Jede Pluggable Database teilt sich die SGA, das Controlfile, die Redo Logs und das Undo Tablespace der Container Database. Jede PDB besitzt ein eigenes SYSTEM und SYSAUX Tablespace und kann über ein eigenes Temporary Tablespace verfügen.
Testumgebung
Für die Demonstration des Multitenant Features verwende ich eine virtuelle Maschine (Oracle VirtualBox). Auf dem Server wurde die Grid Infrastructure für einen Standalone Server (Oracle Restart Konfiguration) und die Oracle Database installiert. Als Betriebssystem kommt CentOS 6.4 zum Einsatz.
Die Oracle Home Verzeichnisses wurden wie folgt konfiguriert.
Software | Besitzer | Pfad |
Grid Infrastructure 12c Release 1 | grid | /u01/app/grid/product/12.1.0/grid |
Oracle Database 12c Release 1 | oracle | /u01/app/oracle/product/12.1.0/dbhome_1 |
Anlegen der Container Database
Im ersten Schritt wird die Container Database angelegt. Die Datenbank kann entweder manuell mithilfe der SQL Anweisung CREATE DATABASE … ENABLE PLUGGABLE DATABASE oder mit dem Datenbankkonfigurations-Assistenten (DBCA) angelegt werden. Ich werde den DBCA an dieser Stelle verwenden, da ich auf einen Nachteil des DBCAs hinweisen möchte.
Der DBCA wird aus dem Oracle Database Home gestartet. Ich werde nur die Schritte zeigen, die sich vom Anlegen einer normalen Datenbank unterscheiden. Als Konfigurationsmodus verwende ich den erweiterten Modus.
Im 4. Schritt der Konfiguration wird der Name der Datenbank gesetzt und es wird festgelegt, dass es sich um eine Container Database handelt. Ich werde eine leere Container Database mit dem Namen CDBTEST anlegen, das heißt, dass nur die Container Database und die Seed Database angelegt werden.
In Schritt 9 sieht man den Nachteil des DBCAs. Wird eine Container Database angelegt, können keine Datenbankkomponenten ausgewählt werden – es werden immer alle Datenbankkomponenten installiert. Möchte man Einfluss auf diese Auswahl nehmen, muss die Container Database manuell angelegt werden. Wie dies geht werde ich in einem separaten Blogartikel zeigen.
Zum Abschluss ein Screenshot der Fortschrittsanzeige. Hier kann man auch eine weitere Neuerung im DBCA sehen. Es besteht die Möglichkeit sich das Aktivitätslog und das Alert-Log anzeigen zu lassen.
Die Container Database wurde erfolgreich angelegt.
Pluggable Database verwalten
In diesem Abschnitt werde ich grundlegende Dinge über das Anlegen und Verwalten von Pluggable Databases erklären. Ich werde für die Demonstration ausschließlich auf SQL*Plus zurückgreifen.
Anmelden an der Container Database
Um sich an der Container Database CDBTEST anzumelden gehe ich wie folgt vor.
[oracle] export ORACLE_SID=CDBTEST [oracle] sqlplus / as sysdba
Alternativ kann aber zum Beispiel auch ein EZCONNECT String verwendet werden.
[oracle] sqlplus sys/oracle@localhost:1521/CDBTEST.dba-blog.de as sysdba
Anzeige aller vorhandener Pluggable Databases
Über die View V$PDBS kann man sich Informationen zu allen verfügbaren Pluggable Databases anzeigen lassen.
[SYS] SELECT con_id, dbid, name, open_mode, open_time FROM v$pdbs; CON_ID DBID NAME OPEN_MODE OPEN_TIME ---------- ---------- ------------------------------ ---------- --------------------------------------------------------------------------- 2 4064672621 PDB$SEED READ ONLY 30.07.13 18:35:58,409
Alternativ kann das SHOW PDBS Kommando verwendet werden. Bei einer leeren Conatiner Database gibt es nur eine Pluggable Database, nämlich die Seed Database.
Pluggable Database anlegen
Um eine neue Pluggable Database mit dem Namen PDB_APP1, die die Seed Database als Vorlage verwendet, anzulegen, reicht der folgende Befehl aus.
[SYS] CREATE PLUGGABLE DATABASE pdb_app1 ADMIN USER app1admin IDENTIFIED BY app1admin;
Die ADMIN USER Klausel bewirkt, dass Oracle einen lokalen Benutzer mit administrativen Rechten (Rolle PDB_DBA) in der Pluggable Database anlegt.
Klonen einer bestehenden Pluggable Database
Alternativ zur Verwendung der Seed Database, kann eine bestehende Pluggable Database geklont werden. Ich werde die Pluggable DatabasePDB_APP1 klonen.
[SYS] ALTER PLUGGABLE DATABASE pdb_app1 OPEN READ ONLY; [SYS] CREATE PLUGGABLE DATABASE pdb_app2 FROM pdb_app1;
Hinweis: Die zu klonende Datenbank muss im schreibgeschützten Modus (Zeile 1) geöffnet sein, anderenfalls wird eine ORA-65081 Fehlermeldung ausgegeben
Öffnen einer Pluggable Database
Nach dem Anlegen oder Klonen einer Pluggable Database befindet sich diese im MOUNTED Modus. Diese kann wie folgt (schreibgeschützt) geöffnet werden Zeile 3 zeigt den alternativen Befehl STARTUP PLUGGABLE DATABASE.
[SYS] ALTER PLUGGABLE DATABASE pdb_app1 OPEN; [SYS] ALTER PLUGGABLE DATABASE pdb_app1 OPEN READ ONLY; [SYS] STARTUP PLUGGABLE DATABASE pdb_app1;
Mit Pluggable Database verbinden
Beim Anlegen einer neuen Pluggable Database erzeugt Oracle einen entsprechenden Service und registriert diesen im Listener. Das heißt, dass man sich direkt mit der Pluggable Database verbinden kann.
[oracle] sqlplus app1admin/app1admin@localhost:1521/PDB_APP1.dba-blog.de
Um nach Anmeldung an der Container Database den Context auf eine der vorhandenen Pluggable Databases zu setzen, muss man den Container auf Session Ebene ändern.
[SYS] ALTER SESSION SET CONTAINER = pdb_app1;
In welchem Container man zurzeit aktiv ist, kann man wie folgt sehen.
[SYS] SHOW con_name;
Um wieder in den Root Container zu wechseln muss man das folgende Kommando verwenden.
[SYS] ALTER SESSION SET CONTAINER = CDB$ROOT;
Fazit
Das Multitenant Feature sorgt für eine bessere Ausnutzung der vorhandenen Resourcen. Zusätzlich werden die Kosten für die Administration und die Wartung gesenkt. Bei der Einspielung eines Patches muss nur noch die Container Database gepatcht werden. Im Zusammenhang mit Hochverfügbarkeits-Features, wie dem Real Application Cluster oder Data Guard kann die Container Database gegen Ausfälle fast jeglicher Art geschützt werden. Die Möglichkeit zum Einfachen “Unplug” und “Plug” einer Pluggable Database ermöglicht das einfache und schnelle Migrieren auf eine anderen Systemumgebung.
Quellen
- Oracle Database Administrator’s Guide 12c Release 1
- Oracle Multitenant Option – 12c : Frequently Asked Questions (Doc ID 1511619.1)
- Master Note for the Oracle Multitenant Option (Doc ID 1519699.1)