Outils personnels

Standby database manuelle (cold) sur Standard Edition

De wikiGite

Révision datée du 11 février 2011 à 10:03 par Frank (discussion | contributions) (Synchronisation des archive logs)

installer Oracle 10g standard sur les 2 serveurs.

créer des bases identiques sur les 2 serveurs, avec les mêmes SID et arborescences.

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.