Mise en place standby avec Oracle XE sous Windows et Dropbox comme repository

Un peu de fun aujourd’hui !
On va créer une standby manuelle avec Oracle XE 11GR2 en utilisant Dropbox comme FRA (Flash Recovery Area).
Je suppose que peu de personnes vont mettre en place un tel environnement… Alors quel est l’intérêt de cet article ? Avant tout de pouvoir décrire les étapes pour la configuration d’une standby manuelle. Mais aussi, si vous souhaitez synchroniser une base de données personnelle entres plusieurs Postes de travail.

L’utilisation de Dropbox dans un environnement de production n’est pas conseillé.
Tout d’abord, il faut :
– Télécharger Oracle XE sur le site d’Oracle
– Créer un compte Dropbox, télécharger et installer l’application Dropbox
Ensuite :
– Installer Oracle XE et Dropbox sur les deux serveurs (Si possible, en respectant les répertoires d’installation d’Oracle et de Dropbox sur les deux serveurs)
Une fois que toute est installé, nous allons commencer la configuration.

Sur la base primaire

  • A la fin de l’installation, l’instance devrait être démarrée
C:UsersBSO>set ORACLE_SID=XE
C:UsersBSO>set ORACLE_HOME=C:oraclexeapporacleproduct11.2.0server
C:UsersBSO>C:oraclexeapporacleproduct11.2.0serverbinsqlplus.exe / as sysdba
SQL*Plus: Release 11.2.0.2.0 Production on Lun. Mai 14 16:22:20 2012
Copyright (c) 1982, 2010, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - Production
SQL>
  • Modifier le répertoire de destination des archivelogs, pour faire pointer vers un repertoire Dropbox
SQL> alter system set db_recovery_file_dest = 'D:UsersBSODropBoxPrivatestandbyflash_recovery_area' scope = spfile;
System altered.
  • Passer la base en mode archivelog
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> startup mount
ORACLE instance started.
Total System Global Area 1071333376 bytes
Fixed Size 1388352 bytes
Variable Size 620757184 bytes
Database Buffers 444596224 bytes
Redo Buffers 4591616 bytes
Database mounted.
SQL> alter database archivelog;
Database altered.
SQL> alter database open;
Database altered.
SQL> alter system archive log current;
System altered. (Fichier correctement générée dans le répertoire db_recovery_dest, et synchronisé sur le répertoire Dropbox de l'autre serveur)
  • Créer un standby controlfile
SQL> ALTER DATABASE CREATE STANDBY CONTROLFILE AS 'D:UsersBSODropBoxPrivatestandbycontrolfile.ctl';
Database altered.
  • Faire une backup full
C:UsersBSO>C:oraclexeapporacleproduct11.2.0serverbinrman.exe target /
Recovery Manager: Release 11.2.0.2.0 - Production on Lun. Mai 14 16:41:27 2012
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
connected to target database: XE (DBID=2664395354)
RMAN> backup full database;
Starting backup at 14/05/12
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=70 device type=DISK
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
input datafile file number=00002 name=C:ORACLEXEAPPORACLEORADATAXEUNDOTBS1.DBF
input datafile file number=00001 name=C:ORACLEXEAPPORACLEORADATAXESYSTEM.DBF
input datafile file number=00004 name=C:ORACLEXEAPPORACLEORADATAXEUSERS.DBF
input datafile file number=00003 name=C:ORACLEXEAPPORACLEORADATAXESYSAUX.DBF
channel ORA_DISK_1: starting piece 1 at 14/05/12
channel ORA_DISK_1: finished piece 1 at 14/05/12
piece handle=D:USERSBSODROPBOXPRIVATESTANDBYFLASH_RECOVERY_AREAXEBACKUPSET2012_05_14O1_MF_NNNDF_TAG20120514T164134_7V26DZKJ_.BKP tag=TAG20120514T16413
4 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:01:15
channel ORA_DISK_1: starting full datafile backup set
channel ORA_DISK_1: specifying datafile(s) in backup set
including current control file in backup set
including current SPFILE in backup set
channel ORA_DISK_1: starting piece 1 at 14/05/12
channel ORA_DISK_1: finished piece 1 at 14/05/12
piece handle=D:USERSBSODROPBOXPRIVATESTANDBYFLASH_RECOVERY_AREAXEBACKUPSET2012_05_14O1_MF_NCSNF_TAG20120514T164134_7V26HCO8_.BKP tag=TAG20120514T16413
4 comment=NONE
channel ORA_DISK_1: backup set complete, elapsed time: 00:00:03
Finished backup at 14/05/12
  • Créer un pfile
SQL> create pfile= 'D:UsersBSODropBoxPrivatestandbypfile.ora' from spfile;
File created.

Sur la base secondaire

  • Arrêter l’instance, et supprimer le service Windows
SQL>shutdown immediate
C:Usersbaptiste>oradim -delete -sid XE
Instance deleted
  • Créer un répertoire oradata pour la standby, et copier coller le fichier de contrôle créé précédemment
C:oraclexeapporacleoradataSTDBYXE>DIR
14/05/2012  09:06               9 520 CONTROLFILE.CTL
  • Créer le service Windows de la nouvelle instance Oracle
C:Usersbaptiste>oradim -new -sid STDBYXE -startmode manual
Instance created.
  • Il faut ensuite modifier le pfile créé depuis la primaire, ainsi que le tnsname de la standby. Dans le tnsname, il suffit d’ajouter une entrée pour la nouvelle instance, dans le pfile, il faut modifier les lignes suivantes :

– Partout ou il y a le nom de l’instance XE, remplacer par STDBYXE (sauf pour db_name)
– Ajouter une ligne : .*instance_name=’STDBYXE’
– Vérifier le chemin vers le ou les controlfiles, ainsi que le nom de chacun des controlfiles.
– Modifier le chemin du paramètre db_recovery_file_dest pour qu’il ne  pointe pas vers le même répertoire Dropbox que la standby (mais on peut aussi le laisser sur Dropbox)
– Renommer ce fichier en initSTDBYEXE.ora, et le positionner dans %ORACLE_HOME%database sur la standby.

  • Démarrer la base et créer le spfile
C:Usersbaptiste>C:oraclexeapporacleproduct11.2.0serverbinsqlplus.exe / as sysdba
SQL*Plus: Release 11.2.0.2.0 Production on Mar. Mai 15 08:54:42 2012
Copyright (c) 1982, 2010, Oracle. All rights reserved.
Connected to an idle instance.
SQL> startup mount
ORACLE instance started.
Total System Global Area 1071333376 bytes
Fixed Size 1388352 bytes
Variable Size 620757184 bytes
Database Buffers 444596224 bytes
Redo Buffers 4591616 bytes
Database mounted.
SQL> create spfile from pfile;
File created.
==> Le fichier C:oraclexeapporacleproduct11.2.0serverdatabaseSPFILESTDBYXE.ORA vient d'être créé
  • Mettre à jour le catalog RMAN en ajoutant le répertoire d’archivelog de la primaire et faire un restore de la base grâce au backup full précédent
C:Usersbaptiste>C:oraclexeapporacleproduct11.2.0serverbinrman.exe target /
Recovery Manager: Release 11.2.0.2.0 - Production on Mar. Mai 15 09:08:49 2012
Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.
connected to target database: XE (DBID=2664395354, not open)
RMAN> catalog start with 'D:DocumentsMy DropboxPrivatestandbyflash_recovery_areaXE';
Starting implicit crosscheck backup at 15/05/12
using target database control file instead of recovery catalog
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=96 device type=DISK
Finished implicit crosscheck backup at 15/05/12
Starting implicit crosscheck copy at 15/05/12
using channel ORA_DISK_1
Finished implicit crosscheck copy at 15/05/12
searching for all files in the recovery area
cataloging files...
no files cataloged
searching for all files that match the pattern D:DocumentsMy DropboxPrivatestandbyflash_recovery_areaXE
List of Files Unknown to the Database
=====================================
File Name: D:DOCUMENTSMY DROPBOXPRIVATESTANDBYFLASH_RECOVERY_AREAXEARCHIVELOG2012_05_14O1_MF_1_2_7V25SN1Y_.ARC
File Name: D:DOCUMENTSMY DROPBOXPRIVATESTANDBYFLASH_RECOVERY_AREAXEARCHIVELOG2012_05_15O1_MF_1_3_7V3WBZVR_.ARC
File Name: D:DOCUMENTSMY DROPBOXPRIVATESTANDBYFLASH_RECOVERY_AREAXEBACKUPSET2012_05_14O1_MF_NCSNF_TAG20120514T164134_7V26HCO8_.BKP
File Name: D:DOCUMENTSMY DROPBOXPRIVATESTANDBYFLASH_RECOVERY_AREAXEBACKUPSET2012_05_14O1_MF_NNNDF_TAG20120514T164134_7V26DZKJ_.BKP
Do you really want to catalog the above files (enter YES or NO)? YES
cataloging files...
cataloging done
List of Cataloged Files
=======================
File Name: D:DOCUMENTSMY DROPBOXPRIVATESTANDBYFLASH_RECOVERY_AREAXEARCHIVELOG2012_05_14O1_MF_1_2_7V25SN1Y_.ARC
File Name: D:DOCUMENTSMY DROPBOXPRIVATESTANDBYFLASH_RECOVERY_AREAXEARCHIVELOG2012_05_15O1_MF_1_3_7V3WBZVR_.ARC
File Name: D:DOCUMENTSMY DROPBOXPRIVATESTANDBYFLASH_RECOVERY_AREAXEBACKUPSET2012_05_14O1_MF_NCSNF_TAG20120514T164134_7V26HCO8_.BKP
File Name: D:DOCUMENTSMY DROPBOXPRIVATESTANDBYFLASH_RECOVERY_AREAXEBACKUPSET2012_05_14O1_MF_NNNDF_TAG20120514T164134_7V26DZKJ_.BKP
RMAN> restore database;
Starting restore at 15/05/12
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00001 to C:ORACLEXEAPPORACLEORADATAXESYSTEM.DBF
channel ORA_DISK_1: restoring datafile 00002 to C:ORACLEXEAPPORACLEORADATAXEUNDOTBS1.DBF
channel ORA_DISK_1: restoring datafile 00003 to C:ORACLEXEAPPORACLEORADATAXESYSAUX.DBF
channel ORA_DISK_1: restoring datafile 00004 to C:ORACLEXEAPPORACLEORADATAXEUSERS.DBF
channel ORA_DISK_1: reading from backup piece D:DOCUMENTSMY DROPBOXPRIVATESTANDBYFLASH_RECOVERY_AREAXEBACKUPSET2012_05_14O1_MF_NNNDF_TAG20120514T164134
_7V26DZKJ_.BKP
channel ORA_DISK_1: piece handle=D:DOCUMENTSMY DROPBOXPRIVATESTANDBYFLASH_RECOVERY_AREAXEBACKUPSET2012_05_14O1_MF_NNNDF_TAG20120514T164134_7V26DZKJ_.BK
P tag=TAG20120514T164134
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:45
Finished restore at 15/05/12
  • Redémarrer la base en nomount et la passer en standby
SQL> shutdown immediate
SQL> startup nomount
ORACLE instance started.
Total System Global Area 1071333376 bytes
Fixed Size 1388352 bytes
Variable Size 620757184 bytes
Database Buffers 444596224 bytes
Redo Buffers 4591616 bytes
SQL> alter database mount standby database;
Database altered.
  • Pour appliquer les archivelog, il suffit d’exécuter la commande SQL suivante :
SQL> recover standby database
ORA-00279: change 359286 generated at 05/14/2012 16:31:15 needed for thread 1
ORA-00289: suggestion : D:DOCUMENTSMY
DROPBOXPRIVATESTANDBYFLASH_RECOVERY_AREAXEARCHIVELOG2012_05_15O1_MF_1_3_7V3WBZVR_.ARC
ORA-00280: change 359286 for thread 1 is in sequence #3
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
AUTO
ORA-00279: change 380647 generated at 05/15/2012 08:02:07 needed for thread 1
ORA-00289: suggestion :
C:ORACLEXEAPPORACLEFAST_RECOVERY_AREAXEARCHIVELOG2012_05_15O1_MF_1_4_%U_.ARC
ORA-00280: change 380647 for thread 1 is in sequence #4
ORA-00278: log file 'D:DOCUMENTSMY
DROPBOXPRIVATESTANDBYFLASH_RECOVERY_AREAXEARCHIVELOG2012_05_15O1_MF_1_3_7V3WBZVR_.ARC' no longer needed for this recovery
ORA-00308: cannot open archived log
'C:ORACLEXEAPPORACLEFAST_RECOVERY_AREAXEARCHIVELOG2012_05_15O1_MF_1_4_%U_.ARC'
ORA-27041: unable to open file
OSD-04002: unable to open file
O/S-Error: (OS 2) Le fichier sp+cifi+ est introuvable.
(Les erreurs ORA- sont normales. En effet, une fois que l'archive O1_MF_1_3_7V3WBZVR_.ARC a été appliquée, Oracle cherche à appliquer la suivante si elle existe.)
La configuration est terminée, on peut maintenant faire quelques tests pour vérifier que ça fonctionne correctement en créant une table sur la primaire, switcher de redo, mettre à jour le catalog rman et lancer  recover :
  • Sur la primaire
C:UsersBSO>sqlplus / as sysdba
SQL*Plus: Release 11.2.0.2.0 Production on Mar. Mai 15 09:12:31 2012
Copyright (c) 1982, 2010, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - Production
SQL> create table test (a number);
Table created.
SQL> insert into test values (1);
1 row created.
SQL> commit;
Commit complete.
SQL> select * from test;
A
----------
1
SQL> alter system archive log current;
System altered.
  • Sur la standby (Une fois que l’archive log s’est synchronisé sur Dropbox)
RMAN> catalog start with 'D:DocumentsMy DropboxPrivatestandbyflash_recovery_areaXE';
using target database control file instead of recovery catalog
searching for all files that match the pattern D:DocumentsMy DropboxPrivatestandbyflash_recovery_areaXE
List of Files Unknown to the Database
=====================================
File Name: D:DOCUMENTSMY DROPBOXPRIVATESTANDBYFLASH_RECOVERY_AREAXEARCHIVELOG2012_05_15O1_MF_1_4_7V40HTXJ_.ARC
Do you really want to catalog the above files (enter YES or NO)? YES
cataloging files...
cataloging done
List of Cataloged Files
=======================
File Name: D:DOCUMENTSMY DROPBOXPRIVATESTANDBYFLASH_RECOVERY_AREAXEARCHIVELOG2012_05_15O1_MF_1_4_7V40HTXJ_.ARC
RMAN> exit
Recovery Manager complete.
C:Usersbaptiste>C:oraclexeapporacleproduct11.2.0serverbinsqlplus.exe / as sysdba
SQL*Plus: Release 11.2.0.2.0 Production on Mar. Mai 15 09:16:28 2012
Copyright (c) 1982, 2010, Oracle. All rights reserved.
Connected to:
Oracle Database 11g Express Edition Release 11.2.0.2.0 - Production
SQL> recover standby database
ORA-00279: change 380647 generated at 05/15/2012 08:02:07 needed for thread 1
ORA-00289: suggestion : D:DOCUMENTSMYDROPBOXPRIVATESTANDBYFLASH_RECOVERY_AREAXEARCHIVELOG2012_05_15O1_MF_1_4_7V40HTXJ_.ARC
ORA-00280: change 380647 for thread 1 is in sequence #4
Specify log: {<RET>=suggested | filename | AUTO | CANCEL}
AUTO
ORA-00279: change 384060 generated at 05/15/2012 09:12:58 needed for thread 1
ORA-00289: suggestion :
C:ORACLEXEAPPORACLEFAST_RECOVERY_AREAXEARCHIVELOG2012_05_15O1_MF_1_5_%U_.ARC
ORA-00280: change 384060 for thread 1 is in sequence #5
ORA-00278: log file 'D:DOCUMENTSMY
DROPBOXPRIVATESTANDBYFLASH_RECOVERY_AREAXEARCHIVELOG2012_05_15O1_MF_1_4_7V40HTXJ_.ARC' no longer needed for this recovery
ORA-00308: cannot open archived log
'C:ORACLEXEAPPORACLEFAST_RECOVERY_AREAXEARCHIVELOG2012_05_15O1_MF_1_5_%U_.ARC'
ORA-27041: unable to open file
OSD-04002: unable to open file
O/S-Error: (OS 2) Le fichier sp+fi+st introuvable.
SQL> shutdown immediate;
ORA-01109: database not open
Database dismounted.
SQL> startup
ORACLE instance started.
Total System Global Area 1071333376 bytes
Fixed Size 1388352 bytes
Variable Size 620757184 bytes
Database Buffers 444596224 bytes
Redo Buffers 4591616 bytes
Database mounted.
Database opened.
SQL> select * from test;
A
----------
1
==> Penser à repasser la base en mode standby
SQL> shutdown immediate
SQL> startup nomount
ORACLE instance started.
Total System Global Area 1071333376 bytes
Fixed Size 1388352 bytes
Variable Size 620757184 bytes
Database Buffers 444596224 bytes
Redo Buffers 4591616 bytes
SQL> alter database mount standby database;
Database altered.

Tout est prêt, il ne vous reste plus qu’à créer les scripts .bat ou autre, pour exécuter automatiquement sur la standby, la commande RMAN (mise à jour du catalog) et la commande SQL  « RECOVER STANDBY DATABASE » en précisant AUTO.
Exemple :

@echo off
set oracle_home=C:oraclexeapporacleproduct11.2.0server set oracle_sid=STDBYXE
set tfile=%temp%recover_standby_dbs.sql
echo catalog start with ^'D^:^Documents^My Dropbox^Private^standby^flash_recovery_area^XE^' NOPROMPT; > %tfile% ;
echo exit >> %tfile% ;
%oracle_home%binrman target / < %tfile%
echo recover standby database ; > %tfile%
echo auto >> %tfile%
echo exit >> %tfile% ;
%oracle_home%binsqlplus / as sysdba < %tfile%

2 réflexions sur “Mise en place standby avec Oracle XE sous Windows et Dropbox comme repository”

  1. Bonjour Matthieu,
    Non pas besoin d’Enterprise, car c’est tout en manuel justement.
    Dès qu’on utilise une option qui permet de gérer automatiquement le mode Standby, là c’est soumis à licence Enterprise.
    Baptiste

  2. J’adore 🙂 Utiliser dropbox pour simuler un robocopy des archivelogs c’est très sympa.
    Petite question, le mode standby n’est-il pas assujettis à l’utilisation d’une licence Enterprise ?

Les commentaires sont fermés.