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.