Overblog
Editer l'article Suivre ce blog Administration + Créer mon blog
LAMI DBA

Articles autour des SGBD Oracle, SQL Server & PostgreSQL

SOS - datafile supprimé par erreur

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,

 

Partager cet article
Repost0
Pour être informé des derniers articles, inscrivez vous :
Commenter cet article