Articles autour des SGBD Oracle, SQL Server & PostgreSQL
22 Août 2017
Hello,
Aujourd'hui, j'ai décidé de vous parler de notre ami à tous, j'ai nommé "l'erreur humaine" & ses innombrables conséquences sur notre quotidien..
Pour la recette du jour, il me faut évidemment une base.. (si possible pas en production) & quelques datafiles associés.
Remarque : Dans mon cas, la base est en archivelog (cela a son importance pour la méthode utilisée).
Celui qui va m'interesser est le dernier "/ora/LAO/oradata/lao_tbs.dbf" unique datafile de mon tablespace LAO_TBS
SQL> select file_name from dba_data_files; FILE_NAME --------------------------------------------------------------- /ora/LAO/oradata/system_01.dbf /ora/LAO/oradata/sysaux_01.dbf /ora/LAO/oradata/undotbs_01.dbf /ora/LAO/oradata/lao_tbs.dbf
Et évidemment, il me faut une belle erreur humaine... j'ai donc pris une main innocente (mon fils) a qui j'ai demandé de taper la commande suivante... Pour une fois qu'il peut m'aider (pense t-il !)
rm /ora/LAO/oradata/lao_tbs.dbf
Horreur ! malheur !!! il vient de supprimer mon datafile avec des données critiques mais pas assez pour que quelqu'un ai daigné mettre en place des backups...(J'en vois qui se moquent... si si c'est possible...)
En même temps, si il y avait des backups, l'article perdrait un peu de son interêt !
Croyant encore au Père Noël, une petite vérification s'impose.
ll total 4991544 drwxr-x--- 3 oracle oinstall 4096 7 août 17:30 LAO -rw-r----- 1 oracle oinstall 1073750016 22 août 10:52 sysaux_01.dbf -rw-r----- 1 oracle oinstall 1073750016 22 août 10:56 system_01.dbf -rw-r----- 1 oracle oinstall 2684362752 22 août 07:22 temp_01.dbf -rw-r----- 1 oracle oinstall 314580992 22 août 10:52 undotbs_01.dbf
Force est de constater que le Père Noël n'existe pas.. j'en profite pour le dire à mon gamin..
A partir de la on évite de paniquer et d'arrêter sa base.. cela serait l'erreur fatale
ps -ef |grep dbw
oracle 7561 1 0 10:52 ? 00:00:00 ora_dbw0_LAO
ls -l /proc/7561/fd/ |grep deleted lrwx------ 1 oracle oinstall 64 22 août 10:59 261 -> /ora/LAO/oradata/lao_tbs.dbf (deleted) ln -s /proc/7561/fd/261 /ora/LAO/oradata/lao_tbs.dbf lrwxrwxrwx 1 oracle oinstall 17 22 août 11:00 lao_tbs.dbf -> /proc/7561/fd/261 -rw-r----- 1 oracle oinstall 1073750016 22 août 10:58 sysaux_01.dbf -rw-r----- 1 oracle oinstall 1073750016 22 août 10:58 system_01.dbf -rw-r----- 1 oracle oinstall 2684362752 22 août 07:22 temp_01.dbf -rw-r----- 1 oracle oinstall 314580992 22 août 10:58 undotbs_01.dbf
Un lien symbolique a été crée.. permettant de maintenir en vie mon fichier supprimé.. Cependant, il ne faut pas en rester la car au prochaine restart de l'instance ou reboot du serveur.. Adieu mon datafile...
Bien que nous n'ayons pas de backup, nous allons faire appel à notre ami RMAN ( on aurait pu s'en passer, mais ainsi, je continue avec Oracle..)
RMAN> report schema; Report of database schema for database with db_unique_name LAO List of Permanent Datafiles =========================== File Size(MB) Tablespace RB segs Datafile Name ---- -------- -------------------- ------- ------------------------ 1 1024 SYSTEM *** /ora/LAO/oradata/system_01.dbf 2 1024 SYSAUX *** /ora/LAO/oradata/sysaux_01.dbf 3 300 UNDOTBS1 *** /ora/LAO/oradata/undotbs_01.dbf 4 20 LAO_TBS *** /ora/LAO/oradata/lao_tbs.dbf List of Temporary Files ======================= File Size(MB) Tablespace Maxsize(MB) Tempfile Name ---- -------- -------------------- ----------- -------------------- 1 2560 TEMP 32767 /ora/LAO/oradata/temp_01.dbf
Le datafile qui m'interesse est donc le 4,... let's go !
RMAN> backup as copy datafile 4 format '/ora/LAO/oradata/lao_tbs_new.dbf'; Starting backup at 22-AUG-17 using channel ORA_DISK_1 channel ORA_DISK_1: starting datafile copy input datafile file number=00004 name=/ora/LAO/oradata/lao_tbs.dbf output file name=/ora/LAO/oradata/lao_tbs_new.dbf tag=TAG20170822T110827 RECID=1 STAMP=952686508 channel ORA_DISK_1: datafile copy complete, elapsed time: 00:00:01 Finished backup at 22-AUG-17 RMAN> sql 'alter database datafile 4 offline'; sql statement: alter database datafile 4 offline RMAN> switch datafile 4 to copy; datafile 4 switched to datafile copy "/ora/LAO/oradata/lao_tbs_new.dbf" RMAN> recover datafile 4; Starting recover at 22-AUG-17 using channel ORA_DISK_1 starting media recovery media recovery complete, elapsed time: 00:00:00 Finished recover at 22-AUG-17 RMAN> sql 'alter database datafile 4 online'; sql statement: alter database datafile 4 online
Ma base revit (et mon fils à qui j'ai fait croire pendant tout ce temps que j'allais me faire virer à cause de lui.. également). Je supprime mon lien, et procède au vérifications de bases...
rm lao_tbs.dbf ll total 5012032 drwxr-x--- 3 oracle oinstall 4096 7 août 17:30 LAO -rw-r----- 1 oracle oinstall 20979712 22 août 11:12 lao_tbs_new.dbf -rw-r----- 1 oracle oinstall 1073750016 22 août 11:11 sysaux_01.dbf -rw-r----- 1 oracle oinstall 1073750016 22 août 11:09 system_01.dbf -rw-r----- 1 oracle oinstall 2684362752 22 août 07:22 temp_01.dbf -rw-r----- 1 oracle oinstall 314580992 22 août 11:12 undotbs_01.dbf SQL> select file_name from dba_data_files; FILE_NAME -------------------------------------------------------------------------------- /ora/LAO/oradata/system_01.dbf /ora/LAO/oradata/sysaux_01.dbf /ora/LAO/oradata/undotbs_01.dbf /ora/LAO/oradata/lao_tbs_new.dbf
L'honneur est sauf... je peux aller à l'apéro, et mon fils peut attendre un peu avant de prendre la relève ;)
@bientôt,
LAO
Pensez à vous inscrire à la newsletters pour être informé des prochains articles,