Blog Johannes

Blog Johannes

johannes blog ohne logo

Blog Johannes

Multitenant Snapshot Copy

Veröffentlicht: 30. Oktober 2014
Geschrieben von Johannes Ahrends

"Snapshot Copies" beschäftigen uns schon eine ganze Weile. Angefangen mit den Storage Herstellern, wie Oracle / SUN oder NetApp, die entsprechende Funktionen datenbankunabhängig anbieten über spezielle Lösungen, wie Delphix und Actifio, bis hin zur in Version 11.2.0.3 eingeführten Funktion "CloneDB" gibt es diverse Möglichkeiten, "Copy On Write" Kopien einer Oracle Daten herzustellen.

Durch die Multitenant Database Option von Oracle 12c gibt es jetzt zunächst einmal die Möglichkeit, sehr einfach eine Pluggable Database zu kopieren; "Push Button" war ein geflügeltes Wort auf der diesjährigen Oracle OpenWorld. Auch Snapshot Copies von Pluggable Databases sind mit 12.1.0.1 möglich, allerdings nur für spezielle Storage Lösungen. Diese Limitierung wurde mit 12.1.0.2 aufgehoben. Jetzt ist es nur noch erforderlich, dass Direct NFS als Storage der Datenbank verwendet wird. 

Direct NFS

Wie Direct NFS aufgesetzt wird, hat mein Kollege Sebastian Winkler bereits detailliert in dem Blog http://www.carajandb.com/de/blogs/blog-swinkler/177-oracle-direct-nfs-unter-linux-und-windows-konfigurieren beschrieben. Für weitere Details wird auf den Artikel verwiesen.

Keystore

Bevor man Snapshot Copies benutzen kann muss zunächst ein so genannter Keystore mit dem Passwort des NFS-Servers erstellt werden. Leider ist Advanced Security nicht meine Stärke, daher nehmen Sie bitte das Beispiel nicht als "Best Practice", sondern lassen Sie den Keystore vor der Produktivschaltung von einem Experten überprüfen bzw. einrichten. Der Einfachheithalber habe ich den Keystore in das Verzeichnis /home/oracle gelegt. Dieses Verzeichnis muss in der sqlnet.ora als Wallet Location angegeben werden:

% cat sqlnet.ora
ENCRYPTION_WALLET_LOCATION=
   (SOURCE=
      (METHOD=FILE)
      (METHOD_DATA=
         (DIRECTORY=/home/oracle)))

Jetzt kann der Keystore im Verzeichnis /home/oracle angelegt werden.

SQL> ADMINISTER KEY MANAGEMENT
     CREATE KEYSTORE '/home/oracle/' IDENTIFIED BY oracle;

Natürlich sollte das Passwort etwas komplexer sein.

Jetzt kann der Keystore geöffnet werden und das Passwort für den NFS Server wrid entsprechend abgespeichert.

SQL> ADMINISTER KEY MANAGEMENT SET KEYSTORE OPEN
     IDENTIFIED BY oracle CONTAINER=ALL;
SQL> ADMINISTER KEY MANAGEMENT
     ADD SECRET 'manager' FOR CLIENT 'synology1'
     USING TAG 'oracle' IDENTIFIED BY oracle WITH BACKUP;

Auch hier sollten natürlich etwas komplexere Passworte verwendet werden.

Snapshot Copy

Jetzt muss nur noch der Datenbank erklärt werden, dass wir gerne Snapshot Clones erstellen möchten. Leider muss hierfür die Instanz einmal durchgestartet werden.

SQL> ALTER SYSTEM SET clonedb=true SCOPE=spfile;
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP;

Als erstes werden wir jetzt die Pluggable Database "SONATE1" erstellen. Sie dient als Quelle für unser Cloning und muss auf dem gleichen Storage liegen, wie die späteren Snapshot Copies.  In unserem Beispiel also auf einem NFS-Laufwerk. Die Pluggable Database muss Read-Only geöffnet werden und kann, solange sich irgendwelche Kopien hierauf beziehen, weder gelöscht noch heruntergefahren werden.

Bei der Version 12.1.0.1 war es noch notwendig, mit einem "On Startup Trigger" dafür zu sorgen, dass beim Starten der Instanz die PDB auch wieder geöffnet wird. Mit der neuen Funktion "PDB State Management accross CDB Restart" kann man seit 12.1.0.2 festlegen, welchen Status eine PDB nach dem Restart der Instanz bekommen soll. 

Eine weitere nette Funktion ist die Möglichkeit, ab der Version 12.1.0.2 einer Pluggable Database bei Oracle Managed Files (OMF) einen individuellen Pfad mitzugeben. Bitte verwechseln Sie nicht die neue Kommandoption CREATE_FILE_DEST für die Pluggable Database mit dem Oracle Parameter DB_CREATE_FILE_DEST, die, wie bisher, das Verzeichnis für alle Datenbankdateien bei OMF angibt.

SQL> CREATE PLUGGABLE DATABASE sonate1
      ADMIN USER pdb_admin IDENTIFIED BY manager
     CREATE_FILE_DEST='/u02/oranfs/JOSEPH/SONATE1';
SQL> ALTER PLUGGABLE DATABASE sonate1 OPEN;
SQL> ALTER PLUGGABLE DATABASE sonate1 OPEN READ ONLY FORCE;
SQL> ALTER PLUGGABLE DATABASE sonate1 SAVE STATE;

Das Verzeichnis “SONATE1” muss an dieser Stelle bereits vorhanden sein.

Und jetzt ist "Show Time"!

SQL> CREATE PLUGGABLE DATABASE sonatine
       FROM sonate1 CREATE_FILE_DEST='/u02/oranfs/JOSEPH/SONATINE' 
       SNAPSHOT COPY;
SQL> ALTER PLUGGABLE DATABASE sonatine OPEN;

Verification

Wenn man sich das Ergebnis ansieht, stellt man zunächst einmal keinen Unterschied zu einer "normalen" PDB fest:snapshot copy

Die Größe der Datendateien der PDB 7 und 8 sind gleich. Auch auf dem Betriebssystem sieht das erst einmal genau so aus:

$ ls -lSONATE1/JOSEPH/00AB52D5EA461844E053191E10ACC948/datafile/
total 819276
-rwxrwxrwx 1 oracle oinstall 576724992 Aug 15 14:43 o1_mf_sysaux_9yvzxzcq_.dbf
-rwxrwxrwx 1 oracle oinstall 262152192 Aug 15 14:43 o1_mf_system_9yvzxzc8_.dbf
-rwxrwxrwx 1 oracle oinstall  20979712 Aug 15 14:40 o1_mf_temp_9yvzxzd1_.dbf

$ ls -l SONATINE/JOSEPH/00AB52D5EA481844E053191E10ACC948/datafile/
total 196
-rwxrwxrwx 1 oracle oinstall 576724992 Aug 15 14:45 o1_mf_sysaux_9yw037m1_.dbf
-rwxrwxrwx 1 oracle oinstall 262152192 Aug 15 14:45 o1_mf_system_9yw037k6_.dbf
-rwxrwxrwx 1 oracle oinstall  20979712 Aug 15 14:43 o1_mf_temp_9yw037ns_.dbf

Haben wir einen Fehler gemacht?

Der UNIX Befehl “du” gibt uns die richtige Antwort:

$ du -sh *
801M SONATE1
952K SONATINE

Diese Ausgabe zeigt, dass die PDB SONATINE nur ca. 1 MB Speicherplatz beansprucht, während die PDB SONATE 800 MB groß ist.

Zusammenfassung

Multitenant Database mit Direct NFS ist der nächste Schritt in Richtung Database as a Server (DBaaS). Jetzt ist es wirklich einfach, zig Kopien einer Datenbank für Test und Entwicklung innerhalb von Sekunden zur Verfügung zu stellen und dafür kaum zusätzlichen Storage zu verwenden.

Johannes Ahrends

Twitter CarajanDB

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