Overblog
Editer l'article Suivre ce blog Administration + Créer mon blog
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

commentaires

F
<br /> <br /> Question : comment utiliser dataguard avec la version Oracle 10 G standard edition ?<br /> <br /> <br /> <br />
Répondre
L
<br /> <br /> Bonjour,<br /> <br /> <br /> Dataguard est par définition un composant associé à la version Enterprise. Donc pas de dataguard en 10g standard. En revanche,il est possible de mettre en place une standby averc cependant<br /> certaines limites.<br /> <br /> <br /> Je vous invite à regarder l'article qui explique la mise en place d'une standby en standard.<br /> <br /> <br /> http://www.lao-dba.com/article-27974729-6.html<br /> <br /> <br /> Cordialement,<br /> <br /> <br /> LAO.<br /> <br /> <br /> <br />
S
Bjr,<br /> Y a t-il eu une suite à cet article ?<br /> <br /> Merci.
Répondre