Outils personnels

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.