Konfiguration von Hybrid Dataguard für die Migration in die Oracle Cloud

Oracle Data Guard kann als Migrationsmethode in die Oracle Cloud Infrastrucute (OCI) und Oracle Multicloud verwendet werden. Dabei kommt es aber immer wieder zu Bedenken und Fragen:
„In der Cloud ist Verschlüsselung der Datenbank Pflicht – Wir haben aber Transparent Data Encrpytion (TDE) nicht lizenziert!“
„Ich möchte on Premises nicht alles verschlüsseln, bevor ich migriere!“
„Ist der Weg in die Cloud ein One-Way-Ticket? – Was habe ich dann noch für einen Fallback?“

Um diesen Bedenken begegnen zu können, kann Oracle Data Guard in der Hybrid Cloud Configuration verwendet werden.
Folgender Artikel soll die Konfiguration und Migration mittels Oracle Data Guard in der Hybrid Cloud Migration vorgestellt werden. Dabei kann die Hybrid Cloud Configuration als Migrationsmethode genutzt werden, oder für den Fall, dass eine oder mehrere Standy Datenbanken in der Cloud betrieben werden können.

Funktionsweise:

Die Oracle Data Guard Hybrid Cloud Configuration ermöglicht einen hybriden Betrieb von verschlüsselten Instanzen in der OCI und unverschlüsselten Instanzen im lokalen Rechenzentrum. Dabei werden von den unverschlüsselten Datenbanken onPrem unverschlüsselte Redo-Logs geschrieben und zur Standby transportiert. Dort werden die Redo-Logs mit dem dort vorhandenen Mastereky aus dem Wallet verschlüsselt und in der verschlüsselten Datenbank applied.

Wird ein Switchover oder Failover durchgeführt, schreibt die verschlüsselte Instanz verschlüsselte Redo-Logs und transportiert diese zur unverschlüsselten Instanz. Dort werden diese mit dem Masterkey aus dem Wallet entschlüsselt und angewendet.

Dabei gibt es ein paar Voraussetzungen.
Zum einen muss für die lokalen Datenbank eine Wallet mit einem Masterkey für die CDB und alle PDBs angelegt werden. Der Masterkey muss derselbe wie in der OCI auf der Standby Seite sein.
Für RAC Datenbanken sollte das Wallet auf einem ACFS für alle Instanzen zugreifbar liegen.

Konfiguration für unverschlüsselte Primary:

Für die Konfiguration der Hybrid Cloud Configuration sind ein paar Parameter notwendig:

wallet_root=<Pfad zum wallet, für RAC ACFS> (downtime needed)
TABLESPACE_ENCRYPTION=DECRYPT_ONLY
TDE_CONFIGURATION=KEYSTORE_CONFIGURAION=FILE

In der Demo-Umgebung ist eine CDB mit 4 PDBs, alle haben einen united Autologin wallet im OPEN Status:,

SQL>  select flashback_on from v$database;

FLASHBACK_ON
------------------
YES

SQL> show parameter wallet_root

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
wallet_root                          string      /u01/app/oracle/wallet
SQL> show parameter tde_configuration

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
tde_configuration                    string      KEYSTORE_CONFIGURATION=FILE
SQL> show parameter encrypt

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
encrypt_new_tablespaces              string      DDL
tablespace_encryption                string      DECRYPT_ONLY

SQL>select * from v$encryption_wallet where con_id=1;SQL>

WRL_TYPE   WRL_PARAMETER                            STATUS          WALLET_TYPE          WALLET_ORDER    KEYSTORE FULLY_BAC     CON_ID
---------- ---------------------------------------- --------------- -------------------- --------------- -------- --------- ----------
FILE       /u01/app/oracle/wallet/tde/              OPEN            AUTOLOGIN            SINGLE          NONE     NO                 1

SQL> select p.con_id, p.name, p.open_mode, ew.wrl_type, ew.wallet_type, ew.status, ew.wallet_order
from v$pdbs p join v$encryption_wallet ew on (ew.con_id = p.con_id)
order by p.con_id;
  2    3
    CON_ID NAME                 OPEN_MODE  WRL_TYPE   WALLET_TYPE          STATUS          WALLET_ORDER
---------- -------------------- ---------- ---------- -------------------- --------------- ---------------
         2 PDB$SEED             READ ONLY  FILE       AUTOLOGIN            OPEN            SINGLE
         3 PDB_0                READ WRITE FILE       AUTOLOGIN            OPEN            SINGLE
         4 PDB_1                MOUNTED    FILE       AUTOLOGIN            OPEN            SINGLE
         5 PDB_2                MOUNTED    FILE       AUTOLOGIN            OPEN            SINGLE
         6 PDB_3                MOUNTED    FILE       AUTOLOGIN            OPEN            SINGLE

Dabei ist ist in der Datenbank nichts verschlüsselt:

SQL> select encrypted, count(*) from v$datafile_header group by encrypted;

ENC   COUNT(*)
--- ----------
NO          28

Für das Anlegen eines Wallets mit Masterkey ist keine TDE Lizenz notwendig:

SQL> select name, detected_usages, description from dba_feature_usage_statistics where description like '%encryp%';

NAME                 DETECTED_USAGES DESCRIPTION
-------------------- --------------- --------------------------------------------------------------------------------------------------------------------------------
ASO native encryptio               0 ASO network native encryption and checksumming is being used.
n and checksumming

ACFS Encryption                    0 ACFS encryption in use
Transparent Data Enc               0 Transparent Database Encryption is being used. There is atleast one column or tablespace that is encrypted.
ryption

Konfiguration der verschlüsselten OCI Instanz:

Die Konfiguration für die Verschlüsselung ist in der OCI per default eingerichtet. Dort ist kein ToDO notwendig. Folgende Settings sind default:

SQL> show parameter wallet_root

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
wallet_root                          string      /opt/oracle/dcs/commonstore/wa
                                                 llets/AGZDM_OCI
SQL> show parameter tde_configuration

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
tde_configuration                    string      keystore_configuration=FILE
SQL> show parameter encrypt

NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
encrypt_new_tablespaces              string      ALWAYS
tablespace_encryption                string      AUTO_ENABLE
SQL>
SQL> select * from v$encryption_wallet where con_id=1;

WRL_TYPE   WRL_PARAMETER                                      STATUS          WALLET_TYPE          WALLET_ORDER    KEYSTORE FULLY_BAC     CON_ID
---------- -------------------------------------------------- --------------- -------------------- --------------- -------- --------- ----------
FILE       /opt/oracle/dcs/commonstore/wallets/AGZDM_OCI/tde/ OPEN            AUTOLOGIN            SINGLE          NONE     NO                 1

SQL> select p.con_id, p.name, p.open_mode, ew.wrl_type, ew.wallet_type, ew.status, ew.wallet_order
from v$pdbs p join v$encryption_wallet ew on (ew.con_id = p.con_id)
order by p.con_id;
  2    3
    CON_ID NAME                 OPEN_MODE  WRL_TYPE   WALLET_TYPE          STATUS          WALLET_ORDER
---------- -------------------- ---------- ---------- -------------------- --------------- ---------------
         2 PDB$SEED             READ ONLY  FILE       AUTOLOGIN            OPEN            SINGLE
         3 PDB_0                READ WRITE FILE       AUTOLOGIN            OPEN            SINGLE
         4 PDB_1                MOUNTED    FILE       AUTOLOGIN            OPEN            SINGLE
         5 PDB_2                MOUNTED    FILE       AUTOLOGIN            OPEN            SINGLE
         6 PDB_3                MOUNTED    FILE       AUTOLOGIN            OPEN            SINGLE

Mit dieser Konfiguration ist der hybride Betrieb problemlos möglich. Dabei können normale Switchover/Failover und Switchback gemacht werden.

Die Datafiles sind in der OCI verschlüsselt. Je nach Migrationsmethode müssen einzelne Tablespaces anschließend noch manuell verschlüsselt werden. Dafür muss der Broker auf der Standby gestoppt werden und die Tablespaces können auf der Standby verschlüsselt werden:

SQL> alter system set dg_broker_start=false scope=both sid='*';

System altered.

SQL> alter tablespace DATA encryption offline encrypt;

Tablespace altered.

SQL> alter system set dg_broker_start=true scope=both sid='*';

System alterd.

Data Guard

Der Aufbau der veschlüsselten Standby Datenbank kann mittels ZDM oder dbaascli (ExaCS/ExaCC) erfolgen. Das Verfahren wird jedoch in einem weiterern Artikel beschrieben.

Die Data Guard Broker Konfiguration sieht auch in der Hybrid Cloud Configuration gewöhnlich aus.

Es kann auch ein gewöhnlicher Switchover und Switchback gemacht werden.

Demo

Folgendes Video zeigt eine Hybrid Cloud Configuration mit Swithover und Switchback.

Demo für Data Guard Hybrid Cloud Configuration mit Switchover und Switchback