Standby database manuelle (cold) sur Standard Edition
De wikiGite
installer Oracle 10g standard sur les 2 serveurs.
créer des bases identiques sur les 2 serveurs, avec les mêmes SID et arborescences.
Sommaire
Sur le serveur primaire
Mettre sur la base primaire le paramètre STANDBY_FILE_MANAGEMENT à AUTO (sinon Oracle ne sait pas recréer des fichiers sur la standby, lors de création de tablespaces ou d'ajout de fichiers)
SQL> connect / as sysdba SQL> alter system set standby_file_management = AUTO;
Passer la base primary en archive log :
alter system set log_archive_dest_1='LOCATION=/oradata01/ORCL/archives'; shutdown immediate; startup mount; alter database archivelog; alter database open;
Tester :
alter system switch logfile;
vérifier que l'archive log se crée au bon endroit.
Sauvegarde à froid complète de la base primary :
shutdown immediate; tar -cvzf /oradata01/ORCL.tgz /oradata01/ORCL
Sauvegarde du controlfile en mode standby :
startup alter database create standby controlfile as '/oradata01/ctrlstdby.ctl' ;
(c'est ce qui fera que la standby sera marquée « PHYSICAL STANDBY » et acceptera les recover des archive logs)
Synchronisation des archive logs
Mettre en place une copie des fichiers d'archives par rsync (qui les transfèrera à intervalles réguliers) :
1. Pour que ssh ne demande plus de mot de passe entre le primary et le standby :
- créer une clé ssh sur le primary : ssh-keygen -t dsa (tout par défaut, sans passphrase)
- copier la clé publique (contenue dans /home/oracle/.ssh/id_dsa.pub)
- créer sur la serveur standby un fichier /home/oracle/.ssh/authorized_keys, et y coller la clé
2. Créer un script (à planifier à interval régulier, toutes les minutes par exemple) (/oracle/product/10.2.0/db_1/admin/ORCL/scripts/send_archives.sh ):
#!/bin/sh rsync -e ssh -a --delete /oradata01/ORCL/archives/* 172.16.1.22:/oradata01/ORCL/archives 2>/dev/null
Sur la database standby
Transférer le .tgz et le .ctl vers standby (par scp)
paramétrer log_archives_dest_1 vers le répertoire qui recevra les archive log du primary
arrêter la base
écraser la base existante :
cd /oradata01 tar -xvzf ORCL.tgz
dupliquer (par cp) le ctrlstdby.ctl en control01.ctl, control02.ctl, control03.ctl
script shell de démarrage de la base standby (/oracle/product/10.2.0/db_1/admin/ORCL/scripts/start_standby.sh) :
#!/bin/sh . /home/oracle/.bashrc export ORACLE_SID=ORCL sqlplus / as sysdba << EOF startup nomount; alter database mount standby database; exit EOF
script sql d'application des logs (à planifier à intervalle régulier avec « >/dev/null 2>&1 ») (/oracle/product/10.2.0/db_1/admin/ORCL/scripts/apply_archive.sh) :
#!/bin/sh . /home/oracle/.bashrc export ORACLE_SID=ORCL sqlplus / as sysdba << EOF recover automatic standby database; #Insérer un retour chariot dans le script avant « exit » sinon il attend indéfiniment exit EOF
- Note 1 : les messages d'info qui s'affichent lors du recover sont aussi loggués dans le fichier alert_ORCL.log. Penser à le remettre à zéro de temps en temps.
- Note 2 : les fichiers archivelogs ne sont pas supprimés après leur application. Penser à faire le ménage dans le répertoire d'archives.
Switch standby en primay
Pour passer la standby en primary (/oracle/product/10.2.0/db_1/admin/ORCL/scripts/standby_to_primary.sh) :
#!/bin/sh . /home/oracle/.bashrc export ORACLE_SID=ORCL sqlplus / as sysdba << EOF alter database activate standby database; alter database open; exit EOF
la standby devient alors PRIMARY et refusera les recover (si on oublie d'enlever le script planifié, les erreurs seront logguées dans l'alert.log)
L'ancienne primary devra être remontée en standby mais pas de "switch back" possible
On peut aussi arrêter la base passée en primary, la copier sur la machine reconstruite (donc "remettre" la primary sur la bonne machine) et recommencer la procédure pour refaire une standby sur la machine 2.