Shape1 Shape2 Shape3

Copyright 2010 le coin du dba oracle

Shape4

Le coin du DBA Oracle

All rights reserved

Oracle est une marque déposée d'Oracle Corporation

2006_0815aout_canal20060093 DBA Oracle
Shape1 Shape2

Suite creation d'un standby physique


DIRECT_HANDOFF_TTC_LISTENER=OFF

SID_LIST_listener =

  (SID_LIST =

   (SID_DESC =

    (GLOBAL_DBNAME = TESTstlw)

    (ORACLE_HOME = C:\app\oracle\product\11.1.0\db_1)

    (SID_NAME =teststlw)

   )

  )


LISTENER =

  (DESCRIPTION_LIST =

    (DESCRIPTION =

      (ADDRESS = (PROTOCOL = TCP)(HOST = de-Oracle11Stdb)(PORT = 1521))

    )

  )

Shape3

Descendre la base de données du serveur primaire

Copier les fichiers du serveur primaire sur le serveur standby

       les fichiers lié au tablespace .DBF

       les fichiers .LOG


Monter la base de données primaire sous SQL

       startup mount

Créer des fichiers de control standby

       alter database create standby controlfile as 'c:\app\oracle\oradata\test\controlstdby.ctl'

Copier le fichier ainsi réalisé pour la base standby,  le renommer et le dupliquer autant de fois qu'il en existe dans la base primaire.


Nous profiterons que la base de production soit montée pour lui indiquer le niveau de protection souhaité.

       maximize protection peut influer sur les performances du site primaire. Le transport des LOG doit être réalisé par LGWR

       maximize availability divergence possible si le site standby est indisponible. Le transport des LOG doit être réalisé par LGWR

       maximize performance divergence possible.Le transport des LOG peut être réalisé soit par LGWR ou ARCH.

Executer l'une des requêtes suivantes:

       alter database set standby to maximize protection

       alter database set standby to maximize availability

       alter database set standby to maximize performance


Nous pouvons à présent réouvrir la base primaire

       alter database open

listener.ora de la base standby est très proche de celui de la base primaire                        

Shape4

A présent travaillons sur la base standby.


Nous avons les fichiers de configuration du listener, il faut à présent créer le service listener, et le démarrer (outil lsnrctl).


Créer le service de la base standby à l'aide d'oradim.exe. Sur la console de commande (dos) executer la commande suivante:

       oradim -NEW -SID teststlw -STARTMODE MANUAL -PFILE c:\app\oracle\product\11.1.0\db_1\database\initteststlw.ora - SYSPWD PasswordSys


Copier le fichier des passwords c:\app\oracle\product\11.1.0\db_1\database\pwdtest.ora pour la base standby le renommer en c:\app\oracle\product\11.1.0\db_1\database\pwdteststlw.ora


Ouvrir une session sql en étant connecté sysdba,

       connect sys/Passwordsys@test_stlw as sysdba


Monter la base de données

       Startup mount


Créer les redo log standby

       Si votre base standby travail dans le mode maximum protection ou maximum availability (mode LGWR) il faut créer des redolog standby;  ceux-ci doivent avoir les mêmes caractéristiques que la base primaire. Pour connaitre le nombre de group de logfile à créer, il faut utiliser la formule suivantes: (Nombre maximum de redolog par thread +1) x nombre maximum de thread


Pour supprimer un group de redolog

       alter database test drop logfile group 1; Base primaire

       alter database test drop standby logfile group 1; Base standby


Pour ajouter un group de redolog

       alter database test add logfile group 1 ('c:\app\oracle\...\redoxx.log') size 50M; Base primaire

       alter database test add standby logfile group 1 ('c:\app\oracle\...\redoxx.log') size 50M; Base standby


Pour nettoyer un group de redolog

       alter database clear logfile group 1; Base primaire

       alter database clear standby logfile group 1; Base standby


A présent, nous pouvons exécuter la mise en standby du serveur


               alter database open read only puis

       soit:


               alter database recover managed standby database disconnect from session; démarrage de l'application des redos


       soit:


               alter database recover managed standby database using current logfile disconnect from session;

Utilise le redo courant, l'application des modifications se fait en temps réel, il faut donc que le transport soit configuré en LGWR.

Shape5

C'est parti pour quelques tests. Si vous utilisez oracle 11 entreprise et l'option Active Data Guard vous aurez la joie de pouvoir utiliser la base en lecture, en même tenps qu'elle applique les modifications de la base primaire. Sinon, il vous faudra effectuer la requête suivante:


       alter database recover managed standby database cancel; Annule l'application des redolog

puis

       alter database open read only; Met la base en lecture seule


puis pour remettre la base en standby réappliquer la requête alter database ... disconnect from session;

Shape6

Pour information

       vous pouvez construire un serveur standby à partir d'un autre standby. Pour cela, il suffit de recopier bêtement tous les fichiers y compris les fichiers de contrôles. de copier et modifier les fichiers listener.ora, tnsname.ora et initsid.ora, puis d'effectuer le travail sur la standby: création du processus d'écoute, création du service de la base de données, et voilà.

       Si vous utilisez un PC/Serveur virtuel, vous descendez la base primaire, vous mettez le service en exécution manuelle. Vous éteignez votre serveur primaire et copiez votre PC/Serveur virtuel. Vous appliquez la procédure sur les fichiers d'initialisations, et sur les bases oracle, pensez surtout à vos fichiers de controls (standby) avant de redémarrer votre base primaire et avant de monter votre base standby.                        

Shape7

       Pour tester une base standby, vérifier si besoin sa disponibilité et son bon état de fonctionnement. Vous pourriez avoir envie de réaliser un Failover le problème est que cette action est définitive et oblige à une reconstruction de la base en standby. Une astuce consiste à  utiliser sur votre serveur les disques montés en miroir. Casser temporairement le miroir, garder un jeu de disques avec la base en standby. et utiliser l'autre pour effectuer le failover. Une fois votre test fait, reconstruire votre serveur standby à l'aide de vos disques miroir que vous avez préservez. Une fois le serveur reconstruit, le standby récupére les informations automatiquement.                        

Shape8

Et pour finir la configuration, je vous propose d'utiliser l'utilitaire dgmgrl d'oracle.

Sur la base primaire et la base standby

       1) Mettre des redo log standby voir ci-dessus

       2) Si vous êtes avec des fichiers de configuration de type pfile transformer les en spfile

               create spfile='spfiletest.ora' from pfile='initest.ora'        

       3)Mettre le paramètre DG_BROKER_START = TRUE

               alter system set DG_BROKER_START = TRUE scope=both;

       4)Ajouter dans le listener.ora Primaire et standby

               (SID_DESC =

                  (GLOBAL_DBNAME = GlobalDbname_DGMGRL) exemple test_DGMGRL

                  (SERVICE_NAME = ServiceName_DGMGRL) exemple test_DGMGRL

                  (ORACLE_HOME = OracleHome)exemple C:\app\oracle\product\11.1.0\db_1

                  (SID_NAME = SID) exemple test

               )

               exemple:

               SID_LIST_LISTENER =

                 (SID_LIST =

                   (SID_DESC =

                    (GLOBAL_DBNAME = test)

                    (ORACLE_HOME = C:\app\oracle\product\11.1.0\db_1)

                    (SID_NAME = test)

                   )

                   (SID_DESC =

                    (GLOBAL_DBNAME = test_DGMGRL)

                    (SERVICE_NAME = test_DGMGRL)

                    (ORACLE_HOME = C:\app\oracle\product\11.1.0\db_1)

                    (SID_NAME = test)

                   )

                )

           Ne pas oublier de redémarrer le Listener

       5)Ajouter dans le tnsname.ora Primaire et standby

               ServiceName_DGMGRL =

                 (DESCRIPTION =

                   (ADDRESS = (PROTOCOL = TCP)(HOST = primaire)(PORT=1521))

                   (CONNECT_DATA =

                   (SERVER =DEDICATED)

                   (SERVICE_NAME =        ServiceName_DGMGRL)

                )

               exemple:

               test =

                 (DESCRIPTION =

                   (ADDRESS = (PROTOCOL = TCP)(HOST = primaire)(PORT=1521))

                   (CONNECT_DATA =

                   (SERVER =DEDICATED)

                   (SERVICE_NAME =        test)

                 )

               test_DGMGRL =

                 (DESCRIPTION =

                   (ADDRESS = (PROTOCOL = TCP)(HOST = primaire)(PORT=1521))

                   (CONNECT_DATA =

                   (SERVER =DEDICATED)

                   (SERVICE_NAME =        test_DGMGRL)

                 )

               testStandby =

                 (DESCRIPTION =

                   (ADDRESS = (PROTOCOL = TCP)(HOST = Standby)(PORT=1521))

                   (CONNECT_DATA =

                   (SERVER =DEDICATED)

                   (SERVICE_NAME =        test)

                 )

               testStandby_DGMGRL =

                 (DESCRIPTION =

                   (ADDRESS = (PROTOCOL = TCP)(HOST = Standby)(PORT=1521))

                   (CONNECT_DATA =

                   (SERVER =DEDICATED)

                   (SERVICE_NAME =        testStandby_DGMGRL)

                 )

Shape9

Lancer l'application dgmgrl sur le serveur primaire. (pour information doc oracle)

       connect sys/syspassword@test;

       create configuration 'test' as primary database is 'test' connect identifier is test;

               le premier test correspond au nom que vous donnez à la configuration

               le second test correspond au nom que vous avez indiqué dans DB_UNIQUE_NAME

               le troisième test correspond au nom du service indiqué dans le TNSNAME.ORA

       add database teststby as connect identifier is test_stby;

       ou

       add database teststby as connect identifier is test_stby maintained as physical; si votre standby est physique.

       enable configuration;

       show configuration;

       si ora 16608 Warning sur une ou les deux bases de données

       vérifier avec

       show database 'test' 'StatusReport';

       show database 'teststby' 'StatusReport';

       ora 16797 votre fichier de configuration est en pfile

       ora 16629 mode de protection différent entre les 2 bases, harmoniser le mode de protection

       alter configuration set protection mode as maxperformance ou maxavailability ou maxprotection

       ora 16789 les redos standby ne sont pas créés sur une ou plusieurs bases de données, la base primaire est incluse.

Shape10

Configuration des bases pour l'utilisation du FastStart Failover, de Reinstate et de conversion Snapshot Standby

configurer les paramètres suivants:

       UNDO_RETENTION en secondes

       UNDO_MANAGEMENT en mode AUTO

       DB_FLASHBACK_RETENTION_TARGET en minutes

 

UNDO_RETENTION = 900 secondes par défaut. Le délai indiqué à cet endroit va influer directement sur l'espace du tablespace UNDO. Il faudra donc faire attention à l'espace disque nécessaire et à la taille du tablespace UNDO.

DB_FLASHBACK_RETENTION_TARGET en minutes de même que précédemment, il sera nécessaire de dimensionner une zone de stockage correspondant au temps de rétention. Si besoin réajuster votre paramètre DB_RECOVERY_FILE_DEST_SIZE à 2G par défaut

Sur la base standby et la base primaire (avec l'éditeur SQL)

       alter system set undo_retention=3600 scope=spfile; (équivalent à 1 heure)

       alter system set undo_management='AUTO' scope=spfile;

       shutdown immediate;

       startup mount;

Si cela n'est pas encore fait, configurer DB_RECOVERY_FILE_DEST_SIZE et DB_RECOVERY_FILE_DEST

       alter system set db_recovery_file_dest_size = 45G; (par exemple)

       alter system set db_recovery_file_dest ='c:\app\oracle\flash_recovery_area'; (par exemeple)


       alter system set db_flashback_retention_target=4320 scope=both; (équivalent à 3 jours)

       alter database flashback on;

       alter database open;

       

Si vous êtes dans le mode maxavailability configurer le paramètre FastStart Failover        (avec l'éditeur dgmgrl)

       Pour passer en mode maxavailability

               edit database 'test' set property LogXptMode='SYNC';

               edit database 'teststby' set property LogXptMode='SYNC';

               edit configuration set protection mode as MAXAVAILABILITY;

       edit database 'test' set property FastStartFailoverTarget='teststby';

       edit database 'teststby' set property FastStartFailoverTarget='test';

       enable fast_start failover;


Lancer sur une cession dgmgrl

       start observer;

Attention n'attendez pas le prompt de fin d'éxecution pour cette commande!

Shape11

Utilisation de l'outil oracle pour la gestion des standby DGMGRL