Utiliser Oracle Data Guard avec l'interface de ligne de commande de la base de données
Cet article explique comment utiliser l'interface de ligne de commande de la base de données pour configurer Data Guard avec le basculement à démarrage rapide (FSFO) dans Oracle Cloud Infrastructure. Les rubriques de cet article décrivent comment préparer les bases de données principale et de secours, puis comment configurer Data Guard pour transmettre les données de journalisation de la base de données principale et les appliquer à la base de données de secours.
Oracle recommande d'utiliser la console au lieu de l'interface CLI de la base de données pour configurer et utiliser Data Guard dans Oracle Cloud Infrastructure.
Note :
Cet article suppose que vous connaissiez Data Guard et FSFO. Pour en savoir plus, voir Utiliser Oracle Data Guard sur un système de base de données.
Conditions requises
Pour effectuer les procédures de cette rubrique, vous avez besoin des informations suivantes sur les bases de données principale et de secours.
- db_name (ou oracle_sid)
- db_unique_name
- Répertoire de base Oracle (ou de base de données)
Recherche des informations sur la base de données
Une fois les systèmes de base de données principal et de secours lancés et les bases de données créées, tel que décrit plus loin dans cette rubrique, vous pouvez utiliser l'interface CLI sur ces systèmes pour rechercher les informations requises sur la base de données.
- Utilisez SSH pour accéder au système de base de données.
ssh -i <private_key_path> opc@<db_system_ip_address>
- Connectez-vous en tant qu'
opc
, puis passez à l'utilisateurroot
à l'aide desudo
. Utilisezsudo su -
avec un trait d'union pour appeler le profil de l'utilisateur racine, ce qui règle la variablePATH
au répertoire dbcli (/opt/oracle/dcs/bin
).sudo su -
- Pour rechercher db_name (ou oracle_sid) et db_uniqueName, exécutez la commande
dbcli list-databases -j
.
Sortie :dbcli list-databases -j
[ { "id" : "80ad855a-5145-4f8f-a08f-406c5e4684ff", "name" : "dbtst", "dbName" : "dbtst", "databaseUniqueName" : "dbtst_phx1cs", "dbVersion" : "12.1.0.2", "dbHomeId" : "2efe7af7-0b70-4e9b-ba8b-71f11c6fe287", "instanceOnly" : false, . . .
- Pour trouver le répertoire de base Oracle (ou de base de données), exécutez la commande
dbcli list-dbhomes
. S'il existe plusieurs répertoires de base sur le système de base de données, utilisez celui qui correspond à "dbHomeId" dans la sortie de la commandedbcli list-databases -j
présentée ci-dessus.
Sortie :dbcli list-dbhomes
ID Name DB Version Home Location Status ---------------------------------------- -------------------- ---------------------------------------- --------------------------------------------- ---------- 2efe7af7-0b70-4e9b-ba8b-71f11c6fe287 OraDB12102_home1 12.1.0.2.160719 (23739960, 23144544) /u01/app/oracle/product/12.1.0.2/dbhome_1 Configured 33ae99fe-5413-4392-88da-997f3cd24c0f OraDB11204_home1 11.2.0.4.160719 (23054319, 23054359) /u01/app/oracle/product/11.2.0.4/dbhome_1 Configured
Créer un système de base de données principal
Si vous ne disposez pas encore d'un système de base de données principal, créez-en un comme décrit dans la section Aperçu de la création d'un système de base de données. Le système de base de données inclut une base de données initiale. Vous pouvez créer des bases de données supplémentaires à l'aide des commandes de base de données disponibles dans le système de base de données.
Créer un système de base de données de secours
Note :
La base de données de secours doit avoir le même db_name que la base de données principale, mais un db_unique_name différent. Si vous utilisez le même nom pour les bases principale et de secours, vous devez supprimer la base du système de base de données de secours à l'aide de la commande dbcli delete-database
avant d'exécuter la commande dbcli create-database
décrite ci-dessous. La suppression et la création de la base de données prennent plusieurs minutes. Les commandes dbcli
doivent être exécutées en tant qu'utilisateur racine.
- Créez un système de base de données de secours tel que décrit dans Aperçu de la création d'un système de base de données et attendez que le provisionnement soit terminé et que le système soit disponible.
Il est vivement recommandé de créer le système de base de données de secours dans un domaine de disponibilité différent de celui du système de base de données principal aux fins de disponibilité et de récupération après sinistre. Vous pouvez créer le système de base de données de secours dans le réseau en nuage du système de base de données principal pour que les deux systèmes se trouvent dans un réseau routable unique.
- Utilisez SSH pour accéder au système de base de données.
ssh -i <private_key_path> opc@<db_system_ip_address>
- Connectez-vous en tant qu'
opc
, puis passez à l'utilisateurroot
à l'aide desudo
. Utilisezsudo su -
avec un trait d'union pour appeler le profil de l'utilisateur racine, ce qui règle la variablePATH
au répertoire dbcli (/opt/oracle/dcs/bin
).sudo su -
- Le système de base de données comprend une base de données initiale, mais vous devez créer une base de secours à l'aide de la commande
dbcli create-database
avec le paramètre--instanceonly
. Ce paramètre crée uniquement la structure de stockage de la base de données et lance celle-ci en mode nomount (aucun autre fichier de base de données n'est créé).Lorsque vous utilisez
--instanceonly
, les paramètres--dbname
et--adminpassword
sont obligatoires et doivent correspondre aux paramètres dbname et adminpassword de la base principale pour éviter toute confusion.L'exemple de commande suivant invite à entrer le mot de passe de l'administrateur, puis crée une structure de stockage pour une base de données nommée dbname.
dbcli create-database --dbname <same as primary dbname>;--databaseUniqueName <different from primary uniquename>;--instanceonly --adminpassword
Si vous utilisez des bases de données enfichables, spécifiez également le paramètre
--cdb
.Pour la syntaxe complète des commandes, voir Commandes de base de données.
- Attendez quelques minutes que la commande
dbcli create-database
ait fini de créer la base de données de secours.Vous pouvez utiliser la commande
dbcli list-jobs
pour vérifier que la tâche de création a été exécutée avec succès, puis la commandedbcli list-databases
pour vérifier que la base de données est configurée.
Préparer le système de base de données principal
Pour préparer le système de base de données principal, vous devez configurer les modules d'écoute statiques, mettre à jour tnsnames.ora et configurer certains paramètres de la base de données.
Configuration des modules d'écoute statiques
Créez les modules d'écoute statiques utilisés par RMAN et Data Guard Broker.
- Accédez par SSH au système de base de données principal, connectez-vous en tant qu'utilisateur
opc
ouroot
, puis passez à l'utilisateur grid à l'aide desudo
.sudo su - grid
- Ajoutez le contenu suivant au fichier
/u01/app/<version>/grid/network/admin/listener.ora
. Le premier module d'écoute statique est facultatif. Le deuxième module d'écoute statiqueDGMGRL
est facultatif pour les bases de données version 12.1 ou suivantes, mais obligatoire pour les bases de données version 11.2.SID_LIST_LISTENER= (SID_LIST= (SID_DESC= (SDU=65535) (GLOBAL_DBNAME = <primary_db_unique_name>.<primary_db_domain>) (SID_NAME = <primary_oracle_sid>) (ORACLE_HOME=<oracle_home_directory>) (ENVS="TNS_ADMIN=<oracle_home_directory>/network/admin") ) (SID_DESC= (SDU=65535) (GLOBAL_DBNAME = <primary_db_unique_name>_DGMGRL.<primary_db_domain>) (SID_NAME = <primary_oracle_sid>) (ORACLE_HOME=<oracle_home_directory>) (ENVS="TNS_ADMIN=<oracle_home_directory>/network/admin") ) )
- Enregistrez vos modifications, puis redémarrez le module d'écoute.
srvctl stop listener srvctl start listener
Ajout de noms de service de réseau à tnsnames.ora
En tant qu'utilisateur oracle, ajoutez le nom du service de réseau de la base de données de secours dans le fichier $ORACLE_HOME/network/admin/tnsnames.ora
.
<standby db_unique_name> =
(DESCRIPTION =
(SDU=65535)
(ADDRESS = (PROTOCOL = TCP)(HOST = <standby_server>.<domain>) (PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = <standby db_unique_name>.<standby db_domain>)
)
)
L'exemple ci-dessus suppose que la résolution de noms fonctionne et que <standby_server>.<domain>
peut être résolu dans la base de données principale. Vous pouvez également utiliser l'adresse IP privée du serveur de secours si les adresses IP sont routables dans un seul réseau en nuage virtuel.
Configuration des paramètres de la base de données principale
Conseil :
Si les hôtes principal et de secours ont des structures de répertoire différentes, vous devrez peut-être définir des paramètres supplémentaires non décrits ici, par exemple le paramètre log_file_name_convert
. Voir la documentation relative à RMAN pour plus d'informations sur la création de bases de secours sur des hôtes ayant des structures de répertoire différentes.
- En tant qu'utilisateur oracle, activez la gestion automatique des fichiers de secours.
alter system set standby_file_management=AUTO;
- Identifiez les noms et les emplacements des fichiers de configuration de Data Guard Broker. Les commandes utilisées dépendent du type de stockage de base de données. En cas de doute sur le type de stockage de base de données, exécutez les commandes de base de données sur le système de base de données.
Pour le stockage ACFS, utilisez les commandes suivantes pour définir les fichiers de configuration de Data Guard Broker.
alter system set dg_broker_config_file1='/u02/app/oracle/oradata/<Primary db_unique_name>/dbs/dr1<Primary db_unique_name>.dat'; alter system set dg_broker_config_file2='/u02/app/oracle/oradata/<Primary db_unique_name>/dbs/dr2<Primary db_unique_name>.dat';
Pour le stockage ASM, utilisez les commandes suivantes pour définir les fichiers de configuration de Data Guard Broker.
alter system set dg_broker_config_file1='+DATA/<Primary db_unique_name>/dr1<db_unique_name>.dat'; alter system set dg_broker_config_file2='+DATA/<Primary db_unique_name>/dr2<db_unique_name>.dat';
- Activez le processus DMON de Data Guard Broker pour la base de données.
alter system set dg_broker_start=true;
- Forcez la journalisation pour toutes les transactions de base de données.
alter database force logging ;
- Ajoutez des fichiers de journalisation de secours en fonction des fichiers de journalisation en ligne. Dans un système de base de données nouvellement lancé, il existe trois fichiers de journalisation de taille 1073741824. Vous devez donc créer quatre fichiers de journalisation de secours de même taille.
Vous pouvez utiliser l'interrogation ci-dessous pour déterminer le nombre et la taille (en octets) des fichiers de journalisation en ligne.
Sortie :select group#, bytes from v$log;
GROUP# BYTES ---------- ---------- 1 1073741824 2 1073741824 3 1073741824
Tous les fichiers de journalisation en ligne doivent avoir la même taille.
Les fichiers de journalisation de secours doivent avoir la même taille que les fichiers de journalisation en ligne, mais il doit y en avoir au moins un de plus. Dans l'exemple ci-dessus, il existe trois fichiers de journalisation en ligne, il faut donc créer quatre fichiers de journalisation de secours. Vous devez indiquer le nombre de fichiers de journalisation courant plus un, et utiliser la même taille.
alter database add standby logfile thread 1 size <size>;
Il ne doit y avoir qu'un seul membre dans le groupe de fichiers de journalisation de secours (par défaut, un système de base de données est créé avec un seul membre par groupe de fichiers de journalisation de secours). Pour vous en assurer, vous pouvez utiliser la syntaxe suivante pour nommer le fichier.
alter database add standby logfile thread 1 group 4 (<logfile name with full path>) size 1073741824, group 5(<logfile name with full path>) size 1073741824 ...
Pour les configurations ASM/OMF, la commande ci-dessus utilise le groupe de disques au lieu de <logfile name with full path (nom du fichier journal avec chemin complet)>.
alter database add standby logfile thread 1 group 4 (+RECO) size 1073741824, group 5(+RECO) size 1073741824 ...
Conseil :
Les fichiers de journalisation en ligne et de secours doivent être dimensionnés de sorte que les permutations ne se produisent pas plus souvent qu'une fois toutes les 10 minutes. Cela nécessite de connaître l'application et, éventuellement, d'effectuer un ajustement après le déploiement. Pour plus d'informations, voir Utiliser des fichiers de journalisation de secours et configurer correctement leur taille.
- Vérifiez que vous avez créé le bon nombre de fichiers de journalisation de secours.
select group#, bytes from v$standby_log;
- Assurez-vous que la base de données est en mode ARCHIVELOG.
archive log list
- Activez le mode FLASHBACK pour la base de données. La valeur minimale recommandée pour db_flashback_retention_target est de 120 minutes.
alter database flashback on ; alter system set db_flashback_retention_target=120;
- Exécutez une permutation de fichier de journalisation pour activer l'archivage si la base de données vient d'être créée. (Au moins un fichier de journalisation doit être archivé avant l'exécution de RMAN DUPLICATE.)
alter system switch logfile;
Préparer la base de données de secours
Avant de préparer la base de données de secours, assurez-vous que la version de son répertoire de base est la même que celle du répertoire de base de la base de données principale. (Si les bases de données principale et de secours viennent toutes deux d'être créées avec la même version de base de données, les répertoires de base sont les mêmes.) Si tel n'est pas le cas, créez un répertoire de base avec la même version. Vous pouvez utiliser les commandes dbhome pour vérifier les versions et créer un nouveau répertoire de base, si nécessaire.
Pour préparer le système de base de données de secours, vous devez configurer les modules d'écoute statiques, mettre à jour tnsnames.ora, configurer le portefeuille TDE, créer un fichier de mots de passe temporaire, vérifier la connectivité, exécuter RMAN DUPLICATE, activer FLASHBACK, puis créer le service de base de données.
Configuration des modules d'écoute statiques
Créez les modules d'écoute statiques utilisés par RMAN et Data Guard Broker.
- Accédez par SSH au système de base de données de secours, connectez-vous en tant qu'utilisateur
opc
ouroot
, puis passez à l'utilisateur grid à l'aide desudo
.sudo su - grid
- Ajoutez le contenu suivant à
/u01/app/<db_version>/grid/network/admin/listener.ora.
Le premier module d'écoute statique affiché ci-dessous est requis pour RMAN DUPLICATE. Le deuxième module d'écoute statique DGMGRL est facultatif pour les versions de base de données 12.2.0.1 et 12.1.0.2, mais obligatoire pour la version 11.2.0.4.
SID_LIST_LISTENER= (SID_LIST= (SID_DESC= (SDU=65535) (GLOBAL_DBNAME = <standby db_unique_name>.<standby db_domain>) (SID_NAME = <standby oracle_sid>) (ORACLE_HOME=<oracle home directory>) (ENVS="TNS_ADMIN=<oracle home directory>/network/admin") ) (SID_DESC= (SDU=65535) (GLOBAL_DBNAME = <standby db_unique_name>_DGMGRL.<standby db_domain>) (SID_NAME = <standby oracle_sid>) (ORACLE_HOME=<oracle home directory>) (ENVS="TNS_ADMIN=<oracle home directory>/network/admin") ) )
- Redémarrez le module d'écoute.
srvctl stop listener srvctl start listener
- Vérifiez que les modules d'écoute statiques sont disponibles. L'exemple de sortie ci-dessous concerne la version de base de données 12.1.0.2. Notez que les messages
...status UNKNOWN
sont attendus à ce stade.
Sortie :lsnrctl status
LSNRCTL for Linux: Version 12.1.0.2.0 - Production on 29-SEP-2016 21:09:25 Copyright (c) 1991, 2014, Oracle. All rights reserved. Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER))) STATUS of the LISTENER ------------------------ Alias LISTENER Version TNSLSNR for Linux: Version 12.1.0.2.0 - Production Start Date 29-SEP-2016 21:09:19 Uptime 0 days 0 hr. 0 min. 5 sec Trace Level off Security ON: Local OS Authentication SNMP OFF Listener Parameter File /u01/app/12.1.0.2/grid/network/admin/listener.ora Listener Log File /u01/app/grid/diag/tnslsnr/dg2/listener/alert/log.xml Listening Endpoints Summary... (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER))) (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.0.1.24)(PORT=1521))) Services Summary... Service "dg2_phx2hx.oratst.org" has 1 instance(s). Instance "dg2", status UNKNOWN, has 1 handler(s) for this service... Service "dg2_phx2hx_DGMGRL.oratst.org" has 1 instance(s). Instance "dg2", status UNKNOWN, has 1 handler(s) for this service... The command completed successfully
Ajout de noms de service de réseau à tnsnames.ora
En tant qu'utilisateur oracle, ajoutez le nom du service de réseau de la base de données de secours dans le fichier $ORACLE_HOME/network/admin/tnsnames.ora
. $ORACLE_HOME est le répertoire de base dans lequel la base de données de secours s'exécute.
<Primary db_unique_name> =
(DESCRIPTION =
(SDU=65535)
(ADDRESS = (PROTOCOL = TCP)(HOST = <primary_server>.<domain>) (PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = <primary db_unique_name).<primary db_domain>)
)
)
<Standby db_unique_name> =
(DESCRIPTION =
(SDU=65535)
(ADDRESS = (PROTOCOL = TCP)(HOST = <standby_server>.<domain>) (PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = <standby db_unique_name>.<db_domain>)
)
)
Copie des portefeuille TDE sur le système de secours
scp -i <private key> primary_server:/opt/oracle/dcs/commonstore/wallets/tde/<primary db_unique_name>/* standby_server:/opt/oracle/dcs/commonstore/wallets/tde/<standby db_unique_name>
Configuration du système de secours
En tant qu'utilisateur oracle, créez le répertoire suivant pour la version de base de données 11.2.0.4. Cette étape est facultative pour les versions 12.2.0.1 et 12.1.0.2.
mkdir -pv /u03/app/oracle/redo/<standby db_unique_name uppercase>/controlfile
Création de la destination du fichier de vérification
En tant qu'utilisateur oracle, créez le répertoire suivant à utiliser comme destination du fichier de vérification.
mkdir -p /u01/app/oracle/admin/<db_name>/adump
Sinon, la commande RMAN DUPLICATE utilisée ultérieurement échouera.
Création d'un fichier de mots de passe temporaire
En tant qu'utilisateur oracle, créez un fichier de mots de passe temporaire.
orapwd file=$ORACLE_HOME/dbs/orapw<standby oracle_sid> password=<admin password for primary> entries=5
Le mot de passe doit être identique à celui de l'administrateur de la base de données principale. Sinon, l'étape RMAN
DUPLICATE échouera avec le message : RMAN-05614: Passwords for target and auxiliary connections must be the same when using active duplicate.
Vérification de la disponibilité de la base de données de secours
- En tant qu'utilisateur oracle, définissez les variables d'environnement.
. oraenv
- Remplacez
$ORACLE_HOME/dbs/init<standby sid_name>.ora
par le contenu suivant :db_name=<Primary db_name> db_unique_name=<standby db_unique_name> db_domain=<standby db_domain>
- Supprimez le fichier spfile de la base de secours.
/u02/app/oracle/oradata/<standby db_unique_name>/dbs/spfile$ORACLE_SID.ora
La base de données doit être démarrée en mode nomount sans fichier spfile spécifié, mais le fichier init initial contient un paramètre spfile qui empêche l'étape
RMAN
DUPLICATE d'aboutir. - Définissez la variable d'environnement
ORACLE_UNQNAME
pour pointer vers votreDB_UNIQUE_NAME
.export ORACLE_UNQNAME =db_unique_name
Note :
Si vous n'effectuez pas cette étape, le portefeuille n'est pas ouvert et l'exécution de la commandeRMAN DUPLICATE
à l'étape suivante échoue. - La commande
dbcli create-database --instanceonly
utilisée précédemment ouvre la base de données de secours en tant que base principale en mode de lecture/écriture. Vous devez donc fermer la base de données avant de passer à l'étape nomount ci-dessous.sqlplus / as sysdba shutdown immediate
- Démarrez la base de données en mode nomount.
startup nomount
Vérification des connexions des bases de données
Vérifiez la connexion entre les bases de données principale et de secours.
- Assurez-vous que le port du module d'écoute 1521 est ouvert dans les listes de sécurité utilisées pour les systèmes de base de données principal et de secours. Pour plus d'informations, voir Mettre à jour la liste de sécurité du système de base de données.
- À partir de la base de données principale, connectez-vous à la base de données de secours.
sqlplus sys/<password>@<standby net service name> as sysdba
- Depuis la base de données de secours, connectez-vous à la base de données principale.
sqlplus sys/<password>@<primary net service name> as sysdba
Exécution de la commande RMAN DUPLICATE
Exécutez la commande RMAN DUPLICATE sur le système de base de données de secours, en tant qu'utilisateur oracle.
Si la base de données principale est volumineuse, vous pouvez affecter des canaux supplémentaires pour améliorer la performance. Pour une base de données qui vient d'être installée, un canal exécute généralement la duplication en quelques minutes.
Assurez-vous qu'aucune erreur n'est générée par la commande RMAN DUPLICATE. Si des erreurs se sont produites, redémarrez la base de données à l'aide du fichier init.ora
(et non spfile), s'il est généré sous $ORACLE_HOME/dbs
dans le cadre de l'exécution de RMAN DUPLICATE.
Dans les exemples suivants, utilisez des minuscules pour <Standby db_unique_name>, sauf indication contraire.
Pour la disposition du stockage ACFS, exécutez les commandes suivantes.
rman target sys/<password>@<primary alias> auxiliary sys/<password>@<standby alias> log=rman.out
run { allocate channel prim1 type disk;
allocate auxiliary channel sby type disk;
duplicate target database for standby from active database
dorecover
spfile
parameter_value_convert '/<Primary db_unique_name>/','/<Standby db_unique_name>/','/<Primary db_unique_name uppercase>/','/<Standby db_unique_name uppercase >/'
set db_unique_name='<Standby db_unique_name>'
set db_create_file_dest='/u02/app/oracle/oradata/<Standby db_unique_name>'
set dg_broker_config_file1='/u02/app/oracle/oradata/<Standby db_unique_name>/dbs/dr1<Standby db_unique_name>.dat'
set dg_broker_config_file2='/u02/app/oracle/oradata/<Standby db_unique_name>/dbs/dr2<Standby db_unique_name>.dat'
set dispatchers ='(PROTOCOL=TCP) (SERVICE=<Standby db_unique_name>XDB)'
set instance_name='<Standby db_unique_name>'
;
}
Pour la disposition du stockage ASM, exécutez les commandes suivantes.
rman target sys/<password>@<primary alias> auxiliary sys/<password>@<standby alias> log=rman.out
run {
allocate channel prim1 type disk;
allocate auxiliary channel sby type disk;
duplicate target database for standby from active database
dorecover
spfile
parameter_value_convert '/<Primary db_unique_name>/','/<Standby db_unique_name>/','/<Primary db_unique_name uppercase>/','/<Standby db_unique_name uppercase>/'
set db_unique_name='<Standby db_unique_name>'
set dg_broker_config_file1='+DATA/<Standby db_unique_name>/dr1<Standby db_unique_name>.dat'
set dg_broker_config_file2='+DATA/<Standby db_unique_name>/dr2<Standby db_unique_name>.dat'
set dispatchers ='(PROTOCOL=TCP) (SERVICE=<Standby db_unique_name>XDB)'
set instance_name='<Standby db_unique_name>'
;
}
Activation de l'option FLASHBACK de base de données
- Pour utiliser au mieux Data Guard, il est recommandé d'activer l'option Flashback et de régler
db_flashback_retention_target
à au moins 120 minutes pour les bases de données principale et de secours.alter database flashback on; alter system set db_flashback_retention_target=120;
- Vérifiez que la base de données de secours est correctement créée.
select FORCE_LOGGING, FLASHBACK_ON, OPEN_MODE, DATABASE_ROLE,SWITCHOVER_STATUS, DATAGUARD_BROKER, PROTECTION_MODE from v$database ;
Création d'un service de base de données
Oracle recommande de créer un service de base de données pour la base de données de secours à l'aide de srvctl.
Pour la disposition du stockage ACFS.
- Créez un répertoire partagé et copiez le fichier spfile dans celui-ci.
mkdir -pv /u02/app/oracle/oradata/<Standby db_unique_name>/dbs cp $ORACLE_HOME/dbs/spfile<standby oracle_sid>.ora /u02/app/oracle/oradata/<Standby db_unique_name>/dbs
- Arrêtez et supprimez le service de base de données existant.
srvctl stop database -d <standby db_unique_name> srvctl remove database -d <standby db_unique_name>
- Créez le service de base de données.
srvctl add database -d <standby db_unique_name> -n <standby db_name> -o $ORACLE_HOME -c SINGLE -p '/u02/app/oracle/oradata/<standby db_unique_name>/dbs/spfile<standby db_name>.ora' -x <standby hostname> -s "READ ONLY" -r PHYSICAL_STANDBY -i <db_name> srvctl setenv database -d <standby db_unique_name> -t "ORACLE_UNQNAME=<standby db_unique_name>" srvctl config database -d <standby db_unique_name>
- Démarrez le service de base de données.
srvctl start database -d <standby db_unique_name>
- Nettoyez les fichiers dans
$ORACLE_HOME/dbs
.rm $ORACLE_HOME/dbs/spfile<standby oracle_sid>.ora rm $ORACLE_HOME/dbs/init<standby oracle_sid>.ora
- Créez le fichier
$ORACLE_HOME/dbs/init<standby oracle_sid>.ora
pour référencer le nouvel emplacement du fichier spfile.SPFILE='/u02/app/oracle/oradata/<standby db_unique_name>/dbs/spfile<standby db_name>.ora'
- Arrêtez la base de données de secours, puis démarrez-la en utilisant
srvctl
.srvctl stop database -d <standby db_unique_name> srvctl start database -d <standby db_unique_name>
Pour la disposition du stockage ASM.
- Vous pouvez générer le fichier spfile sous +DATA.
create pfile='init<standby oracle_sid>.ora' from spfile ; create spfile='+DATA' from pfile='init<standby oracle_sid>.ora' ;
- Arrêtez et supprimez le service de base de données existant.
srvctl stop database -d <standby db_unique_name> srvctl remove database -d <standby db_unique_name>
- Créez le service de base de données.
srvctl add database -d <standby db_unique_name> -n <standby db_name> -o $ORACLE_HOME -c SINGLE -p '+DATA/<standby db_unique_name>/PARAMETERFILE/spfile.xxx.xxxxxx' -x <standby hostname> -s "READ ONLY" -r PHYSICAL_STANDBY -i <db_name> srvctl setenv database -d <standby db_unique_name> -t "ORACLE_UNQNAME=<standby db_unique_name>" srvctl config database -d <standby db_unique_name>
- Démarrez le service de base de données.
srvctl start database -d <standby db_unique_name>
- Nettoyez les fichiers dans
$ORACLE_HOME/dbs
.rm $ORACLE_HOME/dbs/init<standby oracle_sid>.ora rm $ORACLE_HOME/dbs/spfile<standby oracle_sid>.ora
- Créez le fichier
$ORACLE_HOME/dbs/init<standby oracle_sid>.ora
pour référencer le nouvel emplacement du fichier spfile.SPFILE='+DATA/<standby db_unique_name>/PARAMETERFILE/spfile.xxx.xxxxxx'
- Arrêtez la base de données et démarrez la base de données de secours à l'aide de srvctl.
srvctl start database -d <standby db_unique_name>
Configurer Data Guard
Exécutez les étapes suivantes pour configurer Data Guard, puis activez le transport des fichiers de journalisation depuis la base de données principale et l'application des fichiers de journalisation dans la base de données de secours.
- Exécutez l'utilitaire CLI
dgmgrl
à partir du système de base de données principal ou de secours, et connectez-vous à la base de données principale en utilisant les données d'identification sys.connect sys/<sys password>@<primary tns alias>
- Créez la configuration Data Guard et identifiez les bases de données principale et de secours dans l'utilitaire de ligne de commande
dgmgrl
.create configuration mystby as primary database is <primary db_unique_name> connect identifier is <primary tns alias>; add database <standby db_unique_name> as connect identifier is <standby tns alias> maintained as physical;
- Activez la configuration Data Guard à l'aide de l'utilitaire de ligne de commande
dgmgrl
.enable configuration;
- Vérifiez que la configuration Data Guard a été effectuée correctement. Exécutez l'énoncé SQL suivant dans les bases de données principale et de secours à l'invite SQL.
select FORCE_LOGGING, FLASHBACK_ON, OPEN_MODE, DATABASE_ROLE, SWITCHOVER_STATUS, DATAGUARD_BROKER, PROTECTION_MODE from v$database;
- Vérifiez que les processus Data Guard sont lancés dans la base de données de secours.
select PROCESS,PID,DELAY_MINS from V$MANAGED_STANDBY;
- Vérifiez la configuration des paramètres dans les bases de données principale et de secours.
show parameter log_archive_dest_ show parameter log_archive_config show parameter fal_server show parameter log_archive_format
- Vérifiez que la configuration de Data Guard fonctionne dans l'utilitaire de ligne de commande
dgmgrl
. Plus précisément, assurez-vous que le transport et l'application des fichiers de journalisation fonctionnent, et que la base de données de secours n'est pas trop en retard par rapport à la base principale.show configuration verbose show database verbose <standby db_unique_name> show database verbose <primary db_unique_name>
Tout écart, erreur ou avertissement doit être résolu. Vous pouvez également exécuter une transaction sur la base de données principale et vérifier qu'elle est visible dans la base de secours.
- Vérifiez que la configuration Data Guard fonctionne comme prévu en exécutant une permutation et un basculement dans les deux sens. Exécutez
show configuration
après chaque opération et assurez-vous qu'il n'y a pas d'erreur ni d'avertissement dans l'utilitaire de ligne de commandedgmgrl
.Attention :
Cette étape est facultative. Si, pour une raison ou une autre, la configuration n'est pas valide, la permutation ou le basculement échoue et il peut être difficile, voire impossible, de démarrer la base de données principale. Une récupération de la base principale peut être nécessaire, ce qui a une incidence sur la disponibilité.
switchover to <standby db_unique_name> switchover to <primary db_unique_name> #connect to standby before failover: connect sys/<sys password>@<standby db_unique_name> failover to <standby db_unique_name> reinstate database <primary db_unique_name> #connect to primary before failover: connect sys/<sys password>@<primary db_unique_name> failover to <primary db_unique_name> reinstate database <standby db_unique_name>
Configurer l'observateur (facultatif)
La meilleure pratique en matière de haute disponibilité et de durabilité consiste à exécuter la base de données principale, la base de secours et l'observateur dans des domaines de disponibilité différents. L'observateur détermine si le basculement vers une base de secours cible spécifique doit être effectué. Le serveur utilisé pour l'observateur nécessite le logiciel Oracle Client Administrator, qui inclut Oracle SQL NET et Broker. Exécutez les commandes suivantes dans l'utilitaire de ligne de commande dgmgrl
.
- Configurez les noms d'alias TNS pour les bases de données principale et de secours, tel que décrit précédemment, puis vérifiez la connexion aux deux bases de données.
- Changez le mode de protection en maxavailability ou maxperformance (maxprotection n'est pas pris en charge pour FSFO).
Pour activer la disponibilité maximale :
edit database <standby db_unique_name> set property 'logXptMode'='SYNC'; edit database <primary db_unique_name> set property 'logXptMode'='SYNC'; edit configuration set protection mode as maxavailability;
Pour activer la performance maximale :
edit configuration set protection mode as maxperformance; edit database <standby db_unique_name> set property 'logXptMode'='ASYNC'; edit database <primary db_unique_name> set property 'logXptMode'='ASYNC';
Pour maxperformance, la propriété
FastStartFailoverLaglimit
limite le volume maximal de pertes de données autorisées à 30 secondes par défaut. - Les propriétés suivantes doivent également être prises en compte. Exécutez
show configuration verbose
pour voir leurs valeurs courantes.- FastStartFailoverPmyShutdown
- FastStartFailoverThreshold
- FastStartFailoverTarget
- FastStartFailoverAutoReinstate
(L'exécution de
show configuration
génère l'erreur suivante jusqu'au démarrage de l'observateur :Warning : ORA-16819: fast-start failover observer not started
.) - Activez le basculement à démarrage rapide (FSFO) depuis Broker :
Enable fast_start failover
- Vérifiez la fonction FSFO et les paramètres associés.
show fast_start failover
- Démarrez l'observateur depuis Broker (il est exécuté en avant-plan, mais peut également être exécuté en arrière-plan).
start observer
- Vérifiez que la fonction FSFO est activée, sans erreur ni d'avertissement.
show configuration verbose
- Testez toujours le basculement dans les deux directions pour vous assurer que tout fonctionne comme prévu. Vérifiez que la fonction FSFO s'exécute correctement en effectuant un abandon de la base de données principale.
L'observateur doit lancer le basculement vers la base de données de secours. Si le mode de protection est réglé à maxprotection, une perte de données peut se produire, en fonction de la valeur de FastStartFailoverLaglimit.