Remarques :
- Ce tutoriel nécessite un accès à Oracle Cloud. Pour vous inscrire à un compte gratuit, reportez-vous à Introduction au niveau gratuit d'Oracle Cloud Infrastructure.
- Il utilise des exemples de valeur pour les informations d'identification, la location et les compartiments Oracle Cloud Infrastructure. A la fin de l'exercice, remplacez ces valeurs par des valeurs propres à votre environnement cloud.
Configurer Oracle Data Guard au niveau de la base de données pluggable
Introduction
Oracle Data Guard protège les bases de données pluggables individuelles plutôt que l'ensemble de la base de données Conteneur. Cela signifie qu'une configuration Oracle Data Guard par base de données pluggable comprendra deux bases de données Conteneur principales au lieu d'une base de données Conteneur principale et d'une base de données Conteneur de secours. Chaque base de données Conteneur contiendra des bases de données pluggables ouvertes en lecture-écriture (protégées éventuellement par une base de données pluggable cible sur la base de données Conteneur distante) et des bases de données pluggables montées protégeant les bases de données pluggables correspondantes dans la base de données Conteneur distante.
Nous apprendrons à configurer une protection de données au niveau de la base de données pluggable, de CDB1 à CDB2, et inversement, tant que les deux bases de données Conteneur sont en mode lecture-écriture. De plus, la permutation et le basculement s'effectuent au niveau de la base de données pluggable sans interruption de service au niveau du conteneur ou du reste des bases de données pluggables du conteneur.
Ce tutoriel explique comment utiliser DG PDB, une base de données Oracle Data Guard pour les bases de données pluggables, plutôt que des bases de données Conteneur.
Remarque : la base de données pluggable DG n'est pas prise en charge avec les outils Oracle Cloud Infrastructure (OCI) sur Oracle Base Database Service.
Architecture traditionnelle par base de données Conteneur
- Une base de données Conteneur principale et une base de données de secours.
- Une seule base de données Conteneur peut être en mode lecture-écriture.
- La récupération après sinistre n'est possible qu'au niveau de la base de données Conteneur.
- La permutation ou le basculement n'est possible qu'au niveau de la base de données Conteneur.
Architecture Oracle Data Guard par base de données pluggable
- Deux bases de données Conteneur principales.
- Les deux sont ouverts en lecture-écriture et différents ID Oracle Database (DBID).
- La permutation et le basculement sont possibles au niveau de la base de données pluggable.
- Inutile de permuter ou de basculer une base de données Conteneur complète.
Caractéristiques et caractéristiques
- Réplication de base de données pluggable entre deux bases de données Conteneur principales.
- Protection au niveau de la base de données pluggable à l'aide de l'application en temps réel.
- Le transport synchrone des informations de journalisation.
- Basculement de base de données pluggable sans perte de données si la base de données Conteneur source est toujours disponible.
- Saut automatique à partir de la source.
- Requête en temps réel sur la base de données pluggable cible.
- Inutile de basculer une base de données Conteneur complète.
- Transition de rôle au niveau de la base de données pluggable à l'aide du broker.
Cas d'emploi
-
Maintenance planifiée et rééquilibrage de la charge de travail :
- Videz une base de données Conteneur à des fins de maintenance en basculant une base de données pluggable à la fois.
- Rééquilibrez la charge globale en permutant des bases de données pluggables individuelles.
-
Protection des bases de données pluggables malades :
- Basculez une seule base de données pluggable en échec sans affecter l'ensemble de la base de données Conteneur.
-
Tests de récupération après sinistre d'une seule base de données pluggable :
- Effectuez régulièrement des tests de récupération après sinistre, application par application.
Objectifs
- Configuration, permutation et basculement de base de données pluggable DG étape par étape : configurez Oracle Data Guard au niveau de la base de données pluggable, tandis que les bases de données principale et secondaire sont en mode lecture/écriture.
Prérequis
-
Créez un réseau cloud virtuel (VCN) dans les régions d'Ashburn et de San Jose.
-
Etablissez une connexion d'appairage à distance entre les réseaux cloud virtuels Ashburn et San Jose.
-
Assurez-vous de disposer d'autres prérequis liés à Oracle Data Guard.
Tâche 1 : configurer Data Guard au niveau de la base de données pluggable de CDB1 vers CDB2
Base de données pluggable principale : CDB1_PDB1 AT CDB1_ASH
Base de données pluggable de secours : CDB1_PDB1 AT CDB2_SJ
Environnement:
Région OCI | Ashburn (Etats-Unis) | San José (SJ) |
---|---|---|
Oracle Base Database | Système de base de données | Système de base de données |
Version d'Oracle | 23,3 | 23,3 |
Nom d'hôte | ashvmdb1 | sjvmdb2 |
Nom unique de la BdD | CDB1_ASH | CDB2_SJ |
Nom de CDB | CDB1 | CDB2 |
Base de données pluggable principale | CDB1_PDB1, CDB1_PDB2 | CDB2_PDB3, CDB2_PDB4 |
Base de données pluggable de secours | CDB2_PDB3 | CDB1_PDB1 |
VCN/Sous-réseau (DEFAULT) | VCN_ASH/sous-réseau public-VCN_ASH | VCN_SJ/sous-réseau public-VCN_SJ |
IP privée | 10 | 192,168 |
Tâche 1.1 : Préparer les bases de données
-
Créez deux bases de données Conteneur et deux bases de données pluggables via la console OCI, qui sont toutes deux des bases de données Oracle Database 23ai cryptées par cryptage transparent des données.
-
Activez la journalisation flash et forcez la journalisation sur les deux bases de données.
-
Configurez la destination d'archivage des journaux dans la zone de récupération rapide (FRA).
-
Activez le broker Oracle Data Guard.
Provisionnez CDB1 :
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='\*';
Provisionnez CDB2 :
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;
Tâche 1.2 : établir une connexion TNS (Transparent Network Substrate) entre les deux bases de données Conteneur
-
Validez la connexion entre les deux noeuds de base de données.
curl -sv telnet://10.0.0.192:1521 curl -sv telnet://192.168.0.202:1521
-
Configurez les fichiers de configuration réseau sur chaque hôte pour faciliter les connexions aux bases de données source et cible.
$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) ) )
Tâche 1.3 : établir une connexion sans mot de passe à l'aide d'un portefeuille
-
Sur chaque hôte, créez un répertoire contenant le "wallet" et sécurisez-le en définissant une protection appropriée sur le répertoire.
$ mkdir -p $ORACLE_HOME/dbs/wallets $ chmod -R 700 $ORACLE_HOME/dbs/wallets
-
Créez des portefeuilles contenant les informations d'identification requises pour créer et gérer la configuration de base de données pluggable DG.
$ 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
-
Validez la connexion sans mot de passe sur les deux bases de données. Dans ce tutoriel, nous avons utilisé le même mot de passe lors du provisionnement de la base de données.
-
Configurez
sqlnet.ora
pour utiliser le portefeuille. -
Maintenant, nous devons ajouter le portefeuille sur la configuration
sqlnet.ora
qu'Oracle utilisera.
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
-
Tâche 1.4 : Créer une configuration de broker Oracle Data Guard de base de données source et cible
Connectez-vous à la base de données Conteneur source et cible à l'aide du portefeuille et créez une configuration à l'aide de l'interface de ligne de commande Oracle Data Guard (DGMGRL). Il en va de même pour une configuration Oracle Data Guard normale. La seule différence est que nous devons le faire pour les deux bases de données Conteneur, car elles sont toutes deux des bases de données principales.
-
Site principal :
[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;**
-
Site secondaire :
[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;
Tâche 1.5 : Etablir la connexion entre les configurations
Cette tâche est différente d'une configuration Oracle Data Guard normale. Normalement, après l'ajout de la base de données principale, nous ajoutons la base de données de secours, mais nous allons maintenant utiliser une autre syntaxe. A l'aide de DGMGRL, connectez-vous à la base de données Conteneur source et établissez une connexion avec la base de données cible.
[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;
Tâche 1.6 : Préparer les bases de données pour la base pluggable DG
-
Connectez-vous à chaque base de données Conteneur et ouvrez les bases de données pluggables si elles ne sont pas déjà ouvertes.
-
La commande
EDIT CONFIGURATION PREPARE DGPDB
du broker Oracle Data Guard suppose que les configurations de base de données Conteneur source et de base de données Conteneur cible ont été configurées et sont activées. -
Les invites de commande s'ouvrent pour saisir un mot de passe pour le compte
DGPDB_INT
pour chacune des bases de données Conteneur, puis configurent les structures internes requises pour fournir une protection Oracle Data Guard ou modifier les rôles d'une base de données pluggable.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>
Remarque : par souci de simplicité, j'ai utilisé le même mot de passe que le mot de passe de base de données ou TDE, mais le mot de passe peut être différent.
Tâche 1.7 : configurer la protection Oracle Data Guard pour la base de données pluggable source
-
Configurez la protection au niveau de la base de données pluggable Oracle Data Guard pour la base de données pluggable source en configurant la base de données pluggable cible dans la base de données Conteneur.
-
Exécutez la commande
ADD PLUGGABLE DATABASE
pour créer la base de données pluggable cible dans la base de données Conteneur cible.Base de données pluggable principale :
CDB1_PDB1 AT CDB1_ASH
Base de données pluggable de secours :
CDB1_PDB1 AT CDB2_SJ
Sur le conteneur cible :
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
Tâche 1.8 : copier les fichiers de données vers la destination
Instanciez la base de données pluggable cible en copiant tous les fichiers associés à la base de données pluggable source vers l'emplacement de la base de données pluggable cible.
-
Identifiez une liste de fichiers sur la base de données pluggable source.
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
-
Copiez les fichiers de données de base de données pluggable sur le conteneur cible.
[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
-
Vérifiez les fichiers de données sur la base de données pluggable cible.
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
-
Renommez les fichiers de données. Le nom du fichier cible peut être obtenu à partir des journaux de sortie RMAN.
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
Tâche 1.9 : transférer les clés TDE
Nous devons copier la clé de portefeuille pour la base de données Conteneur et la base de données pluggable. Copiez la clé de base de données Conteneur source dans la base de données Conteneur cible et la clé de base de données pluggable source dans la base de données pluggable cible pour laquelle nous configurons Data Guard.
-
Vérifiez le portefeuille sur le conteneur source ou la base de données pluggable.
SET LINESIZE 200 COLUMN wrl_parameter FORMAT A39 select * from v$encryption_wallet;
-
Exportez les clés de cryptage (base de données Conteneur et base de données pluggable) à partir de la base de données source.
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#";
-
Copiez la clé de cryptage sur le serveur cible et importez-la dans la base de données cible (base de données Conteneur et base de données pluggable respectivement).
[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;
-
Validez la clé importée.
select * from v$encryption_keys order by creation_time;
Tâche 1.10 : ajouter les fichiers de journalisation de secours à la base de données pluggable et valider
Créez les SRL à partir d'une base de données pluggable de secours pour recevoir les informations de journalisation source étrangère. Cette opération n'est requise qu'une seule fois pour l'ensemble de la base de données Conteneur et ne nécessite pas un ensemble différent de listes de certificats révoqués par base de données pluggable.
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
Tâche 1.11 : remplacer l'état de la base de données de secours par APPLY-ON
Connectez-vous à DGMGRL à partir de n'importe quelle base de données et lancez le transport des informations de journalisation de la base de données pluggable source vers la base de données pluggable cible
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
Tâche 2 : (facultatif) configurer Oracle Data Guard au niveau de la base de données pluggable de CDB2 à CDB1
Il s'agit d'une tâche facultative si nous souhaitons configurer Oracle Data Guard de CDB2 vers CDB1, c'est-à-dire bidirectionnel.
Base de données pluggable principale : CDB2_PDB3 AT CDB2_SJ
Base de données pluggable de secours : CDB2_PDB3 AT CDB1_ASH
Remarque : il suffit de modifier la base de données Conteneur ou la base de données pluggable source et cible et de répéter la tâche 1.7 à 1.11.
-
Configurez la protection Oracle Data Guard pour la base de données pluggable source.
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#"';
-
Copiez les fichiers de données vers la destination.
[oracle@sjCDB2 ~\]$ rman target sys/WelC0me_123#@CDB2_sj auxiliary sys/WelC0me_123#@CDB1_ash
-
Repassez les clés TDE.
Export / Import CDB/PDB key from CDB2 to CDB1
-
Ajoutez les fichiers de journalisation de secours pour la base de données pluggable DG et validez.
-
Définissez l'état de la base de données de secours sur
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>
Tâche 3 : permutation de la base de données pluggable
Inversez les rôles de la base de données pluggable source et de la base de données pluggable cible désignée à l'aide de DGMGRL du broker Oracle Data Guard. Aucun effet au niveau du récipient.
-
Réinitialisation.
[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>
-
Ouvrez une nouvelle base de données pluggable en mode ouvert.
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
-
Exportez les clés de cryptage (base de données Conteneur uniquement) de la nouvelle source vers la nouvelle cible.
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.
-
Nouveau fichier de journalisation de secours.
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>
Tâche 4 : basculement de la base de données pluggable
Lors d'un basculement, la base de données pluggable cible indiquée devient le rôle source. Si la base de données Conteneur source d'origine et les autres bases de données pluggables fonctionnent correctement, la base de données pluggable doit être rétablie en tant que base de données pluggable cible pour que les informations de journalisation de la nouvelle base de données pluggable source puissent être appliquées.
$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
Tâche 5 : enlever une configuration de base de données pluggable DG
Exécutez la commande suivante pour supprimer la configuration.
[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)
Liens connexes
Remerciements
- Auteur - Dharmesh Patel (architecte cloud principal, Oracle North America Cloud Services - NACIE)
Ressources de formation supplémentaires
Parcourez d'autres ateliers sur docs.oracle.com/learn ou accédez à davantage de contenus de formation gratuits sur le canal Oracle Learning YouTube. De plus, rendez-vous sur education.oracle.com/learning-explorer pour devenir un explorateur Oracle Learning.
Pour obtenir de la documentation sur le produit, visitez Oracle Help Center.
Set up an Oracle Data Guard at the Pluggable Database Level
F99051-02
June 2024