Dimanche 15 février 2009
7
15
/02
/Fév
/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.
Par LAO
-
Publié dans : Dataguard
-
2
J'ai cherché à refaire les 2 parties Dataguard du 15/02/09.
La partie 1 se déroule sans problème. Par contre, après plusieurs tentatives, la 2è partie ne se passe pas comme indiqué.
Ci-dessous mes résultats.
J'utilise Oracle 10.2.0.1 sur Redhat5.
Aurez-vous une explication à mes problèmes ?
Merci d'avance.
SQL> conn system/dba1
Connected.
SQL> CREATE USER app IDENTIFIED BY app;
User created.
SQL> GRANT CONNECT, RESOURCE TO app;
Grant succeeded.
SQL> CONNECT app/app
Error accessing PRODUCT_USER_PROFILE
Warning: Product user profile information not loaded!
You may need to run PUPBLD.SQL as SYSTEM
Connected.
SQL> show user
USER is "APP"
==============================================
j'ai déroulé pupbld.sql suite à l'erreur ci-dessus.
==============================================
[oracle@RH5_a ~]$ export ORACLE_SID=DB2
[oracle@RH5_a ~]$ rman target sys/dba@DB1_SRV1 auxiliary sys/dba
Recovery Manager: Release 10.2.0.1.0 - Production on Sun Aug 23 01:13:02 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
connected to target database: DB1 (DBID=1289267841)
connected to auxiliary database: DB1 (not mounted)
RMAN> duplicate target database for standby nofilenamecheck;
Starting Duplicate Db at 23-AUG-09
using target database control file instead of recovery catalog
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: sid=156 devtype=DISK
contents of Memory Script:
{
restore clone standby controlfile;
sql clone 'alter database mount standby database';
}
executing Memory Script
Starting restore at 23-AUG-09
using channel ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: starting datafile backupset restore
channel ORA_AUX_DISK_1: restoring control file
channel ORA_AUX_DISK_1: reading from backup piece /u01/app/oracle/admin/DB1/FRA/DB1/backupset/2009_08_22/o1_mf_ncnnf_TAG20090822T205113_590hnp88_.bkp
channel ORA_AUX_DISK_1: restored backup piece 1
piece handle=/u01/app/oracle/admin/DB1/FRA/DB1/backupset/2009_08_22/o1_mf_ncnnf_TAG20090822T205113_590hnp88_.bkp tag=TAG20090822T205113
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:07
output filename=/mnt/hd2/oracledb/DB2/control01.ctl
output filename=/mnt/hd2/oracledb/DB2/control02.ctl
output filename=/mnt/hd2/oracledb/DB2/control03.ctl
Finished restore at 23-AUG-09
sql statement: alter database mount standby database
released channel: ORA_AUX_DISK_1
contents of Memory Script:
{
set newname for tempfile 1 to
"/mnt/hd2/oracledb/DB1/temp.dbf";
switch clone tempfile all;
set newname for datafile 1 to
"/mnt/hd2/oracledb/DB1/system.dbf";
set newname for datafile 2 to
"/mnt/hd2/oracledb/DB1/UNDOTBS1.dbf";
set newname for datafile 3 to
"/mnt/hd2/oracledb/DB1/sysaux.dbf";
restore
check readonly
clone database
;
}
executing Memory Script
executing command: SET NEWNAME
renamed temporary file 1 to /mnt/hd2/oracledb/DB1/temp.dbf in control file
executing command: SET NEWNAME
executing command: SET NEWNAME
executing command: SET NEWNAME
Starting restore at 23-AUG-09
allocated channel: ORA_AUX_DISK_1
channel ORA_AUX_DISK_1: sid=156 devtype=DISK
channel ORA_AUX_DISK_1: starting datafile backupset restore
channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set
restoring datafile 00001 to /mnt/hd2/oracledb/DB1/system.dbf
restoring datafile 00002 to /mnt/hd2/oracledb/DB1/UNDOTBS1.dbf
restoring datafile 00003 to /mnt/hd2/oracledb/DB1/sysaux.dbf
channel ORA_AUX_DISK_1: reading from backup piece /u01/app/oracle/admin/DB1/FRA/DB1/backupset/2009_08_22/o1_mf_nnndf_TAG20090822T205113_590hk1rh_.bkp
channel ORA_AUX_DISK_1: restored backup piece 1
piece handle=/u01/app/oracle/admin/DB1/FRA/DB1/backupset/2009_08_22/o1_mf_nnndf_TAG20090822T205113_590hk1rh_.bkp tag=TAG20090822T205113
channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:02:18
Finished restore at 23-AUG-09
contents of Memory Script:
{
switch clone datafile all;
}
executing Memory Script
datafile 1 switched to datafile copy
input datafile copy recid=4 stamp=695610972 filename=/mnt/hd2/oracledb/DB1/system.dbf
datafile 2 switched to datafile copy
input datafile copy recid=5 stamp=695610972 filename=/mnt/hd2/oracledb/DB1/UNDOTBS1.dbf
datafile 3 switched to datafile copy
input datafile copy recid=6 stamp=695610972 filename=/mnt/hd2/oracledb/DB1/sysaux.dbf
Finished Duplicate Db at 23-AUG-09
RMAN> exit
Recovery Manager complete.
=========================================
application des archives après création de my_table dans DB1
-----------------------------------------
[oracle@RH5_a ~]$ export ORACLE_SID=DB2
[oracle@RH5_a ~]$ sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on Sun Aug 23 01:32:15 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> conn sys/dba as sysdba
Connected.
SQL> ALTER DATABASE RECOVER AUTOMATIC STANDBY DATABASE UNTIL CANCEL;
ALTER DATABASE RECOVER AUTOMATIC STANDBY DATABASE UNTIL CANCEL
*
ERROR at line 1:
ORA-00279: change 230701 generated at 08/22/2009 20:51:13 needed for thread 1
ORA-00289: suggestion :
/u01/app/oracle/admin/DB2/FRA/DB2/archivelog/2009_08_23/o1_mf_1_11_%u_.arc
ORA-00280: change 230701 for thread 1 is in sequence #11
ORA-00278: log file
'/u01/app/oracle/admin/DB2/FRA/DB2/archivelog/2009_08_23/o1_mf_1_11_%u_.arc' no
longer needed for this recovery
ORA-00308: cannot open archived log
'/u01/app/oracle/admin/DB2/FRA/DB2/archivelog/2009_08_23/o1_mf_1_11_%u_.arc'
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3
SQL> ALTER DATABASE RECOVER AUTOMATIC STANDBY DATABASE UNTIL CANCEL;
ALTER DATABASE RECOVER AUTOMATIC STANDBY DATABASE UNTIL CANCEL
*
ERROR at line 1:
ORA-00275: media recovery has already been started
SQL> shutdown abort
ORACLE instance shut down.
SQL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
[oracle@RH5_a ~]$ export ORACLE_SID=DB2
[oracle@RH5_a ~]$ sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 - Production on Sun Aug 23 01:39:23 2009
Copyright (c) 1982, 2005, Oracle. All rights reserved.
SQL> conn sys/dba as sysdba
Connected to an idle instance.
SQL> startup mount
ORACLE instance started.
Total System Global Area 268435456 bytes
Fixed Size 1218892 bytes
Variable Size 88082100 bytes
Database Buffers 176160768 bytes
Redo Buffers 2973696 bytes
Database mounted.
SQL> ALTER DATABASE RECOVER AUTOMATIC STANDBY DATABASE UNTIL CANCEL;
ALTER DATABASE RECOVER AUTOMATIC STANDBY DATABASE UNTIL CANCEL
*
ERROR at line 1:
ORA-00279: change 230701 generated at 08/22/2009 20:51:13 needed for thread 1
ORA-00289: suggestion :
/u01/app/oracle/admin/DB2/FRA/DB2/archivelog/2009_08_23/o1_mf_1_11_%u_.arc
ORA-00280: change 230701 for thread 1 is in sequence #11
ORA-00278: log file
'/u01/app/oracle/admin/DB2/FRA/DB2/archivelog/2009_08_23/o1_mf_1_11_%u_.arc' no
longer needed for this recovery
ORA-00308: cannot open archived log
'/u01/app/oracle/admin/DB2/FRA/DB2/archivelog/2009_08_23/o1_mf_1_11_%u_.arc'
ORA-27037: unable to obtain file status
Linux Error: 2: No such file or directory
Additional information: 3
SQL>
Très intéressant . Quand l'article sur le cas d'un crash de la base primaire, et comment transformer notre base de secours en base principale pourra t-il être consulté?