Le paramètre caché _allow_resetlogs_corruption

Administration Oracle, Divers, Rman, scripts et trucs pas de Commentaire »

Dans cet article nous allons voir un exemple de récupération de données après restauration et quand la base ne veut quand même pas s’ouvrir.

Par exemple un disque lâche sur le serveur et on perd le datafile présent dessus, pour restaurer convenablement ce datafile, il nous faut les archives générées entre le dernier backup et le crash mais il nous manque les archives en question. On ne peut donc plus ouvrir la base et manque de chance, ce datafile contient des tables super importantes.

On sait pertinemment que l’on va perdre des données mais on aimerait en perdre le moins possible quitte à utiliser des moyens “spéciaux” pour cela.

A cause de l’intégrité faussée de la base, on ne peut plus l’ouvrir normallement.

Le paramètre caché qui permet de démarrer la base soit en mode  désynchronisée c’est à dire avec au moins un de ses entêtes de datafiles incorrect soit parce qu’on a  endommagé un ou plusieurs redo logs ou encore parce qu’il nous manque une archive ou deux pour restaurer un datafile est _allow_resetlogs_corruption.

Dans le cas ou votre datafile contiendrait des données type index ou que l’on peut facilement recréer, le mieux serait toujours de dropper le tablespace, puis de le recréer / recharger mais dans le cas ou les données ne sont pas facilement reconstructibles quoi faire?

L’idée à suivre pourrait être la suivante :

Restaurer le datafile ou la base à partir du dernier backup.

Jouer les archives jusqu’au dernier numéro de séquence correct (pour cela regarder dans rman : list backup of archivelog all).

Arrêter et redémarrer l’instance avec le paramètre _allow_resetlogs_corruption = TRUE.

Exporter les données souhaitées.

Restaurer la base à partir du dernier backup.

Mettre le datafile offline.

Dropper et recréer le tablespace.

Réimporter les données “récupérées”. Vous risquez néanmoins d’avoir des décalages applicatifs selon les cas, vous n’êtes donc peut être pas exempt de correction des données.

Re backuper la base correctement.

Dans notre cas, la base refuse de s’ouvrir après une restauration RMAN.

la restauration until logseq s’est bien passée, le recover database aussi. Il n’y a qu’au moment d’ouvrir la base en open resetlogs que la base réclame “une récupération de données après défaillance matérielle”.

Ceci à cause d’un datafile dont la mise offline ne s’était pas déroulé correctement.

J’ai donc remis ce datafile online, redémarré avec le paramètre _allow_resetlogs_corruption à TRUE qui a permis de corriger l’entête du fichier.

Puis on arrête la base et on la redémarre normalement.

BEMOL & RESTRICTION : Oracle ne maintient les bases qui ont été démarrées avec ce paramètre, elles sont potentiellement corrompues. C’est donc en dernier ressort et dans le cas désespérés qu’il faut l’utiliser et tout de suite après exporter les données et les réimporter dans une belle base toute neuve.

Alban le punk

Solution erreur ORA-01157 , ORA-01110 : datafile perdu , corrompu ou effacé

Administration Oracle, Musée des erreurs, Rman, Sécurité Oracle pas de Commentaire »

En 6 clics

(oui je sais c’est un peu long)
L’hypothese est toujours qu’on ait une suavegarde RMAN en place qui tienne la route ( voir mon article : Sauvegarde Oracle 11g avec RMAN en 5 clics , pour + d’infos)
Avec la console OEM :
Cliquer sur l’onglet ‘Availability’, puis le lien ‘perform recovery’, choisir ‘recovery scope = datafile’ , clic ‘recover’, clic ‘Next’, clic ‘Next’ et ‘Submit’.
C’est fini ;-(

En 2 commandes

On va voir ici comment récupérer un fichier perdu…sans savoir lequel ni connaitre RMAN !
En fait 2 commandes suffisent : ADVISE FAILURE et REPAIR FAILURE. C’est tout bonnement miraculeux ca s’appelle Data Recovery Advisor !

Supposons qu’on ait donc perdu un datafile.
Au bout d’un moment (si, si) Oracle va finir par s’en apercevoir et on aura une erreur ORA-1157.
Oracle ERROR at line 1:
ORA-01157: cannot identify/lock data file 6 - see DBWR trace file
ORA-01110: data file 6: ‘/tmp/dd.dbf’ DATAFILE

Les étapes de restauration sont très simples grace à DATA RECOVERY ADVISOR disponible avec Oracle 11g.
Concrètement ce Data recovery advisor consiste en qq commandes que l’on pourra lancer sous RMAN.

3 commandes utiles :

RMAN> LIST FAILURE : liste les pbs en cours détectés (fichiers manquents, corrompus, etc…)

RMAN> ADVISE FAILURE : propose des solution de recovery et produit un script associé

RMAN> REPAIR FAILURE : execute le script de récupération

Voici un exemple concret :

Connexion a RMAN

$> rman target sys@portab2-a-dd:1521/DD1.dd.com
connected to target database: DD1 (DBID=1767735647, not open)
RMAN>

Recherche de problemes éventuels :

RMAN> list failure;
using target database control file instead of recovery catalog
List of Database Failures
=========================
Failure ID Priority Status Time Detected Summary
———- ——– ——— ————- ——-
1242 HIGH OPEN 23-JUL-10 One or more non-system datafiles are missing

Ou si l’on souhaite avoir des infos plus détaillées sur le problème on utilise l’ID qui nous intéresse , ici 1242

RMAN> list failure 1242 detail;

List of Database Failures
=========================
Failure ID Priority Status Time Detected Summary
———- ——– ——— ————- ——-
1242 HIGH OPEN 23-JUL-10 One or more non-system datafiles are missing
Impact: See impact for individual child failures
List of child failures for parent failure ID 1242
Failure ID Priority Status Time Detected Summary
———- ——– ——— ————- ——-
1245 HIGH OPEN 23-JUL-10 Datafile 6: ‘/tmp/dd.dbf’ is missing
Impact: Some objects in tablespace DD might be unavailable

En suite la partie Assistance / conseil proprement dite (ADvisor) :

RMAN> advise failure;

analyzing automatic repair options; this may take some time
allocated channel: ORA_DISK_1
channel ORA_DISK_1: SID=155 device type=DISK
analyzing automatic repair options complete

Mandatory Manual Actions
========================
no manual actions available
Optional Manual Actions
=======================
1. If file /tmp/dd.dbf was unintentionally renamed or moved, restore it
Automated Repair Options
========================
Option Repair Description
—— ——————
1 Restore and recover datafile 6
Strategy: The repair includes complete media recovery with no data loss
Repair script: /oracle/diag/rdbms/dd1/DD1/hm/reco_1841908370.hm

On peut dès lors récupérer le fichier de données effacé en une étape :

RMAN> REPAIR FAILURE

Ou si l’on veut mieux maitriser ce que l’on fait, visualiser le script et lancer les étapes de restauration et recovery manuellement :

Vérification du script généré :

$> more /oracle/diag/rdbms/dd1/DD1/hm/reco_1841908370.hm
# restore and recover datafile
restore datafile 6;
recover datafile 6;

Restauration (récupération) du fichier perdu à partir des Backups Sets de la sauvegarde RMAN :

RMAN> restore datafile 6;

Starting restore at 23-JUL-10
using channel ORA_DISK_1
channel ORA_DISK_1: starting datafile backup set restore
channel ORA_DISK_1: specifying datafile(s) to restore from backup set
channel ORA_DISK_1: restoring datafile 00006 to /tmp/dd.dbf
channel ORA_DISK_1: reading from backup piece /oracle/flash_recovery_area/DD1/DD1/backupset/2010_07_22/o1_mf_nnnd1_BACUP_INCR_DEL_BAC_0_64jlhkvc_.bkp
channel ORA_DISK_1: piece handle=/oracle/flash_recovery_area/DD1/DD1/backupset/2010_07_22/o1_mf_nnnd1_BACUP_INCR_DEL_BAC_0_64jlhkvc_.bkp tag=BACUP_INCR_DEL_BAC_072210033828
channel ORA_DISK_1: restored backup piece 1
channel ORA_DISK_1: restore complete, elapsed time: 00:00:01
Finished restore at 23-JUL-10

Récupération de données supplémentaires et synchronisation des fichiers si nécessaire :

RMAN> recover datafile 6;

Starting recover at 23-JUL-10

using channel ORA_DISK_1
starting media recovery
media recovery complete, elapsed time: 00:00:01
Finished recover at 23-JUL-10

Installation de Tivoli Data Protection pour Oracle by albanlepunk

Rman 3 Commentaires »

RMAN vous permet d’effectuer des sauvegardes complètes ou partielles, hors ligne ou en ligne. Une fois que vous avez identifié la base de données à sauvegarder, Oracle localise tous les fichiers nécessaires et les envoie au serveur Tivoli Storage Manager Server à l’aide de Data Protection pour Oracle. Data Protection pour Oracle fournit une interface entre les appels d’API de gestion des supports Oracle et les routines de Tivoli Storage Manager.

En gros il permet à RMAN d’écrire directement dans TSM server sans passer par la case disque.

Installation :

Pré Requis à L’install de TDP 5.X
Vérifier la version de java : java –version
En effet le pré requis Oracle concernant Java est minimum 1.4.2.0.
Pour installer TDP 5.X il faut un niveau minimum de java en version 1.5.
[root@PRO-ORA-AJA-01 linux86_64]# java -version
java version “1.4.2″
gij (GNU libgcj) version 4.1.2 20080704 (Red Hat 4.1.2-44)
Copyright (C) 2006 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
[root@PRO-ORA-AJA-01 linux86_64]#

Download du binaire chez Sun.
Installation de java 1.6.14
./ jre-6u14-linux-x64-rpm.bin

you agree to the above license terms? [yes or no]
yes
Unpacking…
Checksumming…
Extracting…
UnZipSFX 5.50 of 17 February 2002, by Info-ZIP (Zip-Bugs@lists.wku.edu).
inflating: jre-6u14-linux-amd64.rpm
Préparation…              ########################################### [100%]
1:jre                    ########################################### [100%]
Unpacking JAR files…
rt.jar…
jsse.jar…
charsets.jar…
localedata.jar…
plugin.jar…
javaws.jar…
deploy.jar…
Done.
2.3    Installation de TDP en mode Graphique.

Il faut préalablement positionner un DISPLAY et un client X11 ou être en VNC sur le serveur.
Se positionner dans le répertoire téléchargé sur le site Password Advantage d’IBM.
/DATA/downloads/TDP_passportadvantage/LCD7-3080-00/oracle/linux86_64
Exporter les bonnes variables d’environnement JAVA
[root@PRO-ORA-AJA-01 linux86_64]# export JAVA_HOME=/usr/java/
[root@PRO-ORA-AJA-01 linux86_64]# export JRE_HOME=/usr/java/jre1.6.0_14/
[root@PRO-ORA-AJA-01 linux86_64]# export CLASSPATH=/usr/java/jre1.6.0_14/lib
[root@PRO-ORA-AJA-01 linux86_64]# export PATH=/usr/java/jre1.6.0_14/bin:$PATH

[root@PRO-ORA-AJA-01 linux86_64]# ls
Api
TDP-Oracle.msg.es_ES.x86_64.bin
TDP-Oracle.msg.ja_JP.x86_64.bin
TDP-Oracle.msg.zh_CN.x86_64.bin
readmedporc_enu.htm
TDP-Oracle.msg.fr_FR.x86_64.bin
TDP-Oracle.msg.ko_KR.x86_64.bin
TDP-Oracle.msg.zh_TW.x86_64.bin
TDP-Oracle.msg.de_DE.x86_64.bin
TDP-Oracle.msg.it_IT.x86_64.bin
TDP-Oracle.msg.pt_BR.x86_64.bin
TDP-Oracle.x86_64.bin
[root@PRO-ORA-AJA-01 linux86_64]# ./TDP-Oracle.x86_64.bin
Preparing to install…
Extracting the installation resources from the installer archive…
Configuring the installer for this system’s environment…
Launching installer…
tdp11

tdp21

tdp31

tdp41

tdp51

tdp61

Configuration de TSM et TDP.
Pour TSM il faut configurer les fichiers dsm.sys et dsm.opt dans /opt/tivoli/tsm/client/ba/bin
Pour TDP il faut configurer les fichiers dsm.opt et tdpo.opt dans /opt/tivoli/tsm/client/oracle/bin64
Ici le serveur s’appelle TSM.TOTO.FR et le moeud de sauvegarde PRO-ORA-01.
/opt/tivoli/tsm/client/ba/bin dsm.sys :
servername tsm.toto.fr
COMMMethod         TCPip
TCPPort            1500
TCPServeraddress   tsm.toto.fr
NODENAME           PRO-ORA-01
PASSWORDACCESS     PROMPT
PASSWORDDIR        /home/oracle
SCHEDLOGNAME       “/var/log/tsm/dsmsched.log”
SCHEDLOGRETENTION  3
ERRORLOGNAME       “/var/log/tsm/dsmerror.log”
ERRORLOGRETENTION  5

/opt/tivoli/tsm/client/ba/bin dsm.opt :
Servername tsm.toto.fr

/opt/tivoli/tsm/client/oracle/bin64/dsm.opt :
Servername tsm.toto.fr

/opt/tivoli/tsm/client/oracle/bin64/tdpo.opt :
****************************************************************************

IBM Tivoli Storage Manager for Databases
* Data Protection for Oracle
* Sample tdpo.opt for the LinuxAMD64 Data Protection for Oracle
*********************************************************************
DSMI_ORC_CONFIG    /opt/tivoli/tsm/client/oracle/bin64/dsm.opt
DSMI_LOG           /var/log/tsm
TDPO_FS            /bckseapro
TDPO_NODE          PRO-ORA-01
TDPO_OWNER         <username>
TDPO_PSWDPATH      /opt/tivoli/tsm/client/oracle/bin64
TDPO_DATE_FMT      1
TDPO_NUM_FMT       1
TDPO_TIME_FMT      1
TDPO_MGMT_CLASS_2   mgmtclass2
TDPO_MGMT_CLASS_3   mgmtclass3
TDPO_MGMT_CLASS_4   mgmtclass4

Ensuite pour que tout fonctionne :

chown –R oracle  /opt/tivoli/tsm/client/oracle/bin64
chmod -770 /opt/tivoli/tsm/client/oracle/bin64/dtpo.opt
chmod 775 /opt/tivoli/tsm/client/ba/bin/dsm.sys
chmod 775 /opt/tivoli/tsm/client/ba/bin/dsm.opt
ln –s /opt/tivoli/tsm/client/ba/bin/dsm.sys /opt/tivoli/tsm/client/api/bin64/dsm.sys
ln –s /opt/tivoli/tsm/client/lang/fr_FR /opt/tivoli/tsm/client/oracle/bin64/fr_FR
chmod 775 /var/log/tsm
Le pilotage d’RMAN se fait à travers une librairie TDP :
Vérifier qu’il existe un lien symbolique /usr/lib64/libobk.so vers /opt/tivoli/tsm/client/oracle/bin64/libobk.so et de /app/oracle/product/10.2.0/db_1/lib/libobk.so vers /usr/lib64/libobk.so.
Ensuite il faut configurer le fichier de password.

./opt/tivoli/tsm/client/oracle/bin64/tdpconf password
IBM Tivoli Storage Manager for Databases:
Data Protection for Oracle
Version 5, Release 5, Level 2.0
(C) Copyright IBM Corporation 1997, 2009. All rights reserved.
***************************************************************
*   IBM Tivoli Storage Manager for Databases Utility
*   Password file initialization/update program
***************************************************************
Please enter current password:
Please enter new password:
Please reenter new password for verification:
ANU0260I Password successfully changed.
[root@PRO-ORA-01 bin64]#

Puis verifier la config au moyen de l’option showenvironment

[root@PRO-ORA-01 bin64]# ./tdpoconf showenvironment
ANS0102W Unable to open the message repository /opt/tivoli/tsm/client/oracle/bin64/fr_FR/tdpo.cat. The American English repository will be used instead.

IBM Tivoli Storage Manager for Databases:
Data Protection for Oracle
Version 5, Release 5, Level 2.0
(C) Copyright IBM Corporation 1997, 2009. All rights reserved.
Data Protection for Oracle Information
Version:              5
Release:              5
Level:                2
Sublevel:             0
Platform:             64bit TDPO Linux86-64
Tivoli Storage Manager Server Information
Server Name:          TSM.TOTO.FR
Server Address:       TSM.TOTO.FR
Server Type:          Linux/i386
Server Port:          1500
Communication Method: TCP/IP
Session Information
Owner Name:           <username>
Node Name:            pro-ora-01
Node Type:            TDPO Linux86-64
DSMI_DIR:             /opt/tivoli/tsm/client/api/bin64
DSMI_ORC_CONFIG:      /opt/tivoli/tsm/client/oracle/bin64/dsm.opt
TDPO_OPTFILE:         /opt/tivoli/tsm/client/oracle/bin64/tdpo.opt
Password Directory:   /opt/tivoli/tsm/client/oracle/bin64
Compression:          FALSE
License Information:  License File Error - see tdpoerror.log for details
[root@PRO-ORA-01 bin64]#

On peut vérifier la licence  par la présence du fichier agent.lic ou oracle.lic dans /opt/tivoli/tsm/client/oracle/bin64.

Test de communication RMAN :
oracle@ORA : /opt/tivoli/tsm/client/oracle/bin64 > rman
Recovery Manager: Release 10.2.0.4.0 - Production on Mon Mar 30 18:51:49 2009
Copyright (c) 1982, 2007, Oracle.  All rights reserved.
RMAN> connect target /
connected to target database: SEAPRO (DBID=2807096304)
RMAN> @rman_test.rcv
RMAN> run
2> {
3>    allocate channel t1 type ’sbt_tape’ parms
4>             ‘ENV=(TDPO_OPTFILE=/opt/tivoli/tsm/client/oracle/bin64/tdpo.opt)’;
5>    backup
6>       filesperset 5
7>       format ‘df_%t_%s_%p’
8>       (database);
9> }
using target database control file instead of recovery catalog
ANS0102W Unable to open the message repository /opt/tivoli/tsm/client/oracle/bin64/fr_FR/tdpo.cat. The American English repository will be used instead.
allocated channel: t1
channel t1: sid=1076 devtype=SBT_TAPE
channel t1: Data Protection for Oracle: version 5.5.1.0
Starting backup at 30-MAR-09
channel t1: starting full datafile backupset

On arrive bien à écrire directement sur “bande” même si ça passe par les pools disques de TSM server.

Faire un duplicate avec RMAN sous windows! by albanlepunk

Administration Oracle, Rman pas de Commentaire »

# Créer le fichier de mot de passe pour la base clone

orapwd file=$ORACLE_HOMEdbsorapwCLONE.ora password=XXXXXXXXXX

# Créer le fichier d’init pour la base clone

# Copier le init.ora de la base cible

SQL> create pfile=’$ORACLE_HOMEdbsinitCLONE.ora’ from spfile;

File created.

#  Apporter les modifs nécéssaires au fichier init.

db_file_name_convert = (’$ORADATACLONE’, ‘$ORADATACLONE’)
log_file_name_convert = (’$ORADATACLONE’, ‘$ORADATACLONE’)
control_files = ‘$ORADATACLONEcontrol01.ctl’
, ‘$ORADATACLONEcontrol02.ctl’
, ‘$ORADATACLONEcontrol03.ctl’
db_name = ‘CLONE’
instance_name = ‘CLONE’
background_dump_dest = ‘$ADMINCLONEbdump’
core_dump_dest = ‘$ADMINCLONEcdump’
user_dump_dest = ‘$ADMINCLONEudump’
service_names = ‘SERVICE.CLONE’
log_archive_dest_1 = ‘location=$ORADATACLONEarchive MANDATORY’

# Créer un nouveau service windows pour la base CLONE à dupliquer.

oradim -new -sid CLONE -intpwd D:oracleproduct10.2.0db_1databaseorapwCLONE.ora.ora -startmode auto -pfile ‘D:oracleproduct10.2.0db_1databaseinitCLONE.ora’

# Créer les repertoires admin

mkdir $ORADATACLONE
mkdir $ORADATACLONEarchive
mkdir $ORADATACLONEbdump
mkdir $ORADATACLONEcdump
mkdir $ORADATACLONEcreate
mkdir $ORADATACLONEpfile
mkdir $ORADATACLONEscripts
mkdir $ORADATACLONEudump

# Démarrer l’instance CLONE

set ORACLE_SID=CLONE

sqlplus “/ as sysdba”

SQL> startup nomount

# Modifier le listener et le tnsnames pour que l’on puisse se connecter à la base auxiliaire

sqlplus “sys/XXXXXXXX@CLONE as sysdba”

# Vérifier que la base cible soit montée ou ouverte

# Se connecter à la base cible et la base auxiliaire avec RMAN

rman target sys/XXXXXXXX@TARGET auxiliary sys/xxxxxxxx@CLONE

connected to target database: TARGET (DBID=3850478880)
connected to auxiliary database: CLONE (not mounted)

RMAN>

# Lancer la commande duplicate
# On peut mettre un critère de temps.
# ex : duplicate target database to CLONE until time ‘SYSDATE-1′;.
# ou dans un script run

duplicate target database to CLONE;

Ex de script jusqu’à la sequence X du Thread Y (because RAC)

run
{ sql ‘alter system archive log current’;
set until sequence=11212 THREAD=2;
allocate auxiliary channel ch1 type disk;
allocate auxiliary channel ch2 type disk;
allocate auxiliary channel ch3 type disk;
allocate auxiliary channel ch4 type disk;
duplicate target database to ‘DBRESTAU’ pfile=’D:oracleproduct10.2.0db_1databaseinitCLONE.ora’ nofilenamecheck; }
exit