Hinweis:
- Dieses Tutorial erfordert Zugriff auf Oracle Cloud. Informationen zum Registrieren eines kostenlosen Accounts finden Sie unter Erste Schritte mit Oracle Cloud Infrastructure Free Tier.
- Es verwendet Beispielwerte für Oracle Cloud Infrastructure-Zugangsdaten, -Mandanten und -Compartments. Wenn Sie Ihre Übung abgeschlossen haben, ersetzen Sie diese Werte durch spezifische Werte für Ihre Cloud-Umgebung.
Oracle Data Guard auf integrierbarer Datenbankebene einrichten
Einführung
Oracle Data Guard schützt einzelne integrierbare Datenbanken (PDBs) und nicht die gesamte Containerdatenbank (CDB). Das bedeutet, dass eine Oracle Data Guard-Konfiguration pro integrierbarer Datenbank (DG PDB) zwei primäre CDBs anstelle einer primären CDB und einer Standby-CDB enthält. Jede CDB enthält offene PDBs mit Lese-/Schreibzugriff (möglicherweise durch eine Ziel-PDB auf der Remote-CDB geschützt) und gemountete PDBs, mit denen die entsprechenden PDBs in der Remote-CDB geschützt werden.
Wir lernen, wie Sie einen Data Guard auf PDB-Ebene von CDB1 bis CDB2 einrichten und umgekehrt, während sich beide CDBs im Lese-/Schreibmodus befinden. Außerdem werden Switchover und Failover auf PDB-Ebene ohne Ausfall auf Container- oder anderen PDBs im Container angezeigt.
In diesem Tutorial wird die Verwendung von DG PDB, einem Oracle Data Guard für PDBs, und nicht von CDBs beschrieben.
Hinweis: Die DG PDB wird mit dem Oracle Cloud Infrastructure-(OCI-)Tooling in Oracle Base Database Service nicht unterstützt.
Herkömmliche Architektur pro CDB
- Eine primäre, eine Standby-CDB.
- Es kann nur eine CDB im Lese-/Schreibmodus sein.
- Disaster Recovery (DR) ist nur auf CDB-Ebene möglich.
- Switchover oder Failover ist nur auf CDB-Ebene möglich.
Architektur von Oracle Data Guard pro PDB (DG PDB)
- Zwei primäre CDBs.
- Beide sind offen mit Schreibzugriff, andere Oracle Database-ID (DBID).
- Switchover und Failover sind auf PDB-Ebene möglich.
- Kein Switchover/Failover einer vollständigen CDB erforderlich.
Merkmale und Merkmale
- PDB-Replikation zwischen zwei primären CDBs.
- Schutz auf PDB-Ebene mit Real-Time Apply.
- Asynchroner Redo-Transport.
- PDB-Failover ohne Datenverlust, wenn die Quell-CDB noch verfügbar ist.
- Automatische Lücke beim Abrufen aus der Quelle.
- Echtzeitabfrage in der Ziel-PDB.
- Es ist kein Failover einer vollständigen Containerdatenbank erforderlich.
- Rollenübergang auf PDB-Ebene mit dem Broker.
Anwendungsfälle
-
Geplante Wartung und Workload Rebalancing:
- Drain eine CDB für die Wartung, indem jeweils eine PDB gewechselt wird.
- Rebalancing der Workload durch Switchover einzelner PDBs.
-
Kranker PDB-Schutz:
- Führen Sie ein Failover für eine einzelne PDB in einem nicht erfolgreichen Status aus, ohne dass sich dies auf die gesamte CDB auswirkt.
-
Disaster Recovery-Tests für einzelne PDBs:
- Führen Sie regelmäßige Disaster Recovery-Tests nacheinander aus.
Ziele
- Schrittweise DG PDB-Konfiguration, Switchover und Failover: Richten Sie Oracle Data Guard auf PDB-Ebene ein, während sich sowohl die primäre als auch die sekundäre Datenbank im Lese-/Schreibmodus befinden.
Voraussetzung
-
Erstellen Sie ein virtuelles Cloud-Netzwerk (VCN) in der Region Ashburn und San Jose.
-
Richten Sie eine Remote-Peering-Verbindung (RPC) zwischen den VCNs Ashburn und San Jose ein.
-
Stellen Sie sicher, dass andere Oracle Data Guard-bezogene Voraussetzungen erfüllt sind.
Aufgabe 1: Data Guard auf PDB-Ebene von CDB1 bis CDB2 einrichten
Primäre PDB: CDB1_PDB1 AT CDB1_ASH
Standby-PDB: CDB1_PDB1 AT CDB2_SJ
Umgebung:
OCI-Region | Ashburn (Schottland) | San José (SJ) |
---|---|---|
Oracle Base Database | DB-System | DB-System |
Oracle Version | 23,3 | 23,3 |
Hostname | ashvmdb1 | sjvmdb2 |
Eindeutiger DB-Name | CDB1_ASH | CDB2_SJ |
CDB-Name | CDB1 | CDB2 |
Primäre PDB | CDB1_PDB1, CDB1_PDB2 | CDB2_PDB3, CDB2_PDB4 |
Standby-PDB | CDB2_PDB3 | CDB1_PDB1 |
VCN/Subnetz (DEFAULT) | VCN_ASH/öffentliches Subnetz - VCN_ASH | VCN_SJ/öffentliches Subnetz - VCN_SJ |
Private IP | 10 | 192,168 |
Aufgabe 1.1: Datenbanken vorbereiten
-
Erstellen Sie über die OCI-Konsole zwei CDBs und zwei PDBs. Beide Datenbanken sind Oracle Database 23ai-Datenbanken, die Transparent Data Encryption (TDE) verschlüsselt sind.
-
Aktivieren Sie das Flash-Logging, und erzwingen Sie das Logging in beiden Datenbanken.
-
Konfigurieren Sie das Logarchivziel für Fast Recovery Area (FRA).
-
Aktivieren Sie Oracle Data Guard Broker.
Stellen Sie CDB1 bereit:
col FORCE_LOGGING for a5
set lines 300 pages 100
select name,open_mode,LOG_MODE,FORCE_LOGGING,FLASHBACK_ON,DB_UNIQUE_NAME from gv$database;
NAME OPEN_MODE LOG_MODE FORCE FLASHBACK_ON DB_UNIQUE_NAME
--------- -------------------- ------------ ----- ------------------ ------------------------------
CDB1 READ WRITE ARCHIVELOG YES NO CDB1_ASH
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 CDB1_PDB1 READ WRITE NO
4 CDB1_PDB2 READ WRITE NO
SQL> ALTER DATABASE FORCE LOGGING;
SQL> ALTER DATABASE FLASHBACK ON;
SQL> alter system set log_archive_dest_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES)' scope=both sid='\*';
SQL> ALTER SYSTEM SET DG_BROKER_CONFIG_FILE1='+DATA/CDB1_ash/PARAMETERFILE/dr1CDB1.dat' scope=both sid='\*';
SQL> ALTER SYSTEM SET DG_BROKER_CONFIG_FILE2='+DATA/CDB1_ash/PARAMETERFILE/dr2CDB1.dat' scope=both sid='\*';
SQL> alter system set standby_file_management = AUTO scope = both;
SQL> ALTER SYSTEM SET dg_broker_start=TRUE scope=both sid='\*';
Stellen Sie CDB2 bereit:
col FORCE_LOGGING for a5
set lines 300 pages 100
select name,open_mode,LOG_MODE,FORCE_LOGGING,FLASHBACK_ON,DB_UNIQUE_NAME from gv$database;
NAME OPEN_MODE LOG_MODE FORCE FLASHBACK_ON DB_UNIQUE_NAME
--------- -------------------- ------------ ----- ------------------ ------------------------------
CDB2 READ WRITE ARCHIVELOG YES NO CDB2_SJ
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
4 CDB2_PDB3 READ WRITE NO
5 CDB2_PDB4 READ WRITE NO
SQL> ALTER DATABASE FORCE LOGGING;
SQL> ALTER DATABASE FLASHBACK ON;
SQL> alter system set log_archive_dest_1='LOCATION=USE_DB_RECOVERY_FILE_DEST VALID_FOR=(ALL_LOGFILES,ALL_ROLES)' scope=both sid='\*';
SQL> ALTER SYSTEM SET DG_BROKER_CONFIG_FILE1='+DATA/CDB2_sj/PARAMETERFILE/dr1CDB2.dat' scope=both sid='\*';
SQL> ALTER SYSTEM SET DG_BROKER_CONFIG_FILE2='+DATA/CDB2_sj/PARAMETERFILE/dr2CDB2.dat' scope=both sid='\*';
SQL> ALTER SYSTEM SET dg_broker_start=TRUE scope=both sid='\*';
SQL> alter system set standby_file_management = AUTO scope = both;
Aufgabe 1.2: Transparent Network Substrate-(TNS-)Verbindung zwischen beiden CDBs herstellen
-
Validieren Sie die Verbindung zwischen beiden Datenbankknoten.
curl -sv telnet://10.0.0.192:1521 curl -sv telnet://192.168.0.202:1521
-
Konfigurieren Sie die Netzwerkkonfigurationsdateien auf jedem Host, um Verbindungen zur Quell- und Zieldatenbank zu erleichtern.
$vi $ORACLE_HOME/network/admin/tnsnames.ora CDB1_ASH = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.0.0.192)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = CDB1_ASH.sub02090909270.vcnash.oraclevcn.com) ) ) CDB2_SJ = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.202)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = CDB2_SJ.sub02090543360.vcnsj.oraclevcn.com) ) )
Aufgabe 1.3: Kennwortlose Verbindung mit einem Wallet herstellen
-
Erstellen Sie auf jedem Host ein Verzeichnis, das das Wallet enthält, und sichern Sie das Wallet, indem Sie den entsprechenden Schutz für das Verzeichnis festlegen.
$ mkdir -p $ORACLE_HOME/dbs/wallets $ chmod -R 700 $ORACLE_HOME/dbs/wallets
-
Erstellen Sie Wallets mit den Zugangsdaten, die zum Erstellen und Verwalten der DG PDB-Konfiguration erforderlich sind.
$ mkstore -wrl $ORACLE_HOME/dbs/wallets/dgpdb -create Oracle Secret Store Tool Release 23.0.0.0.0 - Production Version 23.0.0.0.0 Copyright (c) 2004, 2022, Oracle and/or its affiliates. All rights reserved. Enter password: Enter password again: [oracle@ashCDB1 ~]$ mkstore -wrl $ORACLE_HOME/dbs/wallets/dgpdb -createCredential CDB1_ash 'sys' Oracle Secret Store Tool Release 23.0.0.0.0 - Production Version 23.0.0.0.0 Copyright (c) 2004, 2023, Oracle and/or its affiliates. All rights reserved. Your secret/Password is missing in the command line Enter your secret/Password: Re-enter your secret/Password: Enter wallet password: [oracle@ashCDB1 ~]$ mkstore -wrl $ORACLE_HOME/dbs/wallets/dgpdb -createCredential CDB2_sj 'sys' Oracle Secret Store Tool Release 23.0.0.0.0 - Production Version 23.0.0.0.0 Copyright (c) 2004, 2023, Oracle and/or its affiliates. All rights reserved. Your secret/Password is missing in the command line Enter your secret/Password: Re-enter your secret/Password: Enter wallet password: [oracle@ashCDB1 ~]$ mkstore -wrl $ORACLE_HOME/dbs/wallets/dgpdb -listCredential Oracle Secret Store Tool Release 23.0.0.0.0 - Production Version 23.0.0.0.0 Copyright (c) 2004, 2023, Oracle and/or its affiliates. All rights reserved. Enter wallet password: List credential (index: connect_string username) 2: CDB2_sj sys 1: CDB1_ash sys
-
Validieren Sie die kennwortlose Verbindung in beiden Datenbanken. In diesem Tutorial haben wir dasselbe Kennwort beim Datenbank-Provisioning verwendet.
-
Konfigurieren Sie
sqlnet.ora
für die Verwendung des Wallets. -
Jetzt müssen wir das Wallet in der
sqlnet.ora
-Konfiguration hinzufügen, die Oracle verwendet.
vi $ORACLE_HOME/network/admin/sqlnet.ora NAMES.DIRECTORY_PATH= (TNSNAMES, ONAMES, HOSTNAME) WALLET_LOCATION = (SOURCE = (METHOD = FILE) (METHOD_DATA = (DIRECTORY = /u01/app/oracle/product/23.0.0.0/dbhome_1/dbs/wallets/dgpdb) ) ) SQLNET.WALLET_OVERRIDE = TRUE Stop and restart each database and Listener to configure redo transport to use the wallet. Because there are no static services configured, use OS authentication on each host to do this. Validate that client connections to the source and target container databases are now possible using the wallets by issuing the following commands on each host: sqlplus /@CDB1_ash as sysdba sqlplus /@CDB2_sj as sysdba
-
Aufgabe 1.4: Oracle Data Guard Broker-Konfiguration für Quell- und Zieldatenbank erstellen
Stellen Sie mit dem Wallet eine Verbindung zur Quell- und Zielcontainerdatenbank her, und erstellen Sie eine Konfiguration mit der Oracle Data Guard-Befehlszeilenschnittstelle (DGMGRL). Dies entspricht einer normalen Oracle Data Guard-Konfiguration. Der einzige Unterschied besteht darin, dass wir dies für beide CDBs tun müssen, da beide primäre Datenbanken sind.
-
Primärsite:
[oracle@ashCDB1 ~]$ dgmgrl /@CDB1_ash** DGMGRL> CREATE CONFIGURATION "CDB1_ash" AS PRIMARY DATABASE IS "CDB1_ash**" CONNECT IDENTIFIER IS "CDB1_ash"; DGMGRL> show configuration verbose;**
-
Sekundärer Standort:
[oracle@sjCDB2 admin]$ dgmgrl /@CDB2_sj DGMGRL> CREATE CONFIGURATION "CDB2_sj" AS PRIMARY DATABASE IS "CDB2_sj" CONNECT IDENTIFIER IS "CDB2_sj"; DGMGRL> show configuration verbose;
Aufgabe 1.5: Verbindung zwischen Konfigurationen herstellen
Diese Aufgabe unterscheidet sich von einer normalen Oracle Data Guard-Konfiguration. Normalerweise fügen wir nach dem Hinzufügen der Primärdatenbank die Standbydatenbank hinzu. Jetzt verwenden wir jedoch eine andere Syntax. Stellen Sie mit DGMGRL eine Verbindung zur Quellcontainerdatenbank her, und stellen Sie eine Verbindung zur Zieldatenbank her.
[oracle@ashCDB1 ~]$ dgmgrl /@CDB1_ash
DGMGRL> add configuration CDB2_sj connect identifier is CDB2_sj;
DGMGRL> show configuration verbose;
DGMGRL> show configuration verbose CDB2_sj;
DGMGRL> enable configuration all;
Aufgabe 1.6: Datenbanken für DG PDB vorbereiten
-
Stellen Sie eine Verbindung zu jeder Containerdatenbank her, und öffnen Sie die PDBs, sofern sie noch nicht geöffnet sind.
-
Der Oracle Data Guard Broker-Befehl
EDIT CONFIGURATION PREPARE DGPDB
setzt voraus, dass die Konfigurationen der Quellcontainerdatenbank und der Zielcontainerdatenbank konfiguriert und aktiviert wurden. -
Die Befehls-Prompts werden geöffnet, um ein Kennwort für den
DGPDB_INT
-Account für jede Containerdatenbank einzugeben. Anschließend werden die internen Strukturen konfiguriert, die erforderlich sind, um Oracle Data Guard-Schutz bereitzustellen oder Rollen für eine PDB zu ändern.SQL> ALTER PLUGGABLE DATABASE ALL OPEN; SQL> show pdbs dgmgrl /@CDB1_ash DGMGRL> EDIT CONFIGURATION PREPARE DGPDB; Enter password for DGPDB_INT account at CDB1_ASH: Enter password for DGPDB_INT account at CDB2_SJ: Prepared Data Guard for Pluggable Database at CDB2_SJ. Prepared Data Guard for Pluggable Database at CDB1_ASH. DGMGRL>
Hinweis: Der Einfachheit halber habe ich dasselbe Kennwort wie das DB- oder TDE-Kennwort verwendet, aber das Kennwort kann unterschiedlich sein.
Aufgabe 1.7: Oracle Data Guard-Schutz für die Quell-PDB konfigurieren
-
Konfigurieren Sie den Schutz auf PDB-Ebene von Oracle Data Guard für die Quell-PDB, indem Sie die Ziel-PDB in der Containerdatenbank konfigurieren.
-
Führen Sie den Befehl
ADD PLUGGABLE DATABASE
aus, um die Ziel-PDB in der Zielcontainerdatenbank zu erstellen.Primäre PDB:
CDB1_PDB1 AT CDB1_ASH
Standby-PDB:
CDB1_PDB1 AT CDB2_SJ
Im Zielcontainer:
SQL> show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 4 CDB2_PDB3 READ WRITE NO 5 CDB2_PDB4 READ WRITE NO dgmgrl /@CDB1_ash DGMGRL> ADD PLUGGABLE DATABASE CDB1_PDB1 AT CDB2_sj SOURCE IS CDB1_PDB1 AT CDB1_ash PDBFILENAMECONVERT IS "'+DATA/CDB1_ash','+DATA/CDB2_sj'" 'keystore IDENTIFIED BY "WelC0me_123#"'; Pluggable Database "CDB1_PDB1" added DGMGRL> SQL> show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 CDB1_PDB1 MOUNTED 4 CDB2_PDB3 READ WRITE NO 5 CDB2_PDB4 READ WRITE NO
Aufgabe 1.8: Datendateien in das Ziel kopieren
Instanziieren Sie die Ziel-PDB, indem Sie alle mit der Quell-PDB verknüpften Dateien in das Ziel-PDB-Verzeichnis kopieren.
-
Identifizieren Sie eine Liste der Dateien in der Quell-PDB.
SQL> select FILE#,NAME from v$datafile where con_id=3; FILE# NAME CON_ID ---------- ---------------------------------------------------------------------------------------------------- ---------- 8 +DATA/CDB1_ASH/10F14C2387F73F42E063C000000A77F3/DATAFILE/system.273.1160475741 3 9 +DATA/CDB1_ASH/10F14C2387F73F42E063C000000A77F3/DATAFILE/sysaux.270.1160475747 3 10 +DATA/CDB1_ASH/10F14C2387F73F42E063C000000A77F3/DATAFILE/undotbs1.271.1160475753 3 12 +DATA/CDB1_ASH/10F14C2387F73F42E063C000000A77F3/DATAFILE/users.274.1160475857 3
-
Kopieren Sie PDB-Datendateien in den Zielcontainer.
[oracle@sjCDB2 ~]$ rman target sys/WelC0me_123#@CDB1_ash auxiliary sys/WelC0me_123#@CDB2_sj Recovery Manager: Release 23.0.0.0.0 - Production on Fri Feb 9 12:41:14 2024 Version 23.3.0.23.09 Copyright (c) 1982, 2023, Oracle and/or its affiliates. All rights reserved. connected to target database: CDB1 (DBID=3764657260) connected to auxiliary database: CDB2 (DBID=3648579145) RMAN> run { allocate channel ch1 type disk; backup as copy reuse datafile 8,9,10,12 auxiliary format NEW; } run { 2> allocate channel ch1 type disk; 3> backup as copy reuse datafile 8,9,10,12 auxiliary format NEW; 4> } using target database control file instead of recovery catalog allocated channel: ch1 channel ch1: SID=38 device type=DISK Starting backup at 09-FEB-24 channel ch1: starting datafile copy input datafile file number=00009 name=+DATA/CDB1_ASH/10F14C2387F73F42E063C000000A77F3/DATAFILE/sysaux.270.1160475747 output file name=+DATA/CDB2_SJ/10F14C2387F73F42E063C000000A77F3/DATAFILE/sysaux.271.1160484127 tag=TAG20240209T124201 channel ch1: datafile copy complete, elapsed time: 00:00:08 channel ch1: starting datafile copy input datafile file number=00008 name=+DATA/CDB1_ASH/10F14C2387F73F42E063C000000A77F3/DATAFILE/system.273.1160475741 output file name=+DATA/CDB2_SJ/10F14C2387F73F42E063C000000A77F3/DATAFILE/system.272.1160484135 tag=TAG20240209T124201 channel ch1: datafile copy complete, elapsed time: 00:00:08 channel ch1: starting datafile copy input datafile file number=00010 name=+DATA/CDB1_ASH/10F14C2387F73F42E063C000000A77F3/DATAFILE/undotbs1.271.1160475753 output file name=+DATA/CDB2_SJ/10F14C2387F73F42E063C000000A77F3/DATAFILE/undotbs1.274.1160484145 tag=TAG20240209T124201 channel ch1: datafile copy complete, elapsed time: 00:00:04 channel ch1: starting datafile copy input datafile file number=00012 name=+DATA/CDB1_ASH/10F14C2387F73F42E063C000000A77F3/DATAFILE/users.274.1160475857 output file name=+DATA/CDB2_SJ/10F14C2387F73F42E063C000000A77F3/DATAFILE/users.275.1160484149 tag=TAG20240209T124201 channel ch1: datafile copy complete, elapsed time: 00:00:04 Finished backup at 09-FEB-24 released channel: ch1
-
Prüfen Sie die Datendateien in der Ziel-PDB.
SQL> show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 CDB1_PDB1 MOUNTED 4 CDB2_PDB3 READ WRITE NO 5 CDB2_PDB4 READ WRITE NO SQL> alter session set container=CDB1_PDB1; Session altered. SQL> select name from v$datafile; NAME -------------------------------------------------------------------------------- +DATA/MUST_RENAME_THIS_DATAFILE_8.4294967295.4294967295 +DATA/MUST_RENAME_THIS_DATAFILE_9.4294967295.4294967295 +DATA/MUST_RENAME_THIS_DATAFILE_10.4294967295.4294967295 +DATA/MUST_RENAME_THIS_DATAFILE_12.4294967295.4294967295
-
Benennen Sie die Dateien um. Der Zieldateiname kann aus den RMAN-Ausgabelogs abgerufen werden.
alter database rename file '+DATA/MUST_RENAME_THIS_DATAFILE_8.4294967295.4294967295' to '+DATA/CDB2_SJ/10F14C2387F73F42E063C000000A77F3/DATAFILE/system.272.1160484135'; alter database rename file '+DATA/MUST_RENAME_THIS_DATAFILE_9.4294967295.4294967295' to '+DATA/CDB2_SJ/10F14C2387F73F42E063C000000A77F3/DATAFILE/sysaux.271.1160484127'; alter database rename file '+DATA/MUST_RENAME_THIS_DATAFILE_10.4294967295.4294967295' to '+DATA/CDB2_SJ/10F14C2387F73F42E063C000000A77F3/DATAFILE/undotbs1.274.1160484145'; alter database rename file '+DATA/MUST_RENAME_THIS_DATAFILE_12.4294967295.4294967295' to '+DATA/CDB2_SJ/10F14C2387F73F42E063C000000A77F3/DATAFILE/users.275.1160484149'; SQL> select name from v$datafile; NAME --------------------------------------------------------------------------------------- +DATA/CDB2_SJ/10F14C2387F73F42E063C000000A77F3/DATAFILE/system.272.1160484135 +DATA/CDB2_SJ/10F14C2387F73F42E063C000000A77F3/DATAFILE/sysaux.271.1160484127 +DATA/CDB2_SJ/10F14C2387F73F42E063C000000A77F3/DATAFILE/undotbs1.274.1160484145 +DATA/CDB2_SJ/10F14C2387F73F42E063C000000A77F3/DATAFILE/users.275.1160484149
Aufgabe 1.9: TDE-Schlüssel übernehmen
Sie müssen den Wallet-Schlüssel für CDB und PDB kopieren. Kopieren Sie den Quell-CDB-Schlüssel in die Ziel-CDB und den Quell-PDB-Schlüssel in die Ziel-PDB, für die Data Guard eingerichtet wird.
-
Wallet auf Quellcontainer oder PDB prüfen.
SET LINESIZE 200 COLUMN wrl_parameter FORMAT A39 select * from v$encryption_wallet;
-
Exportieren Sie die Verschlüsselungsschlüssel (CDB und PDB) aus der Quelldatenbank.
SQL> ADMINISTER KEY MANAGEMENT EXPORT ENCRYPTION KEYS WITH SECRET "export_secret" TO '/tmp/CDB1_key' FORCE KEYSTORE IDENTIFIED BY "WelC0me_123#"; SQL> alter session set container=CDB1_PDB1; SQL> ADMINISTER KEY MANAGEMENT EXPORT ENCRYPTION KEYS WITH SECRET "export_secret" TO '/tmp/CDB1_PDB1_key' FORCE KEYSTORE IDENTIFIED BY "WelC0me_123#";
-
Kopieren Sie den Verschlüsselungsschlüssel auf dem Zielserver, und importieren Sie ihn in die Zieldatenbank (CDB bzw. PDB).
[opc@sjCDB2 tmp]$ chmod 777 CDB1_key CDB1_PDB1_key SQL> ADMINISTER KEY MANAGEMENT IMPORT KEYS WITH SECRET "export_secret" FROM '/tmp/CDB1_key' force keystore IDENTIFIED BY "WelC0me_123#" WITH BACKUP; SQL> alter session set container=CDB1_PDB1; SQL> ADMINISTER KEY MANAGEMENT IMPORT KEYS WITH SECRET "export_secret" FROM '/tmp/CDB1_PDB1_key' force keystore IDENTIFIED BY "WelC0me_123#" WITH BACKUP;
-
Validieren Sie den importierten Schlüssel.
select * from v$encryption_keys order by creation_time;
Aufgabe 1.10: Standby Redo Logs (SRLs) zur PDB hinzufügen und validieren
Erstellen Sie die SRLs aus einer Standby-PDB, um Fremdquellen-Redo zu empfangen. Dieser Vorgang ist nur einmal für die gesamte CDB erforderlich und erfordert keine andere Gruppe von SRLs pro PDB.
sqlplus /@CDB2_sj as sysdba
SQL> alter session set container=CDB1_PDB1;
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
--------- ------------------------------ ---------- ----------
4 CDB1_PDB1 MOUNTED
SQL> select group#,thread#,bytes from v$standby_log;
no rows selected
SQL> ALTER DATABASE ADD STANDBY LOGFILE;
Database altered.
SQL> ALTER DATABASE ADD STANDBY LOGFILE;
Database altered.
SQL> ALTER DATABASE ADD STANDBY LOGFILE;
Database altered.
SQL> select group#,thread#,bytes from v$standby_log;
GROUP# THREAD# BYTES
--------- ---------- ----------
1 0 104857600
2 0 104857600
3 0 104857600
Aufgabe 1.11: Status der Standbydatenbank in APPLY-ON
ändern
Melden Sie sich von einer beliebigen Datenbank bei DGMGRL an, und initiieren Sie den Redo-Transport von der Quell-PDB zur Ziel-PDB.
DGMGRL> EDIT PLUGGABLE DATABASE CDB1_PDB1 AT CDB2_sj SET STATE='APPLY-OFF';
DGMGRL> EDIT PLUGGABLE DATABASE CDB1_PDB1 AT CDB2_sj SET STATE='APPLY-ON';
DGMGRL> enable configuration all;
Perform Log switch on source database:
--------------------------------------
SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;
SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;
DGMGRL> show pluggable database CDB1_PDB1 at CDB2_sj;
Pluggable database - CDB1_PDB1 at CDB2_sj
Data Guard Role: Physical Standby
Con_ID: 3
Source: con_id 3 at CDB1_ASH
Transport Lag: 32 seconds (computed 21 seconds ago)
Apply Lag: 32 seconds (computed 21 seconds ago)
Intended State: APPLY-ON
Apply State: Running
Apply Instance: CDB2
Average Apply Rate: 1592 KByte/s
Real Time Query: OFF
Pluggable Database Status:
SUCCESS
DGMGRL> SHOW ALL PLUGGABLE DATABASE AT CDB1_ASH;
PDB Name PDB ID Data Guard Role Data Guard Partner
CDB1_PDB1 3 Primary CDB1_PDB1 (con_id 3) at CDB2_sj
CDB1_PDB2 4 None None
DGMGRL> SHOW ALL PLUGGABLE DATABASE AT CDB2_sj;
PDB Name PDB ID Data Guard Role Data Guard Partner
CDB1_PDB1 3 Physical Standby CDB1_PDB1 (con_id 3) at CDB1_ash
CDB2_PDB3 4 None None
CDB2_PDB4 5 None None
DGMGRL> VALIDATE PLUGGABLE DATABASE CDB1_PDB1 at CDB2_sj;
Ready for Switchover: NO
Data Guard Role: Physical Standby
Apply State: Waiting for Redo Data
Standby Redo Log Files: 3
Source: CDB1_PDB1 (con_id 3) at CDB1_ASH
sqlplus /@CDB2_sj as sysdba
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
--------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 CDB1_PDB1 MOUNTED
4 CDB2_PDB3 READ WRITE NO
5 CDB2_PDB4 READ WRITE NO
Aufgabe 2: (Optional) Oracle Data Guard auf PDB-Ebene von CDB2 bis CDB1 einrichten
Dies ist eine optionale Aufgabe, wenn Oracle Data Guard auch von CDB2 in CDB1 konfiguriert werden soll, d.h. bidirektional.
Primäre PDB: CDB2_PDB3 AT CDB2_SJ
Standby-PDB: CDB2_PDB3 AT CDB1_ASH
Hinweis: Sie müssen lediglich die Quell- und Ziel-CDB oder -PDB ändern und Aufgabe 1.7 auf 1.11 wiederholen.
-
Oracle Data Guard-Schutz für die Quell-PDB konfigurieren.
dgmgrl /@CDB2_SJ DGMGRL> ADD PLUGGABLE DATABASE CDB2_PDB3 AT CDB1_ASH SOURCE IS CDB2_PDB3 AT CDB2_sj PDBFILENAMECONVERT IS "'+DATA/CDB2_sj','+DATA/CDB1_ash'" 'keystore IDENTIFIED BY "WelC0me_123#"';
-
Kopieren Sie die Dateien in das Ziel.
[oracle@sjCDB2 ~\]$ rman target sys/WelC0me_123#@CDB2_sj auxiliary sys/WelC0me_123#@CDB1_ash
-
Halten Sie die TDE-Schlüssel gedrückt.
Export / Import CDB/PDB key from CDB2 to CDB1
-
Fügen Sie die Standby Redo Log-Dateien für die DG PDB hinzu, und validieren Sie sie.
-
Ändern Sie den Status der Standbydatenbank in
APPLY-ON
.DGMGRL> SHOW ALL PLUGGABLE DATABASE AT CDB1_ash; PDB Name PDB ID Data Guard Role Data Guard Partner CDB1_PDB1 3 Primary CDB1_PDB1 (con_id 3) at CDB2_sj VMDB1_PDB2 4 None None VMDB2_PDB3 6 Physical Standby VMDB2_PDB3 (con_id 4) at CDB2_sj DGMGRL> SHOW ALL PLUGGABLE DATABASE AT CDB2_sj; PDB Name PDB ID Data Guard Role Data Guard Partner CDB1_PDB1 3 Physical Standby CDB1_PDB1 (con_id 3) at CDB1_ash VMDB2_PDB3 4 Primary VMDB2_PDB3 (con_id 6) at CDB1_ash VMDB2_PDB4 5 None None DGMGRL>
Aufgabe 3: Switchover der integrierbaren Datenbank ausführen
Kehren Sie die Rollen der Quell-PDB und der angegebenen Ziel-PDB mit Oracle Data Guard Broker DGMGRL um. Keine Auswirkungen auf Containerebene.
-
Switchover ausführen.
[oracle@ashCDB1 ~]$ dgmgrl /@CDB1_ash DGMGRL> VALIDATE PLUGGABLE DATABASE CDB1_PDB1 at CDB2_sj; Ready for Switchover: NO Data Guard Role: Physical Standby Apply State: Not Running Standby Redo Log Files: 3 Source: CDB1_PDB1 (con_id 3) at CDB1_ASH DGMGRL> SWITCHOVER TO PLUGGABLE DATABASE CDB1_PDB1 at CDB2_sj; Performing switchover NOW, please wait... Switchover succeeded, new primary is "CDB1_pdb1" DGMGRL>
-
Öffnen Sie die neue PDB im Open-Modus.
sqlplus /@CDB2_sj SQL> alter pluggable database CDB1_PDB1 open; Pluggable database altered. SQL> show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED ---------- ------------------------------ ---------- ---------- 2 PDB$SEED READ ONLY NO 3 CDB1_PDB1 READ WRITE NO 4 CDB2_PDB3 READ WRITE NO 5 CDB2_PDB4 READ WRITE NO DGMGRL> show pluggable database CDB1_PDB1 at CDB2_SJ; Pluggable database - CDB1_PDB1 at CDB2_sj Data Guard Role: Primary Con_ID: 3 Active Target: con_id 3 at CDB1_ASH Pluggable Database Status: SUCCESS DGMGRL> show pluggable database CDB1_PDB1 at CDB1_ASH; Pluggable database - CDB1_PDB1 at CDB1_ash Data Guard Role: Physical Standby Con_ID: 3 Source: con_id 3 at CDB2_SJ Transport Lag: 1 minute (computed 59 seconds ago) Apply Lag: 1 minute 35 seconds (computed 59 seconds ago) Intended State: APPLY-ON Apply State: Not Running Pluggable Database Status: ORA-16766: Redo Apply is stopped. ORA-28374: typed master key not found in wallet
-
Exportieren Sie die Verschlüsselungsschlüssel (nur CDB) aus der neuen Quelle in das neue Ziel.
SQL> ADMINISTER KEY MANAGEMENT EXPORT ENCRYPTION KEYS WITH SECRET "export_secret" TO '/tmp/CDB2_CDB_key' FORCE KEYSTORE IDENTIFIED BY "WelC0me_123#"; keystore altered. Import them into the target database [opc@sjCDB2 tmp]$ chmod 777 mydbkey mydbkeypdb1 SQL> ADMINISTER KEY MANAGEMENT IMPORT KEYS WITH SECRET "export_secret" FROM '/tmp/CDB2_CDB_key' force keystore IDENTIFIED BY "WelC0me_123#" WITH BACKUP; keystore altered.
-
Neuer Standby-Redolog.
DGMGRL> EDIT PLUGGABLE DATABASE CDB2_PDB2 AT CDB2_sj SET STATE='APPLY-OFF'; Succeeded. sqlplus /@CDB1_ash SQL> show pdbs CON_ID CON_NAME OPEN MODE RESTRICTED 2 PDB$SEED READ ONLY NO 3 CDB1_PDB1 MOUNT NO 4 CDB1_PDB2 READ WRITE NO SQL> alter session set container=CDB1_PDB1; Session altered. SQL> select group#,thread#,bytes from v$standby_log; no rows selected SQL> ALTER DATABASE ADD STANDBY LOGFILE; Database altered. SQL> / Database altered. SQL> / Database altered. SQL> select group#,thread#,bytes from v$standby_log; GROUP# THREAD# BYTES 1 0 104857600 2 0 104857600 3 0 104857600 DGMGRL> EDIT PLUGGABLE DATABASE CDB1_PDB1 AT CDB1_ash SET STATE='APPLY-OFF'; Succeeded. DGMGRL> EDIT PLUGGABLE DATABASE CDB1_PDB1 AT CDB1_ash SET STATE='APPLY-ON'; Succeeded. DGMGRL>
Aufgabe 4: Failover der integrierbaren Datenbank
Während eines Failovers wird die angegebene Ziel-PDB in die Quellrolle geändert. Wenn die ursprüngliche Quellcontainerdatenbank und andere PDBs korrekt funktionieren, muss die PDB als Ziel-PDB neu instanziiert werden, bevor Redo aus der neuen Quell-PDB angewendet werden kann.
$dgmgrl /@CDB1_ash
DGMGRL> show all pluggable database at CDB1_ash;
PDB Name PDB ID Data Guard Role Data Guard Partner
CDB1_PDB1 3 Primary CDB1_PDB1 (con_id 3) at CDB2_sj
VMDB1_PDB2 4 None None
VMDB2_PDB3 6 Physical Standby VMDB2_PDB3 (con_id 4) at CDB2_sj
DGMGRL> FAILOVER TO PLUGGABLE DATABASE CDB1_PDB1 at CDB2_sj;
Performing failover NOW, please wait...
Failover succeeded, new primary is "CDB1_PDB1".
DGMGRL>
DGMGRL> show pluggable database CDB1_PDB1 at CDB2_sj
Pluggable database - CDB1_PDB1 at CDB2_sj
Data Guard Role: Primary
Con_ID: 3
Active Target: con_id 3 at CDB1_ASH needs to be reinstated
Pluggable Database Status:
DGM-17450: not protected
DGMGRL> show pluggable database CDB1_PDB1 at CDB1_ash;
Pluggable database - CDB1_PDB1 at CDB1_ash
Data Guard Role: Physical Standby
Con_ID: 3
Source: (unknown)
Pluggable Database Status:
ORA-16661: The standby database must be reinstated.
DGMGRL> EDIT PLUGGABLE DATABASE CDB1_PDB1 AT CDB1_ash SET STATE='APPLY-OFF';
Succeeded.
DGMGRL> EDIT PLUGGABLE DATABASE CDB1_PDB1 AT CDB1_ash SET STATE='APPLY-ON';
Succeeded.
DGMGRL> show pluggable database CDB1_PDB1 at CDB1_ash;
Pluggable database - CDB1_PDB1 at CDB1_ash
Data Guard Role: Physical Standby
Con_ID: 3
Source: con_id 3 at CDB2_SJ
Transport Lag: 5 minutes 48 seconds (computed 21 seconds ago)
Apply Lag: (unknown)
Intended State: APPLY-ON
Apply State: Running
Apply Instance: VMDB1
Average Apply Rate: (unknown)
Real Time Query: OFF
Pluggable Database Status:
SUCCESS
Aufgabe 5: DG PDB-Konfiguration entfernen
Um die Konfiguration zu entfernen, führen Sie den folgenden Befehl aus.
[oracle@ashCDB1 ~\]$ dgmgrl /@CDB1_ash
DGMGRL> REMOVE PLUGGABLE DATABASE CDB2_PDB3 AT CDB1_ASH REMOVE DATAFILES;
Pluggable Database 'CDB1_PDB1' removed.
DGMGRL> SHOW PLUGGABLE DATABASE CDB2_PDB3 AT CDB1_ASH;
No pluggable databases at database 'CDB2_SJ'
DGMGRL> REMOVE CONFIGURATION CDB1_ASH;
Succeeded.
DGMGRL> SHOW CONFIGURATION;
Configuration - Boston
Protection Mode: MaxPerformance
Members:
CDB1_ASH - Primary database
Fast-Start Failover: Disabled
Configuration Status:
SUCCESS (status updated 25 seconds ago)
Verwandte Links
Danksagungen
- Autor - Dharmesh Patel (Principal Cloud Architect, Oracle North America Cloud Services - NACIE)
Weitere Lernressourcen
Lernen Sie andere Übungen auf docs.oracle.com/learn kennen, oder greifen Sie auf weitere kostenlose Lerninhalte im Oracle Learning YouTube Channel zu. Besuchen Sie außerdem education.oracle.com/learning-explorer, um Oracle Learning Explorer zu werden.
Produktdokumentation finden Sie im Oracle Help Center.
Set up an Oracle Data Guard at the Pluggable Database Level
F99048-02
June 2024