- Oracle l'essentiel
- Installation d'Oracle
- Les Scripts
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))
)
)
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
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.
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;
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.
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.
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)
)
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.
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!
Utilisation de l'outil oracle pour la gestion des standby DGMGRL