Logo Oracle Deutschland Datenbank & Cloud Community  -  Oktober 2016
Cloud-Datenbanken für Test und Entwicklung mittels Snapshots erzeugen
von Manuel Hoßfeld, Oracle Deutschland B.V. & Co. KG

Database-as-a-Service in der Oracle Cloud bietet mit dem Oracle Database Cloud Service (DBCS) die Möglichkeit, schnell neue Datenbanken zu erzeugen. Welche Varianten es dabei gibt und wie im einzelnen vorzugehen ist wurde bereits in einigen Grundlagen-Artikeln (Teil 1, Teil 2, Teil 3) beschrieben. Unabhängig von der gewählten Ausprägung und Version (11g oder 12c) sind die so erzeugten Cloud-Datenbanken zunächst leer. Gerade für regelmässige Test- und Entwicklungszwecke benötigt man aber häufig bereits "gefüllte" Datenbanken - sei es um auf Basis von gleichen Daten eine Anwendung weiterzuentwickeln oder auch für Tests mittels Auszügen von Produktionsdaten.

In diesem Artikel geht es daher genau darum, wie man möglichst schnell und einfach eine neue DBCS Instanz auf Basis einer bereits zuvor existierenden Datenbank erzeugen kann - inklusive deren Inhalte.

Möglichkeiten zur Erstellung von DBCS Instanzen mit Datenbank-Inhalten

Im folgenden verwenden wir zur Illustration der Einfachheit halber folgendes Szenario: Ein Entwickler benötigt periodisch eine neue Datenbank in der Cloud, um mit dieser verschiedene Module einer Anwendung zu entwickeln oder zu verbessern. Um dabei nicht jedes Mal "bei Null" anfangen zu müssen, bekommt er die Datenbank mit einem Satz Stammdaten zur Verfügung gestellt, welche die Anwendung in jedem Fall benötigt.

Zu Beginn lohnt es sich, die grundsätzlichen Möglichkeiten für das gerade beschriebene Szenario zu betrachten:

Funktionsweise von Snapshots bei DBCS

Technisch gesehen basieren DBCS Instanzen auf einer VM, in der eine Oracle Datenbank läuft. Die Daten dieser VM widerum (Betriebssystem, ORACLE_HOME, Datenbankinhalte) liegen auf verschiedenen "virtuellen Festplatten" als sogenannter Block Storage vor. Diese zugrunde liegende Infrastruktur entspricht letztlich dem Oracle Compute Cloud Service bzw. nutzt dessen Fähigkeiten. Eine dieser Fähigkeiten ist es, Snapshots von Block Storage Volumes zu erzeugen und aus diesen später wieder neue "virtuelle Festplatten" als Klon anzufertigen. Das Snapshot-Feature von DBCS nutzt dies, um von sämtlichen an einer DBCS VM angeschlossenen Volumes einen Storage Snapshot anzulegen. Da dies im laufenden Betrieb geschieht, wird die Datenbank zu diesem Zeitpunkt kurz in den Backup-Modus versetzt, um einen konsistenten Datenzustand zu gewährleisten.

Will man nun später einen inhaltlich identischen "Abzug" der Datenbank zum Zeitpunkt des Snapshots erstellen, kann dies jederzeit über das Erzeugen einer neuen DBCS Instanz als sogenannter "Linked Clone" erfolgen. Diese neue, "geklonte" DBCS Instanz ist dann unabhängig von der Quelle, kann also durchaus auch neue oder geänderte Daten beinhalten. Da es sich hier um "Copy on Write" (CoW) Snapshots handelt, spielt die Größe der Originaldatenbank für die Zeit zur Erzeugung des "Linked Clones" keine Rolle.

Da wir es hier letztlich mit Snapshots für den gesamten Storage-Anteil der DBCS VM zu tun haben, umfasst deren Inhalt übrigens nicht nur die Datenbank selbst, sondern auch deren Konfiguration und sämtliche Dinge die "außerhalb" der Datenbank im Dateisystem liegen - wie z.B. etwaige zusätzliche Daten die als BFILEs, external tables oder ähnliches gespeichert sind. Eine Ausnahme stellt hierbei die interne Datenbank-ID (DBID) dar, die für jede Datenbank eindeutig sein muss und daher automatisch beim Erzeugen des Klons neu vergeben wird.

Hinweis: Das hier beschriebene Snapshot Feature kann derzeit nur bei DBCS Instanzen vom Typ "Single Instance" (also nicht für RAC) verwendet werden.

Beispiel für das Erzeugen einer neuen DBCS Instanz aus einem Snapshot

Schauen wir uns nun anhand eines konkreten Beispiels an, wie das gerade beschriebene Snapshot Feature funktioniert.

Schritt 1: Der Entwickler aus unserem eingangs beschriebenen Szenario (oder ein DBA in dessen Auftrag) legt einmalig als "Quelle" für spätere Weiterentwicklungen und Tests einer Anwendung eine DBCS Instanz mit einer 12c Enterprise Edition an. In unserem Beispiel heisst sie "SnapDB1". Darin läuft eine PDB namens "TestPDB", welche widerum über ein ein Schema "Entwickler" verfügt. Für die Nutzung des Snapshot Features spielt die Edition / das Optionsbundle sowie die Datenbank-Version der entsprechenden DBCS Instanz keine Rolle. Im Schema des Entwicklers liegt eine simple Stammdaten-Tabelle, welche die Basis für ein Shop-System ist:

[oracle@SnapDB1 ~]$ sqlplus entwickler@testpdb

SQL*Plus: Release 12.1.0.2.0 Production on Tue Oct 11 14:43:53 2016

Copyright (c) 1982, 2014, Oracle.  All rights reserved.

Enter password:
Last Successful login time: Tue Oct 11 2016 13:52:08 +00:00

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

SQL> desc stammdaten
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 ID                                        NOT NULL NUMBER
 FARBE                                              VARCHAR2(20)
 GROESSE                                            VARCHAR2(20)

SQL> select * from stammdaten;

        ID FARBE                GROESSE
---------- -------------------- --------------------
         1 rot                  m
         2 blau                 l
         3 gelb                 s

            

Schritt 2: Der Snapshot wird erzeugt. Dazu wird der Knopf "Create Storage Snapshot" im Tab "Snapshots" im Bereich "Administration" der Detailansicht in der DBCS Konsole verwendet. Im dann erscheinenden Dialog vergibt man einen Namen für den Snapshot sowie optional eine Beschreibung:

Nach Klick auf "Create" erscheint noch ein finaler Bestätigungsdialog, der darauf hinweist dass die Datenbank während der Erstellung des Snapshots in den Backup Modus versetzt wird. Nochmaliges Klicken auf "Create" startet dann die Erzeugung des Snapshots.

Nach wenigen Minuten ist dieser fertig und wird anschließend auf der gleichen Seite unter der Überschrift "Available Storage Snapshots" aufgeführt.

Schritt 3: Der Entwickler benötigt eine neue Datenbank und erzeugt diese aus dem oben angelegten Snapshot. Dazu wird aus dem Kontextmenü rechts neben dem Eintrag des Snapshots der Eintrag "Create Database Clone" ausgewählt:

Es öffnet sich ein Wizard, welcher dem "normalen" Wizard zum Provisionieren neuer DBCS Instanzen nahezu gleicht - mit zwei kleinen Unterschieden:

  1. Oben rechts (unter dem "Next" Knopf) ist der Name des Snapshots sowie der Name der Quell-Datenbank ("Source Service Name") ausgewiesen.
  2. Einige Felder und Optionen sind ausgegraut, die sonst frei wählbar wären. Dies liegt daran dass verschiedene Merkmale des Klons wie z.B. Edition oder Version der Datenbank mit der Quelle übereinstimmen müssen und somit festgelegt sind.

Schritt 4: Nachdem die neue DBCS Instanz als Klon erfolgreich erzeugt wurde, kann die Datenbank darin wie üblich verwendet werden. Als kleinen Test fügen wir der Stammdatentabelle eine neue Zeile hinzu:

[oracle@dbcs-clone ~]$ sqlplus entwickler@testpdb

SQL> insert into stammdaten values (4, 'schwarz', 'xl');

1 row created.

SQL> commit;

Commit complete.

SQL> select * from stammdaten;

        ID FARBE                GROESSE
---------- -------------------- --------------------
         4 schwarz              xl
         1 rot                  m
         2 blau                 l
         3 gelb                 s

Wie schon weiter oben beschrieben ist der Klon unabhängig vom Original, d.h. der Inhalt der Quelldatenbank hat sich durch den gerade durchgeführten INSERT nicht geändert.

Die "Abstammung" unserer neuen DBCS Instanz, die wir "dbcs-clone" genannt haben, kann übrigens jederzeit aus der Snapshot Übersicht ersehen werden:

Schlußbemerkungen

Wie wir gesehen haben, ist das Erzeugen von Cloud Datenbanken inklusive Inhalt mittels Snapshots im Database Cloud Service sehr einfach zu handhaben.

Prinzipiell können beide Datenbanken ("Original" und "Klon") sich nun inhaltlich beliebig weit voneinander entfernen.

Solange der Snapshot besteht, kann jederzeit ein neuer/zusätzlicher Klon daraus erzeugt werden. Gelöscht werden kann der Snapshot allerdings erst dann, wenn es keine darauf basierenden DBCS Instanzen mehr gibt - daher auch der Begriff "linked clone".

Weitere Informationen

Dokumentation:

Das entsprechende Kapitel aus dem DBCS Handbuch finden Sie hier:

Using Oracle Database Cloud - Creating a Database Deployment from a Snapshot

Zurück zum Anfang des Artikels

Zurück zur Community-Seite