PDB Cloning mit Data Guard

Die Herausforderung

Beim Einsatz von Multitenant Database in einer Data Guard Umgebung gibt es einige Besonderheiten. Nachfolgend wird an einem Beispiel erklärt, wie man eine PDB aus einer existierenden heraus erstellt und dabei die Data Guard Seite wieder synchronisiert. In diesem Beispiel wird Oracle 12 Release 1 (12.1.0.2) und Data Guard ohne Real Time Apply (also kein Active Data Guard) verwendet.

Warum ist das eine Herausforderung?

Wenn man eine Pluggable Database aus der PDB$SEED erstellt, funktioniert das in einer Data Guard Umgebung sehr gut, d.h. auf der Standby Seite werden die Datendateien angelegt und entsprechend synchronisiert.

SQL> CREATE PLUGGABLE DATABASE <PDBNAME> 
     ADMIN USER ... IDENTIFIED BY ... FILE_NAME_CONVERT=...;

Wenn man aber eine Pluggable Database aus einer anderen heraus erstellt (Cloning), dann werden die Dateien nicht übertragen und die Data Guard Konfiguration meldet einen Fehler:

SQL> CREATE PLUGGABLE DATABASE <PDBNEU> 
      FROM  <PDBALT> FILE_NAME_CONVERT=...;
Data Guard: 
   <Standby DBNAME> - Physical standby database 
      Error: ORA-16766: Redo Apply is stopped

Laut der Oracle Dokumentation soll man die Pluggable Database mit der Option „STANDBYS=NONE“ anlegen, dann werden auf der Standby Seite „Dummy“ Dateien angelegt und man kann die fehlenden Dateien kopieren und mit „ALTER DATABASE CREATE DATAFILE“ in die Standby Datenbank integrieren. Dafür muss allerdings die Standby Datenbank Read-Only geöffnet werden. Keine Angst, da der Apply-Prozess durch den Fehler gestoppt ist, ist das kein Lizenzverstoß bezüglich der „Active Data Guard“.

Vergisst man die Option „STANDBYS=NONE“ dann kommt man um ein Recovery der Standby Seite nicht herum. Und hier fangen jetzt meine Tests an und ich würde mich freuen, wenn der ein oder andere dazu seinen Kommentar abgeben würde:

Erstellen einer PDB

Zunächst wird die PDB auf der primären Datenbank ganz normal aus einer existierenden erstellt. Übrigens ist es schon mit 12.2.0.1 und dem Patchset von Oktober 2016 (glaube ich zumindest) möglich, die Quell-PDB geöffnet zu lassen. Allerdings wird sie für die Dauer der Kopie eingefroren.

SQL> CREATE PLUGGABLE DATABASE pdbneu 
       FROM pdbalt FILE_NAME_CONVERT=('pdbalt','pdbneu');
 SELECT d.name
   FROM v$datafile d, v$pdbs p  
  WHERE d.con_id = p.con_id 
    AND p.name = 'PDBNEU';
...
/u02/oradata/LUDWIG/pdbneu/system01.dbf 
/u02/oradata/LUDWIG/pdbneu/sysaux01.dbf 
/u02/oradata/LUDWIG/pdbneu/users01.dbf

Die PDB wird jetzt nicht geöffnet sondern die Datendateien werden auf die Standby Seite kopiert:

oracle% scp -r /u02/oradata/LUDWIG/pdbneu bach:/u02/oradata/LUDWIG

Jetzt kommt der Trick:

Wenn man den Apply-Prozess so oft wieder startet, wie die PDB Datendateien hat (im Beispiel also drei Mal), dann synchronisiert sich Data Guard wieder und die Konfiguration funktioniert. Danach kann man die PDB auf der Primären Datenbank öffnen.

dgmgrl /
DGMGRL> show configuration

Configuration - LUDWIG_DG

  Protection Mode: MaxAvailability
  Members:
  LUDWIG_S1 - Primary database
    LUDWIG_S2 - Physical standby database
      Error: ORA-16766: Redo Apply is stopped

Fast-Start Failover: DISABLED

Configuration Status:
ERROR   (status updated 35 seconds ago)

DGMGRL> edit database "LUDWIG_S2" set state='APPLY-ON';
Succeeded.
DGMGRL> edit database "LUDWIG_S2" set state='APPLY-ON';
Succeeded.
DGMGRL> edit database "LUDWIG_S2" set state='APPLY-ON';
Succeeded.
DGMGRL> show database "LUDWIG_S2"

Database - LUDWIG_S2

  Enterprise Manager Name: LUDWIG_S2
  Role:                    PHYSICAL STANDBY
  Intended State:          APPLY-ON
  Transport Lag:           0 seconds (computed 0 seconds ago)
  Apply Lag:               0 seconds (computed 0 seconds ago)
  Average Apply Rate:      18.00 KByte/s
  Real Time Query:         OFF
  Instance(s):
    LUDWIG1 (apply instance)
    LUDWIG2

Database Status:
SUCCESS

Kann / darf man das machen? Es hat zumindest funktioniert und lässt sich einfach skripten (zumindest nach meiner Ansicht).

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Nach oben scrollen