Standby database manuelle sur Standard Edition
De wikiGite
Oracle 10G MANUAL STANDBY DATABASE (Standard edition)
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
Passer la base primary en archive log :
alter system set log_archive_dest_1='LOCATION=/oradata01/ORA/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.
Backup cold de la base primary :
shutdown immediate;
*NIX : tar du répertoire /oradata01/ORA
WINDOWS : copier les données vers un répertoire backup, puis par SMB sur serveur standby
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)
Copie des fichiers d'archives par
*NIX : rsync :
- 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é
- Créer un script (à planifier à interval régulier, toutes les minutes par exemple) (/oracle/product/10.2.0/db_1/admin/ORA/scripts/send_archives.sh ):
#!/bin/sh rsync -e ssh -a --delete /oradata01/ORA/archives/* 172.16.1.22:/oradata01/ORA/archives 2>/dev/null
WINDOWS : voir script cwrsync
Sur le serveur 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
Ecraser la base existante : cd /oradata01; tar -xvzf ORA.tgz
Dupliquer (par cp/copy) 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/ORA/scripts/start_standby.sh) :
#!/bin/sh . /home/oracle/.bashrc export ORACLE_SID=ORA sqlplus / as sysdba << EOF startup nomount; alter database mount standby database; exit EOF
script sql d'application des logs (à planifier à interval régulier avec « >/dev/null 2>&1 ») (/oracle/product/10.2.0/db_1/admin/ORA/scripts/apply_archive.sh) :
#!/bin/sh #Insérer un retour chariot dans le script avant « exit » sinon il attend indéfiniment . /home/oracle/.bashrc export ORACLE_SID=ORA sqlplus / as sysdba << EOF recover automatic standby database; exit EOF
Note 1 : les messages d'info qui s'affichent lors du recover sont aussi loggués dans le fichier alert_ORA.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.
Pour passer la standby en primary (/oracle/product/10.2.0/db_1/admin/ORA/scripts/standby_to_primary.sh) :
#!/bin/sh . /home/oracle/.bashrc export ORACLE_SID=ORA 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 possible.
On peut aussi arrêter l'actuelle primary, copier la base sur la machine reconstruite (donc redémarrer la primary sur la bonne machine) et recommencer la procédure pour refaire une standby sur la machine 2.