Utilisation d'Oracle Data Guard avec l'interface de ligne de commande de base de données
Cet article explique comment utiliser l'interface de ligne de commande de base de données pour configurer Data Guard avec Fast-Start Failover dans Oracle Cloud Infrastructure. Les rubriques de cet article expliquent 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 à la place de l'interface de ligne de commande de base de données pour configurer et utiliser Data Guard dans Oracle Cloud Infrastructure.
Remarques :
Cet article suppose que vous connaissez déjà Data Guard et Fast-Start Failover. Pour en savoir plus, reportez-vous à Utilisation d'Oracle Data Guard sur un système de base de données.
Prérequis
Afin d'effectuer les procédures décrites dans cette rubrique, vous aurez besoin des informations suivantes pour les bases de données principale et de secours.
- db_name (ou oracle_sid)
- db_unique_name
- répertoire de base Oracle (ou répertoire de base de la base de données)
Recherche des informations de base de données
Une fois que vous avez lancé les systèmes de base de données principale et de secours, et que vous avez créé des bases de données comme décrit plus loin dans cette rubrique, vous pouvez utiliser l'interface de ligne de commande sur ces systèmes pour rechercher les informations de base de données requises.
- Connectez-vous via SSH au système de base de données.
ssh -i <private_key_path> opc@<db_system_ip_address>
- Connectez-vous en tant qu'utilisateur
opc
, puis passez à l'utilisateurroot
à l'aide de la commandesudo
. Utilisezsudo su -
avec un trait d'union pour appeler le profil de l'utilisateur root, qui définiraPATH
sur le répertoire dbcli (/opt/oracle/dcs/bin
).sudo su -
- Pour trouver 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 le répertoire de base de la base de données), exécutez la commande
dbcli list-dbhomes
. S'il existe plusieurs répertoires de base de base de données sur le système de base de données, utilisez celui qui correspond à "dbHomeId" dans la sortie de 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éation d'un système de base de données principale
Si vous n'avez pas encore de système de base de données principale, créez-en un comme décrit dans Présentation de la création d'un système de base de données. Le système de base de données contiendra une base de données initiale. Vous pouvez créer d'autres bases de données à l'aide des commandes database disponibles sur le système de base de données.
Création d'un système de base de données de secours
Remarques :
La base de données de secours doit avoir le même db_name que la base de données principale, mais elle doit avoir un db_unique_name différent. Si vous utilisez le même nom pour la base de données de secours et la base de données principale, vous devrez supprimer cette base de données du système de secours à l'aide de la commande dbcli delete-database
afin de pouvoir exécuter la commande dbcli create-database
décrite ci-dessous. La suppression et la création de la base de données prendront plusieurs minutes. Les commandes dbcli
doivent être exécutées en tant qu'utilisateur root.
- Create a standby DB system as described in Overview of Creating a DB System and wait for the DB system to finish provisioning and become available.
Vous pouvez 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 principale à des fins de disponibilité et de récupération après sinistre (cela est fortement recommandé). Vous pouvez créer le système de base de données de secours dans le réseau cloud du système de base de données principale pour que les deux systèmes se trouvent dans un réseau routable unique.
- Connectez-vous via SSH au système de base de données.
ssh -i <private_key_path> opc@<db_system_ip_address>
- Connectez-vous en tant qu'utilisateur
opc
, puis passez à l'utilisateurroot
à l'aide de la commandesudo
. Utilisezsudo su -
avec un trait d'union pour appeler le profil de l'utilisateur root, qui définiraPATH
sur le répertoire dbcli (/opt/oracle/dcs/bin
).sudo su -
- Le système de base de données contiendra une base de données initiale, mais vous devrez créer une base de données 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 base de données et démarre la base de données 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 requis et doivent correspondre au paramètre dbname et au mot de passe administrateur de la base de données principale pour éviter toute confusion.L'exemple de commande suivant vous invite à saisir le mot de passe 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 pluggables, indiquez également le paramètre
--cdb
.Pour connaître la syntaxe complète des commandes, reportez-vous à Commandes database.
- Attendez quelques minutes que la commande
dbcli create-database
crée la base de données de secours.Vous pouvez utiliser la commande
dbcli list-jobs
pour vérifier que le travail de création a été exécuté, puis la commandedbcli list-databases
pour vérifier que la base de données est configurée.
Préparation du système de base de données principale
Pour préparer le système de base de données principale, vous devez configurer les processus d'écoute statiques, mettre à jour tnsnames.ora et configurer certains paramètres de base de données.
Configuration des processus d'écoute statiques
Créez des processus d'écoute statiques destinés à RMAN et Data Guard Broker.
- Connectez-vous via SSH au système de base de données principale, connectez-vous en tant qu'utilisateur
opc
ouroot
, puis exécutez la commandesudo
pour passer à l'utilisateur de système d'exploitation grid.sudo su - grid
- Modifiez le fichier
/u01/app/<version>/grid/network/admin/listener.ora
et ajoutez-y le contenu suivant. Le premier processus d'écoute statique indiqué ici est facultatif. Le second processus d'écoute statiqueDGMGRL
est facultatif pour les bases de données de version 12.1 ou ultérieure, mais est requis pour les bases de données de 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 les modifications, puis redémarrez le processus d'écoute.
srvctl stop listener srvctl start listener
Ajout de noms de service réseau à tnsnames.ora
En tant qu'utilisateur oracle, modifiez $ORACLE_HOME/network/admin/tnsnames.ora
et ajoutez le nom de service réseau de la base de données de secours.
<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 nom 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 au sein d'un réseau cloud unique.
Configuration des paramètres de la base de données principale
Conseil :
Si les hôtes de base de données principale et de secours ont des structures de répertoires différentes, vous devrez peut-être définir des paramètres supplémentaires qui ne sont pas décrits ici, tels que le paramètre log_file_name_convert
. Reportez-vous à la documentation RMAN afin d'avoir plus d'informations sur la création de bases de données de secours pour les hôtes ayant des structures de répertoires 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 emplacements des fichiers de configuration de broker. Les commandes utilisées dépendent du type de stockage de base de données. Si vous avez des doutes quant au type de stockage de la base de données, utilisez les commandes database sur le système de base de données.
Pour le stockage de base de données ACFS, utilisez les commandes suivantes afin de définir les fichiers de configuration de 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 de base de données ASM, utilisez les commandes suivantes afin de définir les fichiers de configuration de 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 du broker pour la base de données.
alter system set dg_broker_start=true;
- Forcez la journalisation de la base de données pour toutes les transactions de base de données.
alter database force logging ;
- Ajoutez des fichiers de journalisation de secours basés sur les fichiers de journalisation en ligne. Sur un système de base de données nouvellement lancé, il existera trois fichiers de journalisation en ligne de taille 1073741824. Créez donc quatre fichiers de journalisation de secours de taille identique.
Vous pouvez utiliser la requête 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 avoir au moins un fichier de journalisation de secours supplémentaire par rapport au nombre de fichiers de journalisation en ligne. Dans l'exemple ci-dessus, il y a trois fichiers de journalisation en ligne. Quatre fichiers de journalisation de secours sont donc requis. Indiquez les fichiers de journalisation actuels plus un et utilisez la même taille que pour les fichiers de journalisation.
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 ce faire, vous pouvez nommer le fichier avec la syntaxe suivante.
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>.
alter database add standby logfile thread 1 group 4 (+RECO) size 1073741824, group 5(+RECO) size 1073741824 ...
Conseil :
Vous devez dimensionner les fichiers de journalisation en ligne et de secours pour éviter que les changements de journal n'aient lieu plus souvent que toutes les 10 minutes. Pour cela, vous devez connaître l'application et vous serez peut-être amené à effectuer des ajustements après le déploiement. Pour plus d'informations, reportez-vous à Utilisation des fichiers de journalisation de secours et configuration de la taille appropriée.
- Vérifiez que vous avez créé le nombre correct 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 l'opération FLASHBACK de 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;
- Effectuez un seul changement de fichier de journalisation pour activer l'archivage si la base de données vient d'être créée. (Au moins un journal doit être archivé avant d'exécuter la commande RMAN DUPLICATE.)
alter system switch logfile;
Préparation de la base de données de secours
Avant de préparer la base de données de secours, assurez-vous que son répertoire de base est de la même version que celui de la base de données principale. (Si les bases de données principale et de secours viennent d'être créées avec la même version de base de données, les répertoires de base seront identiques.) Si ce n'est pas le cas, créez un répertoire de base de base de données de la même version. Vous pouvez utiliser les commandes dbhome pour vérifier les versions et créer un répertoire de base de base de données si nécessaire.
Pour préparer le système de base de données de secours, vous devez configurer des processus d'écoute statiques, mettre à jour tnsnames.ora, configurer un portefeuille TDE, créer un fichier de mots de passe temporaires, vérifier la connectivité, exécuter RMAN DUPLICATE, activer FLASHBACK, puis créer le service de base de données.
Configuration des processus d'écoute statiques
Créez des processus d'écoute statiques destinés à RMAN et Data Guard Broker.
- Connectez-vous via SSH au système de base de données de secours, connectez-vous en tant qu'utilisateur
opc
ouroot
, puis exécutez la commandesudo
pour passer à l'utilisateur de système d'exploitation grid.sudo su - grid
- Ajoutez le contenu suivant à
/u01/app/<db_version>/grid/network/admin/listener.ora.
Le premier processus d'écoute statique affiché ci-dessous est requis pour RMAN DUPLICATE. Le second processus d'écoute statique DGMGRL est facultatif pour les versions de base de données 12.2.0.1 et 12.1.0.2, mais est requis pour la version de base de données 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 processus d'écoute.
srvctl stop listener srvctl start listener
- Vérifiez que les processus d'écoute statiques sont disponibles. Voici un exemple de sortie pour la version de base de données 12.1.0.2. 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 réseau à tnsnames.ora
En tant qu'utilisateur oracle, ajoutez le nom de service réseau de la base de données de secours à $ORACLE_HOME/network/admin/tnsnames.ora
. $ORACLE_HOME est le répertoire de base de base de données où la base de données de secours est exécutée.
<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 de portefeuilles TDE vers 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 base de données 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 de fichier d'audit
En tant qu'utilisateur oracle, créez le répertoire suivant à utiliser comme destination de fichier d'audit.
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 temporaires
En tant qu'utilisateur oracle, créez un fichier de mots de passe temporaires.
orapwd file=$ORACLE_HOME/dbs/orapw<standby oracle_sid> password=<admin password for primary> entries=5
Le mot de passe doit être identique au mot de passe administrateur de la base de données principale. Sinon, l'étape de duplication RMAN
ci-dessous échoue avec le message d'erreur 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>
- Enlevez le fichier SPFILE de la base de données 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 aucun fichier SPFILE indiqué, mais le fichier d'initialisation d'origine contient un paramètre SPFILE qui empêchera l'étape de duplication
RMAN
de fonctionner. - Définissez la variable d'environnement
ORACLE_UNQNAME
de sorte qu'elle pointe vers leDB_UNIQUE_NAME
.export ORACLE_UNQNAME =db_unique_name
Remarques :
Si vous n'effectuez pas cette étape, le portefeuille ne sera 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 de données principale en mode lecture/écriture. La base de données doit donc être arrêtée 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 de base de données
Vérifiez les connexions entre les bases de données principale et de secours.
- Assurez-vous que le port d'écoute 1521 est ouvert dans les listes de sécurité utilisées pour les systèmes de base de données principale et de secours. Pour plus d'informations, reportez-vous à Mise à jour de la liste de sécurité du système de base de données.
- Connectez-vous à la base de données de secours à partir de la base de données principale.
sqlplus sys/<password>@<standby net service name> as sysdba
- Connectez-vous à la base de données principale à partir de la base de données de secours.
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 allouer des canaux supplémentaires pour améliorer les performances. Pour une base de données récemment installée, un canal exécute généralement la duplication de la base de données en quelques minutes.
Vérifiez qu'aucune erreur n'est générée par la commande RMAN DUPLICATE. Si des erreurs se produisent, redémarrez la base de données à l'aide du fichier init.ora
(et non du fichier SPFILE) dans le cas où elle est générée sous $ORACLE_HOME/dbs
dans le cadre de RMAN DUPLICATE.
Dans les exemples suivants, utilisez des minuscules pour la valeur <Standby db_unique_name>, sauf indication contraire.
Pour une disposition de 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 une disposition de 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'opération Flashback Database
- En tant que meilleure pratique Data Guard, activez l'opération Flashback et définissez
db_flashback_retention_target
sur 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 a été 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 la commande srvctl.
Pour une disposition de stockage ACFS :
- Créez un répertoire partagé et copiez-y le fichier SPFILE.
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 enlevez 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 figurant 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 à l'aide de la commande
srvctl
.srvctl stop database -d <standby db_unique_name> srvctl start database -d <standby db_unique_name>
Pour une disposition de stockage ASM :
- Envisagez de 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 enlevez 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 figurant 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 la commande srvctl.
srvctl start database -d <standby db_unique_name>
Configuration de Data Guard
Procédez comme suit pour terminer la configuration de Data Guard et activer Redo Transport à partir de la base de données principale et Redo Apply dans la base de données de secours.
- Exécutez l'utilitaire de ligne de commande
dgmgrl
à partir du système de base de données principale ou de secours. Ensuite, connectez-vous à la base de données principale à l'aide des informations d'identification sys.connect sys/<sys password>@<primary tns alias>
- Créez la configuration Data Guard et procédez à l'identification pour 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 dans l'utilitaire de ligne de commande
dgmgrl
.enable configuration;
- Vérifiez que Data Guard a été configuré correctement. Exécutez le code SQL suivant dans les bases de données principale et de secours dans 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 sur 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 Data Guard fonctionne dans l'utilitaire de ligne de commande
dgmgrl
. Plus précisément, assurez-vous que l'envoi des données redo et que Redo Apply fonctionnent, et que la base de données de secours n'est pas trop en retard par rapport à la base de données principale.show configuration verbose show database verbose <standby db_unique_name> show database verbose <primary db_unique_name>
Les différences, erreurs ou avertissements doivent être résolus. 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 données de secours.
- Effectuez une permutation et un basculement dans les deux sens afin de vérifier que la configuration Data Guard fonctionne comme prévu. Exécutez
show configuration
après chaque opération et vérifiez l'absence d'erreur ou d'avertissement dans l'utilitaire de ligne de commandedgmgrl
.Attention :
Cette étape est facultative. Vous pouvez l'effectuer à votre convenance. Si, pour quelque raison que ce soit, la configuration n'est pas valide, la permutation et/ou le basculement échoueront. Le démarrage de la base de données principale pourrait alors être difficile, voire impossible. Une récupération de la base de données principale peut être requise, ce qui aura 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>
Configuration de l'observateur (facultatif)
La meilleure pratique pour obtenir une haute disponibilité et une durabilité élevée consiste à exécuter la base de données principale, la base de données de secours et l'observateur dans des domaines de disponibilité distincts. L'observateur détermine si un basculement vers une base de données de secours cible spécifique est requis. Le serveur utilisé pour l'observateur requiert le logiciel Oracle Client Administrator, qui inclut Oracle SQL NET et le broker. Exécutez les commandes suivantes dans l'utilitaire de ligne de commande dgmgrl
.
- Configurez des noms d'alias TNS pour les bases de données principale et de secours comme décrit précédemment, et vérifiez la connexion aux deux bases de données.
- Définissez le mode de protection sur maxavailability ou maxperformance (maxprotection n'est pas pris en charge pour Fast-Start Failover).
Pour activer maxavailability, utilisez la commande suivante :
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 maxperformance, utilisez la commande suivante :
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 la perte de données maximale autorisée à 30 secondes par défaut. - Les propriétés suivantes doivent également être prises en compte. Exécutez
show configuration verbose
pour afficher leurs valeurs actuelles.- FastStartFailoverPmyShutdown
- FastStartFailoverThreshold
- FastStartFailoverTarget
- FastStartFailoverAutoReinstate
(L'exécution de
show configuration
entraînera l'erreur suivante jusqu'au démarrage de l'observateur :Warning : ORA-16819: fast-start failover observer not started
.) - Activez Fast-Start Failover à partir du broker :
Enable fast_start failover
- Vérifiez la fonction Fast-Start Failover et les paramètres associés.
show fast_start failover
- Démarrez l'observateur à partir du broker (il s'exécutera au premier plan, mais peut également être exécuté en arrière-plan).
start observer
- Vérifiez que la fonction Fast-Start Failover est activée, sans erreur ni avertissement.
show configuration verbose
- Testez toujours le basculement dans les deux sens pour vous assurer que tout fonctionne comme prévu. Arrêtez la base de données principale en mode Abort afin de vérifier que Fast-Start Failover fonctionne correctement.
L'observateur doit démarrer le basculement vers la base de données de secours. Si le mode de protection est défini sur maxprotection, des données risquent d'être perdues en fonction de la valeur de FastStartFailoverLaglimit.