Overblog
Suivre ce blog Administration + Créer mon blog
1 mars 2018 4 01 /03 /mars /2018 09:54

En Mars, l'ami-dba maintient le rythme.

http://www.lami-dba.com/2018/02/dataguard-resolve-gap-revover-from-service.html

Aimez, partagez, critiquez & inscrivez vous à la newsletter.

@+

LAO

Partager cet article
Repost0
7 avril 2013 7 07 /04 /avril /2013 17:38

Hello,
Dans les précedents articles nous avons vu comment créer une standby physique et également comment faire un switchover. Nous allons maintenant parler de Dataguard Active et comment l'activer.
 

Qu'est ce que Dataguard Active ?

Bien que je vieillise, j'en suis pas encore à radoter, alors je vous invite à lire un article qui présente ce qu'est Dataguard Active : Oracle 11g & Dataguard Active

Alors juste pour remettre le contexte, le but est de pouvoir disposer de la standby en lecture seule sans stopper le mécanisme d'application des transactions entre la primaire & la standby.

Avant de commencer réellement, nous allons créer un petit schema de test.

 

 sqlplus system/*****@femme1 SQL> create user test identified by test; Utilisateur cree. SQL> grant connect,resource to test; Autorisation de privileges (GRANT) acceptee. SQL> alter user test default tablespace users; Utilisateur modifie. SQL> alter user test quota unlimited on users; Utilisateur modifie. SQL> connect test/test Connecte. SQL> create table ma_table (i number) tablespace users; SQL> insert into ma_table values (4); 1 ligne creee. SQL> commit; Validation effectuee. 

 

Histoire de ... vérifions que notre dataguard mis en place la dernière fois fonctionne toujours...

 dgmgrl sys/*****@FEMME1 DGMGRL for Linux: Version 11.2.0.1.0 - 64bit Production Copyright (c) 2000, 2009, Oracle. All rights reserved. Welcome to DGMGRL, type "help" for information. Connected. DGMGRL> show configuration Configuration - plaisir Protection Mode: MaxPerformance Databases: femme1 - Primary database femme2 - Physical standby database Fast-Start Failover: DISABLED Configuration Status: SUCCESS DGMGRL> exit 

      Maintenant démarrons notre base standby en lecture seule.

 sqlplus sys/*****@femme2 as sysdba SQL*Plus: Release 11.2.0.1.0 Production on Sun Apr 7 17:54:51 2013 Copyright (c) 1982, 2009, Oracle. All rights reserved. Connecte a : Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> alter database open read only; Base de donnees modifiee. SQL> connect test/test@femme2 Connecte. SQL> select count(*) from ma_table; COUNT(*) ---------- 1 

 

Pas de surprise, ma base s'ouvre et ma table crée sur ma base primaire est présente avec une ligne. Depuis la primaire, nous allons insérer de nouvelles lignes.

 

 sqlplus test/test@femme1 SQL*Plus: Release 11.2.0.1.0 Production on Sun Apr 7 18:00:55 2013 Copyright (c) 1982, 2009, Oracle. All rights reserved. Connecte a : Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> insert into ma_table values (8); 1 ligne creee. SQL> insert into ma_table values (9); 1 ligne creee. SQL> commit; Validation effectuee. 

Que se passe t-il du coté de la standby ?

 sqlplus test/test@femme2 SQL*Plus: Release 11.2.0.1.0 Production on Sun Apr 7 18:02:45 2013 Copyright (c) 1982, 2009, Oracle. All rights reserved. Connecte a : Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> select count(*) from ma_table; COUNT(*) ----------  3 

 

Petite surprise... je vois les deux lignes que je viens d’insérer sur la primaire alors que pourtant ma base secondaire est en lecture seule !!!! Génial ! me direz vous car finalement c'est cela le Dataguard Active.
Pas faux ! sauf que si vous avez relu l'article qui présente le Dataguard Active, il ne vous a pas échappé que ca n'était pas gratuit.... Du coup  potentiellement, je peux juste activer une option payante et ca:
-1/ Sans savoir que le dataguard Active existe
-2 /Je sais que ca existe, mais pas forcement que c'est une option payante.
C'est Oracle qui sera content au prochain audit de licences....

OK... Mais comment je fais pour ouvrir ma standby en lecture seule sans utiliser Dataguard Active ?

Depuis le broker, nous allons stopper la mise à jour de la standby

 dgmgrl sys/*****@FEMME1 DGMGRL for Linux: Version 11.2.0.1.0 - 64bit Production Copyright (c) 2000, 2009, Oracle. All rights reserved. Welcome to DGMGRL, type "help" for information. Connected. DGMGRL> edit database femme2 set state ='APPLY-OFF'; Succeeded. 

  Ajoutons des lignes à ma table sur la primaire

 

 sqlplus test/test@femme1 SQL*Plus: Release 11.2.0.1.0 Production on Sun Apr 7 18:19:28 2013 Copyright (c) 1982, 2009, Oracle. All rights reserved. Connecte a : Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> insert into ma_table select * from ma_table; 3 ligne(s) creee(s). SQL> commit; Validation effectuee. SQL> select count(*) from ma_table; COUNT(*) ---------- 6 

Et maintenant ma standby....

 sqlplus test/test@femme2 SQL*Plus: Release 11.2.0.1.0 Production on Sun Apr 7 18:22:36 2013 Copyright (c) 1982, 2009, Oracle. All rights reserved. Connecte a : Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> select count(*) from ma_table; COUNT(*) ----------  3 

 

Tout se passe comme prévu, je ne vois pas les nouvelles lignes... et c'est mieux ainsi si je ne dispose pas de la licence adéquate. Je peux toujours avoir ma base standby en lecture seule mais avec des données statiques. Il faut aussi tenir compte du fait que pendant tout le temps ou la base est en lecture seule, les transactions de la primaire ne sont plus appliquées. Et que cela rendra un switchover ou failover d'autant plus long.

 Il nous reste plus qu'a remettre notre dataguard en dans son mode d'origine.

 dgmgrl sys/****@femme2 DGMGRL> edit database 'femme2' set state ='APPLY-OFF'; Succeeded. DGMGRL> shutdown immediate; Database closed. Database dismounted. ORACLE instance shut down. DGMGRL> startup mount; ORACLE instance started. Database mounted. DGMGRL> edit database 'femme2' set state ='APPLY-ON'; Succeeded. DGMGRL> show configuration Configuration - plaisir Protection Mode: MaxPerformance Databases: femme1 - Primary database femme2 - Physical standby database Fast-Start Failover: DISABLED Configuration Status: SUCCESS 

Conclusion

 

Peut être que je m'y suis mal pris (ca n'est pas à exclure, n’hésitez pas à me faire part de vos remarques), toujours est-il que je me suis retrouvé relativement facilement avec l'option Dataguard qui est une option payante de l'Enterprise.
Ceci étant dit, on voit bien l’intérêt du Dataguard Active. Non seulement, on dispose d'un serveur de secours (classique) mais qui peut se transformer en serveur décisionnel.
Et si finalement le cout de cette cette licence permettait de faire sauter un serveur qui sert pour du décisionnel...

@+ LAO

 

Partager cet article
Repost0
1 avril 2013 1 01 /04 /avril /2013 17:22

Hello;

Dans l'article précedent (cliquer ici), nous avons vu comment mettre en place une standby. Tout ceci est très bien. Encore faut-il que nous soyons en mesure de basculer rapidement sur notre environnement de secours. Histoire de se remettre tout en mémoire, connectons nous depuis un des deux serveurs au broker.

 dgmgrl sys/manager@femme1 DGMGRL for Linux: Version 11.2.0.1.0 - 64bit Production Copyright (c) 2000, 2009, Oracle. All rights reserved. Welcome to DGMGRL, type "help" for information. Connected. DGMGRL> show configuration Configuration - plaisir Protection Mode: MaxPerformance Databases: femme1 - Primary database femme2 - Physical standby database Fast-Start Failover: DISABLED Configuration Status: SUCCESS 

 

La situation est claire, tout semble OK. Mon "FEMME1" est ma base primaire et "FEMME2" ma base de secours, le tout dans un mode de protection dut de "Max Performance".
Histoire de vérifier que tout fonctionne correctement, je vais d'abord créer un schema avec quelques données.

 sqlplus system/******@femme1 SQL> create user lao identified by lao; Utilisateur cree. SQL> grant connect,resource to lao; Autorisation de privileges (GRANT) acceptee. SQL> connect lao/lao Connecte. SQL> create table test (i number); Table creee. SQL> insert into test values (5); 1 ligne creee. SQL> commit; Validation effectuee. SQL> exit 

 

Voila, nous sommes prêt à faire ce que l'on appelle un switchover, c'est à dire que nous allons inverser les rôle entre les deux bases. "FEMME1" deviendra la primaire et "FEMME2" ma base primaire. Ce qui par exemple permettra d'effectuer une maintenance hardware sur mon serveur principal en limitant l'indisponibilité à la base.
Pour cela nous allons tout simplement nous connecter au broker et lancer l'ordre de switchover.

 dgmgrl sys/******@femme1 DGMGRL for Linux: Version 11.2.0.1.0 - 64bit Production Copyright (c) 2000, 2009, Oracle. All rights reserved. Welcome to DGMGRL, type "help" for information. Connected. DGMGRL> switchover to FEMME2; 

 

L'opération ne dure pas très longtemps, et finalement "FEMME2" devient la base primaire.

 Performing switchover NOW, please wait... New primary database "femme2" is opening... Operation requires shutdown of instance "FEMME1" on database "femme1" Shutting down instance "FEMME1"... ORA-01109: base de donnees non ouverte Database dismounted. ORACLE instance shut down. Operation requires startup of instance "FEMME1" on database "femme1" Starting instance "FEMME1"... ORACLE instance started. Database mounted. Switchover succeeded, new primary is "femme2" 

 

On peut d'ailleurs très facilement le vérifier d'abord depuis le broker

 DGMGRL> show configuration Configuration - plaisir Protection Mode: MaxPerformance Databases: femme2 - Primary database femme1 - Physical standby database Fast-Start Failover: DISABLED Configuration Status: SUCCESS 

 

Mais également en se connectant à sqlplus sur mon instance FEMME2 et vérifier que mes objets créés précedemment sont toujours la.

 sqlplus system/manager@FEMME2 SQL> select host_name from v$instance; HOST_NAME ---------------------------------------------------------------- londres.localdomain --> je suis bien sur mon serveur de secours SQL> select count(*) from lao.test; COUNT(*) ---------- 1 Je crée une nouvelle table. SQL> create table lao.test2 as select * from lao.test; Table creee. 

 

Une fois ma maintenance effectuée sur mon serveur primaire (paris), il me suffit de refaire l'opération inverse.

 dgmgrl sys/******@femme1 DGMGRL for Linux: Version 11.2.0.1.0 - 64bit Production Copyright (c) 2000, 2009, Oracle. All rights reserved. Welcome to DGMGRL, type "help" for information. Connected. DGMGRL> switchover to FEMME1 

 

De la même façon, je peux vérifier via le broker et sqlplus que tout est OK une fois le switch effectué.

 DGMGRL> show configuration Configuration - plaisir Protection Mode: MaxPerformance Databases: femme1 - Primary database femme2 - Physical standby database Fast-Start Failover: DISABLED Configuration Status: SUCCESS 

 

Depuis sqlplus

 sqlplus system/manager@FEMME1 SQL*Plus: Release 11.2.0.1.0 Production on Mon Apr 1 17:51:29 2013 Copyright (c) 1982, 2009, Oracle. All rights reserved. Connecte a : Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> select host_name from v$instance; HOST_NAME ---------------------------------------------------------------- paris.localdomain SQL> select table_name from dba_tables where owner='LAO'; TABLE_NAME ------------------------------ TEST2 TEST 

 

Comme vous avez pu le constaté, l'opération de switchover se fait rapidement avec une simple commande. Dans un prochain article, nous verrons comment changer le mode de protection sur notre environnement et les conséquences du choix entre (max performance, max protection et max availability).
@+ LAO

 

 

Partager cet article
Repost0
28 mars 2013 4 28 /03 /mars /2013 13:51

Hello,

Dataguard... Simple, compliqué, les avis divergent. J'espère qu'après ce petit tuto (valable pour 11gR2 et plus) pour mettre en place une standby physique, j'aurai pu convaincre les sceptiques que la mise en place n'est pas si compliquée que cela. Pour cela, je dispose de deux VM en linux. Ma base primaire que j'ai nommé FEMME1 se trouve sur le serveur "paris" et ma base de secours "FEMME2" sera sur le serveur "londres". Avant de me traiter de sexiste ou madcho, rien ne vous empeche d'appeler vos bases "HOMME1" et "HOMME2"

 
Sans rentrer dans le détail (la doc Oracle fait ca très bien), l'idée de Dataguard est de pouvoir bénéficier d'une base de secours en rejouant les transactions de la base primaire sur la base dite de secours.

 
Pour que tout cela fonctionne, il faut que notre base primaire soit en mode Archivelog. J'ai décicdé d'utiliser la FRA (). Donc si votre base n'est pas en archive log.

 export ORACLE_SID=FEMME1 sqlplus / as sysdba SQL> alter system set db_recovery_file_dest_size=20g scope=both; SQL> alter system set db_recovery_file_dest='/u01/FEMME1/FRA' scope=both; SQL> shutdown immediate; Base de donnees fermee. Base de donnees demontee. Instance ORACLE arretee. SQL> startup mount; Instance ORACLE lancee. Total System Global Area 1653518336 bytes Fixed Size 2213896 bytes Variable Size 956303352 bytes Database Buffers 687865856 bytes Redo Buffers 7135232 bytes Base de donnees montee. SQL> alter database archivelog; Base de donnees modifiee. SQL> alter database open; Base de donnees modifiee. 

Ceci est nécessaire mais pas suffisant. Afin de ne pas perdre des informations entre la primaire et la base standby à cause d'opération non journalisées, nous allons également passer la base en mode "FORCE LOGGING". Vérifions que ca n'est pas déjà le cas.

 SQL> select Force_logging from v$database; FOR --- NO 


Et donc passons la base en "FORCE LOGGING" 

 SQL> alter database force logging; Base de donnees modifiee. 

 

La confiance n'exclue pas le contrôle.

 SQL> select Force_logging from v$database; FOR --- YES 


Si l'on ne veut pas de mauvaises surprises au moment d'ajouter un datafile à notre base primaire il faut passer le paramètre standby_file_management à auto.

 sqlplus sys/******@femme1 as sysdba SQL*Plus: Release 11.2.0.1.0 Production on Mon Apr 1 20:22:12 2013 Copyright (c) 1982, 2009, Oracle. All rights reserved. Connecte a : Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production With the Partitioning, OLAP, Data Mining and Real Application Testing options SQL> alter system set standby_file_management='auto' scope=both; Systeme modifie. 


Nos deux bases primaire & standby vont être amenées à communiquer via la couche SQL NET,il convient donc de configurer le tnsnames.ora ($ORACLE_HOME/network/admin/ )et d'y inscrire deux alias (un pour la primaire et un pour la standby)

 FEMME1 = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = paris.localdomain)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SID = FEMME1) ) ) FEMME2 = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = londres.localdomain)(PORT = 1521)) ) (CONNECT_DATA = (SID = FEMME2) ) ) 


Lors des changements de rôles (on n'en reparlera plus tard), des arrêts / redémarrages d'instance à distance seront nécessaire, il faut donc enregistrer statiquement notre base FEMME1 dans le listener.

 SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (ORACLE_HOME = /home/oracle/app/oracle/product/11.2.0/dbhome_1) (SID_NAME = FEMME1) ) ) 


Ne pas oublier de recharger le listener pour la prise en compte des modifications.

 lsnrctl reload 


Maintenant, nous pouvons créer un fichier de mot de passe sur la primaire

 orapwd file=$ORACLE_HOME/dbs/orapwFEMME1 password=****** 


Encore un petit effort pour les préparatifs.... Nous allons maintenant créer les SRL (Standby Redo Log). Il faut qu'ils soient au moins de la même taille que les redos et Oracle recommande d'en créer un de plus...

 SQL> alter database add standby logfile '/u01/FEMME1/oradata/srl_01.log' size 50m; SQL> alter database add standby logfile '/u01/FEMME1/oradata/srl_02.log' size 50m; SQL> alter database add standby logfile '/u01/FEMME1/oradata/srl_03.log' size 50m; SQL> alter database add standby logfile '/u01/FEMME1/oradata/srl_04.log' size 50m; 


Bonne nouvelle c'est terminé pour la primaire. Nous pouvons passer à la préparation de la standby en commencant par copier le fichier de password et le tnsnames.ora

 scp $ORACLE_HOME/dbs/orapwFEMME1 oracle@192.168.0.24:/$ORACLE_HOME/dbs/orapwFEMME2 scp $ORACLE_HOME/network/admin/tnsnames.ora oracle@192.168.0.24:/$ORACLE_HOME/network/admin 


De la même façon que effectué sur le primaire, nous allons enregistrer notre instance standby dans le listener du serveur de secours.

 SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (ORACLE_HOME = /home/oracle/app/oracle/product/11.2.0/dbhome_1) (SID_NAME = FEMME2) ) ) 


On recharge le listener sur notre serveur de secours

 lsnrctl reload 


enfin, on crée l’arborescence qui abritera la base standby. Dans mon cas cela donne

 mkdir -p /u01/FEMME2/admin mkdir -p /u01/FEMME2/FRA mkdir -p /u01/FEMME2/oradata 


il ne reste plus qu'à créer un pfile réduit à sa plus simple expression et d'enregistrer notre base dans /etc/oratab

 echo 'DB_NAME=FEMME2' > $ORACLE_HOME/dbs/initFEMME2.ora echo 'FEMME2:/home/oracle/app/oracle/product/11.2.0/dbhome_1:Y' > /etc/oratab 


Nous allons maintenant utiliser rman pour instancier notre base de secours.

 rman Recovery Manager: Release 11.2.0.1.0 - Production on Mon Apr 1 15:28:41 2013 Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved. RMAN> connect target sys/manager@femme1 connected to target database: FEMME1 (DBID=3372798706) RMAN> connect auxiliary sys/manager@femme2 connected to auxiliary database (not started) RMAN> startup clone nomount; Oracle instance started Total System Global Area 217157632 bytes Fixed Size 2211928 bytes Variable Size 159387560 bytes Database Buffers 50331648 bytes Redo Buffers 5226496 bytes RMAN> 


Et c'est parti pour un petit duplicate....

 RMAN> duplicate target database for standby from active database db_file_name_convert 'FEMME1','FEMME2' spfile parameter_value_convert 'FEMME1','FEMME2' set log_file_name_convert 'FEMME1','FEMME2' set db_unique_name 'FEMME2' nofilenamecheck; 


Au bout d'un moment (ca depend un peu de la taille de votre base..) le duplicate doit se terminer par quelque chose dans le genre

 Finished Duplicate Db at 01-APR-13 


Une petite vérification rapide nous montre bien que la base est instancié et que le clonage s'est bien passé

 ls -lh /u01/FEMME2/oradata/ total 2,0G -rw-r----- 1 oracle oinstall 9,3M avril 1 15:46 control01.ctl -rw-r----- 1 oracle oinstall 9,3M avril 1 15:46 control02.ctl -rw-r----- 1 oracle oinstall 51M avril 1 15:37 redo01.log -rw-r----- 1 oracle oinstall 51M avril 1 15:37 redo02.log -rw-r----- 1 oracle oinstall 51M avril 1 15:37 redo03.log -rw-r----- 1 oracle oinstall 51M avril 1 15:37 srl_01.log -rw-r----- 1 oracle oinstall 51M avril 1 15:37 srl_02.log -rw-r----- 1 oracle oinstall 51M avril 1 15:37 srl_03.log -rw-r----- 1 oracle oinstall 51M avril 1 15:37 srl_04.log -rw-r----- 1 oracle oinstall 601M avril 1 15:37 sysaux01.dbf -rw-r----- 1 oracle oinstall 701M avril 1 15:36 system01.dbf -rw-r----- 1 oracle oinstall 311M avril 1 15:37 undotbs01.dbf -rw-r----- 1 oracle oinstall 5,1M avril 1 15:37 users01.dbf ps -ef |grep pmon oracle 24124 1 0 15:34 ? 00:00:00 ora_pmon_FEMME2 


Ceci étant fait, nous allons maintenant créer notre configuration dataguard et pour cela nous allons utiliser le "broker". Encore faut-il le démarrer sur les deux instances (primaire et standby)

 sqlplus sys/*****@FEMME1 as sysdba alter system set dg_broker_start=true scope=both; exit; sqlplus sys/*****@FEMME2 as sysdba alter system set dg_broker_start=true scope=both; exit; 


Un dernier effort, il nous reste à créer la configuration et de l'activer. Tout ceci se fera depuis l'utilitaire dgmgrl en quelques lignes de commandes. Avec deux bases qui s'appellent FEMME1 et FEMME2 j'ai décidé d'appeler ma configuration "plaisir"

 dgmgrl sys/******@femme1 DGMGRL for Linux: Version 11.2.0.1.0 - 64bit Production Copyright (c) 2000, 2009, Oracle. All rights reserved. Welcome to DGMGRL, type "help" for information. Connected. DGMGRL> create configuration plaisir as primary database is FEMME1 connect identifier is FEMME1; Configuration "plaisir" created with primary database "femme1" DGMGRL> 


Il ne reste plus qu'à ajouter notre femme (eh, je voulais dire base) de secours et à activer la configuration.

 DGMGRL> add database FEMME2 as connect identifier is FEMME2 maintained as physical; Database "femme2" added DGMGRL> enable configuration Enabled. 


Il est tout à fait possible de vérifier l'état de la configuration.

 DGMGRL> show configuration Configuration - plaisir Protection Mode: MaxPerformance Databases: femme1 - Primary database femme2 - Physical standby database Fast-Start Failover: DISABLED Configuration Status: SUCCESS 


En 11.2 arrive un nouveau paramètre "StaticConnectIdentifier", qui est destiné au broker et qui sera utilisé pour les startup / shutdown des instances.

 DGMGRL> edit database femme1 set property StaticConnectIdentifier='FEMME1'; Property "staticconnectidentifier" updated DGMGRL> edit database femme2 set property StaticConnectIdentifier='FEMME2'; Property "staticconnectidentifier" updated DGMGRL> 


Et voila ! une belle standby en place prête à vous rendre service en cas d'indisponibilité de votre base primaire. Quelques remarques :

Remarque 1: Dataguard implique la version Enterprise d'Oracle. Dataguard Active implique la version Enterprise + une option payante !


Remarque 2: L'installation que je viens de faire est sous linux, mais la même chose serait valable sous windows. Il faudrait évidemment créer le service sur la standby avec oradim et faire attention aux chemins et nom de fichier pour le fichier de mot de passe

Remarque 3: Par fainéantise, j'ai copié le tnsnames.ora depuis la primaire, mais si votre serveur de secours a déjà une configuration, il faut modifier le tnsnames.ora plutot que de l'écraser avec celui de la base primaire.

Remarque 4: Afin de connaitre les nouveautés du broker en 11gR2, un petit tour du coté de la doc Oracle (http://docs.oracle.com/cd/E14072_01/server.112/e10702/whatsnew.htm)

J'espère que cet article vous aura permis de créer votre standby assez rapidement et sans trop de problème. Un prochain article (qui arrivera rapidement) parlera du changement de rôle des base, et également du mode de configuration du votre dataguard. Pour rappel, il existe trois mode

  • Max performance (mode par défaut)
  • Max protection
  • Max availibility

 

Remarque 5: J'ai choisi l'option pour ma standby d'avoir une instance de nom différente, et j'ai adapté les repertoires en conséquence. Dans la mesure ou je suis sur un serveur différent pour la standby, le choix d'une même instance et surtout d'une arboresence aurait été possible, voir plus simple.... 

@bientôt;

LAO.

 

 

 

 

 

Partager cet article
Repost0
22 février 2009 7 22 /02 /février /2009 14:48

Remarque : Nouvel article, création d'une standby en 11g R2 avec broker : cliquer ici.

Bonjour,

Nous allons plonger dans le vif du sujet, et effectuer la mise en place d'une architecture Dataguard pas à pas constituée d'une base primaire et d'une base "physical standby".

Pour créer cet environnement dataguard, il me faut donc deux machines (physques ou virtuelles).

La base principale (DB1) sera crée sur une machine XP (ORA1) et ma base de secours (DB2 ) se trouvera également sur une machine XP (ORA2).

Mon ORACLE_HOME pour les deux machines sera E:\oracle\product\10.2.0\db_1.
La version utilisée est une 10.2.0.4.
Sur les deux machines un listener écoutant sur le port 1521 à été crée.

Afin de permettre à qui le voudra d'effectuer la mise en place de ce type d'environnement dataguard, je vais inclure (une dernière fois) dans l'article la création de la base DB1.

Création d'une base oracle:

Préparation des répertoires:

 


MKDIR E:\oracle\product\10.2.0\oradata\DB1

MKDIR E:\oracle\product\10.2.0\admin\DB1\bdump
MKDIR E:\oracle\product\10.2.0\admin\DB1\cdump
MKDIR E:\oracle\product\10.2.0\admin\DB1\pfile
MKDIR E:\oracle\product\10.2.0\admin\DB1\udump

MKDIR E:\oracle\product\10.2.0\arch\DB1


 

 
Création de l'instance


ORADIM -new -sid DB1


 
Création d'un fichier pfile (init.ora) à placer dans E:\oracle\product\10.2.0\admin\DB1\pfile
 


##############################################################################
# Copyright (c) 1991, 2001, 2002 by Oracle Corporation
##############################################################################
 
###########################################
# Cache and I/O
###########################################
db_block_size=8192
db_file_multiblock_read_count=16
 
###########################################
# File Configuration
###########################################
control_files=("E:\oracle\product\10.2.0\ORADATA\DB1\control01.ctl")
 
###########################################
# Cursors and Library Cache
###########################################
open_cursors=300
 
###########################################
# Diagnostics and Statistics
###########################################
background_dump_dest=E:\oracle\product\10.2.0\admin\DB1\bdump
core_dump_dest=E:\oracle\product\10.2.0\admin\DB1\cdump
user_dump_dest=E:\oracle\product\10.2.0\admin\DB1\udump
 
###########################################
# Miscellaneous
###########################################
compatible=10.2.0.1.0
 
###########################################
# Job Queues
###########################################
job_queue_processes=10
 
###########################################
# Database Identification
###########################################
db_domain=""
db_name=DB1
db_unique_name=DB1
 
###########################################
# SGA Memory
###########################################
sga_target=256M
 
###########################################
# Processes and Sessions
###########################################
processes=150
 
###########################################
# System Managed Undo and Rollback Segments
###########################################
undo_management=AUTO
undo_tablespace=UNDOTBS1
 
###########################################
# Shared Server
###########################################
dispatchers="(PROTOCOL=TCP) (SERVICE=DB1XDB)"
 
###########################################
# Security and Auditing
###########################################
audit_file_dest=E:\oracle\product\10.2.0\admin\DB1\adump
remote_login_passwordfile=EXCLUSIVE
 
###########################################
# Sort, Hash Joins, Bitmap Indexes
###########################################
pga_aggregate_target=20M

 



Remarque : Afin de devoir éviter de spécifier le chemin de pfile pour un démarrage de la base, on peut ajouter la ligne suivante dans le fichier E:\oracle\product\10.2.0\db_1\database\initDB1.ora (fichier à créer)
 


 ifile=e:\oracle\product\10.2.0\admin\DB1\pfile\init.ora


   
Démarage de l'instance
 


SQLPLUS /nolog
CONNECT / as sysdba
STARTUP NOMOUNT;


 
Création de la base.


Create DATABASE DB1
USER SYS IDENTIFIED BY oracle
USER SYSTEM IDENTIFIED BY oracle
MAXDATAFILES 200
MAXINSTANCES 1
CHARACTER SET AL32UTF8
NATIONAL CHARACTER SET UTF8
LOGFILE
GROUP 1 ('E:\oracle\product\10.2.0\oradata\DB1\redo01.rdo') SIZE 50M,
GROUP 2 ('E:\oracle\product\10.2.0\oradata\DB1\redo02.rdo') SIZE 50M,
GROUP 3 ('E:\oracle\product\10.2.0\oradata\DB1\redo03.rdo') SIZE 50M
MAXLOGFILES 20
MAXLOGMEMBERS 5
NOARCHIVELOG
EXTENT MANAGEMENT LOCAL
DATAFILE 'E:\oracle\product\10.2.0\oradata\DB1\system.dbf' SIZE 512M
SYSAUX DATAFILE 'E:\oracle\product\10.2.0\oradata\DB1\sysaux.dbf' SIZE 512M
DEFAULT TEMPORARY TABLESPACE TEMP
TEMPFILE 'E:\oracle\product\10.2.0\oradata\DB1\temp.dbf' SIZE 20M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M
UNDO TABLESPACE UNDOTBS1
DATAFILE 'E:\oracle\product\10.2.0\oradata\DB1\UNDOTBS1.dbf' SIZE 20M;


 

 Passage des script catalog.sql et catproc.sql


@?\rdbms\admin\catalog.sql
@?\rdbms\admin\catproc.sql


 

 
Et voila à partir de maintenant nous disposons donc d'une base de données DB1. Cela signifie t'il qu'elle est prête à servir de base primaire dans un environnement DATAGUARD ?

La réponse est non, mais il n'y a cependant pas énormément de manipulations pour rendre cela possible:

-1/ Passer la base en FORCE LOGGING.

 


SET ORACLE_SID=DB1
SQLPLUS /nolog
CONNECT / AS SYSDBA
STARTUP;

ALTER DATABASE FORCE LOGGING;


   
-2/ Creation de SRL (Standby Redo Logs)


ALTER DATABASE ADD STANDBY LOGFILE GROUP 4 'E:\oracle\product\10.2.0\oradata\DB1\lgf01.log' SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 5 'E:\oracle\product\10.2.0\oradata\DB1\lgf02.log' SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 6 'E:\oracle\product\10.2.0\oradata\DB1\lgf03.log' SIZE 50M;



Remarque : J'ai crée autant de SRL qu'il existe de fichiers REDO et bien evidemment avec la même taille.

-3/ Passage de la base en mode ARCHIVELOG
 


SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;



-4/ Création d'un fichier CONTROLFILE spécifique à une base "standby".

Toujours en mode MOUNT.
 


ALTER DATABASE CREATE STANDBY CONTROLFILE AS 'C:\TEMP\CONTROL01.CTL';
SHUTDOWN IMMEDIATE;
EXIT;


 
-5/ Ajout de paramètres liés à l'archivelog et spéficiques à une base primaire le fichier init.ora
 


LOG_ARCHIVE_CONFIG='DG_CONFIG=(DB1,DB2)'
LOG_ARCHIVE_DEST_1='LOCATION=e:\oracle\product\10.2.0\arch\db1
VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=DB1'
LOG_ARCHIVE_DEST_2=
'SERVICE=DB2 LGWR ASYNC
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=DB2'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
LOG_ARCHIVE_MAX_PROCESSES=5
 


 
-6/ Ajout de paramètre liés à une base de secours (lorsque la base primaire deviendra à son tour une base de secours).

 


fal_server=DB2
fal_client=DB1
standby_file_management=autostra
db_file_name_convert='DB2','DB1'
log_file_name_convert='DB2','DB1'


 
-7/ Création d'un fichier spfile
 


SQLPLUS /nolog
CONNECT / as sysdba

CREATE spfile FROM pfile='e:\oracle\product\10.2.0\admin\DB1\pfile\init.ora';


 


-8/ Création d'un fichier de mot de passe

 


ORAPWD file=e:\oracle\product\10.2.0\db_1\database\pwdDB1.ora password=oracle


 

 

Remarque : Afin de ne pas avoir de mauvaise surprise plus tard, vérifier que le fichier a bien été crée à l'endroit voulu.


-9/ ajout dans le tnsnames.ora d'une entrée pour pouvoir se connecter à la base de secours.


DB2 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = ora2)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = DB2)
    )
  )



Notre base primaire est maintenant prête. Nous n'allons pas la démarrer, car nous devons préparer notre base de secour. Pour cela il faut dupliquer DB1 vers DB2. D'habitude, j'utilise RMAN et la commande DUPLICATE. Histoire de changer un peu, je vais cette fois utiliser une simple copie de fichier.


CD e:\oracle\Product\10.2.0\DB1\oradata

COPY lgf01.log c:\temp
COPY lgf02.log c:\temp
COPY lgf03.log c:\temp
COPY REDO01.RDO c:\temp
COPY REDO02.RDO c:\temp
COPY REDO03.RDO c:\temp
COPY SYSAUX.dbf c:\temp
COPY SYSTEM.dbf c:\temp
COPY UNDOTBS1.dbf c:\temp



Création de la base de secours.

-1/ Création de l'arborescence.


MKDIR E:\oracle\product\10.2.0\oradata\DB2

MKDIR E:\oracle\product\10.2.0\admin\DB2\bdump
MKDIR E:\oracle\product\10.2.0\admin\DB2\cdump
MKDIR E:\oracle\product\10.2.0\admin\DB2\pfile
MKDIR E:\oracle\product\10.2.0\admin\DB2\udump

MKDIR E:\oracle\product\10.2.0\arch\DB2



-2/ Création de l'instance DB2


ORADIM -new -sid DB2



-3/  Création d'un fichier d'initialisation init.ora pour DB2.

Le fichier est à placer dans E:\oracle\product\10.2.0\admin\DB2\pfile\
Comme pour l'instance primaire on peut ajouter la ligne suivante dans e:\oracle\product\10.2.0\db_1\database\initDB2.ora afin d'éviter de préciser le chemin du fichier init.ora


ifile=e:\oracle\product\10.2.0\admin\DB2\pfile\init.ora


 


 ############################################################################## 
# Copyright (c) 1991, 2001, 2002 by Oracle Corporation
##############################################################################
###########################################
# Cache and I/O
###########################################
db_block_size=8192
db_file_multiblock_read_count=16












###########################################
# File Configuration
###########################################
control_files=("E:\oracle\product\10.2.0\ORADATA\DB2\control01.ctl")
###########################################
# Cursors and Library Cache
###########################################
open_cursors=300
###########################################
# Diagnostics and Statistics
###########################################
background_dump_dest=E:\oracle\product\10.2.0\admin\DB2\bdump
core_dump_dest=E:\oracle\product\10.2.0\admin\DB2\cdump
user_dump_dest=E:\oracle\product\10.2.0\admin\DB2\udump
###########################################
# Miscellaneous
###########################################
compatible=10.2.0.1.0
###########################################
# Job Queues
###########################################
job_queue_processes=10
###########################################
# Database Identification
###########################################
db_domain=""
db_name=DB1
db_unique_name=DB2
###########################################
# SGA Memory
###########################################
sga_target=256M
###########################################
# Processes and Sessions
###########################################
processes=150
###########################################
# System Managed Undo and Rollback Segments
###########################################
undo_management=AUTO
undo_tablespace=UNDOTBS1
###########################################
# Shared Server
###########################################
dispatchers="(PROTOCOL=TCP) (SERVICE=DB2XDB)"
###########################################
# Security and Auditing
###########################################
audit_file_dest=E:\oracle\product\10.2.0\admin\DB2\adump
remote_login_passwordfile=EXCLUSIVE
###########################################
# Sort, Hash Joins, Bitmap Indexes
###########################################
pga_aggregate_target=20M
###########################################
#
###########################################
LOG_ARCHIVE_CONFIG='DG_CONFIG=(DB1,DB2)'
LOG_ARCHIVE_DEST_1=
LOCATION=E:\oracle\product\10.2.0\arch\db2
VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
DB_UNIQUE_NAME=DB2'
LOG_ARCHIVE_DEST_2=
'SERVICE=DB1 LGWR ASYNC
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
DB_UNIQUE_NAME=DB1'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
LOG_ARCHIVE_MAX_PROCESSES=30
# Standby role parameters
*.fal_server=DB1
*.fal_client=DB2
*.standby_file_management=auto
*.db_file_name_convert=('DB1','DB2')
*.log_file_name_convert=('DB1','DB2')



-4/ Copie des fichiers de bases de données de DB1 ainsi que du fichier CONTROLFILE crée pour une base standby.


CD Z:\  (Z étant le montage d'un lecteur logique sur \\ORA1\c$\temp
COPY * e:\oracle\product\10.2.0\oradata\DB2



-5/ Création d'un fichier de mot de passe


ORAPWD file=e:\oracle\product\10.2.0\db_1\database\pwdDB2.ora password=oracle



-6/ création d'un fichier spfile.


SQLPLUS /nolog
CONNECT / as sysdba

CREATE spfile FROM pfile='e:\oracle\product\10.2.0\admin\DB2\pfile\init.ora';




-7/ ajout dans le tnsnames.ora d'une entrée pour pouvoir se connecter à DB1


DB1 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = ora1)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = DB1)
    )
  )



On commence à voir la fin de la mise en place de notre architecture dataguard.
Il ne nous reste plus qu'a démarrer tout ca:

Démarrage de la base de secours (sur ORA2)


SET ORACLE_SID=DB2
SQLPLUS /nolog
CONNECT / as sysdba

STARTUP MOUNT;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;



Démarrage de la base primaire (sur ORA1)


SET ORACLE_SID=DB1
SQLPLUS /nolog
CONNECT / as sysdba

STARTUP;





Et voila,la mise en place de notre  architetecture DATAGUARD incluant une base primaire et une base de secours est en place et prêt à fonctionner... Mais nous verrons cela dans un prochain article.

Mais pour ne pas rester sur notre faim, et s'assurer que tout (ou presque) fonctionne, je vous propose de vous connecter sur la base primaire et de créer par exemple un tablespace.


CREATE TABLESPACE my_tbs
DATAFILE 'e:\oracle\product\10.2.0\oradata\DB1\my_tbs01.dbf' size 20M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M
SEGMENT SPACE MANAGEMENT AUTO;



Histoire de générer un petit fichier d'archive log, continuons avec l'instruction suivante:


ALTER SYSTEM SWITCH LOGFILE;




Et alors si tout s'est bien passé, non seulement le tablespace my_tbs est crée sur la base primaire, mais si vous allez dans le répertoire oradata de votre base de secours, vous allez également voir l'apparition du fichier my_tbs01.dbf

Si jamais ce n'est pas le cas, je vous invite à aller jeter un oeil dans les fichier alert.log de vos bases primaire et standby afin de voir ce qui cloche...


Globalement, si vous suivez bien les instructions pas à pas, et que vous disposez déjà des machines virtuelles windows, la mise en place de l'architecture dataguard devrait mettre moins d'une heure.
Dans les prochains articles portant sur l'environnement Dataguard, je reviendrai un peu plus en détail sur les différents paramètres et leur rôle.

LAO.

Partager cet article
Repost0
22 février 2009 7 22 /02 /février /2009 14:06
Bonjour,

Nous avons vu récemment comment mettre en place un environnement "Dataguard" en version standard. Ce qui nous a permis d'en voir certaines limites. Nous allons donc logiquement maintenant d'un véritable environnement dataguard avec la version Enterprise d'Oracle.

Rappel : Un environnement dataguard consiste en une base primaire, et une ou plusieurs bases dites "standby". Le principe est la transmission des archives log de la base primaire vers les bases de secours.
Ces bases standby sont appelées :
  • Physical standby :
  • Logical standby.
Physical standby:

  Une physical standby est principalement en mode MOUNT, et sert de base de secours qui pourra prendre le role de la base primaire en cas de crash ou d'opération de maintenance. Elle peut cependant être ouverte en mode READ ONLY pour consultations des données.

Logical Standby.

  Une logical standby est en mode OPEN, et accessible par les utilisateurs. De nouveaux objets  (tables, Index,...) peuvent être crées.

Remarque : Il est tout à fait possible de créer une architecture, composée à la fois de Physical standby et Logical standby.

LAO.
Partager cet article
Repost0
15 février 2009 7 15 /02 /février /2009 19:34
Bonsoir,

Dans l'article précédent, nous avons vu comment mettre en place une base de secours tout en utilisant une version standard d'Oracle.

Maintenant que notre base est de secours est en place voyons comment effectuer la mise à jour de notre base.

1 ère étape : Créer de l'activité transactionnel sur la base principale.


SET ORACLE_SID=DB1

SQLPLUS /nolog
CONNECT system/oracle

CREATE USER app IDENTIFIED BY app;
GRANT CONNECT, RESOURCE TO app;

CONNECT app/app

CREATE TABLE my_table (col1 NUMBER);

BEGIN
   FOR i IN 1..10000 LOOP
      INSERT INTO my_table VALUES (i);
   END LOOP;
   COMMIT;
END;
/




Afin de s'assurer que les fichiers d'archives log soient générés


CONNECT system/oracle
ALTER SYSTEM SWITCH LOGFILE;



2 ème étape : Appliquer les modifications sur la base de secours

On peut facilement vériifier dans C:\FRA\DB1\ARCHIVELOG\YYYY_MM_DD\ qu'un fichier d'archive vient d'étre fraichement crée.

Nous allons copier le fichier d'archive crée sur le serveur de secours, dans le répertoire C:\FRA\DB1\ARCHIVELOG\YYYY_MM_DD\

Puis sur le serveur de secours, dans une fenêtre dos:


SET ORALCE_SID=DB2

SQLPLUS /nolog
CONNECT / as sysdba

ALTER DATABASE RECOVER AUTOMATIC STANDBY DATABASE UNTIL CANCEL;
ALTER DATABASE RECOVER CANCEL;




Et voila... le tour est joué, votre base de secours est maintenant au même niveau que votre base primaire.

REMARQUE : La base est à l'état "MOUNT" et par conséquent n'est pas accessible pour intérrogation.

On peut cependant vérifier que la mise à jour a bien été effectuée.


SQLPLUS /nolog
CONNECT / as sysdba

ALTER DATABASE OPEN;

CONNECT  app/app
SELECT COUNT(*) FROM my_table;



Remarque :  On constate, que les trois types d'opérations (CREATE USER, CREATE TABLE , INSERT) ont bien été appliquées.

Si nous voulons que notre base de secours puisse à nouveau être mise à jour, il faut la remettre en etat "MOUNT"


SQLPLUS /nolog
CONNECT / as sysdba
STARTUP FORCE MOUNT;




Remarque : Lorsque la base est ouverte, elle en fait accessible en lecture seule. Il n'est pas possible de modifier les données ou de créer de  nouveaux objets.


On voit bien ici le début des limites de ce type d'architecture. La première c'est qu'il va falloir se fabriquer un petit script pour déplacer régulièrement les archives et les appliquer sur la ou les bases de secours.

Une autre limite concerne la structure de la base. Si il me venait la bonne idée d'ajouter un tablespace, la transaction echouerait sur la base de secours.

Au final, tout n'est pas à jeter. Lorsque l'on n'a pas les budgets, cela peut quand même être utile.
  • En cas de crash, on peut limiter l'interruption de service à la durée du "recover" des archives logs manquants.
  • Dans le cas d'une opération de maintenance nécessitant l'arrêt de la base, on peut donner l'accès en lecture aux utilisateurs en attendant la remise en route du serveur principal.
  • ....
Dans un prochain article, nous étudierons le cas d'un crash de la base primaire, et comment transformer notre base de secours en base principale.

LAO.
Partager cet article
Repost0
15 février 2009 7 15 /02 /février /2009 16:43
Bonjour;

Aujourd'hui, je vais commencer à parler de la sécurité des données. Non pas au sens cryptage ou confidentialité, mais plutôt dans une optique de ne pas perdre de données, ou d'éviter une interruption de service suite à un crash de serveur par exemple.
Tout dépend bien evidemment des données que l'on veut protéger, et également du budget alloué pour la mise en plus en place d'une telle architecture. Vous savez certainement qu'Oracle "offre" une solution appelée DATA GUARD.

Rapidement en quoi consiste cette solution ?
Il s'agit de récuperer les archives logs de la base principales (appelée également base primaire), et de les rejouer sur une ou plusieurs base de secourds (appelées bases "standby" ou de secours).
Ces bases de secours peuvent être sur le même serveur que la base primaire ou mieux sur un autre serveur dans un autre site.

Le petit bémol à cette architecture, est que cela implique de disposer de versions Enterprise d'ORACLE. Ce qui en terme de cout peut avoir un certain impact.

Il existe cependant des possibilités avec une version standard d'Oracle.

Afin de réaliser cette petite architecture, j'ai mis en place l'environnement suivant.
Deux machines virtuelles en XP avec sur chacune une version standard 10.2.0.3 d'Oracle installée.
Sur chacunes des machines, un listener écoutant sur le port 1521 a été crée via netca (Network Configuration Assistant)

Liens utiles (sur www.lao-dba.com)  pour la compréhension de l'article:


Préparation de la base "primaire".

-1 Création d'une base (cf . article "Création d'une base manuelle")

-2 Donner le droit à un poste client de se connecter en SYS (cf. article précédent : "Connexion à une base distante")


orapwd file=E:\oracle\product\10.2.0\db_1\database\pwdDB1.ora password=oracle entries=5



-3 Passage de la base en mode Archivelog.

Contrairement aux articles précedents, je vais activer la FRA(FLASH RECOVERY AREA) en ajoutant les deux lignes suivante dans mon fichier init.ora. Je fais cela uniquement pour ne pas tomber dans la répétition. Vous avez le droit de mettre vos archives log ou vous le désirez


db_recovery_file_dest_size=5G
db_revovery_file_dest='C:\FRA'



Attention : Il faut que le fichier C:\FRA existe.


mkdir C:\FRA


Il ne reste plus qu'a ouvrir une fenêtre dos et executer les commandes suivantes.


SET ORACLE_SID=DB1
SQLPLUS /nolog
CONNECT / as sysdba

SHUTDOWN IMMEDIATE;
STARTUP MOUNT pfile='e:\oracle\product\10.2.0\admin\DB1\pfile\init.ora';
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;




Préparation de la base de secours.

-1 Création de l'arborescence.

Pour simplifier l'exemple, j'ai choisi de garder la même arborescence, mais cela n'est nécessaire.


MKDIR E:\oracle\product\10.2.0\admin
MKDIR E:\oracle\product\10.2.0\oradata

MKDIR E:\oracle\product\10.2.0\admin\DB1
MKDIR E:\oracle\product\10.2.0\oradata\DB1

MKDIR E:\oracle\product\10.2.0\admin\DB1\bdump
MKDIR E:\oracle\product\10.2.0\admin\DB1\cdump
MKDIR E:\oracle\product\10.2.0\admin\DB1\pfile
MKDIR E:\oracle\product\10.2.0\admin\DB1\udump

MKDIR C:\FRA



-2 Permettre au serveur de secours de se connecter à la base primaire.

Pour cela, il suffit d'ajouter les lignes suivantes dans le fichier tnsnames.ora (%ORACLE_HOME%\NETWORK\admin) en prenant soin d'indiquer le bon service name et le bon host.


DB1_SRV1 =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = ORA10-SRV1)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = DB1)
    )
  )



-3 Création du fichier init.ora

Je vais copier le fichier init.ora de ma base primaire.
Dans le fichier, il faut uniquement modifier la ligne


db_unique_name=DB1 par db_unique_name=DB2



-4 Création et démarrage de l'instance ORACLE



oradim -new -sid DB2

SET ORACLE_SID=DB2

SQLPLUS  /nolog
CONNECT / as sysdba
STARTUP NOMOUNT;

DISCONNECT;
EXIT;



Maintenant que nos environnements sont quasi prêt, il ne reste plus qu'a dupliquer la base primaire vers la base de secours. Pour effectuer cette opération, je vais utiliser RMAN. Il existe d'autres moyens dont nous reparleront peut êre un autre jour.

-1 Sauvegarde de la base primaire.


RMAN target /
run
{
backup database;
backup current controlfile for standby database;
SQL 'Alter system switch logfile';
}



-2 Clonage de la base primaire vers la base de secours.

Pour cela, il faut d'abord récuperer l'intérieur de la "FRA" (c:\FRA\) de mon serveur principal pour le copier dans la "FRA" de la base de secours. Attention à copier l'arborescence et pas uniquement les fichiers.

Une fois la copie effecutée, il ne reste plus qu' a effectuer le clonage....


SET ORACLE_SID=DB2
rman target sys/oracle@DB1_SRV1 auxiliary /
duplicate target database for standby nofilenamecheck;




Si tout se passe bien au bout d'un moment, vous devez avoir le message suivant


Finished Duplicate Db at DD-MMM-YY


Nous venons de mettre en place une base de secours. Cela était une étape nécessaire mais pas suffisante. Nous verrons dans un prochain article comment rejouer les transactions de notre base primaire sur la base de secours. Nous verrons également les limites de ce type d'architecture qui si elle n'est pas complète à le mérite d'exister et de pouvoir survivre à un crash serveur avec une durée d'indisponibilité faible.

Remarque 1 :  Nous avons mis en place une seule base de secours, mais nous aurrions pu en créer plusieurs, que ce soit sur des des serveurs distants ou bien sur le même serveur que la base primaire. Dans ce cas, nous aurions du adapter la procédure (notamment pours les arboresences).


LAO.



Partager cet article
Repost0