!
!
!
!
!
!
!
!

DBA
La standby database (extrait du livre)
La standby database est apparue en Oracle 7.3. Elle est une base de données en perpétuelle restauration avec les redologs de la base source et qui lors de la chute de celle-ci reprend ses activités. Dans les versions antérieures à 8i, le DBA devait transférer les redo logs vers leur destination manuellement, en 8i ceci peut être effectué automatiquement. Pour la vérification de la disponibilité de l’option, vérifiez les options (v$options) l’y concernant : Managed Standby à TRUE.
Comme la standby est alimenté par les redo logs archivés de la base source, nous devons indiquer l’emplacement de ces fichiers. Un nouveau paramètre est introduit en V8, standby_archive_dest, qui indique le répertoire d’arrivage des archives.

Création de la standby database

Dans la création de la standby database nous allons prendre la configuration suivante parmi les multiples configurations offertes par Oracle :
  • Elle se trouve sur une autre machine, l’arborescence des fichiers est identique avec celle de la machine source.
  • Les redologs sont transportés automatiquement via net*8.
La base source se trouve sur la machine \\SCLAVOS dans l’arborescence l:\db\IDBA\data, les archives se trouvent dans l:\db\IDBA\archives. La base cible se trouve(ra) sur la machine \\MASTER dans l’arborescence l:\db\IDBA\data, les archives se trouvent dans l:\db\IDBA\archives

Backup des fichiers de la base

La constitution de la base commence avec la copie des fichiers de la base originelle dans l’arborescence de la standby database. Les fichiers de données, de contrôle et redo sont copiés sur la machine cible comme pendant l’opération d’un backup à froid (d’ailleurs les fichiers sont issus d’un backup). N’oublions que nous pouvons employer aussi les fichiers issus d’un hot backup.
Les fichiers de contrôle seront écrasés par l’opération suivante. Nous pouvons ne pas les prendre, mais ça nous fera faire une action supplémentaire.


Création du fichier de contrôle

Cette action est à mener bien évidement dans l’instance source.
set echo on
spool standby_cre_ctl.lis
archive log list
alter database create standby controlfile as 'l:\db\idba\data\idbastandby.ctl';
spool off;
Code 1 Création du fichier de contrôle
La base originelle a trois fichiers de contrôle.
  • Copier le fichier de contrôle ainsi créé à ses places.

Configuration du réseau

  1. Listener (Standby)
Dans notre cas de gestion automatisée, le listener de la machine en standby doit être modifié.
. . .
STANDBY_LISTENER =
        (ADDRESS = (PROTOCOL = TCP)(HOST = master)(PORT = 1522))
SID_LIST_STANDBY_LISTENER =
  	(SID_LIST = (SID_DESC = (SID_NAME = idba)
			(ORACLE_HOME = F:\oracle81)))
Code 2 Configuration du listener sur la machine cible(standby)
Notons que sur la même machine nous avons un premier listener pour une autre base de production. Enfin, presque. Le listener standby est démarré dans notre cas avec
Lsnrctl start standby_listener
Connecting to (ADDRESS=(PROTOCOL=TCP)(HOST=master)(PORT=1522))
STATUS of the LISTENER
------------------------
Alias                     standby_listener
Version                   TNSLSNR for 32-bit Windows: Version 8.1.6.0.0 - Produc
tion
Start Date                30-AOU-2000 19:19:11
Uptime                    0 days 0 hr. 0 min. 2 sec
Trace Level               off
Security                  OFF
SNMP                      OFF
Listener Parameter File   F:\oracle81\network\admin\listener.ora
Listener Log File         F:\oracle81\network\log\standby_listener.log
Services Summary...
  idba          has 1 service handler(s)
The command completed successfully
Figure 1 Démarrage du listener pour la standby
  1. TNSNAMES (SOURCE)
Le fichier TNSNAMES.ORA de la machine source doit également être modifié :
isos.world = (DESCRIPTION = (ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(PORT = 1522)(HOST = master)))
(CONNECT_DATA = (SID = idba)))
Code 3 Configuration du tnsnames sur la machine source (prod)

Configurer l’archivage

  1. Init.ora (source)
En 8i les redologs archivés peuvent être pris en compte automatiquement par la standby dans le cas de la gestion automatisée et l’utilisation de NET*8. La ligne
log_archive_dest = l:\db\idba\archive
devient
log_archive_dest_1 = 'LOCATION=l:\db\idba\archive'
log_archive_dest_state_1 = ENABLE
log_archive_dest_2 = 'SERVICE=isos.world'
log_archive_dest_state_2 = ENABLE
Code 4 Modifications du init.ora sur le serveur
Notons que la deuxième destination des archive est le service ISOS. Jusqu'à quatre destinations supplémentaires peuvent être renseignées. Les services sont activés.
Un démarrage de l’instance source en ce moment provoquera sur la machine de la standby  lors de switch de redo logs (STANDBY_LISTENER.LOG):
30-AOU-2000 16:17:03 * (CONNECT_DATA=(SID=IDBA)(CID=(PROGRAM=l:\oracle\ora81\bin\ORACLE.EXE)(HOST=SCLAVOS)(USER=SYSTEM))) * (ADDRESS=(PROTOCOL=tcp)(HOST=172.16.14.93)(PORT=1938)) * establish * IDBA * 12500
TNS-12500: TNS:listener failed to start a dedicated server process
 TNS-12560: TNS:protocol adapter error
  TNS-00530: Protocol adapter error
   32-bit Windows Error: 2: No such file or directory
Code 5 Le listener de la standby n’a pas pu faire son travail. Une instance standby n’existe pas (encore)
  1. Init.ora (standby)
Sur la machine standby, nous avons ajouté le paramètre STANDBY_ARCHIVE_DEST qui dans notre cas de figure est identique à ARCHIVELOG_DEST, ainsi que le paramètre de compatibilité 8.1.6
STANDBY_ARCHIVE_DEST = l:\db\idba\archive
COMPATIBLE = 8.1.6
Code 6 Modifications du init.ora sur le serveur

Création du service (NT)

En environnement Windows NT, un service doit être créé :
L:\db\idba>oradim -new -sid idba -intpwd poloff 
   -pfile l:\db\idba\script\init\init.ora -startmode manual
Code 7 Création du service (Windows NT)

Démarrages

  1. Source
  • L’instance (La modification dans init.ora l’exige)
  • Cible
    • Le listener (Ajout du listener standby)
    • L’instance
    startup nomount pfile=L:/db/idba/script/init/init.ora
    alter database mount standby database;
    

    Vérifications

    Inutile de le préciser, après les manipulations effectuées nous nous attendons de voir apparaître dans le répertoire STANDBY_ARCHIVE_DEST les redologs archivés sur la machine source. Il est très frustrant de ne pas avoir le résultat escompté tout de suite.
    Comme le transfert des redo se fait par le biais de NET*8, l’analyse des logs sur les deux machines peut s’avérer bénéfique. Attention aux numéros de ports, noms de hosts, etc.
    Attention aux fichiers qui deviendront standby database : la sauvegarde de ceux ci doit être une cohérente, après un shutdown propre.

    La requête suivante montre les eventuelles causes du disfonctionnement de transfert d’archives :
    SQL> col error for a25 wrap
    SQL> col destination for a30 wrap
    SQL> set line 1000
    SQL> select dest_id, status, destination, error
    2 from v$archive_dest;
    DEST_ID STATUS DESTINATION ERROR
    ---------- --------- ------------------------------ -----
    1 VALID l:\db\idba\archive
    2 VALID isos.world
    3 INACTIVE
    4 INACTIVE
    5 INACTIVE

    Figure 2 analyse des possibles erreurs avec v$archivedest (base source)

    Recouvrir la standby database

    Si l’on utilise une managed standby database, nous démarrons son recouvrement perpétuel avec alter database recover managed standby database timeout 30; Le paramètre timeout spécifie le délai d’attente d’un fichier redolog après lequel la restauration sera abortée.

    Arrêt du recouvrement et ouverture en read only

    Les bases de données en mode standby peuvent être ouvertes en mode read only. Ceci permet une utilisation sur le site de secours ou bien des opérations de vérification, déchargement massif, etc. Ceci est réalisé avec
    alter database recover managed standby database cancel;
    alter database open read only;
    
    La premiere commande arête le process de restauration, la deuxieme ouvre la base en mode read only.

    Recommencer la restauration

    La restauration est redémarrée avec la commande
    alter database recover managed standby database ;
    


    Copyright © 1998-2002 Radu Caulea, TAFORA MAJ 06/11/2006 !
    Commentaires et suggestions radu[CHEZ]tafora.fr