2016年(10)
分类: Oracle
2016-06-23 23:31:35
恢复原理:
在 Linux 操作系统中,如果文件从操作系统级别被rm掉,之前打开该文件的进程仍然持有相应的文件句柄,所指向的文件仍然可以读写,并且该文件的文件描述符可以从 /proc 目录中获得。但是要注意的是,此时如果关闭数据库,则此句柄会消失,那么除了扫描磁盘进行文件恢复之外就没有其它方法了,因此在数据库出现问题的时候,如果不确认情况的复杂程度,千万不要随便关闭数据库。重启数据库往往是没有意义的,甚至是致命的。
[oracle@SHAPP7 trace]$ tail -f alert_orcl.log
ORA-01110: data file 30: '/home/oracle/app/oracle/oradata/orcl/ats_data01.dbf'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3
Errors in file /home/oracle/app/oracle/diag/rdbms/orcl/orcl/trace/orcl_m000_17200.trc:
误删除了/ats_data01.dbf数据文件。
恢复过程:
一.找到误删除文件的文件句柄(fd代表句柄)
[oracle@SHAPP7 ~]$ ps -ef | grep dbw0
oracle 17893 17820 0 09:52 pts/5 00:00:00 grep dbw0
oracle 24097 1 0 Mar03 ? 00:06:27 ora_dbw0_orcl
[oracle@SHAPP7 ~]$ cd /proc/240
2401/ 24072/ 24079/ 24081/ 24083/ 24087/ 24089/ 24091/ 24093/ 24095/ 24097/ 24099/
[oracle@SHAPP7 ~]$ cd /proc/24097/fd
二:根据文件句柄恢复文件(截图)
已经删除的文件的文件句柄后会加deleted,将句柄文件拷贝到链接对应的文件位置
[oracle@SHAPP7 fd]$ cp 286 /home/oracle/app/oracle/oradata/orcl/ats_data01.dbf
三:表空间(数据文件recover)
SQL> alter database datafile 30 offline; |
恢复完成
切记:如果误删了数据库任何文件,都不要关闭数据库,保留现场,才可以便于后续恢复。