Il y a quelques semaines, j’ai été appelé par une équipe applicative suite au crash de batch. L’impact n’était pas aussi faible que j’ai pu le constater à l’origine…
Dans un premier temps, il s’avère que les batchs migrés d’AIX à Linux possèdent une incohérence. En cas de plantage, les batchs ont été suffisamment bien écrit pour effectuer un import des données exportées avant lancement.
En revanche, il s’est avéré 6 jours après le crash que des données étaient manquantes dans certaines tables.
Heureusement, le service applicatif a demandé aux utilisateurs de ne pas intégrer de nouvelles données. Par contre, difficile de demander aux internautes de ne pas se connecter sur le site pour ne pas alimenter de tables…
Ainsi, toutes les tables étaient intactes excepté pour les tables « web »…
De ce fait, on m’a demandé d’effectuer une restauration de la base de données à 6 jours sans perdre les données Live.
J’ai donc effectué un Point-in-Time Duplicate Database vers un serveur tiers pour ensuite effectué un export des tables à restaurer.
Voici le déroulé de l’opération :
- Récupération des fichiers de sauvegarde et des archivelogs sur le serveur tiers par le biais de « cp » ou « scp ».
- Création de l’arborescence identique au système d’origine :
mkdir -p /opt/oracle/admin/dbrecup/adump mkdir -p /opt/oracle/diag/rdbms/dbrecup/dbrecup/alert mkdir /opt/oracle/diag/rdbms/dbrecup/dbrecup/cdump mkdir /opt/oracle/diag/rdbms/dbrecup/dbrecup/hm mkdir /opt/oracle/diag/rdbms/dbrecup/dbrecup/incident mkdir /opt/oracle/diag/rdbms/dbrecup/dbrecup/incpkg mkdir /opt/oracle/diag/rdbms/dbrecup/dbrecup/ir mkdir /opt/oracle/diag/rdbms/dbrecup/dbrecup/lck mkdir /opt/oracle/diag/rdbms/dbrecup/dbrecup/metadata mkdir /opt/oracle/diag/rdbms/dbrecup/dbrecup/metadata_dgif mkdir /opt/oracle/diag/rdbms/dbrecup/dbrecup/metadata_pv mkdir /opt/oracle/diag/rdbms/dbrecup/dbrecup/stage mkdir /opt/oracle/diag/rdbms/dbrecup/dbrecup/sweep mkdir /opt/oracle/diag/rdbms/dbrecup/dbrecup/trace mkdir -p /u03/oradata/dbrecup/datafile/ mkdir -p /u01/oradata/dbrecup/controlfile/ mkdir -p /u02/oradata/dbrecup/controlfile/ mkdir -p /u01/oradata/dbrecup/onlinelog/ mkdir -p /u02/oradata/dbrecup/onlinelog/ mkdir -p /u04/oradata/oraflash
- Création d’un fichier de paramètre pour pouvoir démarrer la base :
echo "DB_NAME=dbrecup" > /opt/oracle/product/11.2.0/dbhome_1/dbs/initdbrecup.ora
- Génération du fichier de mot de passe :
orapwd file=orapwdbrecup entries=5
- Préparation de l’environnement :
export ORACLE_HOME=/opt/oracle/product/11.2.0/dbhome_1 export ORACLE_SID=dbrecup export NLS_LANG=american_america.AL32UTF8 export NLS_DATE_FORMAT=YYYY-MM-DD:HH24:MI:SS
- Démarrage de la base en mode nomount :
sqlplus / as sysdba startup nomount pfile='?/dbs/initderecup.ora exit
- Connexion à RMAN :
rman AUXILIARY /
- Lancement de la restauration :
DUPLICATE DATABASE to dbrecup UNTIL TIME "TO_DATE('XXXX-XX-XX:YY:YY:YY','YYYY-MM-DD:HH24:MI:SS')" BACKUP LOCATION '/u03/oradata/backup' nofilenamecheck;
- Une fois récupéré, un simple export a été fait :
sqlplus / as sysdba create directory EXP_RECUP as '/tmp/expdp'; exit
-
expdp user directory=EXP_RECUP dumpfile=EXPDP_RECUP_before_reinject_olds_%U.dmp logfile=EXPDP_RECUP_before_reinject_olds.log PARALLEL=2
Puis un import a été fait dans les tables dans la base de données de prod.
En espérant vous être utile 🙂
Pascal