恢復誤刪數據文件(數據庫未重啓,無備份)

整個過程不要關閉數據庫
1.手動刪除沒有備份的數據文件。
rm -f /oracle/app/oradata/orcl/users01.dbf
2.嘗試在刪除文件上創建表,讓數據庫讀取數據,模擬報錯
SQL> create table tt (id number) tablespace users;
create table tt (id number) tablespace users
*
ERROR at line 1:
ORA-01116: error in opening database file 4
ORA-01110: data file 4: '/oracle/app/oradata/orcl/users01.dbf'
ORA-27041: unable to open file
Linux-x86_64 Error: 2: No such file or directory
Additional information: 3


3.獲取丟失文件列表
SQL>select file_id,file_name from dba_data_files where file_id in(select file# from v$datafile_header where name is null);

4.查看dbw後臺進程id
[oracle@11g ~]$ ps -ef|grep dbw
oracle    1874     1  0 09:14 ?        00:00:00 ora_dbw0_orcl
oracle    1993  1962  0 09:35 pts/0    00:00:00 grep dbw

5.使用lsof命令查看dbw進程所持有的文件句柄
lsof -p 1874
COMMAND  PID   USER   FD   TYPE DEVICE  SIZE/OFF    NODE NAME
...
oracle  1874 oracle  256u   REG    8,3   9748480  789827 /oracle/app/oradata/orcl/control01.ctl
oracle  1874 oracle  257u   REG    8,3   9748480  789830 /oracle/app/oradata/orcl/control02.ctl
oracle  1874 oracle  258uW  REG    8,3 734011392  789836 /oracle/app/oradata/orcl/system01.dbf
oracle  1874 oracle  259uW  REG    8,3 629153792  789839 /oracle/app/oradata/orcl/sysaux01.dbf
oracle  1874 oracle  260uW  REG    8,3 209723392  789840 /oracle/app/oradata/orcl/undotbs01.dbf
oracle  1874 oracle  261uW  REG    8,3   5251072  789846 /oracle/app/oradata/orcl/users01.dbf (deleted)
oracle  1874 oracle  262uW  REG    8,3  20979712  789841 /oracle/app/oradata/orcl/temp01.dbf
...


注:誤刪文件標記爲deleted.
   誤刪文件(文件句柄信息爲:/proc/<spid>/fd/<fd>)
6.查看文件句柄信息
[oracle@11g ~]$ ll /proc/1874/fd/261
lrwx------ 1 oracle oinstall 64 Feb  3 09:19 /proc/1874/fd/261 -> /oracle/app/oradata/orcl/users01.dbf (deleted)
7.通過文件句柄信息,將丟失文件拷貝出來
[oracle@11g ~]$ cp /proc/1874/fd/261 /oracle/app/oradata/orcl/users02.dbf
8.離線失效文件(因爲數據庫爲非歸檔模式,需要使用offline的drop選項)
SQL> alter database datafile 4 offline drop;

Database altered.
9.查看離線數據文件狀態爲recover。
select name,status from v$datafile;

NAME                                                         STATUS
------------------------------------------------------------ ------------------------------
/oracle/app/oradata/orcl/system01.dbf                        SYSTEM
/oracle/app/oradata/orcl/sysaux01.dbf                        ONLINE
/oracle/app/oradata/orcl/undotbs01.dbf                       ONLINE
/oracle/app/oradata/orcl/users01.dbf                         RECOVER

10.重命名丟失數據文件。
SQL> alter database  rename file '/oracle/app/oradata/orcl/users01.dbf' to '/oracle/app/oradata/orcl/users02.dbf';

Database altered.
11.恢復數據文件。
SQL> recover datafile 4;
Media recovery complete.
12.上線數據文件
SQL> alter database datafile 4 online;

Database altered.
13.驗證數據文件狀態。
SQL> select name,status from v$datafile;

NAME                                                         STATUS
------------------------------------------------------------ ------------------------------
/oracle/app/oradata/orcl/system01.dbf                        SYSTEM
/oracle/app/oradata/orcl/sysaux01.dbf                        ONLINE
/oracle/app/oradata/orcl/undotbs01.dbf                       ONLINE
/oracle/app/oradata/orcl/users02.dbf                         ONLINE
14.驗證數據文件是否可用。
SQL> create table tt (id number) tablespace users;

Table created.


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章