Logo Oracle Deutschland   DBA Community  -  November 2015
Datenbank-Cloning - gDBClone - ACFS Snapshot Management Script
von Sebastian Solbach ORACLE Deutschland B.V. & Co.KG

Egal ob für Testumgebungen, Entwicklungsumgebungen oder Sicherungen, das Klonen von Datenbanken hat viele Anwendungsmöglichkeiten. Das Klonen mit der ACFS Snapshot Funktionalität im Umfeld von Oracle 12c Multitenant wurde auf der DBA Community in einem früheren Tipp schon beleuchtet.

Was aber tun, wenn keine Multitenant Option zur Verfügung steht, wie zum Beispiel bei einer 11gR2 Datenbank mit der genau ein Upgrade auf 12c getestet werden soll? Oder wenn die Datenbank eine 12c Non-CDB ist oder gar die komplette 12c Multitenant Datenbank mit allen darin enthaltenen Pluggable Datenbanken geklont werden soll?

Auch hierfür kann natürlich die ACFS Snapshot Funktionalität eingesetzt werden. Allerdings sind die einzelnen Schritte von einer kompletten Datenbank einen Snapshot Klon zu erstellen erheblich aufwändiger als ein einfaches SQL, wie es bei Multitenant der Fall ist. Damit dies nicht komplett manuell geschehen muss, stellt Oracle hierfür ein frei verfügbares Perl Script bereit, welches alle notwenigen Einzelschritte die für einen ACFS Snapshot Klon notwendig sind übernimmt - das sogenannte gDBClone .

Der Tipp untergliedert sich in folgende Bereiche

ASM Cluster Filesystem (ACFS) für Oracle Datenbanken

Die grundlegenden ASM Cluster Filesystem Funktionalitäten und Grundlagen zu ACFS Snapshots wurden im Tipp zu Datenbank-Cloning - ACFS & 12c Multitenant schon einmal ausführlich beschrieben. Deshalb sollten die generischen Voraussetzungen für einen Snapshot Klon mit ACFS und die Abhängigkeiten zur entsprechenden Grid Infrastruktur und Datenbank Release hier nochmals nachgelesen werden, wenn diese nicht mehr präsent sind.

ACFS Snapshot mit gDBClone

Bei gDBClone handelt es sich um ein frei verfügbares Perl Skript , welches auch nach Bedarf angepasst werden kann. Das Skript wird als Administrationsbenutzer Root ausgeführt und kann von kompletten RAC oder Single Instanz Datenbanken, die in einer Cluster Grid Infrastruktur laufen, Datenbankkopien erzeugen. Das Environment sollte hierbei im Zielsystem, von dem aus gDBCLone aufgerufen wird, auf das ORACLE_HOME der Datenbankversion gesetzt sein, die kopiert werden sollte. Empfehlung ist es hierbei, denselben Softwarestand installiert zu haben wie auf dem Source System. Das Ziel kann wiederum eine RAC Instanz sein, es ist aber ebenfalls möglich die Kopie in eine Single Instanz oder RAC Datenbank zu konvertieren. Die Funktionsfähigkeit des gDBClone Skript geht dabei davon aus, dass sowohl das Source als auch das Zielsystem mit einer Clusterversion der Grid Infrastruktur installiert ist.

Das Vorgehen bei gDBCLone sieht dabei vor, dass auch Datenbanken, die sich bisher nicht auf einem ACFS Filesystem befinden, erst dorthin kopiert werden müssen. Dies ist insbesondere auch deshalb interessant, da die Copy on Write Funktionalität von Snapshot-fähigen Filesystemen ungern direkt auf dem Produktionsserver ausgeführt werden, da natürlich das spätere Ändern eines Snapshots (wenn zum Beispiel die Datenbank geändert wird) durchaus Auswirkungen auf die Produktivinstanz hätte. Daher geht gDBClone im ersten Schritt davon aus, dass eine komplette Kopie einer Datenbank auf einen anderes Serversystem mit 12.1.0.2 Grid Infrastruktur und ACFS stattfindet. Theoretisch unterstützt gDBCLone auch das Kopieren von ASM nach ASM, da es sich hier der Standard RMAN Duplicate Funktionalität bedient. Allerdings ist dies offiziell von Oracle nicht getestet.

Befindet sich die Produktivdatenbank bereits auf ACFS, so ist natürlich unter Berücksichtigung der oben erwähnten Auswirkungen, auch eine direkte Erstellung eines ACFS Snapshots zum Datenbankcloning möglich.

gDBClone verfügt dabei über eine recht ausführliche Hilfe, welche Funktionalitäten dabei von gDBClone unterstützt werden:

]# ./gDBClone
usage:
     gDBClone clone -sdbname 
                    -sdbhost  | -sbckloc ''
                    -tdbname  -acfs 
                    [ -sdbport  ] [ -tdbport  ]
                    [ -racmod  ]
     gDBClone snap  -sdbname  -tdbname 
                    [ -sdbport  ] [ -tdbport  ]
                    [ -racmod  ]

     gDBClone listdb [ -tree ] | [ -verbose ]
     gDBClone deldb  -tdbname  [ -force ]

     gDBClone OPTIONS
     -sdbname   Source Database Name
     -sdbhost   Source DB Host SCAN Name
     -sdbport   Source DB SCAN Listener Port (default 1521)
     -sbckloc   Source RMAN Full Backup Location
     -tdbname   Target Database Name
     -tdbport   Target DB SCAN Listener Port (default 1521)
     -racmod    0/1/2 == SINGLE/RACONE/RAC (default 0)
     -acfs      The target storage is ACFS
     -tree      With listdb will show the Parent/Snapshot tree
     -verbose   Display OH & version on listdb
     -force     With deldb will unregister the db
     -debug     Verbose commands output/trace
  • CLONE - erzeugt eine komplette Kopie einer Datenbank. Als Ziel sollte wie oben erwähnt ein ACFS Filesystem verwendet werden. Optional ist es mit der Option "-sbckloc" auch möglich die Kopie mit Hilfe eines Backups zu erzeugen, um das Produktivsystem nicht zu beeinträchtigen. Beim Klonen kann direkt der Zieldatenbankname, als auch der RAC-Modus mit "-racmod" angegeben werden, welcher die Konfiguration als Single Instanz, RAC One Node oder RAC der Zieldatenbank bestimmt.
  • SNAP - bezeichnet die Funktion eine Datenbank, die sich auf ACFS befindet, mit einem ACFS Snapshot zu klonen. Dies ist erheblich schneller, als die reine Kopie. Je größer die Datenbank desto eher macht sich der Zeitunterschied zwischen einem kompletten RMAN Klone und einem ACFS Snapshot bemerkbar.
  • LISTDB - listet die vorhanden Datenbanken auf und zeigt ebenfalls an, ob es sich um eine komplette Kopie, ein Orginal oder um einen Snapshot handelt. Ebenso wird angezeigt, welche Datenbank dabei der sogenannte Parent ist, da es auch möglich ist von einem existierenden Snapshot einen weiteren Snapshot zu erzeugen:
    # ./gDBClone listdb
    
    DB Name   DB Type     DB Role  Location/Parent
    --------  ----------- -------- ----------------
    SNAP0     SINGLE      Snapshot GOLD           
    SNAP3     RACOneNode  Snapshot SNAP1          
    SNAP4     SINGLE      Snapshot SNAP3          
    SNAP2     RACOneNode  Snapshot GOLD           
    SNAP5     SINGLE      Snapshot SNAP1          
    GOLD      RAC         Master   /cloudfs       
    SNAP1     SINGLE      Snapshot SNAP0 
    
  • DELDB - löscht die Datenbank (inklusive des ggf. erzeugten ACFS Snapshots)
Das normale Vorgehen mit gDBClone sieht also vor, dass zuerst die Produktionsdatenbank auf ein Cluster mit der aktuellen ACFS Version kopiert wird. Hierzu wird im ersten Schritt ein "gDBClone clone" vom Zielhost ausgeführt. Hier der Output einer solchen Kopieraktion:
./gDBClone clone -sdbname ssdb -sdbhost bumucsvm1-scan -tdbname sclone -acfs /u01/app/oracle/oradata
2015-10-15 23:16:57: I Checking source host bumucsvm1-scan...
2015-10-15 23:16:57: I Getting host info...
2015-10-15 23:16:57: I Starting.....
2015-10-15 23:16:57: I Validating environment.....

Enter the source ssdb SYSDBA password:
2015-10-15 23:17:02: I Checking SCAN listener bumucsvm1-scan:1521...
2015-10-15 23:17:05: I Getting OH version...
2015-10-15 23:17:25: I Checking SCAN listener bumucsvm1.de.oracle.com:1521...
2015-10-15 23:17:27: I Checking registered instance SCLONE ...
2015-10-15 23:17:34: I Checking if the /u01/app/oracle/oradata is an ACFS file system
2015-10-15 23:17:34: I Setting up clone environment....
2015-10-15 23:17:35: I Starting auxiliary listener....
2015-10-15 23:18:37: I Creating base ACFS snapshot.....
2015-10-15 23:18:38: I Creating dynamic scripts.....
2015-10-15 23:18:38: I Cloning to target ACFS from host bumucsvm1-scan
2015-10-15 23:18:38: I Spfile to target ACFS
2015-10-15 23:18:39: I Instantiating clone database.....
2015-10-15 23:18:39: I please wait (this can take a while depending on database size and/or network speed)

2015-10-16 07:56:29: I Successfully created clone "SCLONE" database
gDBCLone verwendet beim Klonen von Datenbanken, wie oben bereits erwähnt, die ganz normale RMAN Duplicate Funktionalität. Allerdings übernimmt das Script alle notwendigen Voraussetzungen, die sonst manuell aufzusetzen wären. Einen Eindruck der dazu notwendigen einzelnen Schritte, kann der Tipp "Standby Datenbank in 5 Minuten" geben. Im Gegensatz zur herkömmlichen Kopie ist dabei, dass ein eigener ACFS Snapshot erstellt wird, selbst wenn es sich um die erste orginäre Kopie handelt. Dies ist notwendig, um auch beim Kopieren mehrerer Datenbanken in dasselbe ACFS Filesystem, eine Granularität für spätere ACFS Snapshots zu erhalten, ohne dass alle anderen unnötigen Dateien anderen Datenbanken mit gesnapped werden müssten.

Nichts desto trotz kann überlegt werden gDBClone auch zu verwenden um eine Standby Datenbank automatisch zu erzeugen, ohne dass selber das RMAN Skript dazu erzeugt werden müsste. Zielsystem müsste dann allerdings ein RAC mit aktueller Grid Infrastruktur und ACFS sein.

Als nächster Schritt folgt bei gDBClone dann die eigentliche Snapshot Kopie mit Hilfe eines ACFS Filesystem Snapshosts:
./gDBClone snap -sdbname sclone -tdbname DOAG
2015-10-16 08:38:36: I Getting host info...
2015-10-16 08:38:36: I Starting.....
2015-10-16 08:38:36: I Validating environment.....

Enter the source SCLONE SYSDBA password:
2015-10-16 08:38:43: I Getting OH version...
2015-10-16 08:39:05: I Checking SCAN listener bumucsvm1.de.oracle.com:1521...
2015-10-16 08:39:06: I Checking database DOAG existence...
2015-10-16 08:39:07: I Checking registered instance DOAG ...
2015-10-16 08:39:21: I Checking if the Source Database SCLONE it's on ASM
2015-10-16 08:39:21: I Source Database SCLONE it's on ACFS
2015-10-16 08:39:21: I Checking snapshot DOAG existence
2015-10-16 08:39:21: I Setting up clone environment....
2015-10-16 08:39:22: I Starting auxiliary listener....
2015-10-16 08:40:22: I Creating ACFS snapshot.....
2015-10-16 08:40:44: I Checking if the source database SCLONE is stored on an ACFS snapshot
2015-10-16 08:40:44: I The source database SCLONE is running on an ACFS snapshot
2015-10-16 08:41:12: I Setting up snapshot database.....
2015-10-16 08:41:13: I Creating Clone parameter files
2015-10-16 08:41:18: I Activating clone database.....
2015-10-16 08:43:40: I Successfully created clone "DOAG" database
Dabei kümmert sich gDBClone um alle notwendigen Schritte eines solchen Snapshot Klons. Dazu gehören das neu Anlegen der Redologs, die DBID mit dbnid zu ändern und die ggf. notwendigen RAC Änderungen mit der Registrierung in der Oracle Clusterware.

Der Snapshot schreibt die geänderten Daten automatisch in dasselbe ACFS Filesystem, wie auch die Datenbank, von der der Snapshot erstellt wurde. Zur genauen Überwachung des Plattenplatzen wird der Befehl "acfsutil" verwendet, der im Tipp ACFS Snapshot Funktionalität im Umfeld von Oracle 12c Multitenant beschrieben ist.

Sollte der Snapshot oder die Datenbank-Kopie nicht mehr benötigt werden, kann diese einfach mit gDBClone auch wieder gelöscht werden. Dieser Schritt erfordert die notwendige Sorgfalt, denn es gibt kein UNDO und funktioniert sowohl beim Snapshot, wie auch beim Master.
# ./gDBClone deldb -tdbname DOAG
You are going to drop the database DOAG, are you sure (Y/N)? y
Connecting to database
47% complete
updating network configuration files
52% complete
Deleting instance and datafiles
76% complete
100% complete
Look at the log file "/u01/app/oracle/cfgtoollogs/dbca/SNAP32.log" for further details.
acfsutil snap delete: Snapshot operation is complete.
ACFS snapshot SNAP3 on /cloudfs ACFS file system has been deleted.
Es ist aber durchaus auch möglich einen "Parent" zu löschen, der davon erzeugt Snapshot wird dadurch nicht invalide. Lediglich der benötigte Speicherplatz wird von ACFS in diesem Falle nicht freigegeben.

Nähere Informationen zu den einzelnen Schritten findet sich auch im veröffentlichten Whitepaper zu gDBClone.

gDBClone Tipps

Damit gDBClone funktioniert gibt es momentan einige zwingende Voraussetzungen:

  • Die Source Datenbank muss sich im Archivelog Modus befinden, damit RMAN die Online Kopie durchführen kann.
  • Die Source Datenbank sollte dabei nicht im Backup Modus laufen. Dieser wird von gDBClone zum Zeitpunkt des ACFS Snapshot Klons automatisch angeschaltet und danach wieder deaktiviert.
  • gDBClone braucht im Moment zwingend Root Benutzer Berechtigungen, da unter anderem für ACFS mount Befehle benötigt werden, die zwingend Root Berechtigungen voraussetzen.
  • Der DBName sollte keine Sonderzeichen enthalten, als auch nicht Case Sensitiv sein. Hierbei kann es zu sehr unvorhergesehenen Auswirkungen kommen (bis hin zu Schwierigkeiten beim Löschen der erzeugten Datenbank/Snapshots).
  • gDBClone verfügt über eine DEBUG Funktion. Es empfiehlt sich generell diese am Anfang eingeschaltet zu lassen. Diese wird mit der Option "-debug" aktiviert. Dabei werden die einzelnen Aktionen von gDBClone protokolliert und Fehler lassen sich schnell erkennen, wie auch schnell beseitigen. Gerade zum Anfang beim initialen Testen ist dies besonders empfehlenswert, auch wenn der Prozess dadurch länger dauert. Dadurch erhält man auch eine gute übersicht über die notwendigen Schritte, was sich gerade während der Lernphase mit dem Perl Skript als sehr lehrreich herausgestellt hat.
  • gDBClone funktioniert nur mit sogenannten Administrator Managed Datenbanken. Policy Managed Datenbanken die auf Server Pools basieren sind nicht unterstützt und gDBClone bricht mit sehr seltsamen Fehlern ab, die nicht direkt auf die eigentliche Ursache hindeuten.
  • gDBClone verfügt über 2 Hidden Kommandos, mit denen direkt die Snapshots angezeigt und gelöscht werden können. Die Informationen lassen sich auch mit dem "acfsutil" ausführen, wie im Tipp zu ACFS Snapshot mit Multitenant beschrieben.
    ./gDBClone listsnap -acfs  [ -tree ]
    ./gDBClone delsnap -snapname  -acfs 
    
  • gDBClone schreibt ein log/trace File unter /var/log/gDBClone in dem einige Informationen zu finden sind, auch wenn nicht mit -debug gearbeitet wurde.
  • Wird die Option "-debug" verwendet, so findet man unter /var/log/gDBClone ebenfalls die verwendeten RMAN bzw. SQL Skripte, die gDBClone beim clone bzw. snap verwendet.

Fazit

Das ASM Cluster Filesystem ist eine performante, kostenlose Lösung um Enterprise Edition Datenbanken mit Hilfe von Copy on Write Technologie schnell zu klonen. Das Perl Skript gDBClone hilft dabei diese Technologie einfach auch mit 11gR2 als auch 12c Datenbanken zu verwenden, auch ohne die Multitenant Datenbankoption. Teuere Storage Lösungen mit vergleichbarer Funktionalität sind dabei nicht notwendig. Wer auf Graphische Benutzeroberfläche, generische Unterstützung und Komfortfunktionen, wie diese 12c Enterprise Manager Snapshot Funktion bietet, verzichten kann, findet mit ACFS und gDBClone eine passende kostengünstige Lösung.

Nützliche Links und Referenzen

  • gDBClone Database Clone/Snapshot Management Script OTN Seite
  • gDBClone Best Practice Whitepaper
  • ACFS Support On OS Platforms (Certification Matrix). (Doc ID 1369107.1)
  • Database Licensing Information - 1 Oracle Database Editions - Oracle ASM Cluster File System (Oracle ACFS)
  • Automatic Storage Management Administrator's Guide - About Oracle ACFS and Database Data Files
  • Benefits of Oracle ACFS
  • Zurück zur Community-Seite